diff options
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse')
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 | |||
18 | import java.util.Map | 18 | import java.util.Map |
19 | import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression | 19 | import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression |
20 | import org.eclipse.xtend.lib.annotations.Accessors | 20 | import org.eclipse.xtend.lib.annotations.Accessors |
21 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric | ||
21 | 22 | ||
22 | class PartialInterpretationMetricDistance { | 23 | class 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 | |||
8 | import java.util.Map | 8 | import java.util.Map |
9 | import java.util.Set | 9 | import java.util.Set |
10 | import org.eclipse.emf.ecore.EObject | 10 | import org.eclipse.emf.ecore.EObject |
11 | import org.eclipse.emf.ecore.EReference | ||
11 | 12 | ||
12 | class GraphStatistic { | 13 | class 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 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io; | 1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io; |
2 | 2 | ||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph | 3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph |
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | 5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric |
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric | 6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric |
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric | 7 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric |
8 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric | ||
7 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric | 9 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric |
10 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree | ||
8 | import java.io.File | 11 | import java.io.File |
9 | import java.io.FileNotFoundException | 12 | import java.io.FileNotFoundException |
10 | import java.util.ArrayList | 13 | import java.util.ArrayList |
@@ -17,19 +20,11 @@ import org.eclipse.emf.ecore.resource.Resource | |||
17 | import org.eclipse.emf.ecore.resource.ResourceSet | 20 | import org.eclipse.emf.ecore.resource.ResourceSet |
18 | import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl | 21 | import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl |
19 | import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl | 22 | import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl |
20 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric | ||
21 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric | ||
22 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree | ||
23 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummPackage | ||
24 | 23 | ||
25 | class GraphReader{ | 24 | class 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 | ||