aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill
diff options
context:
space:
mode:
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend2
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend21
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend23
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend6
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend15
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend30
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend12
7 files changed, 79 insertions, 30 deletions
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend
index 58ac7aea..b1986d50 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend
@@ -35,7 +35,7 @@ class Main {
35 35
36 //human input has different package declaration 36 //human input has different package declaration
37// reader = new GraphReader(Yakindumm2PackageImpl.eINSTANCE); 37// reader = new GraphReader(Yakindumm2PackageImpl.eINSTANCE);
38 val human = new RWInformation("inputs/config7/", "outputs/", 1); 38 val human = new RWInformation("Inputs/config15/", "outputs/", 1);
39 calculateAllModels(human.inputFolder, human.outputFolder,human.numRuns, reader); 39 calculateAllModels(human.inputFolder, human.outputFolder,human.numRuns, reader);
40 40
41 41
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend
index cdce185a..d68eb9d2 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend
@@ -18,6 +18,7 @@ import java.util.List
18import java.util.Map 18import java.util.Map
19import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression 19import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression
20import org.eclipse.xtend.lib.annotations.Accessors 20import org.eclipse.xtend.lib.annotations.Accessors
21import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric
21 22
22class PartialInterpretationMetricDistance { 23class PartialInterpretationMetricDistance {
23 24
@@ -48,17 +49,17 @@ class PartialInterpretationMetricDistance {
48 metrics.add(new OutDegreeMetric()); 49 metrics.add(new OutDegreeMetric());
49 metrics.add(new NodeActivityMetric()); 50 metrics.add(new NodeActivityMetric());
50 metrics.add(new MultiplexParticipationCoefficientMetric()); 51 metrics.add(new MultiplexParticipationCoefficientMetric());
51 metrics.add(new TypedOutDegree()); 52 metrics.add(new NodeTypeMetric());
52
53 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null); 53 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null);
54 var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); 54 var metricSamples = metricCalculator.evaluateAllMetricsToSamples();
55 55
56 var mpc = ks.mpcDistance(metricSamples.mpcSamples); 56 var mpc = ks.mpcDistance(metricSamples.mpcSamples);
57 var na = ks.naDistance(metricSamples.naSamples); 57 var na = ks.naDistance(metricSamples.naSamples);
58 var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples); 58 var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples);
59 var typedOutDegree = ks.typedOutDegreeDistance(metricSamples.typedOutDegreeSamples); 59 //var typedOutDegree = ks.typedOutDegreeDistance(metricSamples.typedOutDegreeSamples);
60 60 var distance = new MetricDistanceGroup(mpc, na, outDegree);
61 return new MetricDistanceGroup(mpc, na, outDegree, typedOutDegree); 61 distance.nodeTypeInfo = metricSamples.nodeTypeSamples;
62 return distance;
62 } 63 }
63 64
64 def MetricDistanceGroup calculateMetricEuclidean(PartialInterpretation partial){ 65 def MetricDistanceGroup calculateMetricEuclidean(PartialInterpretation partial){
@@ -66,7 +67,6 @@ class PartialInterpretationMetricDistance {
66 metrics.add(new OutDegreeMetric()); 67 metrics.add(new OutDegreeMetric());
67 metrics.add(new NodeActivityMetric()); 68 metrics.add(new NodeActivityMetric());
68 metrics.add(new MultiplexParticipationCoefficientMetric()); 69 metrics.add(new MultiplexParticipationCoefficientMetric());
69 metrics.add(new TypedOutDegree());
70 70
71 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null); 71 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null);
72 var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); 72 var metricSamples = metricCalculator.evaluateAllMetricsToSamples();
@@ -158,8 +158,8 @@ class PartialInterpretationMetricDistance {
158 var features = newDoubleArrayOfSize(2); 158 var features = newDoubleArrayOfSize(2);
159 //constant term 159 //constant term
160 features.set(0, 1); 160 features.set(0, 1);
161 161 features.set(0, Math.sqrt(step) + 30)
162 features.set(1, 1.0 / step); 162 features.set(1, 1.0 / (step + 30) );
163// features.set(2, violations); 163// features.set(2, violations);
164// features.set(3, Math.pow(violations, 2)); 164// features.set(3, Math.pow(violations, 2));
165 165
@@ -172,6 +172,7 @@ class MetricDistanceGroup{
172 var double naDistance; 172 var double naDistance;
173 var double outDegreeDistance; 173 var double outDegreeDistance;
174 var double typedOutDegreeDistance; 174 var double typedOutDegreeDistance;
175 protected var HashMap<String, Double> nodeTypeInfo;
175 176
176 new(double mpcDistance, double naDistance, double outDegreeDistance, double typedOutDegreeDistance){ 177 new(double mpcDistance, double naDistance, double outDegreeDistance, double typedOutDegreeDistance){
177 this.mpcDistance = mpcDistance; 178 this.mpcDistance = mpcDistance;
@@ -201,4 +202,8 @@ class MetricDistanceGroup{
201 def double getOutDegreeDistance(){ 202 def double getOutDegreeDistance(){
202 return this.outDegreeDistance 203 return this.outDegreeDistance
203 } 204 }
205
206 def double getNodeTypePercentage(String typeName){
207 return nodeTypeInfo.getOrDefault(typeName, 0.0);
208 }
204} \ No newline at end of file 209} \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend
index b4c57bd8..4ebd59b7 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend
@@ -30,13 +30,26 @@ class EMFGraph extends Graph{
30 ] 30 ]
31 31
32 referenceTypes.forEach[it| 32 referenceTypes.forEach[it|
33 statistic.addEdgeType(it.name); 33 var typeToAdd = it;
34
35 // TODO: Here is to only consider one part of opposite edges
36// if(it.upperBound != -1 && it.EOpposite !== null &&
37// (it.EOpposite.upperBound == -1 || it.EOpposite.upperBound > it.upperBound
38// )){
39// typeToAdd = it.EOpposite;
40// }
41 //if(!typeToAdd.name.equals('incomingTransitions')){
42 statistic.addEdgeType(typeToAdd.name);
43 //}
34 ]; 44 ];
35 45
36 objects.forEach[source| 46 objects.forEach[source|
37 source.eClass.EAllReferences.forEach[r| 47 source.eClass.EAllReferences.forEach[r|
38 //add the type first (if it is not added already) 48 //add the type first (if it is not added already)
39 //many references 49 //many references
50// if(r.name.equals('incomingTransitions')){
51// return;
52// }
40 if(r.isMany){ 53 if(r.isMany){
41 source.getNeighbours(r).forEach[target| 54 source.getNeighbours(r).forEach[target|
42 addEdge(source, target, r); 55 addEdge(source, target, r);
@@ -85,6 +98,14 @@ class EMFGraph extends Graph{
85 } 98 }
86 99
87 def addEdge(EObject source, EObject target, EReference r){ 100 def addEdge(EObject source, EObject target, EReference r){
101 // TODO: Here is to only consider one part of opposite edges
102 //check for the opposite reference and do not add if its opposite will be added
103// if(r.upperBound != -1 && r.EOpposite !== null &&
104// (r.EOpposite.upperBound == -1 || r.EOpposite.upperBound > r.upperBound
105// )){
106// return;
107// }
108
88 if(target !== null && r !== null){ 109 if(target !== null && r !== null){
89 statistic.addEdge(source, target, r.name); 110 statistic.addEdge(source, target, r.name);
90 } 111 }
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend
index 9b8fd0e3..84071176 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend
@@ -8,6 +8,7 @@ import java.util.List
8import java.util.Map 8import java.util.Map
9import java.util.Set 9import java.util.Set
10import org.eclipse.emf.ecore.EObject 10import org.eclipse.emf.ecore.EObject
11import org.eclipse.emf.ecore.EReference
11 12
12class GraphStatistic { 13class GraphStatistic {
13 val incomingEdges = new HashMap<String, Multimap<EObject, EObject>>; 14 val incomingEdges = new HashMap<String, Multimap<EObject, EObject>>;
@@ -21,9 +22,12 @@ class GraphStatistic {
21 * @param type: type to add 22 * @param type: type to add
22 */ 23 */
23 def void addEdgeType(String type){ 24 def void addEdgeType(String type){
25
26
24 if(edgeTypes.contains(type)){ 27 if(edgeTypes.contains(type)){
25 return; 28 return;
26 } 29 }
30
27 edgeTypes.add(type); 31 edgeTypes.add(type);
28 incomingEdges.put(type, ArrayListMultimap.create()); 32 incomingEdges.put(type, ArrayListMultimap.create());
29 outcomingEdges.put(type, ArrayListMultimap.create()); 33 outcomingEdges.put(type, ArrayListMultimap.create());
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend
index 91d7c5f9..bb679bf6 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend
@@ -19,7 +19,11 @@ class PartialInterpretationGraph extends Graph{
19 //the edge types are defined in terms of RelationDeclaration 19 //the edge types are defined in terms of RelationDeclaration
20 partial.problem.relations.filter(RelationDeclaration).forEach[ 20 partial.problem.relations.filter(RelationDeclaration).forEach[
21 //only need the name of the reference type (remove everything with and after "reference") 21 //only need the name of the reference type (remove everything with and after "reference")
22 this.statistic.addEdgeType(it.name.split(" ").get(0)); 22 var n = it.name.split(" ").get(0);
23 // TODO: Here is to only consider one part of opposite edges
24 //if(!n.equals('target') && !n.equals('source') /* && !n.equals('incomingTransitions')*/){
25 this.statistic.addEdgeType(n);
26 //}
23 ] 27 ]
24 // add all elements 28 // add all elements
25 val typeInterpretations = getTypes(partial); 29 val typeInterpretations = getTypes(partial);
@@ -33,9 +37,12 @@ class PartialInterpretationGraph extends Graph{
33 for(relationInterpretation : partial.partialrelationinterpretation) { 37 for(relationInterpretation : partial.partialrelationinterpretation) {
34 //only need the name of the reference type (remove everything with and after "reference") 38 //only need the name of the reference type (remove everything with and after "reference")
35 val type = relationInterpretation.interpretationOf.name.split(" ").get(0); 39 val type = relationInterpretation.interpretationOf.name.split(" ").get(0);
36 for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){ 40 // TODO: Here is to only consider one part of opposite edges
37 statistic.addEdge(edge.param1, edge.param2, type); 41 //if(!type.equals('target') && !type.equals('source') /*&& !type.equals('incomingTransitions')*/){
38 } 42 for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){
43 statistic.addEdge(edge.param1, edge.param2, type);
44 }
45 //}
39 } 46 }
40 47
41 this.name = name; 48 this.name = name;
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend
index 8f1feb9d..ffec372b 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend
@@ -1,10 +1,13 @@
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.graph.EMFGraph 3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric 5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric 6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric
6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric 7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric
7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric 9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric
10import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree
8import java.io.File 11import java.io.File
9import java.io.FileNotFoundException 12import java.io.FileNotFoundException
10import java.util.ArrayList 13import java.util.ArrayList
@@ -17,19 +20,11 @@ import org.eclipse.emf.ecore.resource.Resource
17import org.eclipse.emf.ecore.resource.ResourceSet 20import org.eclipse.emf.ecore.resource.ResourceSet
18import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl 21import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
19import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl 22import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
20import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric
21import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric
22import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree
23import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummPackage
24 23
25class GraphReader{ 24class GraphReader{
26 val ResourceSet resSet = new ResourceSetImpl(); 25 val ResourceSet resSet = new ResourceSetImpl();
27 val referenceTypes = new ArrayList<EReference>(); 26 val referenceTypes = new ArrayList<EReference>();
28 27
29 def static void main(String[] args){
30 var g = new GraphReader(YakindummPackage.eINSTANCE);
31 }
32
33 new(EPackage metaModel) { 28 new(EPackage metaModel) {
34 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl) 29 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl)
35 30
@@ -73,6 +68,25 @@ class GraphReader{
73 return graphs; 68 return graphs;
74 } 69 }
75 70
71 def EMFGraph readModel(String path, String filename){
72 val metrics = new ArrayList<Metric>();
73 metrics.add(new OutDegreeMetric());
74 metrics.add(new NodeActivityMetric());
75 metrics.add(new MultiplexParticipationCoefficientMetric());
76 metrics.add(new TypedOutDegree());
77 metrics.add(new NodeTypeMetric());
78 metrics.add(new EdgeTypeMetric());
79
80 val file = new File(filename);
81 val roots = readModel(EObject, path, file.name);
82 //add a list of metrics
83 val g = new EMFGraph();
84 for(root : roots){
85 g.init(root, metrics, filename.replaceFirst(".xmi", ""), referenceTypes);
86 }
87 return g
88 }
89
76 def <RootType extends EObject> List<RootType> readModel(Class<RootType> type, String path, String name) { 90 def <RootType extends EObject> List<RootType> readModel(Class<RootType> type, String path, String name) {
77 try { 91 try {
78 val resource = resSet.getResource(getURI(path, name),true); 92 val resource = resSet.getResource(getURI(path, name),true);
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend
index 94eaa445..7cec2513 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend
@@ -28,13 +28,11 @@ class NodeTypeMetric extends Metric {
28 var map = new HashMap<String, Double>(); 28 var map = new HashMap<String, Double>();
29 var nodes = g.allNodes; 29 var nodes = g.allNodes;
30 var single = 1.0 / nodes.size(); 30 var single = 1.0 / nodes.size();
31 for(node : nodes){ 31 var nodeToType = g.nodeToTypesMap;
32 var classes = new ArrayList(node.eClass.ESuperTypes); 32 for(node : nodes){
33 classes.add(node.eClass); 33 for(cl : nodeToType.get(node)){
34 34 var value = map.getOrDefault(cl, 0.0);
35 for(cl : classes){ 35 map.put(cl, value + single);
36 var value = map.getOrDefault(cl.name, 0.0);
37 map.put(cl.name, value + single);
38 } 36 }
39 } 37 }
40 38