private static DataSet[][][] aggregateTraces(String[] nodeClasses,
                                        String[] approaches, String[] metrics) {
    DataSet[][][] allData = new DataSet[nodeClasses.length][approaches.length][metrics.length];
    for(int i = 0; i < nodeClasses.length; i++) {
      // VirtuaTraces
      String[] virtuaTracesBaseDirs = {
        "/media/embs/Data/VirtuaSimulationOptFIVNMPs/",
        "/media/embs/Data/VirtuaSimulationSharingNodesOptFIVNMPs"
      };
      for(int a = 0; a < virtuaTracesBaseDirs.length; a++) {
        File baseDir = new File(virtuaTracesBaseDirs[a]);
        DataSet[] metricsData = new DataSet[metrics.length];
        for(int x = 0; x < metricsData.length; x++) {
          metricsData[x] = new DataSet();
        }
        for(int j = 0; j < 30; j++) {
          VirtuaSimulatorTraceReader reader = new VirtuaSimulatorTraceReader();
          reader.readTrace(baseDir.getAbsolutePath() + "/eu_" +
            nodeClasses[i] + "_" + j + "_prob_simulation.txt");
          for(int k = 0; k < metrics.length; k++) {
            metricsData[k].addValue((Double) reader.get(metrics[k]));
          }
        }
        allData[i][a] = metricsData;
      }

      // ViNETraces
      String[] approachesNames = { "HRA", "HRASharingNodes", "", ".dvine" };
      for(int a = 2; a < approachesNames.length; a++) {
        String approach = approachesNames[a];
        File baseDir = new File("/media/embs/Data/OptFIVNMP_Instances_ViNE_format/" +
          nodeClasses[i]);
        DataSet[] metricsData = new DataSet[metrics.length];
        for(int x = 0; x < metricsData.length; x++) {
          metricsData[x] = new DataSet();
        }
        for(int j = 0; j < 30; j++) {
          ViNEYardTraceReader reader = new ViNEYardTraceReader();
          String s = baseDir.getAbsolutePath() + "/eu_" + nodeClasses[i] + "_" +
            j + "_prob/";
          reader.readTrace(s + "MySimINFOCOM2009" + approach + ".out",
            s + "time" + approach + ".out");
          reader.readMappings(s + "sub.txt", s + "requests",
            s + "mappings" + approach + ".out");
          for(int k = 0; k < metrics.length; k++) {
            metricsData[k].addValue((Double) reader.get(metrics[k]));
          }
        }
        allData[i][a] = metricsData;
      }
    }

    return allData;
  }