aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation
diff options
context:
space:
mode:
authorLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-07-10 10:56:00 -0400
committerLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-07-10 10:56:00 -0400
commit991dacefdb8f78fccc359d3d2ec836dc2e7fc80a (patch)
tree6b18aa59c5f711a845aa9e3e5cf3fd3632ad7a33 /Metrics/Metrics-Calculation
parentadd sample domain for measuring realistic metrics (diff)
downloadVIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.tar.gz
VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.tar.zst
VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.zip
measurements for the different violation types, comparison for differenct generation config
Diffstat (limited to 'Metrics/Metrics-Calculation')
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore5
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.aird183
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.ecore17
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.genmodel21
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/200_nodes.jpgbin0 -> 49128 bytes
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/220_nodes.jpgbin0 -> 51088 bytes
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/260_nodes.jpgbin0 -> 51426 bytes
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/280_nodes.jpgbin0 -> 50852 bytes
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/output.txt300
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/plot_distribution.m11
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2016324.xmi128
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017419.xmi138
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015225.xmi145
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java143
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig6
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/.gitignore4
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/1.xmi130
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/info.csv152
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/mpc_rep/R_2016324.xmi128
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/na_rep/R_2017419.xmi138
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/out_d_rep/R_2015225.xmi145
-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.xtend42
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend20
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.xtend73
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.xtend19
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend69
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend11
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend20
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend42
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend27
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend19
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend76
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.xtend41
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.xtend2
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.xtend4
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend44
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.xtend60
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.pngbin0 -> 93318 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.pngbin0 -> 72012 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.pngbin0 -> 111830 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.pngbin0 -> 113112 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.pngbin0 -> 98628 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.pngbin0 -> 110816 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.pngbin0 -> 136233 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.pngbin0 -> 124315 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.pngbin0 -> 136745 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.pngbin29675 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.pngbin32871 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.pngbin87131 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.pngbin0 -> 116110 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.pngbin0 -> 74006 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.pngbin0 -> 117047 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/MPC.pngbin0 -> 135531 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.pngbin0 -> 95290 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.pngbin0 -> 134916 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.pngbin0 -> 184969 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.pngbin0 -> 139857 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.pngbin0 -> 186513 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.pngbin0 -> 95465 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.pngbin0 -> 93444 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.pngbin0 -> 97919 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/MPC.pngbin0 -> 92255 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.pngbin0 -> 87694 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.pngbin0 -> 86352 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.pngbin0 -> 98310 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.pngbin0 -> 85826 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.pngbin0 -> 86139 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/MPC.png)bin127107 -> 127107 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/Node Activity.png)bin118735 -> 118735 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/Out Degree.png)bin116864 -> 116864 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png)bin85397 -> 85397 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png)bin87774 -> 87774 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png)bin95122 -> 95122 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png)bin171018 -> 171018 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png)bin114184 -> 114184 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png)bin139638 -> 139638 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.pngbin0 -> 69041 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.pngbin0 -> 50629 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.pngbin0 -> 60762 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/MPC.png)bin97403 -> 97403 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/Node Activity.png)bin88084 -> 88084 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/Out Degree.png)bin87391 -> 87391 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py21
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb58
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py43
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py2
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py7
88 files changed, 2149 insertions, 347 deletions
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore
index 67ee5625..683b1de1 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore
@@ -1,6 +1 @@
1/ca/ /ca/
2/socialnetwork.aird
3/socialnetwork.ecore
4/socialnetwork.genmodel
5/socialnetwork/
6/statistics/
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.aird b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.aird
new file mode 100644
index 00000000..e7e28ecd
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.aird
@@ -0,0 +1,183 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
3 <viewpoint:DAnalysis uid="_TZr30HA1EemKP426GDjFOg" selectedViews="_Ta8cEHA1EemKP426GDjFOg" version="14.1.0.201810161215">
4 <semanticResources>socialnetwork.ecore</semanticResources>
5 <semanticResources>socialnetwork.genmodel</semanticResources>
6 <ownedViews xmi:type="viewpoint:DView" uid="_Ta8cEHA1EemKP426GDjFOg">
7 <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
8 <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_TbTBZXA1EemKP426GDjFOg" name="socialnetwork" repPath="#_TbTBYHA1EemKP426GDjFOg">
9 <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
10 <target xmi:type="ecore:EPackage" href="socialnetwork.ecore#/"/>
11 </ownedRepresentationDescriptors>
12 </ownedViews>
13 </viewpoint:DAnalysis>
14 <diagram:DSemanticDiagram uid="_TbTBYHA1EemKP426GDjFOg" name="socialnetwork">
15 <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_TbTBYXA1EemKP426GDjFOg" source="DANNOTATION_CUSTOMIZATION_KEY">
16 <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_TbTBYnA1EemKP426GDjFOg">
17 <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_ZZkWoHA1EemKP426GDjFOg" sourceArrow="FillDiamond" routingStyle="manhattan">
18 <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
19 <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_ZZkWoXA1EemKP426GDjFOg" showIcon="false" labelExpression="service:render">
20 <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
21 </centerLabelStyleDescription>
22 <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_ZZkWonA1EemKP426GDjFOg" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
23 <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
24 </endLabelStyleDescription>
25 </computedStyleDescriptions>
26 </data>
27 </ownedAnnotationEntries>
28 <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_TbTBZnA1EemKP426GDjFOg" source="GMF_DIAGRAMS">
29 <data xmi:type="notation:Diagram" xmi:id="_TbTBZ3A1EemKP426GDjFOg" type="Sirius" element="_TbTBYHA1EemKP426GDjFOg" measurementUnit="Pixel">
30 <children xmi:type="notation:Node" xmi:id="_Ur9YAHA1EemKP426GDjFOg" type="2003" element="_Ur5GkHA1EemKP426GDjFOg">
31 <children xmi:type="notation:Node" xmi:id="_Ur9YA3A1EemKP426GDjFOg" type="5007"/>
32 <children xmi:type="notation:Node" xmi:id="_Ur9YBHA1EemKP426GDjFOg" type="7004">
33 <children xmi:type="notation:Node" xmi:id="_W_L-4HA1EemKP426GDjFOg" type="3010" element="_W_DcAHA1EemKP426GDjFOg">
34 <styles xmi:type="notation:FontStyle" xmi:id="_W_L-4XA1EemKP426GDjFOg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
35 <layoutConstraint xmi:type="notation:Location" xmi:id="_W_L-4nA1EemKP426GDjFOg"/>
36 </children>
37 <styles xmi:type="notation:SortingStyle" xmi:id="_Ur9YBXA1EemKP426GDjFOg"/>
38 <styles xmi:type="notation:FilteringStyle" xmi:id="_Ur9YBnA1EemKP426GDjFOg"/>
39 </children>
40 <styles xmi:type="notation:ShapeStyle" xmi:id="_Ur9YAXA1EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/>
41 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ur9YAnA1EemKP426GDjFOg" x="285" y="165" width="120" height="100"/>
42 </children>
43 <children xmi:type="notation:Node" xmi:id="_X2ASIHA1EemKP426GDjFOg" type="2003" element="_X14WUHA1EemKP426GDjFOg">
44 <children xmi:type="notation:Node" xmi:id="_X2A5MHA1EemKP426GDjFOg" type="5007"/>
45 <children xmi:type="notation:Node" xmi:id="_X2A5MXA1EemKP426GDjFOg" type="7004">
46 <children xmi:type="notation:Node" xmi:id="_jitw4HA1EemKP426GDjFOg" type="3010" element="_jirUoHA1EemKP426GDjFOg">
47 <styles xmi:type="notation:FontStyle" xmi:id="_jitw4XA1EemKP426GDjFOg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
48 <layoutConstraint xmi:type="notation:Location" xmi:id="_jitw4nA1EemKP426GDjFOg"/>
49 </children>
50 <styles xmi:type="notation:SortingStyle" xmi:id="_X2A5MnA1EemKP426GDjFOg"/>
51 <styles xmi:type="notation:FilteringStyle" xmi:id="_X2A5M3A1EemKP426GDjFOg"/>
52 </children>
53 <styles xmi:type="notation:ShapeStyle" xmi:id="_X2ASIXA1EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/>
54 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X2ASInA1EemKP426GDjFOg" x="690" y="180" width="120" height="100"/>
55 </children>
56 <styles xmi:type="notation:DiagramStyle" xmi:id="_TbTBaHA1EemKP426GDjFOg"/>
57 <edges xmi:type="notation:Edge" xmi:id="_ZZnZ8HA1EemKP426GDjFOg" type="4001" element="_ZZjvkHA1EemKP426GDjFOg" source="_Ur9YAHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg">
58 <children xmi:type="notation:Node" xmi:id="_ZZnZ9HA1EemKP426GDjFOg" type="6001">
59 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ9XA1EemKP426GDjFOg" x="6" y="10"/>
60 </children>
61 <children xmi:type="notation:Node" xmi:id="_ZZnZ9nA1EemKP426GDjFOg" type="6002">
62 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ93A1EemKP426GDjFOg" x="1" y="10"/>
63 </children>
64 <children xmi:type="notation:Node" xmi:id="_ZZnZ-HA1EemKP426GDjFOg" type="6003">
65 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ-XA1EemKP426GDjFOg" x="-1" y="10"/>
66 </children>
67 <styles xmi:type="notation:ConnectorStyle" xmi:id="_ZZnZ8XA1EemKP426GDjFOg" routing="Rectilinear"/>
68 <styles xmi:type="notation:FontStyle" xmi:id="_ZZnZ8nA1EemKP426GDjFOg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
69 <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZZnZ83A1EemKP426GDjFOg" points="[0, 0, -287, 4]$[143, 0, -144, 4]$[143, -4, -144, 0]$[287, -4, 0, 0]"/>
70 <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZZnZ-nA1EemKP426GDjFOg" id="(1.0,0.5)"/>
71 <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZZnZ-3A1EemKP426GDjFOg" id="(0.0,0.30612244897959184)"/>
72 </edges>
73 <edges xmi:type="notation:Edge" xmi:id="_f8gfMHA1EemKP426GDjFOg" type="4001" element="_f8eC8HA1EemKP426GDjFOg" source="_X2ASIHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg">
74 <children xmi:type="notation:Node" xmi:id="_f8gfNHA1EemKP426GDjFOg" type="6001">
75 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8gfNXA1EemKP426GDjFOg" x="-8" y="7"/>
76 </children>
77 <children xmi:type="notation:Node" xmi:id="_f8hGQHA1EemKP426GDjFOg" type="6002">
78 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8hGQXA1EemKP426GDjFOg" x="12" y="10"/>
79 </children>
80 <children xmi:type="notation:Node" xmi:id="_f8hGQnA1EemKP426GDjFOg" type="6003">
81 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8hGQ3A1EemKP426GDjFOg" y="-10"/>
82 </children>
83 <styles xmi:type="notation:ConnectorStyle" xmi:id="_f8gfMXA1EemKP426GDjFOg" routing="Rectilinear"/>
84 <styles xmi:type="notation:FontStyle" xmi:id="_f8gfMnA1EemKP426GDjFOg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
85 <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f8gfM3A1EemKP426GDjFOg" points="[4, 1, 0, -21]$[51, 1, 47, -21]$[51, -53, 47, -75]$[-25, -53, -29, -75]$[-25, -8, -29, -30]"/>
86 <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f8hGRHA1EemKP426GDjFOg" id="(0.9666666666666667,0.09)"/>
87 <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f8hGRXA1EemKP426GDjFOg" id="(1.0,0.30612244897959184)"/>
88 </edges>
89 <edges xmi:type="notation:Edge" xmi:id="_eUOggHA6EemKP426GDjFOg" type="4001" element="_eULdMHA6EemKP426GDjFOg" source="_X2ASIHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg">
90 <children xmi:type="notation:Node" xmi:id="_eUOghHA6EemKP426GDjFOg" type="6001">
91 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOghXA6EemKP426GDjFOg" y="-10"/>
92 </children>
93 <children xmi:type="notation:Node" xmi:id="_eUOghnA6EemKP426GDjFOg" type="6002">
94 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOgh3A6EemKP426GDjFOg" y="10"/>
95 </children>
96 <children xmi:type="notation:Node" xmi:id="_eUOgiHA6EemKP426GDjFOg" type="6003">
97 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOgiXA6EemKP426GDjFOg" y="10"/>
98 </children>
99 <styles xmi:type="notation:ConnectorStyle" xmi:id="_eUOggXA6EemKP426GDjFOg" routing="Rectilinear"/>
100 <styles xmi:type="notation:FontStyle" xmi:id="_eUOggnA6EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/>
101 <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eUOgg3A6EemKP426GDjFOg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
102 <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUOginA6EemKP426GDjFOg" id="(0.5,0.5)"/>
103 <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUOgi3A6EemKP426GDjFOg" id="(0.5,0.5)"/>
104 </edges>
105 </data>
106 </ownedAnnotationEntries>
107 <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_Ur5GkHA1EemKP426GDjFOg" name="SocialNetwork" tooltipText="" outgoingEdges="_ZZjvkHA1EemKP426GDjFOg" width="12" height="10">
108 <target xmi:type="ecore:EClass" href="socialnetwork.ecore#//SocialNetwork"/>
109 <semanticElements xmi:type="ecore:EClass" href="socialnetwork.ecore#//SocialNetwork"/>
110 <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_XY_mAHA1EemKP426GDjFOg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
111 <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
112 </ownedStyle>
113 <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
114 <ownedElements xmi:type="diagram:DNodeListElement" uid="_W_DcAHA1EemKP426GDjFOg" name="name : EString" tooltipText="">
115 <target xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//SocialNetwork/name"/>
116 <semanticElements xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//SocialNetwork/name"/>
117 <ownedStyle xmi:type="diagram:BundledImage" uid="_XZANEHA1EemKP426GDjFOg" labelAlignment="LEFT">
118 <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
119 </ownedStyle>
120 <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
121 </ownedElements>
122 </ownedDiagramElements>
123 <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_X14WUHA1EemKP426GDjFOg" name="Person" tooltipText="" outgoingEdges="_f8eC8HA1EemKP426GDjFOg _eULdMHA6EemKP426GDjFOg" incomingEdges="_ZZjvkHA1EemKP426GDjFOg _f8eC8HA1EemKP426GDjFOg _eULdMHA6EemKP426GDjFOg" width="12" height="10">
124 <target xmi:type="ecore:EClass" href="socialnetwork.ecore#//Person"/>
125 <semanticElements xmi:type="ecore:EClass" href="socialnetwork.ecore#//Person"/>
126 <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
127 <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
128 <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
129 <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_kAhuQHA1EemKP426GDjFOg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
130 <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
131 </ownedStyle>
132 <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
133 <ownedElements xmi:type="diagram:DNodeListElement" uid="_jirUoHA1EemKP426GDjFOg" name="name : EString" tooltipText="">
134 <target xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//Person/name"/>
135 <semanticElements xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//Person/name"/>
136 <ownedStyle xmi:type="diagram:BundledImage" uid="_kAiVUHA1EemKP426GDjFOg" labelAlignment="LEFT">
137 <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
138 </ownedStyle>
139 <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
140 </ownedElements>
141 </ownedDiagramElements>
142 <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ZZjvkHA1EemKP426GDjFOg" name="[0..*] persons" sourceNode="_Ur5GkHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg">
143 <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//SocialNetwork/persons"/>
144 <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//SocialNetwork/persons"/>
145 <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ZZkWo3A1EemKP426GDjFOg" description="_ZZkWoHA1EemKP426GDjFOg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
146 <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_ZZkWpHA1EemKP426GDjFOg" showIcon="false">
147 <customFeatures>labelSize</customFeatures>
148 </centerLabelStyle>
149 <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_ZZkWpXA1EemKP426GDjFOg" showIcon="false" labelColor="39,76,114">
150 <customFeatures>labelSize</customFeatures>
151 </endLabelStyle>
152 </ownedStyle>
153 <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
154 </ownedDiagramElements>
155 <ownedDiagramElements xmi:type="diagram:DEdge" uid="_f8eC8HA1EemKP426GDjFOg" name="[0..*] friends" sourceNode="_X14WUHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg">
156 <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/friends"/>
157 <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/friends"/>
158 <ownedStyle xmi:type="diagram:EdgeStyle" uid="_erMusHA9EemKP426GDjFOg" routingStyle="manhattan" strokeColor="0,0,0">
159 <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
160 <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_erMusXA9EemKP426GDjFOg" showIcon="false"/>
161 <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_erMusnA9EemKP426GDjFOg" labelSize="6" showIcon="false" labelColor="39,76,114"/>
162 </ownedStyle>
163 <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
164 </ownedDiagramElements>
165 <ownedDiagramElements xmi:type="diagram:DEdge" uid="_eULdMHA6EemKP426GDjFOg" sourceNode="_X14WUHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg" beginLabel="[0..*] children" endLabel="[0..2] parents">
166 <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/parents"/>
167 <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/children"/>
168 <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/parents"/>
169 <ownedStyle xmi:type="diagram:EdgeStyle" uid="_eUMEQHA6EemKP426GDjFOg" sourceArrow="InputArrow" routingStyle="manhattan" strokeColor="0,0,0">
170 <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']/@style"/>
171 <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_eUMEQXA6EemKP426GDjFOg" showIcon="false"/>
172 <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_eUMEQnA6EemKP426GDjFOg" showIcon="false"/>
173 </ownedStyle>
174 <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
175 </ownedDiagramElements>
176 <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
177 <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_TbTBZHA1EemKP426GDjFOg"/>
178 <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
179 <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
180 <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
181 <target xmi:type="ecore:EPackage" href="socialnetwork.ecore#/"/>
182 </diagram:DSemanticDiagram>
183</xmi:XMI>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.ecore
new file mode 100644
index 00000000..cacf9921
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.ecore
@@ -0,0 +1,17 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="socialnetwork" nsURI="http://ecse.mcgill.ca/socialnetwork" nsPrefix="socialnetwork">
4 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
5 <eClassifiers xsi:type="ecore:EClass" name="SocialNetwork">
6 <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
7 defaultValueLiteral="SocialNetwork"/>
8 <eStructuralFeatures xsi:type="ecore:EReference" name="persons" upperBound="-1"
9 eType="#//Person" containment="true"/>
10 </eClassifiers>
11 <eClassifiers xsi:type="ecore:EClass" name="Person">
12 <eStructuralFeatures xsi:type="ecore:EReference" name="friends" upperBound="-1"
13 eType="#//Person"/>
14 <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
15 defaultValueLiteral="Name"/>
16 </eClassifiers>
17</ecore:EPackage>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.genmodel b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.genmodel
new file mode 100644
index 00000000..c9515653
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.genmodel
@@ -0,0 +1,21 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel"
4 modelDirectory="/SocialNetwork_plugin/encore_gen" creationIcons="false"
5 editDirectory="/ca.mcgill.ecse.socialnetwork.edit/src-gen" editorDirectory="/ca.mcgill.ecse.socialnetwork.editor/src-gen"
6 modelPluginID="SocialNetwork_plugin" modelName="Socialnetwork" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
7 codeFormatting="true" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0"
8 copyrightFields="false" operationReflection="true" importOrganizing="true">
9 <foreignModel>socialnetwork.ecore</foreignModel>
10 <testsDirectory xsi:nil="true"/>
11 <genPackages prefix="Socialnetwork" disposableProviderFactory="true" ecorePackage="socialnetwork.ecore#/">
12 <genClasses ecoreClass="socialnetwork.ecore#//SocialNetwork">
13 <genFeatures createChild="false" ecoreFeature="ecore:EAttribute socialnetwork.ecore#//SocialNetwork/name"/>
14 <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference socialnetwork.ecore#//SocialNetwork/persons"/>
15 </genClasses>
16 <genClasses ecoreClass="socialnetwork.ecore#//Person">
17 <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference socialnetwork.ecore#//Person/friends"/>
18 <genFeatures createChild="false" ecoreFeature="ecore:EAttribute socialnetwork.ecore#//Person/name"/>
19 </genClasses>
20 </genPackages>
21</genmodel:GenModel>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/200_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/200_nodes.jpg
new file mode 100644
index 00000000..a35c291b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/200_nodes.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/220_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/220_nodes.jpg
new file mode 100644
index 00000000..4d41dff7
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/220_nodes.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/260_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/260_nodes.jpg
new file mode 100644
index 00000000..b16cdfb2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/260_nodes.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/280_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/280_nodes.jpg
new file mode 100644
index 00000000..16c0ee23
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/280_nodes.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/output.txt b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/output.txt
new file mode 100644
index 00000000..35158e20
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/output.txt
@@ -0,0 +1,300 @@
11
29
37
40
54
66
716
80
92
104
1117
1220
131
145
152
163
1711
186
194
200
212
221
233
245
259
2613
2711
280
291
3010
313
320
331
341
350
3617
370
384
392
400
411
4210
4310
440
4524
469
470
4814
491
5011
512
5217
533
543
553
560
573
581
593
602
612
621
630
643
656
663
6716
683
6910
706
716
726
7311
746
7510
7620
771
784
7913
800
810
823
832
840
8512
860
870
8822
894
900
910
9220
931
9410
959
9611
975
9827
991
1003
1019
1020
10323
10410
1059
10623
1070
1083
1097
1102
1110
1129
1133
1140
11512
11611
1177
1186
1199
1202
1210
1223
1234
1243
1259
1263
1270
1287
1292
1301
1319
1321
13311
1346
1355
13616
1370
13819
13914
1409
14113
1422
1438
1440
1456
1461
1471
1482
1490
1503
15115
1523
1530
1543
15517
1561
15715
1585
1591
16021
1618
1622
1637
1643
16516
16611
1671
1685
1691
1705
1711
1726
1733
17416
1756
17617
1773
1785
1797
1802
1819
1822
1831
18411
1851
1860
1873
1885
1896
1902
1915
1921
1934
1949
1950
19611
1971
19810
19913
2006
2012
2021
2033
2044
2050
2061
2072
20810
20912
2103
2113
2123
2130
2142
2154
2162
21718
2183
2198
2207
2215
2223
22316
2241
2254
2268
22715
2281
22911
23015
2311
2328
2337
2341
2352
2360
2379
2385
2392
2401
2413
2426
2434
2448
2453
24612
2474
24821
2499
2502
2513
2522
2531
2543
25511
2562
2579
2580
25910
2606
2611
2622
2630
2648
2655
2662
2673
2688
2691
27013
2718
2722
2732
27411
2754
27621
2776
2785
2790
2808
2818
28212
2830
2840
2854
2861
28719
2885
2893
2901
2913
29212
2932
2946
29511
2968
2978
2982
29918
3000
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/plot_distribution.m b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/plot_distribution.m
new file mode 100644
index 00000000..4c67a191
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/plot_distribution.m
@@ -0,0 +1,11 @@
1clear;
2clc;
3
4matrix = load('-ascii', "output.txt");
5hist(matrix,unique(matrix));
6hold on;
7[a,b] = hist(matrix,unique(matrix))
8plot(b, a)
9hold off;
10sum(matrix)
11average = sum(matrix) / length(matrix) \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2016324.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2016324.xmi
new file mode 100644
index 00000000..493a1731
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2016324.xmi
@@ -0,0 +1,128 @@
1<?xml version="1.0" encoding="ASCII"?>
2<hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm">
3 <regions>
4 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@outgoingTransitions.0">
5 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
6 <regions>
7 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2">
8 <regions>
9 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
10 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1"/>
11 </vertices>
12 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0">
13 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3"/>
14 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2"/>
15 </vertices>
16 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1">
17 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3"/>
18 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
19 </vertices>
20 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0">
21 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2"/>
22 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
23 </vertices>
24 </regions>
25 </vertices>
26 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.2">
27 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.12"/>
28 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.11"/>
29 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
30 </vertices>
31 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.1">
32 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.13"/>
33 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/>
34 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
35 </vertices>
36 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1">
37 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
38 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/>
39 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.6"/>
40 </vertices>
41 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1">
42 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
43 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
44 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/>
45 </vertices>
46 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
47 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
48 </vertices>
49 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.2">
50 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
51 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
52 </vertices>
53 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1">
54 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
55 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
56 </vertices>
57 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0">
58 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
59 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
60 </vertices>
61 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.2">
62 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
63 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
64 </vertices>
65 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1">
66 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
67 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
68 </vertices>
69 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1">
70 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
71 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
72 </vertices>
73 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0">
74 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
75 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
76 </vertices>
77 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0">
78 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
79 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
80 </vertices>
81 </regions>
82 </vertices>
83 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
84 <outgoingTransitions target="//@regions.0/@vertices.0"/>
85 </vertices>
86 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State">
87 <outgoingTransitions target="//@regions.0/@vertices.0"/>
88 <regions>
89 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0">
90 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
91 </vertices>
92 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0">
93 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
94 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
95 </vertices>
96 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.1">
97 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.8"/>
98 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/>
99 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.4"/>
100 </vertices>
101 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.1">
102 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/>
103 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.9"/>
104 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/>
105 </vertices>
106 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.2">
107 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
108 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/>
109 </vertices>
110 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.1"/>
111 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1"/>
112 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0">
113 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
114 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/>
115 </vertices>
116 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0">
117 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
118 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
119 </vertices>
120 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1">
121 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
122 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
123 </vertices>
124 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1"/>
125 </regions>
126 </vertices>
127 </regions>
128</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017419.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017419.xmi
new file mode 100644
index 00000000..369760bf
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017419.xmi
@@ -0,0 +1,138 @@
1<?xml version="1.0" encoding="ASCII"?>
2<hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm">
3 <regions>
4 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.5/@outgoingTransitions.0">
5 <regions>
6 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.3">
7 <outgoingTransitions target="//@regions.0/@vertices.1"/>
8 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
9 </vertices>
10 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.1">
11 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
12 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
13 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
14 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
15 </vertices>
16 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
17 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
18 </vertices>
19 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.3">
20 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
21 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
22 </vertices>
23 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1">
24 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
25 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
26 </vertices>
27 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0">
28 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.6"/>
29 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/>
30 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
31 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
32 </vertices>
33 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0">
34 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
35 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
36 </vertices>
37 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.1">
38 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
39 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
40 </vertices>
41 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.3 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1">
42 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/>
43 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/>
44 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
45 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
46 </vertices>
47 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.1">
48 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
49 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
50 </vertices>
51 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0">
52 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
53 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
54 </vertices>
55 </regions>
56 </vertices>
57 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.1">
58 <outgoingTransitions target="//@regions.0/@vertices.0"/>
59 <regions>
60 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.7/@outgoingTransitions.0">
61 <outgoingTransitions target="//@regions.0/@vertices.3"/>
62 </vertices>
63 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.1">
64 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/>
65 <outgoingTransitions target="//@regions.0/@vertices.3"/>
66 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.5"/>
67 </vertices>
68 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.6/@outgoingTransitions.0"/>
69 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.6/@outgoingTransitions.1">
70 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.7"/>
71 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.6"/>
72 </vertices>
73 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
74 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/>
75 </vertices>
76 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.2">
77 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/>
78 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/>
79 </vertices>
80 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@outgoingTransitions.1">
81 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/>
82 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/>
83 </vertices>
84 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@outgoingTransitions.0">
85 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.0"/>
86 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.0"/>
87 </vertices>
88 </regions>
89 </vertices>
90 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.3/@outgoingTransitions.0">
91 <outgoingTransitions target="//@regions.0/@vertices.0"/>
92 <regions>
93 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1">
94 <outgoingTransitions target="//@regions.0/@vertices.4"/>
95 </vertices>
96 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.1">
97 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
98 <outgoingTransitions target="//@regions.0/@vertices.4"/>
99 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/>
100 </vertices>
101 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0"/>
102 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.1">
103 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/>
104 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/>
105 </vertices>
106 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
107 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
108 </vertices>
109 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.2">
110 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
111 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
112 </vertices>
113 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0">
114 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
115 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
116 </vertices>
117 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1">
118 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
119 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
120 </vertices>
121 </regions>
122 </vertices>
123 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.1">
124 <outgoingTransitions target="//@regions.0/@vertices.2"/>
125 <outgoingTransitions target="//@regions.0/@vertices.2"/>
126 </vertices>
127 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1">
128 <outgoingTransitions target="//@regions.0/@vertices.1"/>
129 <outgoingTransitions target="//@regions.0/@vertices.1"/>
130 </vertices>
131 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@outgoingTransitions.0">
132 <outgoingTransitions target="//@regions.0/@vertices.0"/>
133 </vertices>
134 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
135 <outgoingTransitions target="//@regions.0/@vertices.5"/>
136 </vertices>
137 </regions>
138</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015225.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015225.xmi
new file mode 100644
index 00000000..21fee5a9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015225.xmi
@@ -0,0 +1,145 @@
1<?xml version="1.0" encoding="ASCII"?>
2<hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm">
3 <regions>
4 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
5 <outgoingTransitions target="//@regions.0/@vertices.1"/>
6 </vertices>
7 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.3/@outgoingTransitions.0">
8 <outgoingTransitions target="//@regions.0/@vertices.2"/>
9 <outgoingTransitions target="//@regions.0/@vertices.3"/>
10 </vertices>
11 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0">
12 <outgoingTransitions target="//@regions.0/@vertices.1"/>
13 <regions>
14 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.2">
15 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
16 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
17 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
18 </vertices>
19 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.0">
20 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.9"/>
21 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
22 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/>
23 </vertices>
24 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.1">
25 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.8"/>
26 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
27 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/>
28 </vertices>
29 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.1">
30 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/>
31 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/>
32 <outgoingTransitions target="//@regions.0/@vertices.1"/>
33 </vertices>
34 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
35 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
36 </vertices>
37 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1">
38 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
39 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
40 </vertices>
41 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0">
42 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
43 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
44 </vertices>
45 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.2">
46 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
47 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
48 </vertices>
49 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0">
50 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
51 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
52 </vertices>
53 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0">
54 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
55 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
56 </vertices>
57 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.2">
58 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
59 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
60 </vertices>
61 </regions>
62 </vertices>
63 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.0">
64 <outgoingTransitions target="//@regions.0/@vertices.1"/>
65 <outgoingTransitions target="//@regions.0/@vertices.5"/>
66 <regions>
67 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
68 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.1"/>
69 </vertices>
70 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.0/@outgoingTransitions.0">
71 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
72 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/>
73 </vertices>
74 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.1">
75 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.4"/>
76 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.6"/>
77 </vertices>
78 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.4/@outgoingTransitions.1">
79 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.8"/>
80 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.5"/>
81 </vertices>
82 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.0">
83 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/>
84 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/>
85 </vertices>
86 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.1">
87 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
88 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
89 </vertices>
90 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.1">
91 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
92 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.7"/>
93 </vertices>
94 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.6/@outgoingTransitions.1"/>
95 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.0">
96 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/>
97 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.9"/>
98 </vertices>
99 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.5/@outgoingTransitions.2"/>
100 </regions>
101 </vertices>
102 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.0">
103 <outgoingTransitions target="//@regions.0/@vertices.6"/>
104 <regions>
105 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
106 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.1"/>
107 </vertices>
108 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.0/@outgoingTransitions.0">
109 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.3"/>
110 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.2"/>
111 </vertices>
112 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.4/@regions.0/@vertices.1/@outgoingTransitions.1">
113 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.4"/>
114 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.8"/>
115 </vertices>
116 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.4/@regions.0/@vertices.6/@outgoingTransitions.0">
117 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.9"/>
118 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.6"/>
119 </vertices>
120 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.2/@outgoingTransitions.0">
121 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.2"/>
122 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.5"/>
123 </vertices>
124 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.2"/>
125 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.3/@outgoingTransitions.1">
126 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.3"/>
127 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.7"/>
128 </vertices>
129 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.1"/>
130 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.2/@outgoingTransitions.1"/>
131 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.3/@outgoingTransitions.0"/>
132 </regions>
133 </vertices>
134 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.1">
135 <outgoingTransitions target="//@regions.0/@vertices.4"/>
136 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.7"/>
137 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.9"/>
138 </vertices>
139 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@outgoingTransitions.0">
140 <outgoingTransitions target="//@regions.0/@vertices.3"/>
141 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.7"/>
142 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.5"/>
143 </vertices>
144 </regions>
145</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java
index 72ea45d1..e1698e5b 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java
@@ -4,6 +4,10 @@ import java.io.File;
4import java.io.FileNotFoundException; 4import java.io.FileNotFoundException;
5import java.io.PrintStream; 5import java.io.PrintStream;
6import java.util.ArrayList; 6import java.util.ArrayList;
7import java.util.List;
8import java.util.Map;
9
10import org.eclipse.viatra.query.runtime.matchers.aggregators.count;
7 11
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain; 12import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain;
9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance; 13import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance;
@@ -23,59 +27,127 @@ public class Main {
23 return message; 27 return message;
24 } 28 }
25 29
30 private static String configFolder = "yakinduum/";
31 private static String configFileName = configFolder + "info.csv";
32 private static String aggregateViolationMeasureFileName = configFolder + "aggregateInfo2.csv";
33
26 public static void main(String args[]) { 34 public static void main(String args[]) {
27// try { 35// try {
28 36
37
38 long begin = System.currentTimeMillis();
39 String message = null;//runWithPath("yakinduGeneration.vsconfig");
40 long elapsed = System.currentTimeMillis() - begin;
41
42 if(message != null) {
43 return;
44 }
29 ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); 45 ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>();
46 String time = formatTime(elapsed);
47 ArrayList<String> infoOutput = new ArrayList<String>();
48 infoOutput.add(time);
49 output.add(infoOutput);
50 System.out.println(time);
51 //CsvFileWriter.write(output, configFileName);
52
53
54 output = new ArrayList<ArrayList<String>>();
30 output.add(prepareInfo()); 55 output.add(prepareInfo());
31 CsvFileWriter.write(output, "yakinduum/info.csv"); 56 //CsvFileWriter.append(output, configFileName);
32 //YakinduumModel.init(); 57
33 generateModel(1); 58// for(int i = 0; i < 50; i++) {
34// }catch(Exception e) { 59// singleModelViolationMeasure(i+1);
35// e.printStackTrace();
36// }finally {
37// outDegreeStatistic();
38// } 60// }
39// outDegreeStatistic(); 61 aggregateViolationMeasure(50);
40 62 System.out.println("Finished");
41 } 63 }
42 64
43 public static void generateModel(int run) { 65 public static void generateModel(int run) {
66 String filename = run+"_1.xmi";
44 //prepare initial info 67 //prepare initial info
45 long begin = System.currentTimeMillis(); 68 ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>();
46 String message = runWithPath("yakinduGeneration.vsconfig"); 69 ArrayList<String> infoOutput = new ArrayList<String>();
70 infoOutput.add(run+ "");
71 infoOutput.addAll(calculateMetric(run));
72
73 YakinduumModel model = new YakinduumModel("output/Viatra_100/run"+run+"/"+ filename);
74 int violationCount = ViolationCheck.calculateViolationCounts(model.yakinduum);
75 infoOutput.add(violationCount + "");
76
77
78
79 //save model to another directory
80 model.save(configFolder + run + ".xmi");
81
82 CsvFileWriter.append(output, configFileName);
83 }
47 84
85 public static void singleModelViolationMeasure(int run) {
86 String filename = run+".xmi";
87 //prepare initial info
88 ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>();
89 ArrayList<String> infoOutput = new ArrayList<String>();
90 infoOutput.add(run+ "");
91
92 YakinduumModel model = new YakinduumModel("yakinduum\\config8\\"+ filename);
48 93
94 //parse map of violation counts to two list and add them to the result list
95 Map<String, Integer> map = ViolationCheck.violationMaps(model.yakinduum);
96 ArrayList<String> counts = new ArrayList<String>();
97 ArrayList<String> violationNames = new ArrayList<String>(map.keySet());
98 for(int i = 0; i < violationNames.size(); i++) {
99 String name = violationNames.get(i);
100 int total = map.get(name);
101 counts.add(total + "");
102 }
103 output.add(infoOutput);
104 output.add(violationNames);
105 output.add(counts);
106
107 CsvFileWriter.append(output, configFileName);
108 }
109
110 public static void aggregateViolationMeasure(int size) {
111 ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>();
112 ArrayList<String> counts = new ArrayList<String>();
113 ArrayList<String> violationNames = null;
114 for(int run = 1; run < size+1; run++) {
115 String filename = run+".xmi";
116 YakinduumModel model = new YakinduumModel("yakinduum\\config8\\"+ filename);
117
118 Map<String, Integer> map = ViolationCheck.violationMaps(model.yakinduum);
119 if(run == 1) {
120 violationNames = new ArrayList<String>(map.keySet());
121 for(int i = 0; i < violationNames.size(); i++) {
122 String name = violationNames.get(i);
123 int total = map.get(name);
124 counts.add(total + "");
125 }
126 }else {
127 for(int i = 0; i < violationNames.size(); i++) {
128 int count = Integer.parseInt(counts.get(i));
129 String name = violationNames.get(i);
130 int total = count + map.get(name);
131 counts.set(i, total + "");
132 }
133 }
134 }
49 135
50 if(message == null) { 136 for(int i = 0; i < counts.size(); i++) {
51 ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); 137 double count = Integer.parseInt(counts.get(i)) / (double) size;
52 long elapsed = System.currentTimeMillis() - begin; 138 counts.set(i, count + "");
53 String time = formatTime(elapsed);
54
55 ArrayList<String> infoOutput = new ArrayList<String>();
56 infoOutput.add(run+ "");
57 infoOutput.add(time);
58 infoOutput.addAll(calculateMetric());
59
60 YakinduumModel model = new YakinduumModel("output/Viatra_100/1.xmi");
61 int violationCount = ViolationCheck.calculateViolationCounts(model.yakinduum);
62 infoOutput.add(violationCount + "");
63
64 //save model to another directory
65 model.save("yakinduum/" + run + ".xmi");
66
67 output.add(infoOutput);
68 CsvFileWriter.append(output, "yakinduum/info.csv");
69 System.out.println("Finished");
70 } 139 }
71 140
141 output.add(violationNames);
142 output.add(counts);
143 CsvFileWriter.write(output, aggregateViolationMeasureFileName);
72 } 144 }
73 145
74 public static ArrayList<String> calculateMetric() { 146 public static ArrayList<String> calculateMetric(int run) {
75 //read model and metric 147 //read model and metric
76 ArrayList<String> output = new ArrayList<String>(); 148 ArrayList<String> output = new ArrayList<String>();
77 GraphReader reader = new GraphReader(YakindummPackage.eINSTANCE); 149 GraphReader reader = new GraphReader(YakindummPackage.eINSTANCE);
78 EMFGraph graph = reader.readModels("output/Viatra_100/").get(0); 150 EMFGraph graph = reader.readModels("output/Viatra_100/run"+run+"/").get(0);
79 151
80 //KS distance 152 //KS distance
81 KSDistance ks = new KSDistance(Domain.Yakinduum); 153 KSDistance ks = new KSDistance(Domain.Yakinduum);
@@ -86,17 +158,18 @@ public class Main {
86 output.add(ks.outDegreeDistance(samples.outDegreeSamples) + ""); 158 output.add(ks.outDegreeDistance(samples.outDegreeSamples) + "");
87 output.add(ks.naDistance(samples.naSamples)+ ""); 159 output.add(ks.naDistance(samples.naSamples)+ "");
88 output.add(ks.mpcDistance(samples.mpcSamples) + ""); 160 output.add(ks.mpcDistance(samples.mpcSamples) + "");
161 output.add(ks.typedOutDegreeDistance(samples.typedOutDegreeSamples) + "");
89 return output; 162 return output;
90 } 163 }
91 164
92 public static ArrayList<String> prepareInfo() { 165 public static ArrayList<String> prepareInfo() {
93 ArrayList<String> info = new ArrayList<String>(); 166 ArrayList<String> info = new ArrayList<String>();
94 info.add("ID"); 167 info.add("ID");
95 info.add("Time");
96 info.add("# of Nodes"); 168 info.add("# of Nodes");
97 info.add("Out Degree"); 169 info.add("Out Degree");
98 info.add("Node Activity"); 170 info.add("Node Activity");
99 info.add("MPC"); 171 info.add("MPC");
172 info.add("Typed Out Degree");
100 info.add("Violations"); 173 info.add("Violations");
101 return info; 174 return info;
102 } 175 }
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig
index cf08c562..14e1a3f7 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig
@@ -1,5 +1,5 @@
1import epackage "../VIATRA-Generator/Domains/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/model/yakindu_simplified.ecore" 1import epackage "../../../Domains/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/model/yakindu_simplified.ecore"
2import viatra "../VIATRA-Generator/Domains/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql" 2import viatra "../../../Domains/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql"
3 3
4generate { 4generate {
5 metamodel = { package yakindumm excluding { Synchronization}} 5 metamodel = { package yakindumm excluding { Synchronization}}
@@ -13,7 +13,7 @@ generate {
13 } 13 }
14 14
15 number = 1 15 number = 1
16 runs = 1 16 runs = 50
17 config = { 17 config = {
18 log-level = none 18 log-level = none
19 } 19 }
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/.gitignore
new file mode 100644
index 00000000..17126b28
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/.gitignore
@@ -0,0 +1,4 @@
1# ignore everything in this folder except for this folder it self
2
3*
4!.gitignore \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/1.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/1.xmi
deleted file mode 100644
index 6bee747f..00000000
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/1.xmi
+++ /dev/null
@@ -1,130 +0,0 @@
1<?xml version="1.0" encoding="ASCII"?>
2<hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm">
3 <regions>
4 <vertices xsi:type="hu.bme.mit.inf.yakindumm:FinalState" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.1"/>
5 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Exit" incomingTransitions="//@regions.0/@vertices.3/@regions.1/@vertices.1/@outgoingTransitions.5 //@regions.0/@vertices.3/@regions.1/@vertices.1/@outgoingTransitions.7">
6 <outgoingTransitions target="//@regions.0/@vertices.3"/>
7 </vertices>
8 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Exit" incomingTransitions="//@regions.1/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.5/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.7/@outgoingTransitions.2"/>
9 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.3/@outgoingTransitions.4 //@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.1/@vertices.1/@outgoingTransitions.4">
10 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.1/@vertices.1"/>
11 <outgoingTransitions target="//@regions.0/@vertices.5"/>
12 <outgoingTransitions target="//@regions.0/@vertices.5"/>
13 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.0"/>
14 <outgoingTransitions target="//@regions.0/@vertices.3"/>
15 <outgoingTransitions target="//@regions.1/@vertices.1"/>
16 <regions>
17 <vertices xsi:type="hu.bme.mit.inf.yakindumm:FinalState" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.3/@outgoingTransitions.3">
18 <outgoingTransitions target="//@regions.1/@vertices.3"/>
19 </vertices>
20 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.1/@vertices.3/@outgoingTransitions.1">
21 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.1/@vertices.1"/>
22 <outgoingTransitions target="//@regions.0/@vertices.5/@regions.0/@vertices.4"/>
23 </vertices>
24 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.0">
25 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
26 <outgoingTransitions target="//@regions.0/@vertices.0"/>
27 </vertices>
28 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
29 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.5"/>
30 </vertices>
31 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State"/>
32 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.0">
33 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.0"/>
34 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.5"/>
35 <outgoingTransitions target="//@regions.0/@vertices.5"/>
36 <outgoingTransitions target="//@regions.1/@vertices.3"/>
37 </vertices>
38 <vertices xsi:type="hu.bme.mit.inf.yakindumm:FinalState" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.5/@regions.0/@vertices.4/@outgoingTransitions.2"/>
39 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.1/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.7/@outgoingTransitions.1">
40 <outgoingTransitions target="//@regions.1/@vertices.0"/>
41 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.7"/>
42 <outgoingTransitions target="//@regions.0/@vertices.2"/>
43 </vertices>
44 </regions>
45 <regions>
46 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.1/@vertices.0/@outgoingTransitions.0">
47 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.1/@vertices.0"/>
48 </vertices>
49 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.1/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.1/@vertices.2/@outgoingTransitions.0 //@regions.1/@vertices.8/@outgoingTransitions.1">
50 <outgoingTransitions target="//@regions.0/@vertices.4"/>
51 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.1/@vertices.1"/>
52 <outgoingTransitions target="//@regions.0/@vertices.5/@regions.0/@vertices.5"/>
53 <outgoingTransitions target="//@regions.1/@vertices.7"/>
54 <outgoingTransitions target="//@regions.0/@vertices.3"/>
55 <outgoingTransitions target="//@regions.0/@vertices.1"/>
56 <outgoingTransitions target="//@regions.1/@vertices.6"/>
57 <outgoingTransitions target="//@regions.0/@vertices.1"/>
58 </vertices>
59 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
60 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.1/@vertices.1"/>
61 </vertices>
62 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.1/@vertices.3/@outgoingTransitions.0">
63 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.1/@vertices.3"/>
64 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.1"/>
65 </vertices>
66 </regions>
67 </vertices>
68 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.1/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.5/@outgoingTransitions.3">
69 <outgoingTransitions target="//@regions.0/@vertices.6"/>
70 </vertices>
71 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.2 //@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.5/@outgoingTransitions.2 //@regions.1/@vertices.2/@outgoingTransitions.0">
72 <outgoingTransitions target="//@regions.1/@vertices.2"/>
73 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.6"/>
74 <outgoingTransitions target="//@regions.0/@vertices.5"/>
75 <outgoingTransitions target="//@regions.0/@vertices.4"/>
76 <regions>
77 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.1/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.5/@regions.0/@vertices.0/@outgoingTransitions.2">
78 <outgoingTransitions target="//@regions.0/@vertices.3"/>
79 <outgoingTransitions target="//@regions.0/@vertices.2"/>
80 <outgoingTransitions target="//@regions.0/@vertices.5/@regions.0/@vertices.0"/>
81 <outgoingTransitions target="//@regions.0/@vertices.5/@regions.0/@vertices.5"/>
82 </vertices>
83 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Exit" incomingTransitions="//@regions.1/@vertices.8/@outgoingTransitions.0"/>
84 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
85 <outgoingTransitions/>
86 </vertices>
87 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@regions.0/@vertices.3/@outgoingTransitions.1">
88 <outgoingTransitions target="//@regions.1/@vertices.0"/>
89 <outgoingTransitions target="//@regions.0/@vertices.5/@regions.0/@vertices.3"/>
90 </vertices>
91 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.1/@outgoingTransitions.1">
92 <outgoingTransitions target="//@regions.1/@vertices.3"/>
93 <outgoingTransitions target="//@regions.0/@vertices.5/@regions.0/@vertices.4"/>
94 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.6"/>
95 </vertices>
96 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Exit" incomingTransitions="//@regions.0/@vertices.3/@regions.1/@vertices.1/@outgoingTransitions.2 //@regions.0/@vertices.5/@regions.0/@vertices.0/@outgoingTransitions.3"/>
97 </regions>
98 </vertices>
99 <vertices xsi:type="hu.bme.mit.inf.yakindumm:FinalState" incomingTransitions="//@regions.1/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.1/@vertices.2/@outgoingTransitions.1"/>
100 </regions>
101 <regions>
102 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.5/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.1/@vertices.0/@outgoingTransitions.2">
103 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.7"/>
104 <outgoingTransitions target="//@regions.0/@vertices.6"/>
105 <outgoingTransitions target="//@regions.1/@vertices.0"/>
106 <outgoingTransitions target="//@regions.1/@vertices.5"/>
107 </vertices>
108 <vertices xsi:type="hu.bme.mit.inf.yakindumm:FinalState" incomingTransitions="//@regions.1/@vertices.5/@outgoingTransitions.2 //@regions.0/@vertices.3/@outgoingTransitions.5"/>
109 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.0">
110 <outgoingTransitions target="//@regions.0/@vertices.5"/>
111 <outgoingTransitions target="//@regions.0/@vertices.6"/>
112 </vertices>
113 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Exit" incomingTransitions="//@regions.0/@vertices.5/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.3 //@regions.0/@vertices.3/@regions.0/@vertices.0/@outgoingTransitions.0"/>
114 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
115 <outgoingTransitions target="//@regions.0/@vertices.5/@regions.0/@vertices.0"/>
116 </vertices>
117 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.1/@vertices.0/@outgoingTransitions.3 //@regions.1/@vertices.5/@outgoingTransitions.1">
118 <outgoingTransitions target="//@regions.0/@vertices.2"/>
119 <outgoingTransitions target="//@regions.1/@vertices.5"/>
120 <outgoingTransitions target="//@regions.1/@vertices.1"/>
121 <outgoingTransitions target="//@regions.1/@vertices.8"/>
122 </vertices>
123 <vertices xsi:type="hu.bme.mit.inf.yakindumm:FinalState" incomingTransitions="//@regions.0/@vertices.3/@regions.1/@vertices.1/@outgoingTransitions.6"/>
124 <vertices xsi:type="hu.bme.mit.inf.yakindumm:FinalState" incomingTransitions="//@regions.0/@vertices.3/@regions.1/@vertices.1/@outgoingTransitions.3"/>
125 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.1/@vertices.5/@outgoingTransitions.3">
126 <outgoingTransitions target="//@regions.0/@vertices.5/@regions.0/@vertices.1"/>
127 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.1/@vertices.1"/>
128 </vertices>
129 </regions>
130</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/info.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/info.csv
index e11b75f9..c79bc07f 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/info.csv
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/info.csv
@@ -1,2 +1,150 @@
1ID,Time,# of Nodes,Out Degree,Node Activity,MPC,Violations 11
21,3 : 50.959,100,0.031818181818181815,0.10775510204081633,0.10059701492537314,4 2choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
30,0,4,0,12,6,0,0,0,8
42
5choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
60,0,5,0,12,13,4,0,0,2
73
8choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
90,0,3,1,4,9,3,0,0,0
104
11choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
120,0,1,0,7,12,3,0,0,2
135
14choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
150,0,1,0,8,7,6,0,0,2
166
17choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
180,0,5,0,11,6,4,0,1,6
197
20choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
210,0,4,2,9,10,4,1,0,2
228
23choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
240,0,3,0,9,7,5,0,0,0
259
26choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
270,0,6,0,13,8,4,0,0,10
2810
29choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
300,0,2,0,7,8,2,0,0,4
3111
32choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
330,0,2,0,8,7,3,0,0,2
3412
35choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
360,0,5,0,13,4,1,0,0,2
3713
38choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
390,0,3,1,12,20,2,0,0,2
4014
41choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
420,0,6,0,13,7,2,0,0,0
4315
44choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
450,0,2,0,15,12,3,0,2,2
4616
47choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
480,0,3,0,6,10,1,0,0,2
4917
50choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
510,0,4,1,9,7,2,0,0,4
5218
53choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
540,0,1,0,8,12,4,0,0,0
5519
56choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
570,0,4,0,10,10,1,0,0,0
5820
59choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
600,0,4,2,11,11,6,0,0,2
6121
62choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
630,0,3,1,15,12,4,1,0,2
6422
65choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
660,0,5,0,14,4,1,0,0,4
6723
68choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
690,0,3,1,8,11,4,0,0,2
7024
71choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
720,0,1,0,12,10,4,0,0,0
7325
74choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
750,0,1,1,9,1,4,0,0,2
7626
77choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
780,0,5,0,9,4,7,1,0,2
7927
80choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
810,0,3,0,11,31,0,0,0,2
8228
83choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
840,0,5,0,6,12,0,1,0,2
8529
86choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
870,0,3,1,10,10,3,0,0,0
8830
89choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
900,0,1,0,10,23,4,0,0,2
9131
92choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
930,0,4,0,4,8,3,0,0,2
9432
95choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
960,0,3,0,20,3,1,0,0,2
9733
98choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
990,0,1,1,9,11,7,0,0,2
10034
101choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1020,0,3,3,1,11,7,0,0,2
10335
104choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1050,0,2,0,7,14,6,0,0,0
10636
107choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1080,0,4,0,7,10,1,0,0,0
10937
110choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1110,0,1,0,13,8,3,0,1,2
11238
113choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1140,0,4,0,10,2,5,0,0,4
11539
116choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1170,0,3,1,11,8,5,0,0,2
11840
119choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1200,0,3,0,12,19,4,0,0,6
12141
122choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1230,0,7,0,2,14,1,2,0,2
12442
125choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1260,0,3,1,17,5,2,0,0,0
12743
128choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1290,0,4,0,10,6,2,0,0,0
13044
131choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1320,0,4,0,9,5,4,0,0,0
13345
134choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1350,0,1,0,7,13,4,0,0,2
13646
137choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1380,0,4,0,8,6,1,1,0,4
13947
140choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1410,0,5,0,8,11,6,0,0,0
14248
143choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1440,0,2,0,22,4,3,1,0,4
14549
146choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1470,0,4,0,10,5,2,0,0,2
14850
149choiceHasNoOutgoing,choiceHasNoIncoming,incomingToEntry,noStateInRegion,outgoingFromFinal,outgoingFromExit,noEntryInRegion,multipleEntryInRegion,noOutgoingTransitionFromEntry,multipleTransitionFromEntry
1500,0,3,0,13,11,2,0,0,6
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/mpc_rep/R_2016324.xmi b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/mpc_rep/R_2016324.xmi
new file mode 100644
index 00000000..493a1731
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/mpc_rep/R_2016324.xmi
@@ -0,0 +1,128 @@
1<?xml version="1.0" encoding="ASCII"?>
2<hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm">
3 <regions>
4 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@outgoingTransitions.0">
5 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
6 <regions>
7 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2">
8 <regions>
9 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
10 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1"/>
11 </vertices>
12 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0">
13 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3"/>
14 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2"/>
15 </vertices>
16 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1">
17 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3"/>
18 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
19 </vertices>
20 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0">
21 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2"/>
22 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
23 </vertices>
24 </regions>
25 </vertices>
26 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.2">
27 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.12"/>
28 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.11"/>
29 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
30 </vertices>
31 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.1">
32 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.13"/>
33 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/>
34 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
35 </vertices>
36 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1">
37 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
38 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/>
39 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.6"/>
40 </vertices>
41 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1">
42 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
43 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
44 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/>
45 </vertices>
46 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
47 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
48 </vertices>
49 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.2">
50 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
51 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
52 </vertices>
53 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1">
54 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
55 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
56 </vertices>
57 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0">
58 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
59 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
60 </vertices>
61 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.2">
62 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
63 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
64 </vertices>
65 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1">
66 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
67 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
68 </vertices>
69 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1">
70 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
71 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
72 </vertices>
73 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0">
74 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
75 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
76 </vertices>
77 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0">
78 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
79 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
80 </vertices>
81 </regions>
82 </vertices>
83 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
84 <outgoingTransitions target="//@regions.0/@vertices.0"/>
85 </vertices>
86 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State">
87 <outgoingTransitions target="//@regions.0/@vertices.0"/>
88 <regions>
89 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0">
90 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
91 </vertices>
92 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0">
93 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
94 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
95 </vertices>
96 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.1">
97 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.8"/>
98 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/>
99 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.4"/>
100 </vertices>
101 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.1">
102 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/>
103 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.9"/>
104 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/>
105 </vertices>
106 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.2">
107 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
108 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/>
109 </vertices>
110 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.1"/>
111 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1"/>
112 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0">
113 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
114 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/>
115 </vertices>
116 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0">
117 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
118 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
119 </vertices>
120 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1">
121 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
122 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
123 </vertices>
124 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1"/>
125 </regions>
126 </vertices>
127 </regions>
128</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/na_rep/R_2017419.xmi b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/na_rep/R_2017419.xmi
new file mode 100644
index 00000000..369760bf
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/na_rep/R_2017419.xmi
@@ -0,0 +1,138 @@
1<?xml version="1.0" encoding="ASCII"?>
2<hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm">
3 <regions>
4 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.5/@outgoingTransitions.0">
5 <regions>
6 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.3">
7 <outgoingTransitions target="//@regions.0/@vertices.1"/>
8 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
9 </vertices>
10 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.1">
11 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
12 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
13 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
14 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
15 </vertices>
16 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
17 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
18 </vertices>
19 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.3">
20 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
21 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
22 </vertices>
23 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1">
24 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
25 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
26 </vertices>
27 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0">
28 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.6"/>
29 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/>
30 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
31 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
32 </vertices>
33 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0">
34 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
35 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
36 </vertices>
37 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.1">
38 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
39 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
40 </vertices>
41 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.3 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1">
42 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/>
43 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/>
44 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
45 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
46 </vertices>
47 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.1">
48 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
49 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
50 </vertices>
51 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0">
52 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
53 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
54 </vertices>
55 </regions>
56 </vertices>
57 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.1">
58 <outgoingTransitions target="//@regions.0/@vertices.0"/>
59 <regions>
60 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.7/@outgoingTransitions.0">
61 <outgoingTransitions target="//@regions.0/@vertices.3"/>
62 </vertices>
63 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.1">
64 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/>
65 <outgoingTransitions target="//@regions.0/@vertices.3"/>
66 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.5"/>
67 </vertices>
68 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.6/@outgoingTransitions.0"/>
69 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.6/@outgoingTransitions.1">
70 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.7"/>
71 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.6"/>
72 </vertices>
73 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
74 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/>
75 </vertices>
76 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.2">
77 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/>
78 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/>
79 </vertices>
80 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@outgoingTransitions.1">
81 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/>
82 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/>
83 </vertices>
84 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@outgoingTransitions.0">
85 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.0"/>
86 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.0"/>
87 </vertices>
88 </regions>
89 </vertices>
90 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.3/@outgoingTransitions.0">
91 <outgoingTransitions target="//@regions.0/@vertices.0"/>
92 <regions>
93 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1">
94 <outgoingTransitions target="//@regions.0/@vertices.4"/>
95 </vertices>
96 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.1">
97 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
98 <outgoingTransitions target="//@regions.0/@vertices.4"/>
99 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/>
100 </vertices>
101 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0"/>
102 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.1">
103 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/>
104 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/>
105 </vertices>
106 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
107 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
108 </vertices>
109 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.2">
110 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
111 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
112 </vertices>
113 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0">
114 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
115 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
116 </vertices>
117 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1">
118 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
119 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
120 </vertices>
121 </regions>
122 </vertices>
123 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.1">
124 <outgoingTransitions target="//@regions.0/@vertices.2"/>
125 <outgoingTransitions target="//@regions.0/@vertices.2"/>
126 </vertices>
127 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1">
128 <outgoingTransitions target="//@regions.0/@vertices.1"/>
129 <outgoingTransitions target="//@regions.0/@vertices.1"/>
130 </vertices>
131 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@outgoingTransitions.0">
132 <outgoingTransitions target="//@regions.0/@vertices.0"/>
133 </vertices>
134 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
135 <outgoingTransitions target="//@regions.0/@vertices.5"/>
136 </vertices>
137 </regions>
138</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/out_d_rep/R_2015225.xmi b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/out_d_rep/R_2015225.xmi
new file mode 100644
index 00000000..21fee5a9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/data/Yakinduum/out_d_rep/R_2015225.xmi
@@ -0,0 +1,145 @@
1<?xml version="1.0" encoding="ASCII"?>
2<hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm">
3 <regions>
4 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
5 <outgoingTransitions target="//@regions.0/@vertices.1"/>
6 </vertices>
7 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.3/@outgoingTransitions.0">
8 <outgoingTransitions target="//@regions.0/@vertices.2"/>
9 <outgoingTransitions target="//@regions.0/@vertices.3"/>
10 </vertices>
11 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0">
12 <outgoingTransitions target="//@regions.0/@vertices.1"/>
13 <regions>
14 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.2">
15 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
16 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
17 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
18 </vertices>
19 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.0">
20 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.9"/>
21 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
22 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/>
23 </vertices>
24 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.1">
25 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.8"/>
26 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
27 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/>
28 </vertices>
29 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.1">
30 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/>
31 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/>
32 <outgoingTransitions target="//@regions.0/@vertices.1"/>
33 </vertices>
34 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
35 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
36 </vertices>
37 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1">
38 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
39 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
40 </vertices>
41 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0">
42 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
43 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
44 </vertices>
45 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.2">
46 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
47 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
48 </vertices>
49 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0">
50 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
51 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
52 </vertices>
53 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0">
54 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
55 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
56 </vertices>
57 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.2">
58 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
59 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
60 </vertices>
61 </regions>
62 </vertices>
63 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.0">
64 <outgoingTransitions target="//@regions.0/@vertices.1"/>
65 <outgoingTransitions target="//@regions.0/@vertices.5"/>
66 <regions>
67 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
68 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.1"/>
69 </vertices>
70 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.0/@outgoingTransitions.0">
71 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
72 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/>
73 </vertices>
74 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.1">
75 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.4"/>
76 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.6"/>
77 </vertices>
78 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.4/@outgoingTransitions.1">
79 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.8"/>
80 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.5"/>
81 </vertices>
82 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.0">
83 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/>
84 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/>
85 </vertices>
86 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.1">
87 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
88 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
89 </vertices>
90 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.1">
91 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/>
92 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.7"/>
93 </vertices>
94 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.6/@outgoingTransitions.1"/>
95 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.0">
96 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/>
97 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.9"/>
98 </vertices>
99 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.5/@outgoingTransitions.2"/>
100 </regions>
101 </vertices>
102 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.0">
103 <outgoingTransitions target="//@regions.0/@vertices.6"/>
104 <regions>
105 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
106 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.1"/>
107 </vertices>
108 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.0/@outgoingTransitions.0">
109 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.3"/>
110 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.2"/>
111 </vertices>
112 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.4/@regions.0/@vertices.1/@outgoingTransitions.1">
113 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.4"/>
114 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.8"/>
115 </vertices>
116 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.4/@regions.0/@vertices.6/@outgoingTransitions.0">
117 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.9"/>
118 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.6"/>
119 </vertices>
120 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.2/@outgoingTransitions.0">
121 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.2"/>
122 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.5"/>
123 </vertices>
124 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.2"/>
125 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.3/@outgoingTransitions.1">
126 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.3"/>
127 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.7"/>
128 </vertices>
129 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.1"/>
130 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.2/@outgoingTransitions.1"/>
131 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.3/@outgoingTransitions.0"/>
132 </regions>
133 </vertices>
134 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.1">
135 <outgoingTransitions target="//@regions.0/@vertices.4"/>
136 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.7"/>
137 <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.9"/>
138 </vertices>
139 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@outgoingTransitions.0">
140 <outgoingTransitions target="//@regions.0/@vertices.3"/>
141 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.7"/>
142 <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.5"/>
143 </vertices>
144 </regions>
145</hu.bme.mit.inf.yakindumm:Statechart>
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 1745bc35..58ac7aea 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/Fake_Random_Random/", "outputs/", 1); 38 val human = new RWInformation("inputs/config7/", "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 45986ecf..cdce185a 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
@@ -1,5 +1,6 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app 1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app
2 2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.EuclideanDistance
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistance 4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistance
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance 5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData 6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData
@@ -8,6 +9,7 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric 9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric
9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric 10import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric
10import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric 11import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric
12import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree
11import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor.LinearModel 13import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor.LinearModel
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
13import java.util.ArrayList 15import java.util.ArrayList
@@ -21,6 +23,7 @@ class PartialInterpretationMetricDistance {
21 23
22 var KSDistance ks; 24 var KSDistance ks;
23 var JSDistance js; 25 var JSDistance js;
26 var EuclideanDistance ed;
24 var Map<Object, StateData> stateAndHistory; 27 var Map<Object, StateData> stateAndHistory;
25 var OLSMultipleLinearRegression regression; 28 var OLSMultipleLinearRegression regression;
26 List<StateData> samples; 29 List<StateData> samples;
@@ -32,6 +35,7 @@ class PartialInterpretationMetricDistance {
32 new(){ 35 new(){
33 ks = new KSDistance(Domain.Yakinduum); 36 ks = new KSDistance(Domain.Yakinduum);
34 js = new JSDistance(Domain.Yakinduum); 37 js = new JSDistance(Domain.Yakinduum);
38 ed = new EuclideanDistance(Domain.Yakinduum);
35 regression = new OLSMultipleLinearRegression(); 39 regression = new OLSMultipleLinearRegression();
36 regression.noIntercept = false; 40 regression.noIntercept = false;
37 stateAndHistory = new HashMap<Object, StateData>(); 41 stateAndHistory = new HashMap<Object, StateData>();
@@ -44,6 +48,7 @@ class PartialInterpretationMetricDistance {
44 metrics.add(new OutDegreeMetric()); 48 metrics.add(new OutDegreeMetric());
45 metrics.add(new NodeActivityMetric()); 49 metrics.add(new NodeActivityMetric());
46 metrics.add(new MultiplexParticipationCoefficientMetric()); 50 metrics.add(new MultiplexParticipationCoefficientMetric());
51 metrics.add(new TypedOutDegree());
47 52
48 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null); 53 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null);
49 var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); 54 var metricSamples = metricCalculator.evaluateAllMetricsToSamples();
@@ -51,6 +56,24 @@ class PartialInterpretationMetricDistance {
51 var mpc = ks.mpcDistance(metricSamples.mpcSamples); 56 var mpc = ks.mpcDistance(metricSamples.mpcSamples);
52 var na = ks.naDistance(metricSamples.naSamples); 57 var na = ks.naDistance(metricSamples.naSamples);
53 var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples); 58 var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples);
59 var typedOutDegree = ks.typedOutDegreeDistance(metricSamples.typedOutDegreeSamples);
60
61 return new MetricDistanceGroup(mpc, na, outDegree, typedOutDegree);
62 }
63
64 def MetricDistanceGroup calculateMetricEuclidean(PartialInterpretation partial){
65 val metrics = new ArrayList<Metric>();
66 metrics.add(new OutDegreeMetric());
67 metrics.add(new NodeActivityMetric());
68 metrics.add(new MultiplexParticipationCoefficientMetric());
69 metrics.add(new TypedOutDegree());
70
71 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null);
72 var metricSamples = metricCalculator.evaluateAllMetricsToSamples();
73
74 var mpc = ed.mpcDistance(metricSamples.mpcSamples);
75 var na = ed.naDistance(metricSamples.naSamples);
76 var outDegree = ed.outDegreeDistance(metricSamples.outDegreeSamples);
54 77
55 return new MetricDistanceGroup(mpc, na, outDegree); 78 return new MetricDistanceGroup(mpc, na, outDegree);
56 } 79 }
@@ -132,14 +155,13 @@ class PartialInterpretationMetricDistance {
132 } 155 }
133 156
134 def double[] calculateFeature(int step, int violations){ 157 def double[] calculateFeature(int step, int violations){
135 var features = newDoubleArrayOfSize(5); 158 var features = newDoubleArrayOfSize(2);
136 //constant term 159 //constant term
137 features.set(0, 1); 160 features.set(0, 1);
138 161
139 features.set(1, 1.0 / step); 162 features.set(1, 1.0 / step);
140 features.set(2, violations); 163// features.set(2, violations);
141 features.set(3, Math.pow(violations, 2)); 164// features.set(3, Math.pow(violations, 2));
142 features.set(4, Math.pow(violations, 0.5));
143 165
144 return features; 166 return features;
145 } 167 }
@@ -149,6 +171,14 @@ class MetricDistanceGroup{
149 var double mpcDistance; 171 var double mpcDistance;
150 var double naDistance; 172 var double naDistance;
151 var double outDegreeDistance; 173 var double outDegreeDistance;
174 var double typedOutDegreeDistance;
175
176 new(double mpcDistance, double naDistance, double outDegreeDistance, double typedOutDegreeDistance){
177 this.mpcDistance = mpcDistance;
178 this.naDistance = naDistance;
179 this.outDegreeDistance = outDegreeDistance;
180 this.typedOutDegreeDistance = typedOutDegreeDistance;
181 }
152 182
153 new(double mpcDistance, double naDistance, double outDegreeDistance){ 183 new(double mpcDistance, double naDistance, double outDegreeDistance){
154 this.mpcDistance = mpcDistance; 184 this.mpcDistance = mpcDistance;
@@ -156,6 +186,10 @@ class MetricDistanceGroup{
156 this.outDegreeDistance = outDegreeDistance; 186 this.outDegreeDistance = outDegreeDistance;
157 } 187 }
158 188
189 def double getTypedOutDegreeDistance(){
190 return this.typedOutDegreeDistance;
191 }
192
159 def double getMPCDistance(){ 193 def double getMPCDistance(){
160 return this.mpcDistance 194 return this.mpcDistance
161 } 195 }
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend
index 33d10fa3..613f0f43 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend
@@ -1,9 +1,25 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance 1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance
2 2
3import java.text.DecimalFormat
4import java.util.HashMap
5import java.util.List
3import org.eclipse.xtend.lib.annotations.Accessors 6import org.eclipse.xtend.lib.annotations.Accessors
4 7
5class CostDistance { 8abstract class CostDistance {
6 9 def abstract double naDistance(List<Double> samples);
10 def abstract double mpcDistance(List<Double> samples);
11 def abstract double outDegreeDistance(List<Double> samples);
12
13 def protected pmfFromSamples(double[] samples, DecimalFormat formatter){
14 var length = samples.length;
15 var pmfMap = new HashMap<String, Double>();
16
17 for(sample : samples){
18 pmfMap.put(formatter.format(sample), pmfMap.getOrDefault(formatter.format(sample), 0.0) + 1.0 / length);
19 }
20
21 return pmfMap;
22 }
7} 23}
8 24
9class StateData{ 25class StateData{
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.xtend
new file mode 100644
index 00000000..b945d97b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.xtend
@@ -0,0 +1,73 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance
2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
6import com.google.common.collect.Sets
7import java.text.DecimalFormat
8import java.util.ArrayList
9import java.util.HashMap
10import java.util.List
11import java.util.Map
12import java.util.Set
13
14class EuclideanDistance extends CostDistance{
15 var MetricSampleGroup g;
16 var HashMap<String, Double> mpcPMF;
17 var HashMap<String, Double> naPMF;
18 var HashMap<String, Double> outDegreePMF;
19 var DecimalFormat formatter;
20
21 new(Domain d){
22 var metrics = RepMetricsReader.read(d);
23 this.g = metrics;
24
25 var mpcSamples = metrics.mpcSamples;
26 var naSamples = metrics.naSamples.stream.mapToDouble([it]).toArray();
27 var outDegreeSamples = metrics.outDegreeSamples.stream.mapToDouble([it]).toArray();
28
29 //needs to format the number to string avoid precision issue
30 formatter = new DecimalFormat("#0.00000");
31
32 mpcPMF = pmfFromSamples(mpcSamples, formatter);
33 naPMF = pmfFromSamples(naSamples, formatter);
34 outDegreePMF = pmfFromSamples(outDegreeSamples, formatter);
35 }
36
37 override naDistance(List<Double> samples) {
38 var pmfMap = pmfFromSamples(samples, formatter);
39 return euclideanDistance(pmfMap, naPMF);
40 }
41
42 override mpcDistance(List<Double> samples) {
43 var pmfMap = pmfFromSamples(samples, formatter);
44 return euclideanDistance(pmfMap, mpcPMF);
45 }
46
47 override outDegreeDistance(List<Double> samples) {
48 var pmfMap = pmfFromSamples(samples, formatter);
49 return euclideanDistance(pmfMap, outDegreePMF);
50 }
51
52
53 def private euclideanDistance(HashMap<String, Double> pmf1, HashMap<String, Double> pmf2){
54 var keys = Sets.union(pmf1.keySet(), pmf2.keySet());
55 var pmfList1 = pmfMapToList(pmf1, keys);
56 var pmfList2 = pmfMapToList(pmf2, keys);
57 var distance = 0.0;
58 for(var i = 0; i < pmfList1.size(); i++){
59 distance += Math.pow(pmfList1.get(i) + pmfList2.get(i), 2);
60 }
61
62 return Math.sqrt(distance);
63 }
64
65 def private pmfMapToList(Map<String, Double> map, Set<String> keys){
66 var list = new ArrayList<Double>();
67 for(key : keys){
68 var value = map.getOrDefault(key, 0.0);
69 list.add(value);
70 }
71 return list;
72 }
73} \ 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/distance/JSDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.xtend
index ced9eadb..df65b81f 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.xtend
@@ -7,7 +7,7 @@ import java.text.DecimalFormat
7import java.util.HashMap 7import java.util.HashMap
8import java.util.List 8import java.util.List
9 9
10class JSDistance { 10class JSDistance extends CostDistance {
11 var HashMap<String, Double> mpcPMF; 11 var HashMap<String, Double> mpcPMF;
12 var HashMap<String, Double> naPMF; 12 var HashMap<String, Double> naPMF;
13 var HashMap<String, Double> outDegreePMF; 13 var HashMap<String, Double> outDegreePMF;
@@ -27,17 +27,6 @@ class JSDistance {
27 outDegreePMF = pmfFromSamples(outDegreeSamples, formatter); 27 outDegreePMF = pmfFromSamples(outDegreeSamples, formatter);
28 } 28 }
29 29
30 def private pmfFromSamples(double[] samples, DecimalFormat formatter){
31 var length = samples.length;
32 var pmfMap = new HashMap<String, Double>();
33
34 for(sample : samples){
35 pmfMap.put(formatter.format(sample), pmfMap.getOrDefault(formatter.format(sample), 0.0) + 1.0 / length);
36 }
37
38 return pmfMap;
39 }
40
41 def private combinePMF(HashMap<String, Double> pmf1, HashMap<String, Double> pmf2){ 30 def private combinePMF(HashMap<String, Double> pmf1, HashMap<String, Double> pmf2){
42 var pmfMap = new HashMap<String, Double>(); 31 var pmfMap = new HashMap<String, Double>();
43 32
@@ -68,7 +57,7 @@ class JSDistance {
68 return distance; 57 return distance;
69 } 58 }
70 59
71 def double mpcDistance(List<Double> samples){ 60 override double mpcDistance(List<Double> samples){
72 // map list to array 61 // map list to array
73 var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter); 62 var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter);
74 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 63 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1
@@ -76,7 +65,7 @@ class JSDistance {
76 return jsDivergence(map, mpcPMF); 65 return jsDivergence(map, mpcPMF);
77 } 66 }
78 67
79 def double naDistance(List<Double> samples){ 68 override double naDistance(List<Double> samples){
80 // map list to array 69 // map list to array
81 var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter); 70 var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter);
82 71
@@ -85,7 +74,7 @@ class JSDistance {
85 return jsDivergence(map, naPMF); 74 return jsDivergence(map, naPMF);
86 } 75 }
87 76
88 def double outDegreeDistance(List<Double> samples){ 77 override double outDegreeDistance(List<Double> samples){
89 // map list to array 78 // map list to array
90 var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter); 79 var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter);
91 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 80 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend
index 58e0a8a3..86f5f23c 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend
@@ -2,46 +2,65 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance
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.io.RepMetricsReader 4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
6import java.util.HashMap
7import java.util.HashSet
5import java.util.List 8import java.util.List
9import java.util.Set
6import org.apache.commons.math3.stat.inference.KolmogorovSmirnovTest 10import org.apache.commons.math3.stat.inference.KolmogorovSmirnovTest
7 11
8class KSDistance { 12class KSDistance extends CostDistance {
9 var static ksTester = new KolmogorovSmirnovTest(); 13 var static ksTester = new KolmogorovSmirnovTest();
10 var double[] mpcSamples; 14 var MetricSampleGroup g;
11 var double[] naSamples;
12 var double[] outDegreeSamples;
13
14 new(Domain d){ 15 new(Domain d){
15 var metrics = RepMetricsReader.read(d); 16 var metrics = RepMetricsReader.read(d);
16 mpcSamples = metrics.mpcSamples; 17 this.g = metrics;
17 naSamples = metrics.naSamples.stream.mapToDouble([it]).toArray();
18 outDegreeSamples = metrics.outDegreeSamples.stream.mapToDouble([it]).toArray();
19 } 18 }
20 19
21 def double mpcDistance(List<Double> samples){ 20 override double mpcDistance(List<Double> samples){
22 // map list to array
23 var arr = samples.stream.mapToDouble([it]).toArray();
24
25 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 21 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1
26 if(arr.size < 2) return 1; 22 if(samples.size < 2) return 1;
27 return ksTester.kolmogorovSmirnovStatistic(mpcSamples, arr); 23 return ksTester.kolmogorovSmirnovStatistic(g.mpcSamples, samples);
28 } 24 }
29 25
30 def double naDistance(List<Double> samples){ 26 override double naDistance(List<Double> samples){
31 // map list to array
32 var arr = samples.stream.mapToDouble([it]).toArray();
33
34 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 27 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1
35 if(arr.size < 2) return 1; 28 if(samples.size < 2) return 1;
36 return ksTester.kolmogorovSmirnovStatistic(naSamples as double[], arr); 29 return ksTester.kolmogorovSmirnovStatistic(g.naSamples as double[], samples);
37 } 30 }
38 31
39 def double outDegreeDistance(List<Double> samples){ 32 override double outDegreeDistance(List<Double> samples){
33 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1
34 if(samples.size < 2) return 1;
35 return ksTester.kolmogorovSmirnovStatistic(g.outDegreeSamples, samples);
36 }
37
38 def double typedOutDegreeDistance(HashMap<String, List<Integer>> map){
39 var value = 0.0;
40 // map list to array 40 // map list to array
41 var arr = samples.stream.mapToDouble([it]).toArray(); 41 val keySet = new HashSet<String>(map.keySet);
42 keySet.addAll(g.typedOutDegreeSamples.keySet);
43 for(key : keySet){
44 if(!map.containsKey(key) ){
45 value += 1;
46 }else if(!g.typedOutDegreeSamples.containsKey(key)){
47 value += map.get(key).size * 100;
48 }else{
49 var double[] rep = g.typedOutDegreeSamples.get(key).stream().mapToDouble([it|it]).toArray();
50 var double[] ins = map.get(key).stream().mapToDouble([it|it]).toArray();
51 if((rep.size < 2 || ins.size < 2) ){
52 if(rep.size < 2 && rep.containsAll(ins)){
53 value += 0;
54 }else{
55 value += 1;
56 }
57 }else if(rep.size >= 2 && ins.size >= 2){
58 value += ksTester.kolmogorovSmirnovStatistic(rep, ins);
59 }
60 }
61 }
42 62
43 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 63
44 if(arr.size < 2) return 1; 64 return value;
45 return ksTester.kolmogorovSmirnovStatistic(outDegreeSamples, arr);
46 } 65 }
47} \ No newline at end of file 66} \ 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 5c161f4b..b4c57bd8 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
@@ -2,13 +2,14 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph
2 2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric 3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
4import java.util.ArrayList 4import java.util.ArrayList
5import java.util.HashSet
5import java.util.List 6import java.util.List
6import org.eclipse.emf.common.util.EList 7import org.eclipse.emf.common.util.EList
7import org.eclipse.emf.ecore.EObject 8import org.eclipse.emf.ecore.EObject
8import org.eclipse.emf.ecore.EReference 9import org.eclipse.emf.ecore.EReference
9 10
10class EMFGraph extends Graph{ 11class EMFGraph extends Graph{
11 def void init (EObject root, List<Metric> metrics, String name, List<String> referenceTypes){ 12 def void init (EObject root, List<Metric> metrics, String name, List<EReference> referenceTypes){
12 val otherContents = root.eAllContents.toList(); 13 val otherContents = root.eAllContents.toList();
13 otherContents.add(root); 14 otherContents.add(root);
14 init(otherContents, metrics, name, referenceTypes); 15 init(otherContents, metrics, name, referenceTypes);
@@ -21,13 +22,15 @@ class EMFGraph extends Graph{
21 * @param name: name of the instance model 22 * @param name: name of the instance model
22 * @param ReferenceTypes: reference types defined in the meta model 23 * @param ReferenceTypes: reference types defined in the meta model
23 */ 24 */
24 def void init(List<EObject> objects, List<Metric> metrics, String name, List<String> referenceTypes){ 25 def void init(List<EObject> objects, List<Metric> metrics, String name, List<EReference> referenceTypes){
25 objects.forEach[it| 26 objects.forEach[it|
26 statistic.addNode(it); 27 var types = new HashSet(it.eClass.EAllSuperTypes.map[it|it.name]);
28 types.add(it.eClass.name);
29 statistic.addNodeWithAllTypes(it, types);
27 ] 30 ]
28 31
29 referenceTypes.forEach[it| 32 referenceTypes.forEach[it|
30 statistic.addType(it); 33 statistic.addEdgeType(it.name);
31 ]; 34 ];
32 35
33 objects.forEach[source| 36 objects.forEach[source|
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend
index cf4aedba..6b400b0d 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend
@@ -2,11 +2,15 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph
2 2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric 3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup 4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
5import java.util.ArrayList
6import java.util.List
7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric 5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric 6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric
9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric 7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree
9import java.util.ArrayList
10import java.util.HashMap
11import java.util.List
12import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric
13import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric
10 14
11abstract class Graph { 15abstract class Graph {
12 16
@@ -42,11 +46,17 @@ abstract class Graph {
42 46
43 for(metric : this.metrics){ 47 for(metric : this.metrics){
44 if(metric instanceof MultiplexParticipationCoefficientMetric){ 48 if(metric instanceof MultiplexParticipationCoefficientMetric){
45 sample.mpcSamples = metric.evaluateSamples(this.statistic); 49 sample.mpcSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>;
46 }else if(metric instanceof NodeActivityMetric){ 50 }else if(metric instanceof NodeActivityMetric){
47 sample.naSamples = metric.evaluateSamples(this.statistic); 51 sample.naSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>;
48 }else if(metric instanceof OutDegreeMetric){ 52 }else if(metric instanceof OutDegreeMetric){
49 sample.outDegreeSamples = metric.evaluateSamples(this.statistic); 53 sample.outDegreeSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>;
54 }else if(metric instanceof TypedOutDegree){
55 sample.typedOutDegreeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, List<Integer>>;
56 }else if(metric instanceof NodeTypeMetric){
57 sample.nodeTypeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, Double>;
58 }else if (metric instanceof EdgeTypeMetric){
59 sample.edgeTypeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, Double>;
50 } 60 }
51 } 61 }
52 62
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 7ed58094..9b8fd0e3 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
@@ -5,20 +5,22 @@ import com.google.common.collect.Multimap
5import java.util.HashMap 5import java.util.HashMap
6import java.util.HashSet 6import java.util.HashSet
7import java.util.List 7import java.util.List
8import java.util.Map
9import java.util.Set
8import org.eclipse.emf.ecore.EObject 10import org.eclipse.emf.ecore.EObject
9 11
10class GraphStatistic { 12class GraphStatistic {
11 val incomingEdges = new HashMap<String, Multimap<EObject, EObject>>; 13 val incomingEdges = new HashMap<String, Multimap<EObject, EObject>>;
12 val outcomingEdges = new HashMap<String, Multimap<EObject, EObject>>; 14 val outcomingEdges = new HashMap<String, Multimap<EObject, EObject>>;
13 15
14 val edgeTypes = new HashSet<String>(); 16 val edgeTypes = new HashSet<String>();
15 val nodes = new HashSet<EObject>(); 17 val nodeToType = new HashMap<EObject, Set<String>>();
16 18
17 /** 19 /**
18 * Add an edge type to to the graph 20 * Add an edge type to to the graph
19 * @param type: type to add 21 * @param type: type to add
20 */ 22 */
21 def void addType(String type){ 23 def void addEdgeType(String type){
22 if(edgeTypes.contains(type)){ 24 if(edgeTypes.contains(type)){
23 return; 25 return;
24 } 26 }
@@ -28,15 +30,20 @@ class GraphStatistic {
28 } 30 }
29 31
30 /** 32 /**
31 * Add a node to he graph 33 * Add a node to the graph with one type in its type hierarchy
32 * @param node: node to add 34 * @param node: node to add
33 */ 35 */
34 def void addNode(EObject n){ 36 def void addNodeWithType(EObject n, String Type){
35 if(nodes.contains(n)){ 37 var types = nodeToType.getOrDefault(n, new HashSet<String>());
36 return; 38 types.add(Type);
37 } 39 nodeToType.put(n, types);
38 40 }
39 nodes.add(n); 41
42 /**
43 * Add a node to the graph with all types in its type hierarchy
44 */
45 def void addNodeWithAllTypes(EObject n, Set<String> types){
46 nodeToType.put(n, types);
40 } 47 }
41 48
42 /** 49 /**
@@ -82,7 +89,7 @@ class GraphStatistic {
82 } 89 }
83 90
84 /** 91 /**
85 * calculate the number of edge types for a given degree. 92 * calculate the number of edge types for a given node.
86 */ 93 */
87 def int numOfEdgeTypes(EObject o){ 94 def int numOfEdgeTypes(EObject o){
88 var count = 0; 95 var count = 0;
@@ -100,8 +107,17 @@ class GraphStatistic {
100 return edgeTypes.toList(); 107 return edgeTypes.toList();
101 } 108 }
102 109
110 def Map<EObject, Set<String>> getNodeToTypesMap(){
111 return nodeToType;
112 }
113
103 def List<EObject> getAllNodes(){ 114 def List<EObject> getAllNodes(){
104 return nodes.toList(); 115 return nodeToType.keySet().toList();
105 } 116 }
117
118 def HashMap<String, Multimap<EObject, EObject>> getOutgoingEdges(){
119 return outcomingEdges;
120 }
121
106} 122}
107 123
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 14337ab0..91d7c5f9 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
@@ -4,11 +4,13 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
5import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink 5import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink
6import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 6import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
7import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.impl.BooleanElementImpl 7import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.impl.PartialComplexTypeInterpretationImpl
8import java.util.ArrayList 8import java.util.ArrayList
9import java.util.List 9import java.util.List
10 10
11class PartialInterpretationGraph extends Graph{ 11class PartialInterpretationGraph extends Graph{
12 val typeToExclude = "undefinedpart";
13 val classSuffix = " class";
12 14
13 /** 15 /**
14 * Define a new PartialInterpretationGraph by parse every element from a PartialInterpretation 16 * Define a new PartialInterpretationGraph by parse every element from a PartialInterpretation
@@ -16,17 +18,21 @@ class PartialInterpretationGraph extends Graph{
16 new(PartialInterpretation partial, List<Metric> metrics, String name){ 18 new(PartialInterpretation partial, List<Metric> metrics, String name){
17 //the edge types are defined in terms of RelationDeclaration 19 //the edge types are defined in terms of RelationDeclaration
18 partial.problem.relations.filter(RelationDeclaration).forEach[ 20 partial.problem.relations.filter(RelationDeclaration).forEach[
19 this.statistic.addType(it.name); 21 //only need the name of the reference type (remove everything with and after "reference")
22 this.statistic.addEdgeType(it.name.split(" ").get(0));
20 ] 23 ]
21 // add all elements 24 // add all elements
22 val elements = getElements(partial); 25 val typeInterpretations = getTypes(partial);
23 for(element : elements){ 26 for(type : typeInterpretations){
24 statistic.addNode(element) 27 var typeName = type.interpretationOf.name.replace(classSuffix, '');
28 for(node : type.elements){
29 this.statistic.addNodeWithType(node, typeName);
30 }
25 } 31 }
26 32
27 for(relationInterpretation : partial.partialrelationinterpretation) { 33 for(relationInterpretation : partial.partialrelationinterpretation) {
28 val type = relationInterpretation.interpretationOf.name 34 //only need the name of the reference type (remove everything with and after "reference")
29 35 val type = relationInterpretation.interpretationOf.name.split(" ").get(0);
30 for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){ 36 for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){
31 statistic.addEdge(edge.param1, edge.param2, type); 37 statistic.addEdge(edge.param1, edge.param2, type);
32 } 38 }
@@ -62,8 +68,11 @@ class PartialInterpretationGraph extends Graph{
62 output.add(stateInfo); 68 output.add(stateInfo);
63 } 69 }
64 70
65 private def getElements(PartialInterpretation partial){ 71 private def getTypes(PartialInterpretation partial){
66 return partial.newElements.filter[!(it instanceof BooleanElementImpl)] + partial.problem.elements; 72 //only the complex type interpretations are the ones defined in meta model
73 //do not care about undefined types as it will be included in the class type
74 return partial.partialtypeinterpratation.filter(PartialComplexTypeInterpretationImpl)
75 .filter[!it.interpretationOf.name.toLowerCase.contains(typeToExclude)];
67 } 76 }
68 77
69 override getStatistic() { 78 override getStatistic() {
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 fc56e142..8f1feb9d 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
@@ -17,10 +17,18 @@ import org.eclipse.emf.ecore.resource.Resource
17import org.eclipse.emf.ecore.resource.ResourceSet 17import org.eclipse.emf.ecore.resource.ResourceSet
18import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl 18import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
19import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl 19import 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
20 24
21class GraphReader{ 25class GraphReader{
22 val ResourceSet resSet = new ResourceSetImpl(); 26 val ResourceSet resSet = new ResourceSetImpl();
23 val referenceTypes = new ArrayList<String>(); 27 val referenceTypes = new ArrayList<EReference>();
28
29 def static void main(String[] args){
30 var g = new GraphReader(YakindummPackage.eINSTANCE);
31 }
24 32
25 new(EPackage metaModel) { 33 new(EPackage metaModel) {
26 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl) 34 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl)
@@ -28,7 +36,7 @@ class GraphReader{
28 //find all reference types in the meta model 36 //find all reference types in the meta model
29 metaModel.eAllContents.forEach[ 37 metaModel.eAllContents.forEach[
30 if(it instanceof EReference){ 38 if(it instanceof EReference){
31 referenceTypes.add(it.name); 39 referenceTypes.add(it);
32 } 40 }
33 ] 41 ]
34 } 42 }
@@ -45,7 +53,10 @@ class GraphReader{
45 metrics.add(new OutDegreeMetric()); 53 metrics.add(new OutDegreeMetric());
46 metrics.add(new NodeActivityMetric()); 54 metrics.add(new NodeActivityMetric());
47 metrics.add(new MultiplexParticipationCoefficientMetric()); 55 metrics.add(new MultiplexParticipationCoefficientMetric());
48 56 metrics.add(new TypedOutDegree());
57 metrics.add(new NodeTypeMetric());
58 metrics.add(new EdgeTypeMetric());
59
49 //check all files in the directory with xmi 60 //check all files in the directory with xmi
50 for(String name : dir.list.filter[it| it.endsWith(".xmi")]){ 61 for(String name : dir.list.filter[it| it.endsWith(".xmi")]){
51 val file = new File(name); 62 val file = new File(name);
@@ -71,7 +82,7 @@ class GraphReader{
71 } 82 }
72 } catch(Exception e) { 83 } catch(Exception e) {
73 e.printStackTrace(); 84 e.printStackTrace();
74 throw new FileNotFoundException(getURI(path, name).toString + "reason: " + e.message) 85 throw new Exception(getURI(path, name).toString());
75 } 86 }
76 } 87 }
77 88
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
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.xtend
new file mode 100644
index 00000000..0c0fe3b8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.xtend
@@ -0,0 +1,41 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics
2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic
4import java.util.ArrayList
5import java.util.HashMap
6
7class EdgeTypeMetric extends Metric {
8
9 override evaluate(GraphStatistic g) {
10 var map = evaluateSamples(g) as HashMap<String, Double>;
11 var output = new ArrayList<String[]>();
12 output.add(newArrayList('Edge Type'));
13
14 var keys = map.keySet;
15 var values = newArrayList();
16 for(key : keys){
17 values.add(map.get(key)+'');
18 }
19
20 output.add(keys);
21 output.add(values);
22
23 return output;
24 }
25
26 override evaluateSamples(GraphStatistic g) {
27 val map = new HashMap<String, Double>();
28 var outgoingEdges = g.outgoingEdges;
29
30 //get the total number of edges
31 val edgeCount = outgoingEdges.values.fold(0, [r, t| r + t.asMap.values.fold(0, [r1, t1| r1 + t1.size])]) as double;
32 outgoingEdges.forEach[k, v|
33 var value = v.asMap.values.fold(0, [r, t| r + t.size]) / edgeCount;
34 map.put(k, value);
35 ]
36
37
38 return map;
39 }
40
41} \ 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/metrics/Metric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.xtend
index 38ef72f2..cb242a5b 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.xtend
@@ -4,5 +4,5 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatis
4 4
5abstract class Metric { 5abstract class Metric {
6 abstract def String[][] evaluate(GraphStatistic g); 6 abstract def String[][] evaluate(GraphStatistic g);
7 abstract def double[] evaluateSamples(GraphStatistic g); 7 abstract def Object evaluateSamples(GraphStatistic g);
8} \ No newline at end of file 8} \ 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/metrics/MetricSampleGroup.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.xtend
index 8cd3daee..4e25bb86 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.xtend
@@ -1,9 +1,13 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics 1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics
2 2
3import java.util.HashMap
3import java.util.List 4import java.util.List
4 5
5class MetricSampleGroup{ 6class MetricSampleGroup{
6 public var List<Double> mpcSamples; 7 public var List<Double> mpcSamples;
7 public var List<Double> naSamples; 8 public var List<Double> naSamples;
8 public var List<Double> outDegreeSamples; 9 public var List<Double> outDegreeSamples;
10 public var HashMap<String, List<Integer>> typedOutDegreeSamples;
11 public var HashMap<String, Double> nodeTypeSamples;
12 public var HashMap<String, Double> edgeTypeSamples;
9} \ No newline at end of file 13} \ 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/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
new file mode 100644
index 00000000..94eaa445
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend
@@ -0,0 +1,44 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics
2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic
4import java.util.ArrayList
5import java.util.HashMap
6
7class NodeTypeMetric extends Metric {
8
9
10 override evaluate(GraphStatistic g) {
11 var map = evaluateSamples(g) as HashMap<String, Double>;
12 var output = new ArrayList<String[]>();
13 output.add(newArrayList('Node Type'));
14 var keys = map.keySet;
15 var values = newArrayList();
16
17 for(key : keys){
18 values.add(map.get(key)+'');
19 }
20
21 output.add(keys);
22 output.add(values);
23
24 return output;
25 }
26
27 override evaluateSamples(GraphStatistic g) {
28 var map = new HashMap<String, Double>();
29 var nodes = g.allNodes;
30 var single = 1.0 / nodes.size();
31 for(node : nodes){
32 var classes = new ArrayList(node.eClass.ESuperTypes);
33 classes.add(node.eClass);
34
35 for(cl : classes){
36 var value = map.getOrDefault(cl.name, 0.0);
37 map.put(cl.name, value + single);
38 }
39 }
40
41 return map;
42 }
43
44} \ 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/metrics/TypedOutDegree.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.xtend
new file mode 100644
index 00000000..3b5dbcc5
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.xtend
@@ -0,0 +1,60 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics
2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic
4import java.util.ArrayList
5import java.util.HashMap
6import java.util.List
7
8class TypedOutDegree extends Metric{
9
10 def private calculateMetric(GraphStatistic g){
11 var outgoingEdges = g.outgoingEdges;
12 //record metric as a list of samples for each node type / edge type pair
13 var metric = new HashMap<String, List<Integer>>();
14 var nodeToTypes = g.nodeToTypesMap;
15
16 for(edgeType : outgoingEdges.keySet){
17 for(node : outgoingEdges.get(edgeType).keySet){
18 //find all classes the node belongs to
19 var classes = nodeToTypes.get(node);
20 for(cl : classes){
21 // get or create entry for node type / edge type pair
22 var key = cl + ' ' + edgeType;
23 var typeCount = metric.get(key);
24 if(typeCount === null){
25 typeCount = new ArrayList<Integer>();
26 metric.put(key, typeCount);
27 }
28
29 // get or create sample list
30 typeCount.add(outgoingEdges.get(edgeType).get(node).size);
31 }
32 }
33 }
34
35 return metric;
36 }
37
38 override evaluate(GraphStatistic g) {
39 var metric = calculateMetric(g);
40 var output = new ArrayList<String[]>();
41
42 output.add(newArrayList('Typed Out Degree'));
43 for(key : metric.keySet){
44 var samples = metric.get(key);
45 var String[] outputForOnePair = newArrayOfSize(samples.size+1);
46 outputForOnePair.set(0, key);
47 for(var i = 0; i < samples.size; i++){
48 outputForOnePair.set(i+1, samples.get(i)+'');
49 }
50 output.add(outputForOnePair);
51 }
52
53 return output;
54 }
55
56 override evaluateSamples(GraphStatistic g) {
57 return calculateMetric(g);
58 }
59
60} \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..4f8e97e2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..7c2b5752
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..3cf659b2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png
new file mode 100644
index 00000000..50b882da
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png
new file mode 100644
index 00000000..4e9a68d5
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png
new file mode 100644
index 00000000..bfa4b537
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
new file mode 100644
index 00000000..33176821
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
new file mode 100644
index 00000000..53c46e6f
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
new file mode 100644
index 00000000..abf45ff1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png
deleted file mode 100644
index cd2af5ce..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png
deleted file mode 100644
index 2ce3672b..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png
deleted file mode 100644
index d4d9afe1..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..07c97401
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..f2fb5229
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..d2677e99
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/MPC.png
new file mode 100644
index 00000000..a375c676
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
new file mode 100644
index 00000000..d69cd298
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
new file mode 100644
index 00000000..0584ac99
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
new file mode 100644
index 00000000..016cc2a3
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
new file mode 100644
index 00000000..55d32444
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
new file mode 100644
index 00000000..99cbbae4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..b8480ae0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..82268167
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..41bcd510
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/MPC.png
new file mode 100644
index 00000000..b19bb958
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
new file mode 100644
index 00000000..cccabc4e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
new file mode 100644
index 00000000..947ebdd2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png
new file mode 100644
index 00000000..0ff4ee89
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png
new file mode 100644
index 00000000..1f9e2e18
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png
new file mode 100644
index 00000000..2c63cc3a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
index 8d76fed9..8d76fed9 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
index daa7929a..daa7929a 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
index e56b1b6e..e56b1b6e 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png
index 8705cee2..8705cee2 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png
index bdab3741..bdab3741 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png
index e4269f6e..e4269f6e 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png
index e4b6b527..e4b6b527 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png
index e067ad66..e067ad66 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png
index 9b89e4f9..9b89e4f9 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png
new file mode 100644
index 00000000..820df5c7
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..b6aa957a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..161041d9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/MPC.png
index 4f189578..4f189578 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/Node Activity.png
index add3c0f8..add3c0f8 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/Out Degree.png
index f4717a1a..f4717a1a 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/real vs viatra vs alloy/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/KS_Distance/real vs viatra vs alloy/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py b/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py
index 2f39ca93..a66802d5 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py
@@ -8,17 +8,19 @@ import matplotlib.pyplot as plt
8from scipy import stats 8from scipy import stats
9import numpy as np 9import numpy as np
10from GraphType import GraphCollection 10from GraphType import GraphCollection
11import DistributionMetrics as metrics
11 12
12def main(): 13def main():
13 # read models 14 # read models
14 human = GraphCollection('../input/humanOutput/', 500, 'Human') 15 # human = GraphCollection('../input/humanOutput/', 500, 'Human')
15 viatra30 = GraphCollection('../input/viatraOutput30/', 500, 'Viatra (30 nodes)') 16 # viatra30 = GraphCollection('../input/viatraOutput30/', 500,'Viatra (30 nodes)')
16 # viatra60 = GraphCollection('../input/viatraOutput60/', 500, 'Viatra (60 nodes)') 17 # viatra60 = GraphCollection('../input/viatraOutput60/', 500, 'Viatra (60 nodes)')
17 # viatra100 = GraphCollection('../input/viatraOutput100/', 500, 'Viatra (100 nodes)') 18 viatra100 = GraphCollection('../input/viatraOutput100/', 500, 'Viatra (100 nodes)')
18 # random = GraphCollection('../input/randomOutput/', 500, 'Random') 19 # random = GraphCollection('../input/randomOutput/', 500, 'Random')
19 # alloy = GraphCollection('../input/alloyOutput/', 500, 'Alloy (30 nodes)') 20 # alloy = GraphCollection('../input/alloyOutput/', 500, 'Alloy (30 nodes)')
20 21 realistic_viatra = GraphCollection('../input/viatra_output_consistent_100/', 50, 'Realistic Viatra With Some Constraints (100 nodes)')
21 models_to_compare = [human, viatra30] 22 human100 = GraphCollection('../input/human_output_100/', 304, 'Human')
23 models_to_compare = [human100, realistic_viatra, viatra100]
22 24
23 # define output folder 25 # define output folder
24 outputFolder = '../output/' 26 outputFolder = '../output/'
@@ -38,7 +40,7 @@ def calculateKSMatrix(dists):
38 for i in range(len(dist)): 40 for i in range(len(dist)):
39 matrix[i,i] = 0 41 matrix[i,i] = 0
40 for j in range(i+1, len(dist)): 42 for j in range(i+1, len(dist)):
41 value, p = stats.ks_2samp(dist[i], dist[j]) 43 value = metrics.euclidean_distance(dist[i], dist[j])
42 matrix[i, j] = value 44 matrix[i, j] = value
43 matrix[j, i] = value 45 matrix[j, i] = value
44 return matrix 46 return matrix
@@ -50,13 +52,14 @@ def calculateMDS(dissimilarities):
50 return trans 52 return trans
51 53
52def plot(graphTypes, coords, title='',index = 0, savePath = ''): 54def plot(graphTypes, coords, title='',index = 0, savePath = ''):
53 half_length = int(coords.shape[0] / len(graphTypes))
54 color = ['blue', 'red', 'green', 'yellow'] 55 color = ['blue', 'red', 'green', 'yellow']
55 plt.figure(index, figsize=(7, 4)) 56 plt.figure(index, figsize=(7, 4))
56 plt.title(title) 57 plt.title(title)
58 index = 0
57 for i in range(len(graphTypes)): 59 for i in range(len(graphTypes)):
58 x = (coords[(i*half_length):((i+1)*half_length), 0].tolist()) 60 x = (coords[index:index+graphTypes[i].size, 0].tolist())
59 y = (coords[(i*half_length):((i+1)*half_length), 1].tolist()) 61 y = (coords[index:index+graphTypes[i].size, 1].tolist())
62 index += graphTypes[i].size
60 plt.plot(x, y, color=color[i], marker='o', label = graphTypes[i].name, linestyle='', alpha=0.7) 63 plt.plot(x, y, color=color[i], marker='o', label = graphTypes[i].name, linestyle='', alpha=0.7)
61 plt.legend(loc='upper right') 64 plt.legend(loc='upper right')
62 plt.savefig(fname = savePath, dpi=150) 65 plt.savefig(fname = savePath, dpi=150)
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb
index 78f408fc..329a46f6 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb
@@ -16,7 +16,7 @@
16 }, 16 },
17 { 17 {
18 "cell_type": "code", 18 "cell_type": "code",
19 "execution_count": 1, 19 "execution_count": 11,
20 "metadata": {}, 20 "metadata": {},
21 "outputs": [], 21 "outputs": [],
22 "source": [ 22 "source": [
@@ -30,7 +30,8 @@
30 "import ipywidgets as widgets\n", 30 "import ipywidgets as widgets\n",
31 "from pyclustering.cluster.kmedoids import kmedoids\n", 31 "from pyclustering.cluster.kmedoids import kmedoids\n",
32 "from pyclustering.utils.metric import distance_metric, type_metric\n", 32 "from pyclustering.utils.metric import distance_metric, type_metric\n",
33 "import random" 33 "import random\n",
34 "import numpy as np"
34 ] 35 ]
35 }, 36 },
36 { 37 {
@@ -176,23 +177,28 @@
176 }, 177 },
177 { 178 {
178 "cell_type": "code", 179 "cell_type": "code",
179 "execution_count": 6, 180 "execution_count": 15,
180 "metadata": {}, 181 "metadata": {},
181 "outputs": [ 182 "outputs": [
182 { 183 {
183 "name": "stdout", 184 "name": "stdout",
184 "output_type": "stream", 185 "output_type": "stream",
185 "text": [ 186 "text": [
186 "0.046150929558524685\n" 187 "average distance: 0.04615092955852465\n",
188 "std: 0.017305709419913242\n",
189 "max: 0.1411706837186424\n",
190 "min: 0.0\n"
187 ] 191 ]
188 } 192 }
189 ], 193 ],
190 "source": [ 194 "source": [
191 "total_distance = 0\n", 195 "distances = []\n",
192 "count = 0\n",
193 "for model in models:\n", 196 "for model in models:\n",
194 " total_distance += ks_value(od_rep_model.out_d, model.out_d)\n", 197 " distances.append(ks_value(od_rep_model.out_d, model.out_d))\n",
195 "print(total_distance / len(models))" 198 "print('average distance: ', np.mean(distances))\n",
199 "print('std: ', np.std(distances))\n",
200 "print('max:', max(distances))\n",
201 "print('min:', min(distances))"
196 ] 202 ]
197 }, 203 },
198 { 204 {
@@ -217,7 +223,7 @@
217 }, 223 },
218 { 224 {
219 "cell_type": "code", 225 "cell_type": "code",
220 "execution_count": 13, 226 "execution_count": 7,
221 "metadata": {}, 227 "metadata": {},
222 "outputs": [ 228 "outputs": [
223 { 229 {
@@ -245,16 +251,21 @@
245 "name": "stdout", 251 "name": "stdout",
246 "output_type": "stream", 252 "output_type": "stream",
247 "text": [ 253 "text": [
248 "0.04679429311806747\n" 254 "average distance: 0.046794293118067494\n",
255 "std: 0.02880119213919405\n",
256 "max: 0.18702970297029703\n",
257 "min: 0.0\n"
249 ] 258 ]
250 } 259 }
251 ], 260 ],
252 "source": [ 261 "source": [
253 "total_distance = 0\n", 262 "distances = []\n",
254 "count = 0\n",
255 "for model in models:\n", 263 "for model in models:\n",
256 " total_distance += ks_value(na_rep_model.na, model.na)\n", 264 " distances.append(ks_value(na_rep_model.na, model.na))\n",
257 "print(total_distance / len(models))" 265 "print('average distance: ', np.mean(distances))\n",
266 "print('std: ', np.std(distances))\n",
267 "print('max:', max(distances))\n",
268 "print('min:', min(distances))"
258 ] 269 ]
259 }, 270 },
260 { 271 {
@@ -279,7 +290,7 @@
279 }, 290 },
280 { 291 {
281 "cell_type": "code", 292 "cell_type": "code",
282 "execution_count": 16, 293 "execution_count": 9,
283 "metadata": {}, 294 "metadata": {},
284 "outputs": [ 295 "outputs": [
285 { 296 {
@@ -300,23 +311,28 @@
300 }, 311 },
301 { 312 {
302 "cell_type": "code", 313 "cell_type": "code",
303 "execution_count": 18, 314 "execution_count": 16,
304 "metadata": {}, 315 "metadata": {},
305 "outputs": [ 316 "outputs": [
306 { 317 {
307 "name": "stdout", 318 "name": "stdout",
308 "output_type": "stream", 319 "output_type": "stream",
309 "text": [ 320 "text": [
310 "0.07028909225833631\n" 321 "average distance: 0.07028909225833632\n",
322 "std: 0.03728189051222417\n",
323 "max: 0.21961550993809065\n",
324 "min: 0.0\n"
311 ] 325 ]
312 } 326 }
313 ], 327 ],
314 "source": [ 328 "source": [
315 "total_distance = 0\n", 329 "distances = []\n",
316 "count = 0\n",
317 "for model in models:\n", 330 "for model in models:\n",
318 " total_distance += ks_value(mpc_rep_model.mpc, model.mpc)\n", 331 " distances.append(ks_value(mpc_rep_model.mpc, model.mpc))\n",
319 "print(total_distance / len(models))" 332 "print('average distance: ', np.mean(distances))\n",
333 "print('std: ', np.std(distances))\n",
334 "print('max:', max(distances))\n",
335 "print('min:', min(distances))"
320 ] 336 ]
321 }, 337 },
322 { 338 {
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py
new file mode 100644
index 00000000..6e707108
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py
@@ -0,0 +1,43 @@
1from scipy import stats
2from scipy.spatial import distance
3
4def ks_distance(samples1, samples2):
5 value, p = stats.ks_2samp(samples1, samples2)
6 return (value, p)
7
8def js_distance(samples1, samples2):
9 map1 = fromSamples(samples1)
10 map2 = fromSamples(samples2)
11 allKeys = set(map1.keys()) | set(map2.keys())
12 dist1 = distributionFromMap(map1, allKeys)
13 dist2 = distributionFromMap(map2, allKeys)
14 return distance.jensenshannon(dist1, dist2, 2)
15
16def euclidean_distance(samples1, samples2):
17 map1 = fromSamples(samples1)
18 map2 = fromSamples(samples2)
19 allKeys = set(map1.keys()) | set(map2.keys())
20 dist1 = distributionFromMap(map1, allKeys)
21 dist2 = distributionFromMap(map2, allKeys)
22 distance = 0
23 for i in range(len(dist2)):
24 distance += pow(dist1[i] - dist2[i], 2)
25 return pow(distance, 0.5)
26
27def fromSamples(samples):
28 m = {}
29 length = len(samples)
30 for sample in samples:
31 value = m.get(sample, 0)
32 m[sample] = value + 1
33 for key in list(m.keys()):
34 m[key] /= length
35 return m
36
37def distributionFromMap(m, allKeys):
38 dist = []
39 for key in allKeys:
40 value = m.get(key, 0)
41 dist.append(value)
42 return dist
43
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
index 13754e80..827c2a5e 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
@@ -11,13 +11,13 @@ class GraphCollection:
11 self.nas = [] 11 self.nas = []
12 self.mpcs = [] 12 self.mpcs = []
13 self.name = name 13 self.name = name
14 self.size = number
14 models = reader.readmultiplefiles(path, number, shouldShuffle) 15 models = reader.readmultiplefiles(path, number, shouldShuffle)
15 for i in range(len(models)): 16 for i in range(len(models)):
16 contents, out_d, na, mpc = reader.getmetrics(models[i]) 17 contents, out_d, na, mpc = reader.getmetrics(models[i])
17 self.out_ds.append(out_d) 18 self.out_ds.append(out_d)
18 self.nas.append(na) 19 self.nas.append(na)
19 self.mpcs.append(mpc) 20 self.mpcs.append(mpc)
20 print(len(self.out_ds))
21 21
22#Graph stat for one graph 22#Graph stat for one graph
23class GraphStat: 23class GraphStat:
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
index e0402519..b27a0ffc 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
@@ -24,9 +24,12 @@ def readcsvfile(filename):
24 # meta models are string 24 # meta models are string
25 elif(arr[0] == constants.METAMODEL): 25 elif(arr[0] == constants.METAMODEL):
26 contents[constants.METAMODEL] = arr[1:] 26 contents[constants.METAMODEL] = arr[1:]
27 # all other contants are integer 27 # NA and OD are integers
28 else: 28 else:
29 contents[arr[0]] = list(map(int, arr[1:])) 29 try:
30 contents[arr[0]] = list(map(int, arr[1:]))
31 except:
32 print(arr[0], ' is not integer')
30 f.close() 33 f.close()
31 return contents 34 return contents
32 35