public void printSimInfo() {
        double cdf = 0, exp = 0;
        try {
            //LATENCY
            FileWriter fstream = new FileWriter(new File("exp_latency." + TreeBuilder.treeSize + ".txt"));
            BufferedWriter out = new BufferedWriter(fstream);
            exp = 0;
            for (Integer latency : latencyMap.keySet()) {
                cdf += (latencyMap.get(latency) * 1.0 / latencyCount);
                exp += latency * (latencyMap.get(latency) * 1.0 / latencyCount);
                out.write("" + latency + " " + cdf + "\n");
                out.flush();
            }
            out.close();
            fstream.close();
            System.out.println("EXP LATENCY = " + exp);

            //HOP
            fstream = new FileWriter(new File("exp_hop." + TreeBuilder.treeSize + ".txt"));
            out = new BufferedWriter(fstream);
            cdf = 0;
            exp = 0;
            for (Integer hop : hopMap.keySet()) {
                cdf += (hopMap.get(hop) * 1.0 / hopCount);
                exp += hop * (hopMap.get(hop) * 1.0 / hopCount);
                //System.out.println("HOP, P(HOP) = " + hop + ", " + (hopMap.get(hop) * 1.0 / hopCount));
                out.write("" + hop + " " + cdf + "\n");
                out.flush();
            }
            out.close();
            fstream.close();
            System.out.println("EXP HOP = " + exp);

            //STRESS
            fstream = new FileWriter(new File("exp_stress." + TreeBuilder.treeSize + ".txt"));
            out = new BufferedWriter(fstream);
            int i = 0;
            for (Entry<String, Integer> entry : entriesSortedByValues(stressMap)) {
                out.write("" + i++ + " " + entry.getValue() * 100.0 / messageCount + "\n");
                out.flush();
                if (i == 20) {
                    break;
                }
            }
            out.close();
            fstream.close();

            //ROUTING TABLE SIZE
//            Stats.load.init();
//            for (RoutingNode rn : rg.nodeStore) {
//                Stats.load.updateW(rn.nbr.size() + rn.kLinks.size(), 1);
//            }
//            Stats.load.end();
//            fstream = new FileWriter(new File("exp_rtable." + TreeBuilder.treeSize + ".txt"));
//            out = new BufferedWriter(fstream);
//            out.write(Stats.load.toString());
//            out.close();
//            fstream.close();

            //HOP RATIO
//            Collections.sort(hopRatio);
//            fstream = new FileWriter(new File("exp_hopRatio." + TreeBuilder.treeSize + ".txt"));
//            out = new BufferedWriter(fstream);
//            for (i = 0; i < hopRatio.size(); i++) {
//                out.write(hopRatio.get(i) + " " + (i + 1) * 1.0 / hopRatio.size() + "\n");
//            }
//            out.close();
//            fstream.close();
            fstream = new FileWriter(new File("exp_hopRatio." + TreeBuilder.treeSize + ".txt"));
            out = new BufferedWriter(fstream);
            cdf = 0;
            exp = 0;
            for (String hop : hopRatio.keySet()) {
                double dhop = Double.parseDouble(hop);
                if (Double.isInfinite(dhop) || Double.isNaN(dhop)) {
                    continue;
                }
                //System.out.println(hop);
                cdf += (hopRatio.get(hop) * 1.0 / hopRatioCount);
                exp += dhop * (hopRatio.get(hop) * 1.0 / hopRatioCount);
                //System.out.println("HOP, P(HOP) = " + hop + ", " + (hopMap.get(hop) * 1.0 / hopCount));
                out.write("" + hop + " " + cdf + "\n");
                out.flush();
            }
            out.close();
            fstream.close();
            System.out.println("EXP HOP RATIO = " + exp);

        } catch (Exception ex) {
            System.err.println("printSimInfo: " + ex);
        }
    }