aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend76
1 files changed, 20 insertions, 56 deletions
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend
index 867ddd1a..2ea12581 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend
@@ -1,79 +1,43 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io 1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io
2 2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain 3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric
6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric
7import java.io.File
8import java.util.List
9import java.util.Scanner
10import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup 4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
5import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl
11 6
12/** 7/**
13 * Read the sample of the distribution of a metric provided the csv file of the metric 8 * Read the sample of the distribution of a metric provided the csv file of the metric
14 */ 9 */
15class RepMetricsReader { 10class RepMetricsReader {
16 static def read(Domain d){ 11 static def read(Domain d){
17 var domainRepPath = CsvDataName.REP_PATH + d.name + '/'; 12 var reader = new GraphReader(YakindummPackageImpl.eINSTANCE);
13
14
15 var domainRepPath = DataName.REP_PATH + d.name + '/';
18 var rep = new MetricSampleGroup() 16 var rep = new MetricSampleGroup()
19 rep.mpcSamples = readFile(domainRepPath + CsvDataName.MPC_REP, MultiplexParticipationCoefficientMetric.valueName, 17 var out_d = readMetrics(reader, domainRepPath + DataName.OUT_D_REP);
20 MultiplexParticipationCoefficientMetric.countName).map[Double.parseDouble(it)]; 18 rep.mpcSamples = readMetrics(reader, domainRepPath + DataName.MPC_REP).mpcSamples;
21 rep.naSamples = readFile(domainRepPath+CsvDataName.NA_REP, NodeActivityMetric.valueName, NodeActivityMetric.countName 19 rep.outDegreeSamples = out_d.outDegreeSamples;
22 ).map[Double.parseDouble(it)]; 20 rep.naSamples = readMetrics(reader, domainRepPath + DataName.NA_REP).naSamples;
23 rep.outDegreeSamples = readFile(domainRepPath+CsvDataName.OUT_D_REP, OutDegreeMetric.valueName, OutDegreeMetric.countName 21 rep.typedOutDegreeSamples = out_d.typedOutDegreeSamples;
24 ).map[Double.parseDouble(it)]; 22 rep.edgeTypeSamples = out_d.edgeTypeSamples;
23 rep.nodeTypeSamples = out_d.nodeTypeSamples;
25 return rep; 24 return rep;
26 } 25 }
27 26
28 /** 27 /**
29 * read metric data and parse it to samples 28 * Read representative model
30 */ 29 */
31 private static def List<String> readFile(String filename, String valueDataName, String countDataName){ 30 private static def readMetrics(GraphReader r, String path){
32 var s = new Scanner(new File(filename)); 31 var model = r.readModels(path).head;
33 val counts = newArrayList(); 32 return model.evaluateAllMetricsToSamples();
34 val values = newArrayList();
35 //read data from csv
36 while(s.hasNext()){
37 var data = s.nextLine().split(',');
38
39 if(data.size >= 1){
40 if(data.get(0).equals(countDataName)){
41 //add all data with parsing them as integers
42 counts.addAll(data.subList(1, data.size()).map[Integer.parseInt(it)]);
43 }else if(data.get(0).equals(valueDataName)){
44 //add all data without parsing (there can be either double or string, to be parsed later)
45 values.addAll(data.subList(1, data.size()));
46 }
47 }
48 }
49
50 return createSamples(counts, values);
51 } 33 }
52 34
53 // create samples from values and counts
54 private static def List<String> createSamples(List<Integer> counts, List<String> values){
55 val samples = newArrayList();
56
57 if(counts.size() != values.size()){
58 throw new RuntimeException("counts and values should have the same size!");
59 }
60
61 for(var i = 0; i < counts.size(); i++){
62 for(var j = 0; j < counts.get(i); j++){
63 samples.add(values.get(i));
64 }
65 }
66
67 return samples;
68 }
69
70
71} 35}
72 36
73class CsvDataName{ 37class DataName{
74 public static val REP_PATH = 'data/'; 38 public static val REP_PATH = 'data/';
75 public static val MPC_REP = 'mpc_rep.csv'; 39 public static val MPC_REP = 'mpc_rep';
76 public static val NA_REP = 'na_rep.csv'; 40 public static val NA_REP = 'na_rep';
77 public static val OUT_D_REP = 'out_d_rep.csv'; 41 public static val OUT_D_REP = 'out_d_rep';
78} 42}
79 43