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.xtend59
1 files changed, 47 insertions, 12 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 6af0b6c7..06e88efc 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
@@ -4,34 +4,62 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain
4import 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 5import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl
6import java.util.HashMap 6import java.util.HashMap
7import org.eclipse.emf.ecore.EReference
8import org.eclipse.emf.ecore.impl.EcorePackageImpl
7 9
8/** 10/**
9 * Read the sample of the distribution of a metric provided the csv file of the metric 11 * Read the sample of the distribution of a metric provided the csv file of the metric
10 */ 12 */
11class RepMetricsReader { 13class RepMetricsReader {
14 static var Domain domain;
12 static def read(Domain d){ 15 static def read(Domain d){
13 var reader = new GraphReader(YakindummPackageImpl.eINSTANCE, '.xmi'); 16 var GraphReader reader;
17 if(d == Domain.Yakindumm){
18 reader = new GraphReader(YakindummPackageImpl.eINSTANCE, '.xmi');
19 }else if (d == Domain.Ecore){
20 reader = new GraphReader(EcorePackageImpl.eINSTANCE, '.ecore');
21 }else if (d == Domain.Github){
22 // Initialize the reader with github package
23 }
14 24
25 domain = d;
15 26
16 var domainRepPath = DataName.REP_PATH + d.name + '/'; 27 var domainRepPath = DataName.REP_PATH + d.name + '/';
17 var rep = new MetricSampleGroup() 28 var rep = new MetricSampleGroup()
18 var out_d = readMetrics(reader, domainRepPath + DataName.OUT_D_REP); 29 var out_d = readMetrics(reader, domainRepPath + DataName.OUT_D_REP);
19 rep.mpcSamples = readMetrics(reader, domainRepPath + DataName.MPC_REP).mpcSamples; 30 var mpc = readMetrics(reader, domainRepPath + DataName.MPC_REP);
31 rep.mpcSamples = mpc.mpcSamples;
20 rep.outDegreeSamples = out_d.outDegreeSamples; 32 rep.outDegreeSamples = out_d.outDegreeSamples;
21 rep.naSamples = readMetrics(reader, domainRepPath + DataName.NA_REP).naSamples; 33 rep.naSamples = readMetrics(reader, domainRepPath + DataName.NA_REP).naSamples;
22 rep.typedOutDegreeSamples = out_d.typedOutDegreeSamples; 34 rep.typedOutDegreeSamples = out_d.typedOutDegreeSamples;
23 rep.edgeTypeSamples = out_d.edgeTypeSamples; 35 rep.edgeTypeSamples = mpc.edgeTypeSamples;
24 36
25 //TODO: Parameterize the prior node distribution 37 //TODO: Parameterize the prior node distribution
26 var nodeTypeSamples = new HashMap<String, Double>(); 38 var nodeTypeSamples = new HashMap<String, Double>();
27 nodeTypeSamples.put('Entry', 0.04257802080554814); 39 if(d == Domain.Yakindumm){
28 nodeTypeSamples.put('Choice', 0.1267671379034409); 40 nodeTypeSamples.put('Entry', 0.04257802080554814);
29 nodeTypeSamples.put('State', 0.1596092291277674); 41 nodeTypeSamples.put('Choice', 0.1267671379034409);
30 nodeTypeSamples.put('Transition', 0.6138636969858629); 42 nodeTypeSamples.put('State', 0.1596092291277674);
31 nodeTypeSamples.put('Statechart', 0.010136036276340358); 43 nodeTypeSamples.put('Transition', 0.6138636969858629);
32 nodeTypeSamples.put('Region', 0.04467858095492131); 44 nodeTypeSamples.put('Statechart', 0.010136036276340358);
33 nodeTypeSamples.put('Exit', 0.0018338223526273673); 45 nodeTypeSamples.put('Region', 0.04467858095492131);
34 nodeTypeSamples.put('FinalState', 0.0005334755934915977); 46 nodeTypeSamples.put('Exit', 0.0018338223526273673);
47 nodeTypeSamples.put('FinalState', 0.0005334755934915977);
48 }else if(d ==Domain.Ecore){
49 nodeTypeSamples.put('EAttribute', 0.23539778449144008);
50 nodeTypeSamples.put('EClass', 0.33081570996978854);
51 nodeTypeSamples.put('EReference', 0.30996978851963747);
52 nodeTypeSamples.put('EPackage', 0.012789526686807653);
53 nodeTypeSamples.put('EAnnotation', 0.002517623363544813);
54 nodeTypeSamples.put('EEnumLiteral', 0.07275931520644502);
55 nodeTypeSamples.put('EEnum', 0.013645518630412891);
56 nodeTypeSamples.put('EDataType', 0.004028197381671702);
57 nodeTypeSamples.put('EParameter', 0.005941591137965764);
58 nodeTypeSamples.put('EGenericType', 0.002014098690835851);
59 nodeTypeSamples.put('EOperation', 0.009415911379657605);
60 nodeTypeSamples.put('ETypeParameter', 0.0007049345417925478);
61 }
62
35 63
36 64
37 rep.nodeTypeSamples = nodeTypeSamples; 65 rep.nodeTypeSamples = nodeTypeSamples;
@@ -42,7 +70,14 @@ class RepMetricsReader {
42 * Read representative model 70 * Read representative model
43 */ 71 */
44 private static def readMetrics(GraphReader r, String path){ 72 private static def readMetrics(GraphReader r, String path){
45 var model = r.readModels(path).head; 73 val model = r.readModels(path).head;
74 if(domain == Domain.Ecore){
75 var refsToRemove = EcorePackageImpl.eINSTANCE.eAllContents.filter(EReference).filter[
76 it.name.equals('eGenericType') || it.name.equals('eGenericSuperTypes') || it.name.equals('eFactoryInstance') ||
77 it.name.equals('eGenericExceptions') || it.name.equals('references') || it.name.equals('contents');
78 ];
79 refsToRemove.forEach[model.removeReference(it)];
80 }
46 return model.evaluateAllMetricsToSamples(); 81 return model.evaluateAllMetricsToSamples();
47 } 82 }
48 83