aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics
diff options
context:
space:
mode:
authorLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-07-31 14:45:06 -0400
committerLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-07-31 14:45:06 -0400
commit5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe (patch)
tree61b473589e5e43a58481ea28b7bbeeaf0860dcdb /Metrics
parentconsider node types during generation (diff)
downloadVIATRA-Generator-5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe.tar.gz
VIATRA-Generator-5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe.tar.zst
VIATRA-Generator-5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe.zip
Further development of realistic solver, create generation config for ecore models
Diffstat (limited to 'Metrics')
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/.classpath1
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/META-INF/MANIFEST.MF1
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore7
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2015194.xmi132
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017131.xmi149
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/mpc_rep/R_2016324.xmi (renamed from Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2016324.xmi)0
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/na_rep/R_2017419.xmi (renamed from Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017419.xmi)0
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/out_d_rep/R_2015225.xmi (renamed from Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015225.xmi)0
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015248.xmi125
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/.gitignore4
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/ecore.vsconfig34
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/model/ecore.ecore1023
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.xml5
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/queries/queries/ecore_pattern.vql9
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/.gitignore3
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Ecore_pattern.java53
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/SameSuperClass.java824
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java52
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig4
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend6
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend28
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.xtend11
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.xtend18
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend33
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend12
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend17
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend12
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend18
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/MPC.pngbin0 -> 47645 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/Node Activity.pngbin0 -> 50335 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/Out Degree.pngbin0 -> 49640 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.pngbin97291 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.pngbin87259 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.pngbin118965 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/MPC.pngbin79437 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/Node Activity.pngbin63687 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/Out Degree.pngbin63520 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/MPC.pngbin103764 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/Node Activity.pngbin55991 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/Out Degree.pngbin140069 -> 0 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/MPC.pngbin0 -> 51488 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/Node Activity.pngbin0 -> 56633 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/Out Degree.pngbin0 -> 55233 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/MPC.pngbin0 -> 61651 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/Node Activity.pngbin0 -> 64027 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/Out Degree.pngbin0 -> 62062 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.pngbin0 -> 80427 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.pngbin0 -> 49992 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.pngbin0 -> 109041 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 88476 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 73824 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 92754 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 116920 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 84045 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 121334 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 97444 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 87707 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 102356 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.pngbin0 -> 54225 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.pngbin0 -> 47898 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.pngbin0 -> 88876 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 76828 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 77517 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 87612 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.pngbin0 -> 77938 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.pngbin0 -> 87383 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.pngbin0 -> 99046 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png)bin109723 -> 109723 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png)bin80099 -> 80099 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png)bin91912 -> 91912 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png)bin112332 -> 112332 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png)bin81639 -> 81639 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png)bin92200 -> 92200 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png)bin116546 -> 116546 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png)bin93653 -> 93653 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png)bin129648 -> 129648 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png)bin118510 -> 118510 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png)bin80223 -> 80223 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png)bin120029 -> 120029 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.pngbin0 -> 90540 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.pngbin0 -> 75339 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.pngbin0 -> 83932 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png)bin93499 -> 93499 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png)bin79559 -> 79559 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png)bin95080 -> 95080 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.pngbin0 -> 97946 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.pngbin0 -> 80895 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.pngbin0 -> 109969 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.pngbin0 -> 82899 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.pngbin0 -> 78754 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.pngbin0 -> 110541 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 95510 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 81040 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 111888 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png)bin93318 -> 93318 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png)bin72012 -> 72012 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png)bin111830 -> 111830 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png)bin113112 -> 113112 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png)bin98628 -> 98628 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png)bin110816 -> 110816 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png)bin136233 -> 136233 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png)bin124315 -> 124315 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png)bin136745 -> 136745 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png)bin116110 -> 116110 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png)bin74006 -> 74006 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png)bin117047 -> 117047 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png)bin135531 -> 135531 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png)bin95290 -> 95290 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png)bin134916 -> 134916 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png)bin184969 -> 184969 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png)bin139857 -> 139857 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png)bin186513 -> 186513 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png)bin95465 -> 95465 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png)bin93444 -> 93444 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png)bin97919 -> 97919 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png)bin92255 -> 92255 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png)bin87694 -> 87694 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png)bin86352 -> 86352 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png)bin98310 -> 98310 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png)bin85826 -> 85826 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png)bin86139 -> 86139 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png)bin127107 -> 127107 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png)bin118735 -> 118735 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png)bin116864 -> 116864 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png)bin85397 -> 85397 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/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/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/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/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/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/Yakindumm/old measurements/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/old measurements/KS_Distance/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/Yakindumm/old measurements/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/old measurements/KS_Distance/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/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png)bin69041 -> 69041 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png)bin50629 -> 50629 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png)bin60762 -> 60762 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png)bin97403 -> 97403 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png)bin88084 -> 88084 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png (renamed from Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/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.py36
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb88
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore3
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb610
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py77
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py4
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/constants.py5
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py17
144 files changed, 3286 insertions, 135 deletions
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/.classpath b/Metrics/Metrics-Calculation/SocialNetwork_plugin/.classpath
index 58c238b9..4f2afbc9 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/.classpath
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/.classpath
@@ -1,6 +1,7 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<classpath> 2<classpath>
3 <classpathentry kind="src" path="encore_gen"/> 3 <classpathentry kind="src" path="encore_gen"/>
4 <classpathentry kind="src" path="queries"/>
4 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> 5 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
5 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> 6 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
6 <classpathentry kind="src" path="src"/> 7 <classpathentry kind="src" path="src"/>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/META-INF/MANIFEST.MF b/Metrics/Metrics-Calculation/SocialNetwork_plugin/META-INF/MANIFEST.MF
index b7ec683a..cf5154e4 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/META-INF/MANIFEST.MF
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/META-INF/MANIFEST.MF
@@ -7,6 +7,7 @@ Bundle-ClassPath: .
7Bundle-Vendor: %providerName 7Bundle-Vendor: %providerName
8Bundle-Localization: plugin 8Bundle-Localization: plugin
9Export-Package: ca.mcgill.ecse.socialnetwork.plugin, 9Export-Package: ca.mcgill.ecse.socialnetwork.plugin,
10 queries,
10 socialnetwork, 11 socialnetwork,
11 socialnetwork.impl, 12 socialnetwork.impl,
12 socialnetwork.util 13 socialnetwork.util
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore
index 683b1de1..8b962bcf 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/.gitignore
@@ -1 +1,8 @@
1/ca/ 1/ca/
2/ecore.ecore
3/queries/
4/socialnetwork.aird
5/socialnetwork.ecore
6/socialnetwork.genmodel
7/socialnetwork/
8/statistics/
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2015194.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2015194.xmi
new file mode 100644
index 00000000..25ff5ce0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2015194.xmi
@@ -0,0 +1,132 @@
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">
5 <outgoingTransitions target="//@regions.0/@vertices.1"/>
6 <regions>
7 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.0 //@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.13/@outgoingTransitions.1">
8 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.12"/>
9 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
10 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.13"/>
11 </vertices>
12 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.14/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.15/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.15/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.14/@outgoingTransitions.1">
13 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/>
14 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.14"/>
15 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.15"/>
16 </vertices>
17 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1">
18 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
19 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
20 </vertices>
21 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1">
22 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
23 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
24 </vertices>
25 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1">
26 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
27 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/>
28 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/>
29 </vertices>
30 <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.4/@outgoingTransitions.0 //@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.11/@outgoingTransitions.1">
31 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
32 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/>
33 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.11"/>
34 </vertices>
35 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
36 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
37 </vertices>
38 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0">
39 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
40 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
41 </vertices>
42 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1">
43 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
44 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
45 </vertices>
46 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.2">
47 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
48 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
49 </vertices>
50 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.1">
51 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
52 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
53 </vertices>
54 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.2">
55 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
56 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
57 </vertices>
58 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0">
59 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
60 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
61 </vertices>
62 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.2">
63 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
64 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
65 </vertices>
66 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1">
67 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
68 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
69 </vertices>
70 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2">
71 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
72 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
73 </vertices>
74 </regions>
75 </vertices>
76 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0">
77 <outgoingTransitions target="//@regions.0/@vertices.0"/>
78 <regions>
79 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
80 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/>
81 </vertices>
82 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.0"/>
83 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.0/@outgoingTransitions.0">
84 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/>
85 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/>
86 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/>
87 <regions>
88 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.1">
89 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.4"/>
90 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0"/>
91 </vertices>
92 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.1">
93 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1"/>
94 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.5"/>
95 </vertices>
96 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0">
97 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0"/>
98 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1"/>
99 </vertices>
100 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
101 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.2"/>
102 </vertices>
103 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0">
104 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1"/>
105 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1"/>
106 </vertices>
107 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1">
108 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0"/>
109 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0"/>
110 </vertices>
111 </regions>
112 </vertices>
113 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.2">
114 <regions>
115 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.1"/>
116 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.0"/>
117 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.0">
118 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.1"/>
119 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.0"/>
120 </vertices>
121 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
122 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.2"/>
123 </vertices>
124 </regions>
125 </vertices>
126 </regions>
127 </vertices>
128 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
129 <outgoingTransitions target="//@regions.0/@vertices.0"/>
130 </vertices>
131 </regions>
132</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017131.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017131.xmi
new file mode 100644
index 00000000..39780f72
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017131.xmi
@@ -0,0 +1,149 @@
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.5/@outgoingTransitions.0 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@outgoingTransitions.0">
5 <outgoingTransitions target="//@regions.0/@vertices.1"/>
6 <regions>
7 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0">
8 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/>
9 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
10 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/>
11 </vertices>
12 <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.0/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1">
13 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/>
14 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
15 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/>
16 </vertices>
17 <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.3/@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">
18 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
19 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.12"/>
20 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.11"/>
21 </vertices>
22 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.1">
23 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
24 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/>
25 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.6"/>
26 </vertices>
27 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.2">
28 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
29 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
30 </vertices>
31 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0">
32 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
33 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
34 </vertices>
35 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.2">
36 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
37 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
38 </vertices>
39 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1">
40 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
41 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/>
42 </vertices>
43 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
44 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/>
45 </vertices>
46 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2">
47 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
48 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
49 </vertices>
50 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0">
51 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
52 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/>
53 </vertices>
54 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.2">
55 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
56 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
57 </vertices>
58 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1">
59 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
60 <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/>
61 </vertices>
62 </regions>
63 </vertices>
64 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0">
65 <outgoingTransitions target="//@regions.0/@vertices.0"/>
66 <regions>
67 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
68 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/>
69 </vertices>
70 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.2">
71 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/>
72 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.4"/>
73 <outgoingTransitions target="//@regions.0/@vertices.3"/>
74 </vertices>
75 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.0">
76 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/>
77 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/>
78 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/>
79 </vertices>
80 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.1"/>
81 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.2">
82 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.7"/>
83 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.5"/>
84 </vertices>
85 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.4/@outgoingTransitions.1">
86 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.4"/>
87 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/>
88 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.4"/>
89 </vertices>
90 <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">
91 <outgoingTransitions target="//@regions.0/@vertices.2"/>
92 </vertices>
93 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.4/@outgoingTransitions.0">
94 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.6"/>
95 <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.6"/>
96 </vertices>
97 </regions>
98 </vertices>
99 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.6/@outgoingTransitions.0">
100 <outgoingTransitions target="//@regions.0/@vertices.0"/>
101 <regions>
102 <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.2/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0">
103 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/>
104 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
105 <outgoingTransitions target="//@regions.0/@vertices.4"/>
106 </vertices>
107 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.2 //@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.2"/>
108 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0">
109 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
110 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
111 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
112 </vertices>
113 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.1">
114 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.4"/>
115 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/>
116 </vertices>
117 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0">
118 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
119 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/>
120 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/>
121 </vertices>
122 <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.6/@outgoingTransitions.1">
123 <outgoingTransitions target="//@regions.0/@vertices.1"/>
124 </vertices>
125 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1">
126 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/>
127 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/>
128 </vertices>
129 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
130 <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/>
131 </vertices>
132 </regions>
133 </vertices>
134 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.2">
135 <outgoingTransitions target="//@regions.0/@vertices.2"/>
136 <outgoingTransitions target="//@regions.0/@vertices.2"/>
137 </vertices>
138 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.2">
139 <outgoingTransitions target="//@regions.0/@vertices.1"/>
140 <outgoingTransitions target="//@regions.0/@vertices.1"/>
141 </vertices>
142 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@outgoingTransitions.0">
143 <outgoingTransitions target="//@regions.0/@vertices.0"/>
144 </vertices>
145 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
146 <outgoingTransitions target="//@regions.0/@vertices.5"/>
147 </vertices>
148 </regions>
149</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2016324.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/mpc_rep/R_2016324.xmi
index 493a1731..493a1731 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/mpc_rep/R_2016324.xmi
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/mpc_rep/R_2016324.xmi
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017419.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/na_rep/R_2017419.xmi
index 369760bf..369760bf 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/na_rep/R_2017419.xmi
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/na_rep/R_2017419.xmi
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015225.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/out_d_rep/R_2015225.xmi
index 21fee5a9..21fee5a9 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015225.xmi
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/old/out_d_rep/R_2015225.xmi
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015248.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015248.xmi
new file mode 100644
index 00000000..e7fe8114
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakinduum/out_d_rep/R_2015248.xmi
@@ -0,0 +1,125 @@
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.12/@outgoingTransitions.0 //@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.6/@outgoingTransitions.0">
8 <outgoingTransitions target="//@regions.0/@vertices.2"/>
9 <outgoingTransitions target="//@regions.0/@vertices.6"/>
10 </vertices>
11 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.7/@outgoingTransitions.1">
12 <outgoingTransitions target="//@regions.0/@vertices.3"/>
13 <outgoingTransitions target="//@regions.0/@vertices.4"/>
14 <outgoingTransitions target="//@regions.0/@vertices.7"/>
15 </vertices>
16 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.9/@outgoingTransitions.1">
17 <outgoingTransitions target="//@regions.0/@vertices.8"/>
18 <outgoingTransitions target="//@regions.0/@vertices.5"/>
19 <outgoingTransitions target="//@regions.0/@vertices.9"/>
20 </vertices>
21 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@outgoingTransitions.1">
22 <outgoingTransitions target="//@regions.0/@vertices.2"/>
23 <outgoingTransitions target="//@regions.0/@vertices.2"/>
24 </vertices>
25 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.11/@outgoingTransitions.1">
26 <outgoingTransitions target="//@regions.0/@vertices.12"/>
27 <outgoingTransitions target="//@regions.0/@vertices.11"/>
28 <outgoingTransitions target="//@regions.0/@vertices.10"/>
29 </vertices>
30 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.1">
31 <outgoingTransitions target="//@regions.0/@vertices.1"/>
32 <regions>
33 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
34 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.1"/>
35 </vertices>
36 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.0/@outgoingTransitions.0">
37 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/>
38 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/>
39 </vertices>
40 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.6/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.6/@regions.0/@vertices.10/@outgoingTransitions.2 //@regions.0/@vertices.6/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.13/@outgoingTransitions.1">
41 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.4"/>
42 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/>
43 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.10"/>
44 </vertices>
45 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.11/@outgoingTransitions.2 //@regions.0/@vertices.6/@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.6/@regions.0/@vertices.12/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.8/@outgoingTransitions.0">
46 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.11"/>
47 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.5"/>
48 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/>
49 </vertices>
50 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.2/@outgoingTransitions.0">
51 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.12"/>
52 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.12"/>
53 </vertices>
54 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.3/@outgoingTransitions.1">
55 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.13"/>
56 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.13"/>
57 </vertices>
58 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.11/@outgoingTransitions.1"/>
59 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.10/@outgoingTransitions.1"/>
60 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.12/@outgoingTransitions.1">
61 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/>
62 </vertices>
63 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.13/@outgoingTransitions.0">
64 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/>
65 </vertices>
66 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.2/@outgoingTransitions.2">
67 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/>
68 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.7"/>
69 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/>
70 </vertices>
71 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.3/@outgoingTransitions.0">
72 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/>
73 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.6"/>
74 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/>
75 </vertices>
76 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.4/@outgoingTransitions.1">
77 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/>
78 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.8"/>
79 </vertices>
80 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.5/@outgoingTransitions.1">
81 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.9"/>
82 <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/>
83 </vertices>
84 </regions>
85 </vertices>
86 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@outgoingTransitions.2">
87 <outgoingTransitions target="//@regions.0/@vertices.2"/>
88 <outgoingTransitions target="//@regions.0/@vertices.2"/>
89 </vertices>
90 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.0">
91 <outgoingTransitions target="//@regions.0/@vertices.3"/>
92 <outgoingTransitions target="//@regions.0/@vertices.3"/>
93 </vertices>
94 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.2">
95 <outgoingTransitions target="//@regions.0/@vertices.3"/>
96 <outgoingTransitions target="//@regions.0/@vertices.3"/>
97 </vertices>
98 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.2">
99 <outgoingTransitions target="//@regions.0/@vertices.5"/>
100 <outgoingTransitions target="//@regions.0/@vertices.5"/>
101 </vertices>
102 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.1">
103 <outgoingTransitions target="//@regions.0/@vertices.5"/>
104 <outgoingTransitions target="//@regions.0/@vertices.5"/>
105 </vertices>
106 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.0">
107 <outgoingTransitions target="//@regions.0/@vertices.1"/>
108 <regions>
109 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry">
110 <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.1"/>
111 </vertices>
112 <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.12/@regions.0/@vertices.0/@outgoingTransitions.0">
113 <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.2"/>
114 <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.3"/>
115 </vertices>
116 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.12/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.12/@regions.0/@vertices.3/@outgoingTransitions.0">
117 <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.3"/>
118 </vertices>
119 <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.12/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.12/@regions.0/@vertices.2/@outgoingTransitions.0">
120 <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.2"/>
121 </vertices>
122 </regions>
123 </vertices>
124 </regions>
125</hu.bme.mit.inf.yakindumm:Statechart>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/.gitignore
deleted file mode 100644
index 17126b28..00000000
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
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/ecore.vsconfig b/Metrics/Metrics-Calculation/SocialNetwork_plugin/ecore.vsconfig
new file mode 100644
index 00000000..2c83f94f
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/ecore.vsconfig
@@ -0,0 +1,34 @@
1import viatra "./queries/queries/ecore_pattern.vql"
2import epackage "http://www.eclipse.org/emf/2002/Ecore"
3
4generate {
5 metamodel = {package ecore excluding{EClassifier.instanceClass, EClassifier.defaultValue,
6 EEnumLiteral.instance, EStructuralFeature.defaultValue, EStructuralFeature.changeable,
7 EStructuralFeature.derived, ENamedElement.name, EClass.interface, EClass.abstract, EClassifier.instanceTypeName,
8 EClassifier.instanceClassName, EPackage.nsPrefix, EPackage.nsURI, EAnnotation.source,
9 EAttribute.iD, EDataType.serializable, EEnumLiteral.literal, EEnumLiteral.value,
10 EGenericType.eTypeParameter, EReference.resolveProxies, EStringToStringMapEntry.key,
11 EStringToStringMapEntry.value, EStructuralFeature.defaultValueLiteral, EStructuralFeature.transient,
12 EStructuralFeature.unsettable, EStructuralFeature.volatile, ETypedElement.lowerBound,
13 ETypedElement.many, ETypedElement.ordered, ETypedElement.required, ETypedElement.unique,ETypedElement.upperBound,
14 EPackage.eFactoryInstance}}
15// metamodel = {EPackage, EClass, EClassifier, EObject, ENamedElement, EModelElement, EReference, EStructuralFeature, ETypedElement}
16 partial-model = { "inputs/ecore.xmi"}
17 constraints = { package queries }
18
19
20 solver = ViatraSolver
21
22 scope = {
23 #node = 75
24 }
25
26 number = 1
27 runs = 50
28 config = {
29 log-level = none
30 }
31
32 debug = "debug"
33 output = "output/Ecore/"
34} \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/ecore.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/ecore.ecore
new file mode 100644
index 00000000..eaaf3d11
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/ecore.ecore
@@ -0,0 +1,1023 @@
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="ecore" nsURI="http://www.eclipse.org/emf/2002/Ecore" nsPrefix="ecore">
4 <eClassifiers xsi:type="ecore:EClass" name="EAnnotation" eSuperTypes="#//EModelElement">
5 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
6 <details key="name" value="EAnnotation"/>
7 <details key="kind" value="elementOnly"/>
8 </eAnnotations>
9 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
10 <details key="constraints" value="WellFormedSourceURI"/>
11 </eAnnotations>
12 <eStructuralFeatures xsi:type="ecore:EReference" name="details" upperBound="-1"
13 eType="#//EStringToStringMapEntry" containment="true" resolveProxies="false">
14 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
15 <details key="kind" value="element"/>
16 <details key="name" value="details"/>
17 </eAnnotations>
18 </eStructuralFeatures>
19 <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1"
20 eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject" containment="true"
21 resolveProxies="false">
22 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
23 <details key="kind" value="element"/>
24 <details key="name" value="contents"/>
25 </eAnnotations>
26 </eStructuralFeatures>
27 <eStructuralFeatures xsi:type="ecore:EReference" name="references" upperBound="-1"
28 eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
29 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
30 <details key="kind" value="attribute"/>
31 <details key="name" value="references"/>
32 </eAnnotations>
33 </eStructuralFeatures>
34 <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" eType="#//EString">
35 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
36 <details key="kind" value="attribute"/>
37 <details key="name" value="source"/>
38 </eAnnotations>
39 </eStructuralFeatures>
40 <eStructuralFeatures xsi:type="ecore:EReference" name="eModelElement" eType="#//EModelElement"
41 transient="true" eOpposite="#//EModelElement/eAnnotations"/>
42 </eClassifiers>
43 <eClassifiers xsi:type="ecore:EClass" name="EAttribute" eSuperTypes="#//EStructuralFeature">
44 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
45 <details key="name" value="EAttribute"/>
46 <details key="kind" value="elementOnly"/>
47 </eAnnotations>
48 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
49 <details key="constraints" value="ConsistentTransient"/>
50 </eAnnotations>
51 <eStructuralFeatures xsi:type="ecore:EReference" name="eAttributeType" lowerBound="1"
52 eType="#//EDataType" changeable="false" volatile="true" transient="true" derived="true">
53 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
54 <details key="kind" value="attribute"/>
55 <details key="name" value="eAttributeType"/>
56 </eAnnotations>
57 </eStructuralFeatures>
58 <eStructuralFeatures xsi:type="ecore:EAttribute" name="iD" eType="#//EBoolean">
59 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
60 <details key="kind" value="attribute"/>
61 <details key="name" value="iD"/>
62 </eAnnotations>
63 </eStructuralFeatures>
64 </eClassifiers>
65 <eClassifiers xsi:type="ecore:EDataType" name="EBigDecimal" instanceClassName="java.math.BigDecimal">
66 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
67 <details key="name" value="EBigDecimal"/>
68 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#decimal"/>
69 </eAnnotations>
70 </eClassifiers>
71 <eClassifiers xsi:type="ecore:EDataType" name="EBigInteger" instanceClassName="java.math.BigInteger">
72 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
73 <details key="name" value="EBigInteger"/>
74 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#integer"/>
75 </eAnnotations>
76 </eClassifiers>
77 <eClassifiers xsi:type="ecore:EDataType" name="EBoolean" instanceClassName="boolean">
78 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
79 <details key="name" value="EBoolean"/>
80 </eAnnotations>
81 </eClassifiers>
82 <eClassifiers xsi:type="ecore:EDataType" name="EBooleanObject" instanceClassName="java.lang.Boolean">
83 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
84 <details key="name" value="EBoolean:Object"/>
85 <details key="baseType" value="EBoolean"/>
86 </eAnnotations>
87 </eClassifiers>
88 <eClassifiers xsi:type="ecore:EDataType" name="EByte" instanceClassName="byte">
89 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
90 <details key="name" value="EByte"/>
91 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#byte"/>
92 </eAnnotations>
93 </eClassifiers>
94 <eClassifiers xsi:type="ecore:EDataType" name="EByteArray" instanceClassName="byte[]">
95 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
96 <details key="name" value="EByteArray"/>
97 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#hexBinary"/>
98 </eAnnotations>
99 </eClassifiers>
100 <eClassifiers xsi:type="ecore:EDataType" name="EByteObject" instanceClassName="java.lang.Byte">
101 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
102 <details key="name" value="EByte:Object"/>
103 <details key="baseType" value="EByte"/>
104 </eAnnotations>
105 </eClassifiers>
106 <eClassifiers xsi:type="ecore:EDataType" name="EChar" instanceClassName="char">
107 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
108 <details key="name" value="EChar"/>
109 </eAnnotations>
110 </eClassifiers>
111 <eClassifiers xsi:type="ecore:EDataType" name="ECharacterObject" instanceClassName="java.lang.Character">
112 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
113 <details key="name" value="EChar:Object"/>
114 <details key="baseType" value="EChar"/>
115 </eAnnotations>
116 </eClassifiers>
117 <eClassifiers xsi:type="ecore:EClass" name="EClass" eSuperTypes="#//EClassifier">
118 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
119 <details key="name" value="EClass"/>
120 <details key="kind" value="elementOnly"/>
121 </eAnnotations>
122 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
123 <details key="constraints" value="InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"/>
124 </eAnnotations>
125 <eOperations name="isSuperTypeOf" eType="#//EBoolean">
126 <eParameters name="someClass" eType="#//EClass"/>
127 </eOperations>
128 <eOperations name="getFeatureCount" eType="#//EInt"/>
129 <eOperations name="getEStructuralFeature" eType="#//EStructuralFeature">
130 <eParameters name="featureID" eType="#//EInt"/>
131 </eOperations>
132 <eOperations name="getFeatureID" eType="#//EInt">
133 <eParameters name="feature" eType="#//EStructuralFeature"/>
134 </eOperations>
135 <eOperations name="getEStructuralFeature" eType="#//EStructuralFeature">
136 <eParameters name="featureName" eType="#//EString"/>
137 </eOperations>
138 <eOperations name="getOperationCount" eType="#//EInt"/>
139 <eOperations name="getEOperation" eType="#//EOperation">
140 <eParameters name="operationID" eType="#//EInt"/>
141 </eOperations>
142 <eOperations name="getOperationID" eType="#//EInt">
143 <eParameters name="operation" eType="#//EOperation"/>
144 </eOperations>
145 <eOperations name="getOverride" eType="#//EOperation">
146 <eParameters name="operation" eType="#//EOperation"/>
147 </eOperations>
148 <eStructuralFeatures xsi:type="ecore:EReference" name="eOperations" upperBound="-1"
149 eType="#//EOperation" containment="true" resolveProxies="false" eOpposite="#//EOperation/eContainingClass">
150 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
151 <details key="kind" value="element"/>
152 <details key="name" value="eOperations"/>
153 </eAnnotations>
154 </eStructuralFeatures>
155 <eStructuralFeatures xsi:type="ecore:EReference" name="eStructuralFeatures" upperBound="-1"
156 eType="#//EStructuralFeature" containment="true" resolveProxies="false" eOpposite="#//EStructuralFeature/eContainingClass">
157 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
158 <details key="kind" value="element"/>
159 <details key="name" value="eStructuralFeatures"/>
160 </eAnnotations>
161 </eStructuralFeatures>
162 <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericSuperTypes" upperBound="-1"
163 eType="#//EGenericType" unsettable="true" containment="true" resolveProxies="false">
164 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
165 <details key="kind" value="element"/>
166 <details key="name" value="eGenericSuperTypes"/>
167 </eAnnotations>
168 <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
169 <details key="suppressedIsSetVisibility" value="true"/>
170 <details key="suppressedUnsetVisibility" value="true"/>
171 </eAnnotations>
172 </eStructuralFeatures>
173 <eStructuralFeatures xsi:type="ecore:EAttribute" name="abstract" eType="#//EBoolean">
174 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
175 <details key="kind" value="attribute"/>
176 <details key="name" value="abstract"/>
177 </eAnnotations>
178 </eStructuralFeatures>
179 <eStructuralFeatures xsi:type="ecore:EReference" name="eAllAttributes" upperBound="-1"
180 eType="#//EAttribute" changeable="false" volatile="true" transient="true"
181 derived="true">
182 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
183 <details key="kind" value="attribute"/>
184 <details key="name" value="eAllAttributes"/>
185 </eAnnotations>
186 </eStructuralFeatures>
187 <eStructuralFeatures xsi:type="ecore:EReference" name="eAllContainments" upperBound="-1"
188 eType="#//EReference" changeable="false" volatile="true" transient="true"
189 derived="true">
190 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
191 <details key="kind" value="attribute"/>
192 <details key="name" value="eAllContainments"/>
193 </eAnnotations>
194 </eStructuralFeatures>
195 <eStructuralFeatures xsi:type="ecore:EReference" name="eAllGenericSuperTypes"
196 upperBound="-1" eType="#//EGenericType" changeable="false" volatile="true"
197 transient="true" derived="true">
198 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
199 <details key="kind" value="attribute"/>
200 <details key="name" value="eAllGenericSuperTypes"/>
201 </eAnnotations>
202 </eStructuralFeatures>
203 <eStructuralFeatures xsi:type="ecore:EReference" name="eAllOperations" upperBound="-1"
204 eType="#//EOperation" changeable="false" volatile="true" transient="true"
205 derived="true">
206 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
207 <details key="kind" value="attribute"/>
208 <details key="name" value="eAllOperations"/>
209 </eAnnotations>
210 </eStructuralFeatures>
211 <eStructuralFeatures xsi:type="ecore:EReference" name="eAllReferences" upperBound="-1"
212 eType="#//EReference" changeable="false" volatile="true" transient="true"
213 derived="true">
214 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
215 <details key="kind" value="attribute"/>
216 <details key="name" value="eAllReferences"/>
217 </eAnnotations>
218 </eStructuralFeatures>
219 <eStructuralFeatures xsi:type="ecore:EReference" name="eAllStructuralFeatures"
220 upperBound="-1" eType="#//EStructuralFeature" changeable="false" volatile="true"
221 transient="true" derived="true">
222 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
223 <details key="kind" value="attribute"/>
224 <details key="name" value="eAllStructuralFeatures"/>
225 </eAnnotations>
226 </eStructuralFeatures>
227 <eStructuralFeatures xsi:type="ecore:EReference" name="eAllSuperTypes" upperBound="-1"
228 eType="#//EClass" changeable="false" volatile="true" transient="true" derived="true">
229 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
230 <details key="kind" value="attribute"/>
231 <details key="name" value="eAllSuperTypes"/>
232 </eAnnotations>
233 </eStructuralFeatures>
234 <eStructuralFeatures xsi:type="ecore:EReference" name="eAttributes" upperBound="-1"
235 eType="#//EAttribute" changeable="false" volatile="true" transient="true"
236 derived="true">
237 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
238 <details key="kind" value="attribute"/>
239 <details key="name" value="eAttributes"/>
240 </eAnnotations>
241 </eStructuralFeatures>
242 <eStructuralFeatures xsi:type="ecore:EReference" name="eIDAttribute" eType="#//EAttribute"
243 changeable="false" volatile="true" transient="true" derived="true" resolveProxies="false">
244 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
245 <details key="kind" value="attribute"/>
246 <details key="name" value="eIDAttribute"/>
247 </eAnnotations>
248 </eStructuralFeatures>
249 <eStructuralFeatures xsi:type="ecore:EReference" name="eReferences" upperBound="-1"
250 eType="#//EReference" changeable="false" volatile="true" transient="true"
251 derived="true">
252 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
253 <details key="kind" value="attribute"/>
254 <details key="name" value="eReferences"/>
255 </eAnnotations>
256 </eStructuralFeatures>
257 <eStructuralFeatures xsi:type="ecore:EReference" name="eSuperTypes" upperBound="-1"
258 eType="#//EClass" unsettable="true">
259 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
260 <details key="kind" value="attribute"/>
261 <details key="name" value="eSuperTypes"/>
262 </eAnnotations>
263 <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
264 <details key="suppressedIsSetVisibility" value="true"/>
265 <details key="suppressedUnsetVisibility" value="true"/>
266 </eAnnotations>
267 </eStructuralFeatures>
268 <eStructuralFeatures xsi:type="ecore:EAttribute" name="interface" eType="#//EBoolean">
269 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
270 <details key="kind" value="attribute"/>
271 <details key="name" value="interface"/>
272 </eAnnotations>
273 </eStructuralFeatures>
274 </eClassifiers>
275 <eClassifiers xsi:type="ecore:EClass" name="EClassifier" abstract="true" eSuperTypes="#//ENamedElement">
276 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
277 <details key="name" value="EClassifier"/>
278 <details key="kind" value="elementOnly"/>
279 </eAnnotations>
280 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
281 <details key="constraints" value="WellFormedInstanceTypeName UniqueTypeParameterNames"/>
282 </eAnnotations>
283 <eOperations name="isInstance" eType="#//EBoolean">
284 <eParameters name="object" eType="#//EJavaObject"/>
285 </eOperations>
286 <eOperations name="getClassifierID" eType="#//EInt"/>
287 <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameters" upperBound="-1"
288 eType="#//ETypeParameter" containment="true">
289 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
290 <details key="kind" value="element"/>
291 <details key="name" value="eTypeParameters"/>
292 </eAnnotations>
293 </eStructuralFeatures>
294 <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="#//EJavaObject"
295 changeable="false" volatile="true" transient="true" derived="true">
296 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
297 <details key="kind" value="attribute"/>
298 <details key="name" value="defaultValue"/>
299 </eAnnotations>
300 </eStructuralFeatures>
301 <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClass" changeable="false"
302 volatile="true" transient="true" derived="true">
303 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
304 <details key="kind" value="attribute"/>
305 <details key="name" value="instanceClass"/>
306 </eAnnotations>
307 <eGenericType eClassifier="#//EJavaClass">
308 <eTypeArguments/>
309 </eGenericType>
310 </eStructuralFeatures>
311 <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClassName" eType="#//EString"
312 volatile="true" unsettable="true">
313 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
314 <details key="kind" value="attribute"/>
315 <details key="name" value="instanceClassName"/>
316 </eAnnotations>
317 <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
318 <details key="suppressedIsSetVisibility" value="true"/>
319 <details key="suppressedUnsetVisibility" value="true"/>
320 </eAnnotations>
321 </eStructuralFeatures>
322 <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceTypeName" eType="#//EString"
323 volatile="true" unsettable="true">
324 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
325 <details key="kind" value="attribute"/>
326 <details key="name" value="instanceTypeName"/>
327 </eAnnotations>
328 <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
329 <details key="suppressedIsSetVisibility" value="true"/>
330 <details key="suppressedUnsetVisibility" value="true"/>
331 </eAnnotations>
332 </eStructuralFeatures>
333 <eStructuralFeatures xsi:type="ecore:EReference" name="ePackage" eType="#//EPackage"
334 transient="true" eOpposite="#//EPackage/eClassifiers"/>
335 </eClassifiers>
336 <eClassifiers xsi:type="ecore:EClass" name="EDataType" eSuperTypes="#//EClassifier">
337 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
338 <details key="name" value="EDataType"/>
339 <details key="kind" value="elementOnly"/>
340 </eAnnotations>
341 <eStructuralFeatures xsi:type="ecore:EAttribute" name="serializable" eType="#//EBoolean"
342 defaultValueLiteral="true">
343 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
344 <details key="kind" value="attribute"/>
345 <details key="name" value="serializable"/>
346 </eAnnotations>
347 </eStructuralFeatures>
348 </eClassifiers>
349 <eClassifiers xsi:type="ecore:EDataType" name="EDate" instanceClassName="java.util.Date">
350 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
351 <details key="name" value="EDate"/>
352 </eAnnotations>
353 </eClassifiers>
354 <eClassifiers xsi:type="ecore:EDataType" name="EDiagnosticChain" instanceClassName="org.eclipse.emf.common.util.DiagnosticChain"
355 serializable="false">
356 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
357 <details key="name" value="EDiagnosticChain"/>
358 </eAnnotations>
359 </eClassifiers>
360 <eClassifiers xsi:type="ecore:EDataType" name="EDouble" instanceClassName="double">
361 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
362 <details key="name" value="EDouble"/>
363 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#double"/>
364 </eAnnotations>
365 </eClassifiers>
366 <eClassifiers xsi:type="ecore:EDataType" name="EDoubleObject" instanceClassName="java.lang.Double">
367 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
368 <details key="name" value="EDouble:Object"/>
369 <details key="baseType" value="EDouble"/>
370 </eAnnotations>
371 </eClassifiers>
372 <eClassifiers xsi:type="ecore:EDataType" name="EEList" instanceClassName="org.eclipse.emf.common.util.EList"
373 serializable="false">
374 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
375 <details key="name" value="EEList"/>
376 </eAnnotations>
377 <eTypeParameters name="E"/>
378 </eClassifiers>
379 <eClassifiers xsi:type="ecore:EClass" name="EEnum" eSuperTypes="#//EDataType">
380 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
381 <details key="name" value="EEnum"/>
382 <details key="kind" value="elementOnly"/>
383 </eAnnotations>
384 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
385 <details key="constraints" value="UniqueEnumeratorNames UniqueEnumeratorLiterals"/>
386 </eAnnotations>
387 <eOperations name="getEEnumLiteral" eType="#//EEnumLiteral">
388 <eParameters name="name" eType="#//EString"/>
389 </eOperations>
390 <eOperations name="getEEnumLiteral" eType="#//EEnumLiteral">
391 <eParameters name="value" eType="#//EInt"/>
392 </eOperations>
393 <eOperations name="getEEnumLiteralByLiteral" eType="#//EEnumLiteral">
394 <eParameters name="literal" eType="#//EString"/>
395 </eOperations>
396 <eStructuralFeatures xsi:type="ecore:EReference" name="eLiterals" upperBound="-1"
397 eType="#//EEnumLiteral" containment="true" resolveProxies="false" eOpposite="#//EEnumLiteral/eEnum">
398 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
399 <details key="kind" value="element"/>
400 <details key="name" value="eLiterals"/>
401 </eAnnotations>
402 </eStructuralFeatures>
403 </eClassifiers>
404 <eClassifiers xsi:type="ecore:EDataType" name="EEnumerator" instanceClassName="org.eclipse.emf.common.util.Enumerator"
405 serializable="false">
406 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
407 <details key="name" value="EEnumerator"/>
408 </eAnnotations>
409 </eClassifiers>
410 <eClassifiers xsi:type="ecore:EClass" name="EEnumLiteral" eSuperTypes="#//ENamedElement">
411 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
412 <details key="name" value="EEnumLiteral"/>
413 <details key="kind" value="elementOnly"/>
414 </eAnnotations>
415 <eStructuralFeatures xsi:type="ecore:EAttribute" name="instance" eType="#//EEnumerator"
416 transient="true">
417 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
418 <details key="kind" value="attribute"/>
419 <details key="name" value="instance"/>
420 </eAnnotations>
421 </eStructuralFeatures>
422 <eStructuralFeatures xsi:type="ecore:EAttribute" name="literal" eType="#//EString">
423 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
424 <details key="kind" value="attribute"/>
425 <details key="name" value="literal"/>
426 </eAnnotations>
427 </eStructuralFeatures>
428 <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//EInt">
429 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
430 <details key="kind" value="attribute"/>
431 <details key="name" value="value"/>
432 </eAnnotations>
433 </eStructuralFeatures>
434 <eStructuralFeatures xsi:type="ecore:EReference" name="eEnum" eType="#//EEnum"
435 transient="true" eOpposite="#//EEnum/eLiterals"/>
436 </eClassifiers>
437 <eClassifiers xsi:type="ecore:EClass" name="EFactory" eSuperTypes="#//EModelElement">
438 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
439 <details key="name" value="EFactory"/>
440 <details key="kind" value="elementOnly"/>
441 </eAnnotations>
442 <eOperations name="create" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
443 <eParameters name="eClass" eType="#//EClass"/>
444 </eOperations>
445 <eOperations name="createFromString" eType="#//EJavaObject">
446 <eParameters name="eDataType" eType="#//EDataType"/>
447 <eParameters name="literalValue" eType="#//EString"/>
448 </eOperations>
449 <eOperations name="convertToString" eType="#//EString">
450 <eParameters name="eDataType" eType="#//EDataType"/>
451 <eParameters name="instanceValue" eType="#//EJavaObject"/>
452 </eOperations>
453 <eStructuralFeatures xsi:type="ecore:EReference" name="ePackage" lowerBound="1"
454 eType="#//EPackage" transient="true" resolveProxies="false" eOpposite="#//EPackage/eFactoryInstance">
455 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
456 <details key="kind" value="attribute"/>
457 <details key="name" value="ePackage"/>
458 </eAnnotations>
459 </eStructuralFeatures>
460 </eClassifiers>
461 <eClassifiers xsi:type="ecore:EDataType" name="EFeatureMap" instanceClassName="org.eclipse.emf.ecore.util.FeatureMap"
462 serializable="false">
463 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
464 <details key="name" value="EFeatureMap"/>
465 </eAnnotations>
466 </eClassifiers>
467 <eClassifiers xsi:type="ecore:EDataType" name="EFeatureMapEntry" instanceClassName="org.eclipse.emf.ecore.util.FeatureMap$Entry"
468 serializable="false">
469 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
470 <details key="name" value="EFeatureMapEntry"/>
471 </eAnnotations>
472 </eClassifiers>
473 <eClassifiers xsi:type="ecore:EDataType" name="EFloat" instanceClassName="float">
474 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
475 <details key="name" value="EFloat"/>
476 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#float"/>
477 </eAnnotations>
478 </eClassifiers>
479 <eClassifiers xsi:type="ecore:EDataType" name="EFloatObject" instanceClassName="java.lang.Float">
480 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
481 <details key="name" value="EFloat:Object"/>
482 <details key="baseType" value="EFloat"/>
483 </eAnnotations>
484 </eClassifiers>
485 <eClassifiers xsi:type="ecore:EClass" name="EGenericType">
486 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
487 <details key="name" value="EGenericType"/>
488 <details key="kind" value="elementOnly"/>
489 </eAnnotations>
490 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
491 <details key="constraints" value="ConsistentType ConsistentBounds ConsistentArguments"/>
492 </eAnnotations>
493 <eStructuralFeatures xsi:type="ecore:EReference" name="eUpperBound" eType="#//EGenericType"
494 containment="true" resolveProxies="false">
495 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
496 <details key="kind" value="element"/>
497 <details key="name" value="eUpperBound"/>
498 </eAnnotations>
499 </eStructuralFeatures>
500 <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeArguments" upperBound="-1"
501 eType="#//EGenericType" containment="true" resolveProxies="false">
502 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
503 <details key="kind" value="element"/>
504 <details key="name" value="eTypeArguments"/>
505 </eAnnotations>
506 </eStructuralFeatures>
507 <eStructuralFeatures xsi:type="ecore:EReference" name="eLowerBound" eType="#//EGenericType"
508 containment="true" resolveProxies="false">
509 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
510 <details key="kind" value="element"/>
511 <details key="name" value="eLowerBound"/>
512 </eAnnotations>
513 </eStructuralFeatures>
514 <eStructuralFeatures xsi:type="ecore:EReference" name="eClassifier" eType="#//EClassifier">
515 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
516 <details key="kind" value="attribute"/>
517 <details key="name" value="eClassifier"/>
518 </eAnnotations>
519 </eStructuralFeatures>
520 <eStructuralFeatures xsi:type="ecore:EReference" name="eRawType" lowerBound="1"
521 eType="#//EClassifier" changeable="false" transient="true" derived="true">
522 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
523 <details key="kind" value="attribute"/>
524 <details key="name" value="eRawType"/>
525 </eAnnotations>
526 </eStructuralFeatures>
527 <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameter" eType="#//ETypeParameter"
528 resolveProxies="false">
529 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
530 <details key="kind" value="attribute"/>
531 <details key="name" value="eTypeParameter"/>
532 </eAnnotations>
533 </eStructuralFeatures>
534 </eClassifiers>
535 <eClassifiers xsi:type="ecore:EDataType" name="EInt" instanceClassName="int">
536 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
537 <details key="name" value="EInt"/>
538 </eAnnotations>
539 </eClassifiers>
540 <eClassifiers xsi:type="ecore:EDataType" name="EIntegerObject" instanceClassName="java.lang.Integer">
541 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
542 <details key="name" value="EInt:Object"/>
543 <details key="baseType" value="EInt"/>
544 </eAnnotations>
545 </eClassifiers>
546 <eClassifiers xsi:type="ecore:EDataType" name="EInvocationTargetException" instanceClassName="java.lang.reflect.InvocationTargetException"
547 serializable="false">
548 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
549 <details key="name" value="EInvocationTargetException"/>
550 </eAnnotations>
551 </eClassifiers>
552 <eClassifiers xsi:type="ecore:EDataType" name="EJavaClass" instanceClassName="java.lang.Class">
553 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
554 <details key="name" value="EJavaClass"/>
555 </eAnnotations>
556 <eTypeParameters name="T"/>
557 </eClassifiers>
558 <eClassifiers xsi:type="ecore:EDataType" name="EJavaObject" instanceClassName="java.lang.Object">
559 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
560 <details key="name" value="EJavaObject"/>
561 </eAnnotations>
562 </eClassifiers>
563 <eClassifiers xsi:type="ecore:EDataType" name="ELong" instanceClassName="long">
564 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
565 <details key="name" value="ELong"/>
566 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#long"/>
567 </eAnnotations>
568 </eClassifiers>
569 <eClassifiers xsi:type="ecore:EDataType" name="ELongObject" instanceClassName="java.lang.Long">
570 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
571 <details key="name" value="ELong:Object"/>
572 <details key="baseType" value="ELong"/>
573 </eAnnotations>
574 </eClassifiers>
575 <eClassifiers xsi:type="ecore:EDataType" name="EMap" instanceClassName="java.util.Map"
576 serializable="false">
577 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
578 <details key="name" value="EMap"/>
579 </eAnnotations>
580 <eTypeParameters name="K"/>
581 <eTypeParameters name="V"/>
582 </eClassifiers>
583 <eClassifiers xsi:type="ecore:EClass" name="EModelElement" abstract="true">
584 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
585 <details key="name" value="EModelElement"/>
586 <details key="kind" value="elementOnly"/>
587 </eAnnotations>
588 <eOperations name="getEAnnotation" eType="#//EAnnotation">
589 <eParameters name="source" eType="#//EString"/>
590 </eOperations>
591 <eStructuralFeatures xsi:type="ecore:EReference" name="eAnnotations" upperBound="-1"
592 eType="#//EAnnotation" containment="true" resolveProxies="false" eOpposite="#//EAnnotation/eModelElement">
593 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
594 <details key="kind" value="element"/>
595 <details key="name" value="eAnnotations"/>
596 </eAnnotations>
597 </eStructuralFeatures>
598 </eClassifiers>
599 <eClassifiers xsi:type="ecore:EClass" name="ENamedElement" abstract="true" eSuperTypes="#//EModelElement">
600 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
601 <details key="name" value="ENamedElement"/>
602 <details key="kind" value="elementOnly"/>
603 </eAnnotations>
604 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
605 <details key="constraints" value="WellFormedName"/>
606 </eAnnotations>
607 <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//EString">
608 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
609 <details key="kind" value="attribute"/>
610 <details key="name" value="name"/>
611 </eAnnotations>
612 </eStructuralFeatures>
613 </eClassifiers>
614 <eClassifiers xsi:type="ecore:EClass" name="EObject">
615 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
616 <details key="name" value="EObject"/>
617 <details key="kind" value="empty"/>
618 </eAnnotations>
619 <eOperations name="eClass" eType="#//EClass"/>
620 <eOperations name="eIsProxy" eType="#//EBoolean"/>
621 <eOperations name="eResource" eType="#//EResource"/>
622 <eOperations name="eContainer" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
623 <eOperations name="eContainingFeature" eType="#//EStructuralFeature"/>
624 <eOperations name="eContainmentFeature" eType="#//EReference"/>
625 <eOperations name="eContents">
626 <eGenericType eClassifier="#//EEList">
627 <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
628 </eGenericType>
629 </eOperations>
630 <eOperations name="eAllContents">
631 <eGenericType eClassifier="#//ETreeIterator">
632 <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
633 </eGenericType>
634 </eOperations>
635 <eOperations name="eCrossReferences">
636 <eGenericType eClassifier="#//EEList">
637 <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
638 </eGenericType>
639 </eOperations>
640 <eOperations name="eGet" eType="#//EJavaObject">
641 <eParameters name="feature" eType="#//EStructuralFeature"/>
642 </eOperations>
643 <eOperations name="eGet" eType="#//EJavaObject">
644 <eParameters name="feature" eType="#//EStructuralFeature"/>
645 <eParameters name="resolve" eType="#//EBoolean"/>
646 </eOperations>
647 <eOperations name="eSet">
648 <eParameters name="feature" eType="#//EStructuralFeature"/>
649 <eParameters name="newValue" eType="#//EJavaObject"/>
650 </eOperations>
651 <eOperations name="eIsSet" eType="#//EBoolean">
652 <eParameters name="feature" eType="#//EStructuralFeature"/>
653 </eOperations>
654 <eOperations name="eUnset">
655 <eParameters name="feature" eType="#//EStructuralFeature"/>
656 </eOperations>
657 <eOperations name="eInvoke" eType="#//EJavaObject" eExceptions="#//EInvocationTargetException">
658 <eParameters name="operation" eType="#//EOperation"/>
659 <eParameters name="arguments">
660 <eGenericType eClassifier="#//EEList">
661 <eTypeArguments/>
662 </eGenericType>
663 </eParameters>
664 </eOperations>
665 </eClassifiers>
666 <eClassifiers xsi:type="ecore:EClass" name="EOperation" eSuperTypes="#//ETypedElement">
667 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
668 <details key="name" value="EOperation"/>
669 <details key="kind" value="elementOnly"/>
670 </eAnnotations>
671 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
672 <details key="constraints" value="UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"/>
673 </eAnnotations>
674 <eOperations name="getOperationID" eType="#//EInt"/>
675 <eOperations name="isOverrideOf" eType="#//EBoolean">
676 <eParameters name="someOperation" eType="#//EOperation"/>
677 </eOperations>
678 <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameters" upperBound="-1"
679 eType="#//ETypeParameter" containment="true">
680 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
681 <details key="kind" value="element"/>
682 <details key="name" value="eTypeParameters"/>
683 </eAnnotations>
684 </eStructuralFeatures>
685 <eStructuralFeatures xsi:type="ecore:EReference" name="eParameters" upperBound="-1"
686 eType="#//EParameter" containment="true" resolveProxies="false" eOpposite="#//EParameter/eOperation">
687 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
688 <details key="kind" value="element"/>
689 <details key="name" value="eParameters"/>
690 </eAnnotations>
691 </eStructuralFeatures>
692 <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericExceptions" upperBound="-1"
693 eType="#//EGenericType" unsettable="true" containment="true" resolveProxies="false">
694 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
695 <details key="kind" value="element"/>
696 <details key="name" value="eGenericExceptions"/>
697 </eAnnotations>
698 <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
699 <details key="suppressedIsSetVisibility" value="true"/>
700 <details key="suppressedUnsetVisibility" value="true"/>
701 </eAnnotations>
702 </eStructuralFeatures>
703 <eStructuralFeatures xsi:type="ecore:EReference" name="eExceptions" upperBound="-1"
704 eType="#//EClassifier" unsettable="true">
705 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
706 <details key="kind" value="attribute"/>
707 <details key="name" value="eExceptions"/>
708 </eAnnotations>
709 <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
710 <details key="suppressedIsSetVisibility" value="true"/>
711 <details key="suppressedUnsetVisibility" value="true"/>
712 </eAnnotations>
713 </eStructuralFeatures>
714 <eStructuralFeatures xsi:type="ecore:EReference" name="eContainingClass" eType="#//EClass"
715 transient="true" eOpposite="#//EClass/eOperations"/>
716 </eClassifiers>
717 <eClassifiers xsi:type="ecore:EClass" name="EPackage" eSuperTypes="#//ENamedElement">
718 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
719 <details key="name" value="EPackage"/>
720 <details key="kind" value="elementOnly"/>
721 </eAnnotations>
722 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
723 <details key="constraints" value="WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"/>
724 </eAnnotations>
725 <eOperations name="getEClassifier" eType="#//EClassifier">
726 <eParameters name="name" eType="#//EString"/>
727 </eOperations>
728 <eStructuralFeatures xsi:type="ecore:EReference" name="eClassifiers" upperBound="-1"
729 eType="#//EClassifier" containment="true" eOpposite="#//EClassifier/ePackage">
730 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
731 <details key="kind" value="element"/>
732 <details key="name" value="eClassifiers"/>
733 </eAnnotations>
734 </eStructuralFeatures>
735 <eStructuralFeatures xsi:type="ecore:EReference" name="eSubpackages" upperBound="-1"
736 eType="#//EPackage" containment="true" eOpposite="#//EPackage/eSuperPackage">
737 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
738 <details key="kind" value="element"/>
739 <details key="name" value="eSubpackages"/>
740 </eAnnotations>
741 </eStructuralFeatures>
742 <eStructuralFeatures xsi:type="ecore:EReference" name="eFactoryInstance" lowerBound="1"
743 eType="#//EFactory" transient="true" resolveProxies="false" eOpposite="#//EFactory/ePackage">
744 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
745 <details key="kind" value="attribute"/>
746 <details key="name" value="eFactoryInstance"/>
747 </eAnnotations>
748 </eStructuralFeatures>
749 <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsPrefix" eType="#//EString">
750 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
751 <details key="kind" value="attribute"/>
752 <details key="name" value="nsPrefix"/>
753 </eAnnotations>
754 </eStructuralFeatures>
755 <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsURI" eType="#//EString">
756 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
757 <details key="kind" value="attribute"/>
758 <details key="name" value="nsURI"/>
759 </eAnnotations>
760 </eStructuralFeatures>
761 <eStructuralFeatures xsi:type="ecore:EReference" name="eSuperPackage" eType="#//EPackage"
762 transient="true" eOpposite="#//EPackage/eSubpackages"/>
763 </eClassifiers>
764 <eClassifiers xsi:type="ecore:EClass" name="EParameter" eSuperTypes="#//ETypedElement">
765 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
766 <details key="name" value="EParameter"/>
767 <details key="kind" value="elementOnly"/>
768 </eAnnotations>
769 <eStructuralFeatures xsi:type="ecore:EReference" name="eOperation" eType="#//EOperation"
770 transient="true" eOpposite="#//EOperation/eParameters"/>
771 </eClassifiers>
772 <eClassifiers xsi:type="ecore:EClass" name="EReference" eSuperTypes="#//EStructuralFeature">
773 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
774 <details key="name" value="EReference"/>
775 <details key="kind" value="elementOnly"/>
776 </eAnnotations>
777 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
778 <details key="constraints" value="ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"/>
779 </eAnnotations>
780 <eStructuralFeatures xsi:type="ecore:EAttribute" name="container" eType="#//EBoolean"
781 changeable="false" volatile="true" transient="true" derived="true">
782 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
783 <details key="kind" value="attribute"/>
784 <details key="name" value="container"/>
785 </eAnnotations>
786 </eStructuralFeatures>
787 <eStructuralFeatures xsi:type="ecore:EAttribute" name="containment" eType="#//EBoolean">
788 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
789 <details key="kind" value="attribute"/>
790 <details key="name" value="containment"/>
791 </eAnnotations>
792 </eStructuralFeatures>
793 <eStructuralFeatures xsi:type="ecore:EReference" name="eKeys" upperBound="-1"
794 eType="#//EAttribute">
795 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
796 <details key="kind" value="attribute"/>
797 <details key="name" value="eKeys"/>
798 </eAnnotations>
799 </eStructuralFeatures>
800 <eStructuralFeatures xsi:type="ecore:EReference" name="eOpposite" eType="#//EReference">
801 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
802 <details key="kind" value="attribute"/>
803 <details key="name" value="eOpposite"/>
804 </eAnnotations>
805 </eStructuralFeatures>
806 <eStructuralFeatures xsi:type="ecore:EReference" name="eReferenceType" lowerBound="1"
807 eType="#//EClass" changeable="false" volatile="true" transient="true" derived="true">
808 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
809 <details key="kind" value="attribute"/>
810 <details key="name" value="eReferenceType"/>
811 </eAnnotations>
812 </eStructuralFeatures>
813 <eStructuralFeatures xsi:type="ecore:EAttribute" name="resolveProxies" eType="#//EBoolean"
814 defaultValueLiteral="true">
815 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
816 <details key="kind" value="attribute"/>
817 <details key="name" value="resolveProxies"/>
818 </eAnnotations>
819 </eStructuralFeatures>
820 </eClassifiers>
821 <eClassifiers xsi:type="ecore:EDataType" name="EResource" instanceClassName="org.eclipse.emf.ecore.resource.Resource"
822 serializable="false">
823 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
824 <details key="name" value="EResource"/>
825 </eAnnotations>
826 </eClassifiers>
827 <eClassifiers xsi:type="ecore:EDataType" name="EResourceSet" instanceClassName="org.eclipse.emf.ecore.resource.ResourceSet"
828 serializable="false">
829 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
830 <details key="name" value="EResourceSet"/>
831 </eAnnotations>
832 </eClassifiers>
833 <eClassifiers xsi:type="ecore:EDataType" name="EShort" instanceClassName="short">
834 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
835 <details key="name" value="EShort"/>
836 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#short"/>
837 </eAnnotations>
838 </eClassifiers>
839 <eClassifiers xsi:type="ecore:EDataType" name="EShortObject" instanceClassName="java.lang.Short">
840 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
841 <details key="name" value="EShort:Object"/>
842 <details key="baseType" value="EShort"/>
843 </eAnnotations>
844 </eClassifiers>
845 <eClassifiers xsi:type="ecore:EDataType" name="EString" instanceClassName="java.lang.String">
846 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
847 <details key="name" value="EString"/>
848 <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#string"/>
849 </eAnnotations>
850 </eClassifiers>
851 <eClassifiers xsi:type="ecore:EClass" name="EStringToStringMapEntry" instanceClassName="java.util.Map$Entry">
852 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
853 <details key="name" value="EStringToStringMapEntry"/>
854 <details key="kind" value="empty"/>
855 </eAnnotations>
856 <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//EString">
857 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
858 <details key="kind" value="attribute"/>
859 <details key="name" value="key"/>
860 </eAnnotations>
861 </eStructuralFeatures>
862 <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//EString">
863 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
864 <details key="kind" value="attribute"/>
865 <details key="name" value="value"/>
866 </eAnnotations>
867 </eStructuralFeatures>
868 </eClassifiers>
869 <eClassifiers xsi:type="ecore:EClass" name="EStructuralFeature" abstract="true"
870 eSuperTypes="#//ETypedElement">
871 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
872 <details key="name" value="EStructuralFeature"/>
873 <details key="kind" value="elementOnly"/>
874 </eAnnotations>
875 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
876 <details key="constraints" value="ValidDefaultValueLiteral"/>
877 </eAnnotations>
878 <eOperations name="getFeatureID" eType="#//EInt"/>
879 <eOperations name="getContainerClass">
880 <eGenericType eClassifier="#//EJavaClass">
881 <eTypeArguments/>
882 </eGenericType>
883 </eOperations>
884 <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeable" eType="#//EBoolean"
885 defaultValueLiteral="true">
886 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
887 <details key="kind" value="attribute"/>
888 <details key="name" value="changeable"/>
889 </eAnnotations>
890 </eStructuralFeatures>
891 <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="#//EJavaObject"
892 changeable="false" volatile="true" transient="true" derived="true">
893 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
894 <details key="kind" value="attribute"/>
895 <details key="name" value="defaultValue"/>
896 </eAnnotations>
897 </eStructuralFeatures>
898 <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValueLiteral" eType="#//EString">
899 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
900 <details key="kind" value="attribute"/>
901 <details key="name" value="defaultValueLiteral"/>
902 </eAnnotations>
903 </eStructuralFeatures>
904 <eStructuralFeatures xsi:type="ecore:EAttribute" name="derived" eType="#//EBoolean">
905 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
906 <details key="kind" value="attribute"/>
907 <details key="name" value="derived"/>
908 </eAnnotations>
909 </eStructuralFeatures>
910 <eStructuralFeatures xsi:type="ecore:EAttribute" name="transient" eType="#//EBoolean">
911 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
912 <details key="kind" value="attribute"/>
913 <details key="name" value="transient"/>
914 </eAnnotations>
915 </eStructuralFeatures>
916 <eStructuralFeatures xsi:type="ecore:EAttribute" name="unsettable" eType="#//EBoolean">
917 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
918 <details key="kind" value="attribute"/>
919 <details key="name" value="unsettable"/>
920 </eAnnotations>
921 </eStructuralFeatures>
922 <eStructuralFeatures xsi:type="ecore:EAttribute" name="volatile" eType="#//EBoolean">
923 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
924 <details key="kind" value="attribute"/>
925 <details key="name" value="volatile"/>
926 </eAnnotations>
927 </eStructuralFeatures>
928 <eStructuralFeatures xsi:type="ecore:EReference" name="eContainingClass" eType="#//EClass"
929 transient="true" eOpposite="#//EClass/eStructuralFeatures"/>
930 </eClassifiers>
931 <eClassifiers xsi:type="ecore:EDataType" name="ETreeIterator" instanceClassName="org.eclipse.emf.common.util.TreeIterator"
932 serializable="false">
933 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
934 <details key="name" value="ETreeIterator"/>
935 </eAnnotations>
936 <eTypeParameters name="E"/>
937 </eClassifiers>
938 <eClassifiers xsi:type="ecore:EClass" name="ETypedElement" abstract="true" eSuperTypes="#//ENamedElement">
939 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
940 <details key="name" value="ETypedElement"/>
941 <details key="kind" value="elementOnly"/>
942 </eAnnotations>
943 <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
944 <details key="constraints" value="ValidLowerBound ValidUpperBound ConsistentBounds ValidType"/>
945 </eAnnotations>
946 <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericType" eType="#//EGenericType"
947 volatile="true" unsettable="true" containment="true" resolveProxies="false">
948 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
949 <details key="kind" value="element"/>
950 <details key="name" value="eGenericType"/>
951 </eAnnotations>
952 <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
953 <details key="suppressedIsSetVisibility" value="true"/>
954 <details key="suppressedUnsetVisibility" value="true"/>
955 </eAnnotations>
956 </eStructuralFeatures>
957 <eStructuralFeatures xsi:type="ecore:EReference" name="eType" eType="#//EClassifier"
958 volatile="true" unsettable="true">
959 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
960 <details key="kind" value="attribute"/>
961 <details key="name" value="eType"/>
962 </eAnnotations>
963 <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
964 <details key="suppressedIsSetVisibility" value="true"/>
965 <details key="suppressedUnsetVisibility" value="true"/>
966 </eAnnotations>
967 </eStructuralFeatures>
968 <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="#//EInt">
969 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
970 <details key="kind" value="attribute"/>
971 <details key="name" value="lowerBound"/>
972 </eAnnotations>
973 </eStructuralFeatures>
974 <eStructuralFeatures xsi:type="ecore:EAttribute" name="many" eType="#//EBoolean"
975 changeable="false" volatile="true" transient="true" derived="true">
976 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
977 <details key="kind" value="attribute"/>
978 <details key="name" value="many"/>
979 </eAnnotations>
980 </eStructuralFeatures>
981 <eStructuralFeatures xsi:type="ecore:EAttribute" name="ordered" eType="#//EBoolean"
982 defaultValueLiteral="true">
983 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
984 <details key="kind" value="attribute"/>
985 <details key="name" value="ordered"/>
986 </eAnnotations>
987 </eStructuralFeatures>
988 <eStructuralFeatures xsi:type="ecore:EAttribute" name="required" eType="#//EBoolean"
989 changeable="false" volatile="true" transient="true" derived="true">
990 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
991 <details key="kind" value="attribute"/>
992 <details key="name" value="required"/>
993 </eAnnotations>
994 </eStructuralFeatures>
995 <eStructuralFeatures xsi:type="ecore:EAttribute" name="unique" eType="#//EBoolean"
996 defaultValueLiteral="true">
997 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
998 <details key="kind" value="attribute"/>
999 <details key="name" value="unique"/>
1000 </eAnnotations>
1001 </eStructuralFeatures>
1002 <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" eType="#//EInt"
1003 defaultValueLiteral="1">
1004 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
1005 <details key="kind" value="attribute"/>
1006 <details key="name" value="upperBound"/>
1007 </eAnnotations>
1008 </eStructuralFeatures>
1009 </eClassifiers>
1010 <eClassifiers xsi:type="ecore:EClass" name="ETypeParameter" eSuperTypes="#//ENamedElement">
1011 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
1012 <details key="name" value="ETypeParameter"/>
1013 <details key="kind" value="elementOnly"/>
1014 </eAnnotations>
1015 <eStructuralFeatures xsi:type="ecore:EReference" name="eBounds" upperBound="-1"
1016 eType="#//EGenericType" containment="true" resolveProxies="false">
1017 <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
1018 <details key="kind" value="element"/>
1019 <details key="name" value="eBounds"/>
1020 </eAnnotations>
1021 </eStructuralFeatures>
1022 </eClassifiers>
1023</ecore:EPackage>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.xml b/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.xml
index 6f4ab31b..6ac719c8 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.xml
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.xml
@@ -12,4 +12,9 @@
12 <query-specification fqn="ca.mcgill.ecse.socialnetwork.plugin.friendship"/> 12 <query-specification fqn="ca.mcgill.ecse.socialnetwork.plugin.friendship"/>
13 </group> 13 </group>
14 </extension> 14 </extension>
15 <extension id="queries.Ecore_pattern" point="org.eclipse.viatra.query.runtime.queryspecification">
16 <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:queries.Ecore_pattern" id="queries.Ecore_pattern">
17 <query-specification fqn="queries.sameSuperClass"/>
18 </group>
19 </extension>
15</plugin> 20</plugin>
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/queries/queries/ecore_pattern.vql b/Metrics/Metrics-Calculation/SocialNetwork_plugin/queries/queries/ecore_pattern.vql
new file mode 100644
index 00000000..a6f384d9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/queries/queries/ecore_pattern.vql
@@ -0,0 +1,9 @@
1package queries
2import epackage "http://www.eclipse.org/emf/2002/Ecore"
3
4@Constraint(severity="error", message="error", key = {c})
5pattern sameSuperClass(c : EClass, s1 : EClass, s2: EClass) {
6 EClass.eSuperTypes(c, s1);
7 EClass.eSuperTypes(c, s2);
8 s1 == s2;
9} \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/.gitignore
new file mode 100644
index 00000000..121edf31
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/.gitignore
@@ -0,0 +1,3 @@
1/.Ecore_pattern.java._trace
2/.MultipleTransitionFromEntry.java._trace
3/.SameSuperClass.java._trace
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Ecore_pattern.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Ecore_pattern.java
new file mode 100644
index 00000000..e2627646
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Ecore_pattern.java
@@ -0,0 +1,53 @@
1/**
2 * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/ecore_pattern.vql
3 */
4package queries;
5
6import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
7import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedPatternGroup;
8import queries.SameSuperClass;
9
10/**
11 * A pattern group formed of all public patterns defined in ecore_pattern.vql.
12 *
13 * <p>Use the static instance as any {@link interface org.eclipse.viatra.query.runtime.api.IQueryGroup}, to conveniently prepare
14 * a VIATRA Query engine for matching all patterns originally defined in file ecore_pattern.vql,
15 * in order to achieve better performance than one-by-one on-demand matcher initialization.
16 *
17 * <p> From package queries, the group contains the definition of the following patterns: <ul>
18 * <li>sameSuperClass</li>
19 * </ul>
20 *
21 * @see IQueryGroup
22 *
23 */
24@SuppressWarnings("all")
25public final class Ecore_pattern extends BaseGeneratedPatternGroup {
26 /**
27 * Access the pattern group.
28 *
29 * @return the singleton instance of the group
30 * @throws ViatraQueryRuntimeException if there was an error loading the generated code of pattern specifications
31 *
32 */
33 public static Ecore_pattern instance() {
34 if (INSTANCE == null) {
35 INSTANCE = new Ecore_pattern();
36 }
37 return INSTANCE;
38 }
39
40 private static Ecore_pattern INSTANCE;
41
42 private Ecore_pattern() {
43 querySpecifications.add(SameSuperClass.instance());
44 }
45
46 public SameSuperClass getSameSuperClass() {
47 return SameSuperClass.instance();
48 }
49
50 public SameSuperClass.Matcher getSameSuperClass(final ViatraQueryEngine engine) {
51 return SameSuperClass.Matcher.on(engine);
52 }
53}
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/SameSuperClass.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/SameSuperClass.java
new file mode 100644
index 00000000..2e8a19d8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/SameSuperClass.java
@@ -0,0 +1,824 @@
1/**
2 * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/ecore_pattern.vql
3 */
4package queries;
5
6import java.util.Arrays;
7import java.util.Collection;
8import java.util.LinkedHashSet;
9import java.util.List;
10import java.util.Objects;
11import java.util.Optional;
12import java.util.Set;
13import java.util.function.Consumer;
14import java.util.stream.Collectors;
15import java.util.stream.Stream;
16import org.apache.log4j.Logger;
17import org.eclipse.emf.ecore.EClass;
18import org.eclipse.viatra.query.runtime.api.IPatternMatch;
19import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
20import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
21import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
22import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
23import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
24import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
25import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
26import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
27import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
28import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
30import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41
42/**
43 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
44 *
45 * <p>Original source:
46 * <code><pre>
47 * {@literal @}Constraint(severity="error", message="error", key = {c})
48 * pattern sameSuperClass(c : EClass, s1 : EClass, s2: EClass) {
49 * EClass.eSuperTypes(c, s1);
50 * EClass.eSuperTypes(c, s2);
51 * s1 == s2;
52 * }
53 * </pre></code>
54 *
55 * @see Matcher
56 * @see Match
57 *
58 */
59@SuppressWarnings("all")
60public final class SameSuperClass extends BaseGeneratedEMFQuerySpecification<SameSuperClass.Matcher> {
61 /**
62 * Pattern-specific match representation of the queries.sameSuperClass pattern,
63 * to be used in conjunction with {@link Matcher}.
64 *
65 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
66 * Each instance is a (possibly partial) substitution of pattern parameters,
67 * usable to represent a match of the pattern in the result of a query,
68 * or to specify the bound (fixed) input parameters when issuing a query.
69 *
70 * @see Matcher
71 *
72 */
73 public static abstract class Match extends BasePatternMatch {
74 private EClass fC;
75
76 private EClass fS1;
77
78 private EClass fS2;
79
80 private static List<String> parameterNames = makeImmutableList("c", "s1", "s2");
81
82 private Match(final EClass pC, final EClass pS1, final EClass pS2) {
83 this.fC = pC;
84 this.fS1 = pS1;
85 this.fS2 = pS2;
86 }
87
88 @Override
89 public Object get(final String parameterName) {
90 if ("c".equals(parameterName)) return this.fC;
91 if ("s1".equals(parameterName)) return this.fS1;
92 if ("s2".equals(parameterName)) return this.fS2;
93 return null;
94 }
95
96 public EClass getC() {
97 return this.fC;
98 }
99
100 public EClass getS1() {
101 return this.fS1;
102 }
103
104 public EClass getS2() {
105 return this.fS2;
106 }
107
108 @Override
109 public boolean set(final String parameterName, final Object newValue) {
110 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
111 if ("c".equals(parameterName) ) {
112 this.fC = (EClass) newValue;
113 return true;
114 }
115 if ("s1".equals(parameterName) ) {
116 this.fS1 = (EClass) newValue;
117 return true;
118 }
119 if ("s2".equals(parameterName) ) {
120 this.fS2 = (EClass) newValue;
121 return true;
122 }
123 return false;
124 }
125
126 public void setC(final EClass pC) {
127 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
128 this.fC = pC;
129 }
130
131 public void setS1(final EClass pS1) {
132 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
133 this.fS1 = pS1;
134 }
135
136 public void setS2(final EClass pS2) {
137 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
138 this.fS2 = pS2;
139 }
140
141 @Override
142 public String patternName() {
143 return "queries.sameSuperClass";
144 }
145
146 @Override
147 public List<String> parameterNames() {
148 return SameSuperClass.Match.parameterNames;
149 }
150
151 @Override
152 public Object[] toArray() {
153 return new Object[]{fC, fS1, fS2};
154 }
155
156 @Override
157 public SameSuperClass.Match toImmutable() {
158 return isMutable() ? newMatch(fC, fS1, fS2) : this;
159 }
160
161 @Override
162 public String prettyPrint() {
163 StringBuilder result = new StringBuilder();
164 result.append("\"c\"=" + prettyPrintValue(fC) + ", ");
165 result.append("\"s1\"=" + prettyPrintValue(fS1) + ", ");
166 result.append("\"s2\"=" + prettyPrintValue(fS2));
167 return result.toString();
168 }
169
170 @Override
171 public int hashCode() {
172 return Objects.hash(fC, fS1, fS2);
173 }
174
175 @Override
176 public boolean equals(final Object obj) {
177 if (this == obj)
178 return true;
179 if (obj == null) {
180 return false;
181 }
182 if ((obj instanceof SameSuperClass.Match)) {
183 SameSuperClass.Match other = (SameSuperClass.Match) obj;
184 return Objects.equals(fC, other.fC) && Objects.equals(fS1, other.fS1) && Objects.equals(fS2, other.fS2);
185 } else {
186 // this should be infrequent
187 if (!(obj instanceof IPatternMatch)) {
188 return false;
189 }
190 IPatternMatch otherSig = (IPatternMatch) obj;
191 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
192 }
193 }
194
195 @Override
196 public SameSuperClass specification() {
197 return SameSuperClass.instance();
198 }
199
200 /**
201 * Returns an empty, mutable match.
202 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
203 *
204 * @return the empty match.
205 *
206 */
207 public static SameSuperClass.Match newEmptyMatch() {
208 return new Mutable(null, null, null);
209 }
210
211 /**
212 * Returns a mutable (partial) match.
213 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
214 *
215 * @param pC the fixed value of pattern parameter c, or null if not bound.
216 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
217 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
218 * @return the new, mutable (partial) match object.
219 *
220 */
221 public static SameSuperClass.Match newMutableMatch(final EClass pC, final EClass pS1, final EClass pS2) {
222 return new Mutable(pC, pS1, pS2);
223 }
224
225 /**
226 * Returns a new (partial) match.
227 * This can be used e.g. to call the matcher with a partial match.
228 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
229 * @param pC the fixed value of pattern parameter c, or null if not bound.
230 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
231 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
232 * @return the (partial) match object.
233 *
234 */
235 public static SameSuperClass.Match newMatch(final EClass pC, final EClass pS1, final EClass pS2) {
236 return new Immutable(pC, pS1, pS2);
237 }
238
239 private static final class Mutable extends SameSuperClass.Match {
240 Mutable(final EClass pC, final EClass pS1, final EClass pS2) {
241 super(pC, pS1, pS2);
242 }
243
244 @Override
245 public boolean isMutable() {
246 return true;
247 }
248 }
249
250 private static final class Immutable extends SameSuperClass.Match {
251 Immutable(final EClass pC, final EClass pS1, final EClass pS2) {
252 super(pC, pS1, pS2);
253 }
254
255 @Override
256 public boolean isMutable() {
257 return false;
258 }
259 }
260 }
261
262 /**
263 * Generated pattern matcher API of the queries.sameSuperClass pattern,
264 * providing pattern-specific query methods.
265 *
266 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
267 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
268 *
269 * <p>Matches of the pattern will be represented as {@link Match}.
270 *
271 * <p>Original source:
272 * <code><pre>
273 * {@literal @}Constraint(severity="error", message="error", key = {c})
274 * pattern sameSuperClass(c : EClass, s1 : EClass, s2: EClass) {
275 * EClass.eSuperTypes(c, s1);
276 * EClass.eSuperTypes(c, s2);
277 * s1 == s2;
278 * }
279 * </pre></code>
280 *
281 * @see Match
282 * @see SameSuperClass
283 *
284 */
285 public static class Matcher extends BaseMatcher<SameSuperClass.Match> {
286 /**
287 * Initializes the pattern matcher within an existing VIATRA Query engine.
288 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
289 *
290 * @param engine the existing VIATRA Query engine in which this matcher will be created.
291 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
292 *
293 */
294 public static SameSuperClass.Matcher on(final ViatraQueryEngine engine) {
295 // check if matcher already exists
296 Matcher matcher = engine.getExistingMatcher(querySpecification());
297 if (matcher == null) {
298 matcher = (Matcher)engine.getMatcher(querySpecification());
299 }
300 return matcher;
301 }
302
303 /**
304 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
305 * @return an initialized matcher
306 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
307 *
308 */
309 public static SameSuperClass.Matcher create() {
310 return new Matcher();
311 }
312
313 private static final int POSITION_C = 0;
314
315 private static final int POSITION_S1 = 1;
316
317 private static final int POSITION_S2 = 2;
318
319 private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SameSuperClass.Matcher.class);
320
321 /**
322 * Initializes the pattern matcher within an existing VIATRA Query engine.
323 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
324 *
325 * @param engine the existing VIATRA Query engine in which this matcher will be created.
326 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
327 *
328 */
329 private Matcher() {
330 super(querySpecification());
331 }
332
333 /**
334 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
335 * @param pC the fixed value of pattern parameter c, or null if not bound.
336 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
337 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
338 * @return matches represented as a Match object.
339 *
340 */
341 public Collection<SameSuperClass.Match> getAllMatches(final EClass pC, final EClass pS1, final EClass pS2) {
342 return rawStreamAllMatches(new Object[]{pC, pS1, pS2}).collect(Collectors.toSet());
343 }
344
345 /**
346 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
347 * </p>
348 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
349 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
350 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
351 * @param pC the fixed value of pattern parameter c, or null if not bound.
352 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
353 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
354 * @return a stream of matches represented as a Match object.
355 *
356 */
357 public Stream<SameSuperClass.Match> streamAllMatches(final EClass pC, final EClass pS1, final EClass pS2) {
358 return rawStreamAllMatches(new Object[]{pC, pS1, pS2});
359 }
360
361 /**
362 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
363 * Neither determinism nor randomness of selection is guaranteed.
364 * @param pC the fixed value of pattern parameter c, or null if not bound.
365 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
366 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
367 * @return a match represented as a Match object, or null if no match is found.
368 *
369 */
370 public Optional<SameSuperClass.Match> getOneArbitraryMatch(final EClass pC, final EClass pS1, final EClass pS2) {
371 return rawGetOneArbitraryMatch(new Object[]{pC, pS1, pS2});
372 }
373
374 /**
375 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
376 * under any possible substitution of the unspecified parameters (if any).
377 * @param pC the fixed value of pattern parameter c, or null if not bound.
378 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
379 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
380 * @return true if the input is a valid (partial) match of the pattern.
381 *
382 */
383 public boolean hasMatch(final EClass pC, final EClass pS1, final EClass pS2) {
384 return rawHasMatch(new Object[]{pC, pS1, pS2});
385 }
386
387 /**
388 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
389 * @param pC the fixed value of pattern parameter c, or null if not bound.
390 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
391 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
392 * @return the number of pattern matches found.
393 *
394 */
395 public int countMatches(final EClass pC, final EClass pS1, final EClass pS2) {
396 return rawCountMatches(new Object[]{pC, pS1, pS2});
397 }
398
399 /**
400 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
401 * Neither determinism nor randomness of selection is guaranteed.
402 * @param pC the fixed value of pattern parameter c, or null if not bound.
403 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
404 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
405 * @param processor the action that will process the selected match.
406 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
407 *
408 */
409 public boolean forOneArbitraryMatch(final EClass pC, final EClass pS1, final EClass pS2, final Consumer<? super SameSuperClass.Match> processor) {
410 return rawForOneArbitraryMatch(new Object[]{pC, pS1, pS2}, processor);
411 }
412
413 /**
414 * Returns a new (partial) match.
415 * This can be used e.g. to call the matcher with a partial match.
416 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
417 * @param pC the fixed value of pattern parameter c, or null if not bound.
418 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
419 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
420 * @return the (partial) match object.
421 *
422 */
423 public SameSuperClass.Match newMatch(final EClass pC, final EClass pS1, final EClass pS2) {
424 return SameSuperClass.Match.newMatch(pC, pS1, pS2);
425 }
426
427 /**
428 * Retrieve the set of values that occur in matches for c.
429 * @return the Set of all values or empty set if there are no matches
430 *
431 */
432 protected Stream<EClass> rawStreamAllValuesOfc(final Object[] parameters) {
433 return rawStreamAllValues(POSITION_C, parameters).map(EClass.class::cast);
434 }
435
436 /**
437 * Retrieve the set of values that occur in matches for c.
438 * @return the Set of all values or empty set if there are no matches
439 *
440 */
441 public Set<EClass> getAllValuesOfc() {
442 return rawStreamAllValuesOfc(emptyArray()).collect(Collectors.toSet());
443 }
444
445 /**
446 * Retrieve the set of values that occur in matches for c.
447 * @return the Set of all values or empty set if there are no matches
448 *
449 */
450 public Stream<EClass> streamAllValuesOfc() {
451 return rawStreamAllValuesOfc(emptyArray());
452 }
453
454 /**
455 * Retrieve the set of values that occur in matches for c.
456 * </p>
457 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
458 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
459 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
460 *
461 * @return the Stream of all values or empty set if there are no matches
462 *
463 */
464 public Stream<EClass> streamAllValuesOfc(final SameSuperClass.Match partialMatch) {
465 return rawStreamAllValuesOfc(partialMatch.toArray());
466 }
467
468 /**
469 * Retrieve the set of values that occur in matches for c.
470 * </p>
471 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
472 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
473 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
474 *
475 * @return the Stream of all values or empty set if there are no matches
476 *
477 */
478 public Stream<EClass> streamAllValuesOfc(final EClass pS1, final EClass pS2) {
479 return rawStreamAllValuesOfc(new Object[]{null, pS1, pS2});
480 }
481
482 /**
483 * Retrieve the set of values that occur in matches for c.
484 * @return the Set of all values or empty set if there are no matches
485 *
486 */
487 public Set<EClass> getAllValuesOfc(final SameSuperClass.Match partialMatch) {
488 return rawStreamAllValuesOfc(partialMatch.toArray()).collect(Collectors.toSet());
489 }
490
491 /**
492 * Retrieve the set of values that occur in matches for c.
493 * @return the Set of all values or empty set if there are no matches
494 *
495 */
496 public Set<EClass> getAllValuesOfc(final EClass pS1, final EClass pS2) {
497 return rawStreamAllValuesOfc(new Object[]{null, pS1, pS2}).collect(Collectors.toSet());
498 }
499
500 /**
501 * Retrieve the set of values that occur in matches for s1.
502 * @return the Set of all values or empty set if there are no matches
503 *
504 */
505 protected Stream<EClass> rawStreamAllValuesOfs1(final Object[] parameters) {
506 return rawStreamAllValues(POSITION_S1, parameters).map(EClass.class::cast);
507 }
508
509 /**
510 * Retrieve the set of values that occur in matches for s1.
511 * @return the Set of all values or empty set if there are no matches
512 *
513 */
514 public Set<EClass> getAllValuesOfs1() {
515 return rawStreamAllValuesOfs1(emptyArray()).collect(Collectors.toSet());
516 }
517
518 /**
519 * Retrieve the set of values that occur in matches for s1.
520 * @return the Set of all values or empty set if there are no matches
521 *
522 */
523 public Stream<EClass> streamAllValuesOfs1() {
524 return rawStreamAllValuesOfs1(emptyArray());
525 }
526
527 /**
528 * Retrieve the set of values that occur in matches for s1.
529 * </p>
530 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
531 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
532 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
533 *
534 * @return the Stream of all values or empty set if there are no matches
535 *
536 */
537 public Stream<EClass> streamAllValuesOfs1(final SameSuperClass.Match partialMatch) {
538 return rawStreamAllValuesOfs1(partialMatch.toArray());
539 }
540
541 /**
542 * Retrieve the set of values that occur in matches for s1.
543 * </p>
544 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
545 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
546 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
547 *
548 * @return the Stream of all values or empty set if there are no matches
549 *
550 */
551 public Stream<EClass> streamAllValuesOfs1(final EClass pC, final EClass pS2) {
552 return rawStreamAllValuesOfs1(new Object[]{pC, null, pS2});
553 }
554
555 /**
556 * Retrieve the set of values that occur in matches for s1.
557 * @return the Set of all values or empty set if there are no matches
558 *
559 */
560 public Set<EClass> getAllValuesOfs1(final SameSuperClass.Match partialMatch) {
561 return rawStreamAllValuesOfs1(partialMatch.toArray()).collect(Collectors.toSet());
562 }
563
564 /**
565 * Retrieve the set of values that occur in matches for s1.
566 * @return the Set of all values or empty set if there are no matches
567 *
568 */
569 public Set<EClass> getAllValuesOfs1(final EClass pC, final EClass pS2) {
570 return rawStreamAllValuesOfs1(new Object[]{pC, null, pS2}).collect(Collectors.toSet());
571 }
572
573 /**
574 * Retrieve the set of values that occur in matches for s2.
575 * @return the Set of all values or empty set if there are no matches
576 *
577 */
578 protected Stream<EClass> rawStreamAllValuesOfs2(final Object[] parameters) {
579 return rawStreamAllValues(POSITION_S2, parameters).map(EClass.class::cast);
580 }
581
582 /**
583 * Retrieve the set of values that occur in matches for s2.
584 * @return the Set of all values or empty set if there are no matches
585 *
586 */
587 public Set<EClass> getAllValuesOfs2() {
588 return rawStreamAllValuesOfs2(emptyArray()).collect(Collectors.toSet());
589 }
590
591 /**
592 * Retrieve the set of values that occur in matches for s2.
593 * @return the Set of all values or empty set if there are no matches
594 *
595 */
596 public Stream<EClass> streamAllValuesOfs2() {
597 return rawStreamAllValuesOfs2(emptyArray());
598 }
599
600 /**
601 * Retrieve the set of values that occur in matches for s2.
602 * </p>
603 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
604 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
605 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
606 *
607 * @return the Stream of all values or empty set if there are no matches
608 *
609 */
610 public Stream<EClass> streamAllValuesOfs2(final SameSuperClass.Match partialMatch) {
611 return rawStreamAllValuesOfs2(partialMatch.toArray());
612 }
613
614 /**
615 * Retrieve the set of values that occur in matches for s2.
616 * </p>
617 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
618 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
619 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
620 *
621 * @return the Stream of all values or empty set if there are no matches
622 *
623 */
624 public Stream<EClass> streamAllValuesOfs2(final EClass pC, final EClass pS1) {
625 return rawStreamAllValuesOfs2(new Object[]{pC, pS1, null});
626 }
627
628 /**
629 * Retrieve the set of values that occur in matches for s2.
630 * @return the Set of all values or empty set if there are no matches
631 *
632 */
633 public Set<EClass> getAllValuesOfs2(final SameSuperClass.Match partialMatch) {
634 return rawStreamAllValuesOfs2(partialMatch.toArray()).collect(Collectors.toSet());
635 }
636
637 /**
638 * Retrieve the set of values that occur in matches for s2.
639 * @return the Set of all values or empty set if there are no matches
640 *
641 */
642 public Set<EClass> getAllValuesOfs2(final EClass pC, final EClass pS1) {
643 return rawStreamAllValuesOfs2(new Object[]{pC, pS1, null}).collect(Collectors.toSet());
644 }
645
646 @Override
647 protected SameSuperClass.Match tupleToMatch(final Tuple t) {
648 try {
649 return SameSuperClass.Match.newMatch((EClass) t.get(POSITION_C), (EClass) t.get(POSITION_S1), (EClass) t.get(POSITION_S2));
650 } catch(ClassCastException e) {
651 LOGGER.error("Element(s) in tuple not properly typed!",e);
652 return null;
653 }
654 }
655
656 @Override
657 protected SameSuperClass.Match arrayToMatch(final Object[] match) {
658 try {
659 return SameSuperClass.Match.newMatch((EClass) match[POSITION_C], (EClass) match[POSITION_S1], (EClass) match[POSITION_S2]);
660 } catch(ClassCastException e) {
661 LOGGER.error("Element(s) in array not properly typed!",e);
662 return null;
663 }
664 }
665
666 @Override
667 protected SameSuperClass.Match arrayToMatchMutable(final Object[] match) {
668 try {
669 return SameSuperClass.Match.newMutableMatch((EClass) match[POSITION_C], (EClass) match[POSITION_S1], (EClass) match[POSITION_S2]);
670 } catch(ClassCastException e) {
671 LOGGER.error("Element(s) in array not properly typed!",e);
672 return null;
673 }
674 }
675
676 /**
677 * @return the singleton instance of the query specification of this pattern
678 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
679 *
680 */
681 public static IQuerySpecification<SameSuperClass.Matcher> querySpecification() {
682 return SameSuperClass.instance();
683 }
684 }
685
686 private SameSuperClass() {
687 super(GeneratedPQuery.INSTANCE);
688 }
689
690 /**
691 * @return the singleton instance of the query specification
692 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
693 *
694 */
695 public static SameSuperClass instance() {
696 try{
697 return LazyHolder.INSTANCE;
698 } catch (ExceptionInInitializerError err) {
699 throw processInitializerError(err);
700 }
701 }
702
703 @Override
704 protected SameSuperClass.Matcher instantiate(final ViatraQueryEngine engine) {
705 return SameSuperClass.Matcher.on(engine);
706 }
707
708 @Override
709 public SameSuperClass.Matcher instantiate() {
710 return SameSuperClass.Matcher.create();
711 }
712
713 @Override
714 public SameSuperClass.Match newEmptyMatch() {
715 return SameSuperClass.Match.newEmptyMatch();
716 }
717
718 @Override
719 public SameSuperClass.Match newMatch(final Object... parameters) {
720 return SameSuperClass.Match.newMatch((org.eclipse.emf.ecore.EClass) parameters[0], (org.eclipse.emf.ecore.EClass) parameters[1], (org.eclipse.emf.ecore.EClass) parameters[2]);
721 }
722
723 /**
724 * Inner class allowing the singleton instance of {@link JvmGenericType: queries.SameSuperClass (visibility: PUBLIC, simpleName: SameSuperClass, identifier: queries.SameSuperClass, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
725 * <b>not</b> at the class load time of the outer class,
726 * but rather at the first call to {@link JvmGenericType: queries.SameSuperClass (visibility: PUBLIC, simpleName: SameSuperClass, identifier: queries.SameSuperClass, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
727 *
728 * <p> This workaround is required e.g. to support recursion.
729 *
730 */
731 private static class LazyHolder {
732 private static final SameSuperClass INSTANCE = new SameSuperClass();
733
734 /**
735 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
736 * This initialization order is required to support indirect recursion.
737 *
738 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
739 *
740 */
741 private static final Object STATIC_INITIALIZER = ensureInitialized();
742
743 public static Object ensureInitialized() {
744 INSTANCE.ensureInitializedInternal();
745 return null;
746 }
747 }
748
749 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
750 private static final SameSuperClass.GeneratedPQuery INSTANCE = new GeneratedPQuery();
751
752 private final PParameter parameter_c = new PParameter("c", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT);
753
754 private final PParameter parameter_s1 = new PParameter("s1", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT);
755
756 private final PParameter parameter_s2 = new PParameter("s2", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT);
757
758 private final List<PParameter> parameters = Arrays.asList(parameter_c, parameter_s1, parameter_s2);
759
760 private GeneratedPQuery() {
761 super(PVisibility.PUBLIC);
762 }
763
764 @Override
765 public String getFullyQualifiedName() {
766 return "queries.sameSuperClass";
767 }
768
769 @Override
770 public List<String> getParameterNames() {
771 return Arrays.asList("c","s1","s2");
772 }
773
774 @Override
775 public List<PParameter> getParameters() {
776 return parameters;
777 }
778
779 @Override
780 public Set<PBody> doGetContainedBodies() {
781 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
782 Set<PBody> bodies = new LinkedHashSet<>();
783 {
784 PBody body = new PBody(this);
785 PVariable var_c = body.getOrCreateVariableByName("c");
786 PVariable var_s1 = body.getOrCreateVariableByName("s1");
787 PVariable var_s2 = body.getOrCreateVariableByName("s2");
788 new TypeConstraint(body, Tuples.flatTupleOf(var_c), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass")));
789 new TypeConstraint(body, Tuples.flatTupleOf(var_s1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass")));
790 new TypeConstraint(body, Tuples.flatTupleOf(var_s2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass")));
791 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
792 new ExportedParameter(body, var_c, parameter_c),
793 new ExportedParameter(body, var_s1, parameter_s1),
794 new ExportedParameter(body, var_s2, parameter_s2)
795 ));
796 // EClass.eSuperTypes(c, s1)
797 new TypeConstraint(body, Tuples.flatTupleOf(var_c), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass")));
798 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
799 new TypeConstraint(body, Tuples.flatTupleOf(var_c, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass", "eSuperTypes")));
800 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass")));
801 new Equality(body, var__virtual_0_, var_s1);
802 // EClass.eSuperTypes(c, s2)
803 new TypeConstraint(body, Tuples.flatTupleOf(var_c), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass")));
804 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
805 new TypeConstraint(body, Tuples.flatTupleOf(var_c, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass", "eSuperTypes")));
806 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass")));
807 new Equality(body, var__virtual_1_, var_s2);
808 // s1 == s2
809 new Equality(body, var_s1, var_s2);
810 bodies.add(body);
811 }
812 {
813 PAnnotation annotation = new PAnnotation("Constraint");
814 annotation.addAttribute("severity", "error");
815 annotation.addAttribute("message", "error");
816 annotation.addAttribute("key", Arrays.asList(new Object[] {
817 new ParameterReference("c")
818 }));
819 addAnnotation(annotation);
820 }
821 return bodies;
822 }
823 }
824}
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 261f32cc..9b426200 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
@@ -11,6 +11,7 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistan
11import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph; 11import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph;
12import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter; 12import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter;
13import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader; 13import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader;
14import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader;
14import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; 15import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup;
15import hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor; 16import hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor;
16import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.validation.ViolationCheck; 17import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.validation.ViolationCheck;
@@ -24,8 +25,8 @@ public class Main {
24 return message; 25 return message;
25 } 26 }
26 27
27 private static String configFolder = "yakinduum/config15/"; 28 private static String configFolder = "yakinduum/config22/";
28 private static String configFileName = configFolder + "info_new_metric.csv"; 29 private static String configFileName = configFolder + "info_old_metric.csv";
29 private static String aggregateViolationMeasureFileName = configFolder + "aggregateInfo.csv"; 30 private static String aggregateViolationMeasureFileName = configFolder + "aggregateInfo.csv";
30 private static String fileReadFolder = "output/Viatra_100/"; 31 private static String fileReadFolder = "output/Viatra_100/";
31 32
@@ -33,29 +34,30 @@ public class Main {
33 34
34 35
35 long begin = System.currentTimeMillis(); 36 long begin = System.currentTimeMillis();
36 String message = runWithPath("yakinduGeneration.vsconfig"); 37 String message = runWithPath("ecore.vsconfig");
37 long elapsed = System.currentTimeMillis() - begin; 38 long elapsed = System.currentTimeMillis() - begin;
38 39
39 if(message != null) { 40 if(message != null) {
41 System.out.println(message);
40 return; 42 return;
41 } 43 }
42 ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); 44// ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>();
43 String time = formatTime(elapsed); 45// String time = formatTime(elapsed);
44 ArrayList<String> infoOutput = new ArrayList<String>(); 46// ArrayList<String> infoOutput = new ArrayList<String>();
45 infoOutput.add(time); 47// infoOutput.add(time);
46 output.add(infoOutput); 48// output.add(infoOutput);
47 System.out.println(time); 49// System.out.println(time);
48 CsvFileWriter.write(output, configFileName); 50// CsvFileWriter.write(output, configFileName);
49 51//
50 52//
51 output = new ArrayList<ArrayList<String>>(); 53// output = new ArrayList<ArrayList<String>>();
52 output.add(prepareInfo()); 54// output.add(prepareInfo());
53 CsvFileWriter.append(output, configFileName); 55// CsvFileWriter.append(output, configFileName);
54 56//
55 for(int i = 0; i < 50; i++) { 57// for(int i = 0; i < 50; i++) {
56 generateModel(i+1); 58// generateModel(i+1);
57 } 59// }
58 //aggregateViolationMeasure(50); 60// aggregateViolationMeasure(50);
59 System.out.println("Finished"); 61 System.out.println("Finished");
60 } 62 }
61 63
@@ -86,7 +88,7 @@ public class Main {
86 ArrayList<String> infoOutput = new ArrayList<String>(); 88 ArrayList<String> infoOutput = new ArrayList<String>();
87 infoOutput.add(run+ ""); 89 infoOutput.add(run+ "");
88 90
89 YakinduumModel model = new YakinduumModel("output/Viatra_100/run"+run+"/"+ filename); 91 YakinduumModel model = new YakinduumModel(fileReadFolder+"/run"+run+"/"+ filename);
90 92
91 //parse map of violation counts to two list and add them to the result list 93 //parse map of violation counts to two list and add them to the result list
92 Map<String, Integer> map = ViolationCheck.violationMaps(model.yakinduum); 94 Map<String, Integer> map = ViolationCheck.violationMaps(model.yakinduum);
@@ -110,7 +112,7 @@ public class Main {
110 ArrayList<String> violationNames = null; 112 ArrayList<String> violationNames = null;
111 for(int run = 1; run < size+1; run++) { 113 for(int run = 1; run < size+1; run++) {
112 String filename = run+"_1.xmi"; 114 String filename = run+"_1.xmi";
113 YakinduumModel model = new YakinduumModel("output/Viatra_100/run"+run+"/"+ filename); 115 YakinduumModel model = new YakinduumModel(fileReadFolder+"/run"+run+"/"+ filename);
114 116
115 Map<String, Integer> map = ViolationCheck.violationMaps(model.yakinduum); 117 Map<String, Integer> map = ViolationCheck.violationMaps(model.yakinduum);
116 if(run == 1) { 118 if(run == 1) {
@@ -143,11 +145,11 @@ public class Main {
143 public static ArrayList<String> calculateMetric(int run) { 145 public static ArrayList<String> calculateMetric(int run) {
144 //read model and metric 146 //read model and metric
145 ArrayList<String> output = new ArrayList<String>(); 147 ArrayList<String> output = new ArrayList<String>();
146 GraphReader reader = new GraphReader(YakindummPackage.eINSTANCE); 148 GraphReader reader = new GraphReader(YakindummPackage.eINSTANCE, ".xmi");
147 EMFGraph graph = reader.readModel(fileReadFolder+"/run"+run, run + "_1.xmi"); 149 EMFGraph graph = reader.readModel(fileReadFolder+"/run"+run, run + "_1.xmi");
148 150 MetricSampleGroup metrics = RepMetricsReader.read(Domain.Yakinduum);
149 //KS distance 151 //KS distance
150 KSDistance ks = new KSDistance(Domain.Yakinduum); 152 KSDistance ks = new KSDistance(metrics);
151 153
152 //calculate and put metric data to output array 154 //calculate and put metric data to output array
153 MetricSampleGroup samples = graph.evaluateAllMetricsToSamples(); 155 MetricSampleGroup samples = graph.evaluateAllMetricsToSamples();
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig
index 14e1a3f7..d2414e87 100644
--- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig
+++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig
@@ -9,11 +9,11 @@ generate {
9 solver = ViatraSolver 9 solver = ViatraSolver
10 10
11 scope = { 11 scope = {
12 #node = 100 12 #node = 1
13 } 13 }
14 14
15 number = 1 15 number = 1
16 runs = 50 16 runs = 1
17 config = { 17 config = {
18 log-level = none 18 log-level = none
19 } 19 }
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 b1986d50..062d69fa 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
@@ -5,6 +5,7 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader 5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader
6import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl 6import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl
7import java.util.ArrayList 7import java.util.ArrayList
8import org.eclipse.emf.ecore.EcorePackage
8 9
9//import yakindumm2.impl.Yakindumm2PackageImpl 10//import yakindumm2.impl.Yakindumm2PackageImpl
10 11
@@ -24,18 +25,19 @@ class Main {
24 def static void main(String[] args){ 25 def static void main(String[] args){
25 //init model 26 //init model
26 YakindummPackageImpl.eINSTANCE.eClass; 27 YakindummPackageImpl.eINSTANCE.eClass;
28 EcorePackage.eINSTANCE.eClass;
27// Yakindumm2PackageImpl.eINSTANCE.eClass; 29// Yakindumm2PackageImpl.eINSTANCE.eClass;
28 //val infos = initData(); 30 //val infos = initData();
29 31
30 println("Start Reading Models..."); 32 println("Start Reading Models...");
31 var reader = new GraphReader(YakindummPackageImpl.eINSTANCE); 33 var reader = new GraphReader(EcorePackage.eINSTANCE, ".xmi");
32// for(info : infos){ 34// for(info : infos){
33// calculateAllModels(info.inputFolder, info.outputFolder,info.numRuns, reader); 35// calculateAllModels(info.inputFolder, info.outputFolder,info.numRuns, reader);
34// } 36// }
35 37
36 //human input has different package declaration 38 //human input has different package declaration
37// reader = new GraphReader(Yakindumm2PackageImpl.eINSTANCE); 39// reader = new GraphReader(Yakindumm2PackageImpl.eINSTANCE);
38 val human = new RWInformation("Inputs/config15/", "outputs/", 1); 40 val human = new RWInformation("Inputs/viatra75/", "outputs/", 50);
39 calculateAllModels(human.inputFolder, human.outputFolder,human.numRuns, reader); 41 calculateAllModels(human.inputFolder, human.outputFolder,human.numRuns, reader);
40 42
41 43
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 d68eb9d2..66dcdff6 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
@@ -5,11 +5,13 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistan
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance 5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance
6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData 6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData
7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.PartialInterpretationGraph 7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.PartialInterpretationGraph
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric 9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
10import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric 11import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric
10import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric 12import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric
13import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric
11import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric 14import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric
12import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree
13import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor.LinearModel 15import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor.LinearModel
14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
15import java.util.ArrayList 17import java.util.ArrayList
@@ -18,7 +20,6 @@ import java.util.List
18import java.util.Map 20import java.util.Map
19import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression 21import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression
20import org.eclipse.xtend.lib.annotations.Accessors 22import org.eclipse.xtend.lib.annotations.Accessors
21import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric
22 23
23class PartialInterpretationMetricDistance { 24class PartialInterpretationMetricDistance {
24 25
@@ -28,15 +29,17 @@ class PartialInterpretationMetricDistance {
28 var Map<Object, StateData> stateAndHistory; 29 var Map<Object, StateData> stateAndHistory;
29 var OLSMultipleLinearRegression regression; 30 var OLSMultipleLinearRegression regression;
30 List<StateData> samples; 31 List<StateData> samples;
31 32 var MetricSampleGroup g;
32 @Accessors(PUBLIC_GETTER) 33 @Accessors(PUBLIC_GETTER)
33 var LinearModel linearModel; 34 var LinearModel linearModel;
34 35
35 36
36 new(){ 37 new(){
37 ks = new KSDistance(Domain.Yakinduum); 38 var metrics = RepMetricsReader.read(Domain.Yakinduum);
38 js = new JSDistance(Domain.Yakinduum); 39 this.g = metrics;
39 ed = new EuclideanDistance(Domain.Yakinduum); 40 ks = new KSDistance(g);
41 js = new JSDistance(g);
42 ed = new EuclideanDistance(g);
40 regression = new OLSMultipleLinearRegression(); 43 regression = new OLSMultipleLinearRegression();
41 regression.noIntercept = false; 44 regression.noIntercept = false;
42 stateAndHistory = new HashMap<Object, StateData>(); 45 stateAndHistory = new HashMap<Object, StateData>();
@@ -56,8 +59,9 @@ class PartialInterpretationMetricDistance {
56 var mpc = ks.mpcDistance(metricSamples.mpcSamples); 59 var mpc = ks.mpcDistance(metricSamples.mpcSamples);
57 var na = ks.naDistance(metricSamples.naSamples); 60 var na = ks.naDistance(metricSamples.naSamples);
58 var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples); 61 var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples);
62 var nodeType = ks.nodeTypeDistance(metricSamples.nodeTypeSamples);
59 //var typedOutDegree = ks.typedOutDegreeDistance(metricSamples.typedOutDegreeSamples); 63 //var typedOutDegree = ks.typedOutDegreeDistance(metricSamples.typedOutDegreeSamples);
60 var distance = new MetricDistanceGroup(mpc, na, outDegree); 64 var distance = new MetricDistanceGroup(mpc, na, outDegree, nodeType);
61 distance.nodeTypeInfo = metricSamples.nodeTypeSamples; 65 distance.nodeTypeInfo = metricSamples.nodeTypeSamples;
62 return distance; 66 return distance;
63 } 67 }
@@ -171,14 +175,14 @@ class MetricDistanceGroup{
171 var double mpcDistance; 175 var double mpcDistance;
172 var double naDistance; 176 var double naDistance;
173 var double outDegreeDistance; 177 var double outDegreeDistance;
174 var double typedOutDegreeDistance; 178 var double nodeTypeDistance;
175 protected var HashMap<String, Double> nodeTypeInfo; 179 protected var HashMap<String, Double> nodeTypeInfo;
176 180
177 new(double mpcDistance, double naDistance, double outDegreeDistance, double typedOutDegreeDistance){ 181 new(double mpcDistance, double naDistance, double outDegreeDistance, double nodeTypeDistance){
178 this.mpcDistance = mpcDistance; 182 this.mpcDistance = mpcDistance;
179 this.naDistance = naDistance; 183 this.naDistance = naDistance;
180 this.outDegreeDistance = outDegreeDistance; 184 this.outDegreeDistance = outDegreeDistance;
181 this.typedOutDegreeDistance = typedOutDegreeDistance; 185 this.nodeTypeDistance = nodeTypeDistance;
182 } 186 }
183 187
184 new(double mpcDistance, double naDistance, double outDegreeDistance){ 188 new(double mpcDistance, double naDistance, double outDegreeDistance){
@@ -187,8 +191,8 @@ class MetricDistanceGroup{
187 this.outDegreeDistance = outDegreeDistance; 191 this.outDegreeDistance = outDegreeDistance;
188 } 192 }
189 193
190 def double getTypedOutDegreeDistance(){ 194 def double getNodeTypeDistance(){
191 return this.typedOutDegreeDistance; 195 return this.nodeTypeDistance;
192 } 196 }
193 197
194 def double getMPCDistance(){ 198 def double getMPCDistance(){
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
index b945d97b..d6adcc9a 100644
--- 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
@@ -18,13 +18,12 @@ class EuclideanDistance extends CostDistance{
18 var HashMap<String, Double> outDegreePMF; 18 var HashMap<String, Double> outDegreePMF;
19 var DecimalFormat formatter; 19 var DecimalFormat formatter;
20 20
21 new(Domain d){ 21 new(MetricSampleGroup g){
22 var metrics = RepMetricsReader.read(d); 22 this.g = g;
23 this.g = metrics;
24 23
25 var mpcSamples = metrics.mpcSamples; 24 var mpcSamples = g.mpcSamples;
26 var naSamples = metrics.naSamples.stream.mapToDouble([it]).toArray(); 25 var naSamples = g.naSamples.stream.mapToDouble([it]).toArray();
27 var outDegreeSamples = metrics.outDegreeSamples.stream.mapToDouble([it]).toArray(); 26 var outDegreeSamples = g.outDegreeSamples.stream.mapToDouble([it]).toArray();
28 27
29 //needs to format the number to string avoid precision issue 28 //needs to format the number to string avoid precision issue
30 formatter = new DecimalFormat("#0.00000"); 29 formatter = new DecimalFormat("#0.00000");
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 df65b81f..4a0a0dc3 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
@@ -1,7 +1,6 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance 1package 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.metrics.MetricSampleGroup
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader
5import com.google.common.collect.Sets 4import com.google.common.collect.Sets
6import java.text.DecimalFormat 5import java.text.DecimalFormat
7import java.util.HashMap 6import java.util.HashMap
@@ -11,13 +10,13 @@ class JSDistance extends CostDistance {
11 var HashMap<String, Double> mpcPMF; 10 var HashMap<String, Double> mpcPMF;
12 var HashMap<String, Double> naPMF; 11 var HashMap<String, Double> naPMF;
13 var HashMap<String, Double> outDegreePMF; 12 var HashMap<String, Double> outDegreePMF;
13 var HashMap<String, Double> nodeTypesPMF;
14 var DecimalFormat formatter; 14 var DecimalFormat formatter;
15 15
16 new(Domain d){ 16 new(MetricSampleGroup g){
17 var metrics = RepMetricsReader.read(d); 17 var mpcSamples = g.mpcSamples;
18 var mpcSamples = metrics.mpcSamples; 18 var naSamples = g.naSamples.stream.mapToDouble([it]).toArray();
19 var naSamples = metrics.naSamples.stream.mapToDouble([it]).toArray(); 19 var outDegreeSamples = g.outDegreeSamples.stream.mapToDouble([it]).toArray();
20 var outDegreeSamples = metrics.outDegreeSamples.stream.mapToDouble([it]).toArray();
21 20
22 //needs to format the number to string avoid precision issue 21 //needs to format the number to string avoid precision issue
23 formatter = new DecimalFormat("#0.00000"); 22 formatter = new DecimalFormat("#0.00000");
@@ -25,6 +24,7 @@ class JSDistance extends CostDistance {
25 mpcPMF = pmfFromSamples(mpcSamples, formatter); 24 mpcPMF = pmfFromSamples(mpcSamples, formatter);
26 naPMF = pmfFromSamples(naSamples, formatter); 25 naPMF = pmfFromSamples(naSamples, formatter);
27 outDegreePMF = pmfFromSamples(outDegreeSamples, formatter); 26 outDegreePMF = pmfFromSamples(outDegreeSamples, formatter);
27 nodeTypesPMF = g.nodeTypeSamples;
28 } 28 }
29 29
30 def private combinePMF(HashMap<String, Double> pmf1, HashMap<String, Double> pmf2){ 30 def private combinePMF(HashMap<String, Double> pmf1, HashMap<String, Double> pmf2){
@@ -81,4 +81,8 @@ class JSDistance extends CostDistance {
81 if(map.size < 2) return 1; 81 if(map.size < 2) return 1;
82 return jsDivergence(map, outDegreePMF); 82 return jsDivergence(map, outDegreePMF);
83 } 83 }
84
85 def nodeTypeDistance(HashMap<String, Double> samples){
86 return klDivergence(samples, nodeTypesPMF);
87 }
84} \ No newline at end of file 88} \ 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/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 86f5f23c..08d8704a 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
@@ -1,22 +1,18 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance 1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance
2 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 3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
6import java.util.HashMap 4import java.util.HashMap
7import java.util.HashSet 5import java.util.HashSet
8import java.util.List 6import java.util.List
9import java.util.Set
10import org.apache.commons.math3.stat.inference.KolmogorovSmirnovTest 7import org.apache.commons.math3.stat.inference.KolmogorovSmirnovTest
11 8
12class KSDistance extends CostDistance { 9class KSDistance extends CostDistance {
13 var static ksTester = new KolmogorovSmirnovTest(); 10 var static ksTester = new KolmogorovSmirnovTest();
14 var MetricSampleGroup g; 11 var MetricSampleGroup g;
15 new(Domain d){
16 var metrics = RepMetricsReader.read(d);
17 this.g = metrics;
18 }
19 12
13 new(MetricSampleGroup g){
14 this.g = g;
15 }
20 override double mpcDistance(List<Double> samples){ 16 override double mpcDistance(List<Double> samples){
21 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 17 //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1
22 if(samples.size < 2) return 1; 18 if(samples.size < 2) return 1;
@@ -63,4 +59,27 @@ class KSDistance extends CostDistance {
63 59
64 return value; 60 return value;
65 } 61 }
62
63 def nodeTypeDistance(HashMap<String, Double> samples){
64 var typesDistMap = g.nodeTypeSamples;
65 var sourceDist = newArrayList();
66 var instanceDist = newArrayList();
67
68 for(key : typesDistMap.keySet()){
69 sourceDist.add(typesDistMap.get(key));
70 instanceDist.add(samples.getOrDefault(key, 0.0));
71 }
72
73 // Since we already know the pdf, we compute the ks-test manully
74 var ksStatistics = 0.0;
75 var sum1 = 0.0;
76 var sum2 = 0.0;
77 for(var i = 0; i < sourceDist.size(); i++){
78 sum1 += sourceDist.get(i);
79 sum2 += instanceDist.get(i);
80
81 ksStatistics = Math.max(ksStatistics, Math.abs(sum1 - sum2));
82 }
83 return ksStatistics;
84 }
66} \ No newline at end of file 85} \ 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 4ebd59b7..959006f4 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
@@ -24,7 +24,8 @@ class EMFGraph extends Graph{
24 */ 24 */
25 def void init(List<EObject> objects, List<Metric> metrics, String name, List<EReference> referenceTypes){ 25 def void init(List<EObject> objects, List<Metric> metrics, String name, List<EReference> referenceTypes){
26 objects.forEach[it| 26 objects.forEach[it|
27 var types = new HashSet(it.eClass.EAllSuperTypes.map[it|it.name]); 27 // TODO: Maybe want to consider all the super types as well
28 var types = new HashSet();
28 types.add(it.eClass.name); 29 types.add(it.eClass.name);
29 statistic.addNodeWithAllTypes(it, types); 30 statistic.addNodeWithAllTypes(it, types);
30 ] 31 ]
@@ -38,18 +39,13 @@ class EMFGraph extends Graph{
38// )){ 39// )){
39// typeToAdd = it.EOpposite; 40// typeToAdd = it.EOpposite;
40// } 41// }
41 //if(!typeToAdd.name.equals('incomingTransitions')){ 42//
42 statistic.addEdgeType(typeToAdd.name); 43 statistic.addEdgeType(typeToAdd.name);
43 //}
44 ]; 44 ];
45 45
46 objects.forEach[source| 46 objects.forEach[source|
47 source.eClass.EAllReferences.forEach[r| 47 source.eClass.EAllReferences.forEach[r|
48 //add the type first (if it is not added already)
49 //many references 48 //many references
50// if(r.name.equals('incomingTransitions')){
51// return;
52// }
53 if(r.isMany){ 49 if(r.isMany){
54 source.getNeighbours(r).forEach[target| 50 source.getNeighbours(r).forEach[target|
55 addEdge(source, target, r); 51 addEdge(source, target, r);
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 bb679bf6..ef68f366 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
@@ -21,16 +21,19 @@ class PartialInterpretationGraph extends Graph{
21 //only need the name of the reference type (remove everything with and after "reference") 21 //only need the name of the reference type (remove everything with and after "reference")
22 var n = it.name.split(" ").get(0); 22 var n = it.name.split(" ").get(0);
23 // TODO: Here is to only consider one part of opposite edges 23 // TODO: Here is to only consider one part of opposite edges
24 //if(!n.equals('target') && !n.equals('source') /* && !n.equals('incomingTransitions')*/){ 24 if(!n.equals('target') && !n.equals('source') /* && !n.equals('incomingTransitions')*/){
25 this.statistic.addEdgeType(n); 25 this.statistic.addEdgeType(n);
26 //} 26 }
27 ] 27 ]
28 // add all elements 28 // add all elements
29 val typeInterpretations = getTypes(partial); 29 val typeInterpretations = getTypes(partial);
30 for(type : typeInterpretations){ 30 for(type : typeInterpretations){
31 var typeName = type.interpretationOf.name.replace(classSuffix, ''); 31 //Only consider the most concrete class
32 for(node : type.elements){ 32 if(type.interpretationOf.subtypes.size == 0){
33 this.statistic.addNodeWithType(node, typeName); 33 var typeName = type.interpretationOf.name.replace(classSuffix, '');
34 for(node : type.elements){
35 this.statistic.addNodeWithType(node, typeName);
36 }
34 } 37 }
35 } 38 }
36 39
@@ -38,11 +41,11 @@ class PartialInterpretationGraph extends Graph{
38 //only need the name of the reference type (remove everything with and after "reference") 41 //only need the name of the reference type (remove everything with and after "reference")
39 val type = relationInterpretation.interpretationOf.name.split(" ").get(0); 42 val type = relationInterpretation.interpretationOf.name.split(" ").get(0);
40 // TODO: Here is to only consider one part of opposite edges 43 // TODO: Here is to only consider one part of opposite edges
41 //if(!type.equals('target') && !type.equals('source') /*&& !type.equals('incomingTransitions')*/){ 44 if(!type.equals('target') && !type.equals('source') /*&& !type.equals('incomingTransitions')*/){
42 for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){ 45 for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){
43 statistic.addEdge(edge.param1, edge.param2, type); 46 statistic.addEdge(edge.param1, edge.param2, type);
44 } 47 }
45 //} 48 }
46 } 49 }
47 50
48 this.name = name; 51 this.name = name;
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend
index ffec372b..491501b0 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
@@ -24,9 +24,11 @@ import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
24class GraphReader{ 24class GraphReader{
25 val ResourceSet resSet = new ResourceSetImpl(); 25 val ResourceSet resSet = new ResourceSetImpl();
26 val referenceTypes = new ArrayList<EReference>(); 26 val referenceTypes = new ArrayList<EReference>();
27 var String suffix;
27 28
28 new(EPackage metaModel) { 29 new(EPackage metaModel, String suffix) {
29 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl) 30 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl)
31 this.suffix = suffix;
30 32
31 //find all reference types in the meta model 33 //find all reference types in the meta model
32 metaModel.eAllContents.forEach[ 34 metaModel.eAllContents.forEach[
@@ -52,14 +54,14 @@ class GraphReader{
52 metrics.add(new NodeTypeMetric()); 54 metrics.add(new NodeTypeMetric());
53 metrics.add(new EdgeTypeMetric()); 55 metrics.add(new EdgeTypeMetric());
54 56
55 //check all files in the directory with xmi 57 //check all files in the directory with suffix
56 for(String name : dir.list.filter[it| it.endsWith(".xmi")]){ 58 for(String name : dir.list.filter[it| it.endsWith(suffix)]){
57 val file = new File(name); 59 val file = new File(name);
58 val roots = readModel(EObject, path, file.name); 60 val roots = readModel(EObject, path, file.name);
59 //add a list of metrics 61 //add a list of metrics
60 val g = new EMFGraph(); 62 val g = new EMFGraph();
61 for(root : roots){ 63 for(root : roots){
62 g.init(root, metrics, name.replaceFirst(".xmi", ""), referenceTypes); 64 g.init(root, metrics, name.replaceFirst(suffix, ""), referenceTypes);
63 } 65 }
64 66
65 graphs.add(g); 67 graphs.add(g);
@@ -82,7 +84,7 @@ class GraphReader{
82 //add a list of metrics 84 //add a list of metrics
83 val g = new EMFGraph(); 85 val g = new EMFGraph();
84 for(root : roots){ 86 for(root : roots){
85 g.init(root, metrics, filename.replaceFirst(".xmi", ""), referenceTypes); 87 g.init(root, metrics, filename.replaceFirst(suffix, ""), referenceTypes);
86 } 88 }
87 return g 89 return g
88 } 90 }
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 2ea12581..6af0b6c7 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
@@ -3,13 +3,14 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io
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.MetricSampleGroup 4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
5import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl 5import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl
6import java.util.HashMap
6 7
7/** 8/**
8 * Read the sample of the distribution of a metric provided the csv file of the metric 9 * Read the sample of the distribution of a metric provided the csv file of the metric
9 */ 10 */
10class RepMetricsReader { 11class RepMetricsReader {
11 static def read(Domain d){ 12 static def read(Domain d){
12 var reader = new GraphReader(YakindummPackageImpl.eINSTANCE); 13 var reader = new GraphReader(YakindummPackageImpl.eINSTANCE, '.xmi');
13 14
14 15
15 var domainRepPath = DataName.REP_PATH + d.name + '/'; 16 var domainRepPath = DataName.REP_PATH + d.name + '/';
@@ -20,7 +21,20 @@ class RepMetricsReader {
20 rep.naSamples = readMetrics(reader, domainRepPath + DataName.NA_REP).naSamples; 21 rep.naSamples = readMetrics(reader, domainRepPath + DataName.NA_REP).naSamples;
21 rep.typedOutDegreeSamples = out_d.typedOutDegreeSamples; 22 rep.typedOutDegreeSamples = out_d.typedOutDegreeSamples;
22 rep.edgeTypeSamples = out_d.edgeTypeSamples; 23 rep.edgeTypeSamples = out_d.edgeTypeSamples;
23 rep.nodeTypeSamples = out_d.nodeTypeSamples; 24
25 //TODO: Parameterize the prior node distribution
26 var nodeTypeSamples = new HashMap<String, Double>();
27 nodeTypeSamples.put('Entry', 0.04257802080554814);
28 nodeTypeSamples.put('Choice', 0.1267671379034409);
29 nodeTypeSamples.put('State', 0.1596092291277674);
30 nodeTypeSamples.put('Transition', 0.6138636969858629);
31 nodeTypeSamples.put('Statechart', 0.010136036276340358);
32 nodeTypeSamples.put('Region', 0.04467858095492131);
33 nodeTypeSamples.put('Exit', 0.0018338223526273673);
34 nodeTypeSamples.put('FinalState', 0.0005334755934915977);
35
36
37 rep.nodeTypeSamples = nodeTypeSamples;
24 return rep; 38 return rep;
25 } 39 }
26 40
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/MPC.png
new file mode 100644
index 00000000..1d17b819
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/Node Activity.png
new file mode 100644
index 00000000..64eee192
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/Out Degree.png
new file mode 100644
index 00000000..eb298324
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png
deleted file mode 100644
index 9b0863ae..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png
deleted file mode 100644
index 499c83a2..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png
deleted file mode 100644
index 1816c3e6..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/MPC.png
deleted file mode 100644
index 7d317bb4..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/MPC.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/Node Activity.png
deleted file mode 100644
index 323635f2..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/Node Activity.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/Out Degree.png
deleted file mode 100644
index aaf2d258..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-/Out Degree.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/MPC.png
deleted file mode 100644
index 05e0f430..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/MPC.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/Node Activity.png
deleted file mode 100644
index c1e23deb..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (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)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/Out Degree.png
deleted file mode 100644
index 8bb96d31..00000000
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (30 nodes)-/Out Degree.png
+++ /dev/null
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/MPC.png
new file mode 100644
index 00000000..9333cd3c
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/Node Activity.png
new file mode 100644
index 00000000..a019eabb
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/Out Degree.png
new file mode 100644
index 00000000..591db64a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/MPC.png
new file mode 100644
index 00000000..7ec6c3f7
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/Node Activity.png
new file mode 100644
index 00000000..70e3f8b1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/Out Degree.png
new file mode 100644
index 00000000..3751722b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (75 nodes)-Human rep-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png
new file mode 100644
index 00000000..d7ed3bbb
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png
new file mode 100644
index 00000000..8a20963d
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png
new file mode 100644
index 00000000..4354656c
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..df162a5a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..703f9c56
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..873a40c1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..826b797f
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..babf7266
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..31f74863
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..a4717b87
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..946f2aa1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..668423cc
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png
new file mode 100644
index 00000000..f4301083
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png
new file mode 100644
index 00000000..fd27fdd4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png
new file mode 100644
index 00000000..39fc0cf9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..545aab79
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..6e92f726
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..a57f399b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png
new file mode 100644
index 00000000..30d74805
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..2e34fead
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..bc9d6016
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png
index 39e1c4ec..39e1c4ec 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png
index 16ac54dd..16ac54dd 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png
index 99ebd383..99ebd383 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png
index 08983af2..08983af2 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png
index 704ac0f4..704ac0f4 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png
index 93ba4a66..93ba4a66 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
index e0d5b199..e0d5b199 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
index ddcc2451..ddcc2451 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
index e0ea1c75..e0ea1c75 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
index 430e7279..430e7279 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
index fc15d7f5..fc15d7f5 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
index 20499e22..20499e22 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png
new file mode 100644
index 00000000..ab519eaa
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..7726b292
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..5416c350
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png
index 601fc7f1..601fc7f1 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png
index 76773aa4..76773aa4 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png
index 2e459f1a..2e459f1a 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png
new file mode 100644
index 00000000..9d12c2d8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..56745bc0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..24f29731
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png
new file mode 100644
index 00000000..dcd1eaa2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..ac912936
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..4c9abbcb
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..ffd0079e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..bda5f52e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..e223ad4a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
index 4f8e97e2..4f8e97e2 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/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/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
index 7c2b5752..7c2b5752 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/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/Yakindumm/old measurements/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/old measurements/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/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
index 3cf659b2..3cf659b2 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/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/Yakindumm/old measurements/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/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png
index 50b882da..50b882da 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png
index 4e9a68d5..4e9a68d5 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png
index bfa4b537..bfa4b537 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
index 33176821..33176821 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
index 53c46e6f..53c46e6f 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
index abf45ff1..abf45ff1 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
index 07c97401..07c97401 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/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/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
index f2fb5229..f2fb5229 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/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/Yakindumm/old measurements/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/old measurements/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/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
index d2677e99..d2677e99 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/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/Yakindumm/old measurements/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/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png
index a375c676..a375c676 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
index d69cd298..d69cd298 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
index 0584ac99..0584ac99 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
index 016cc2a3..016cc2a3 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
index 55d32444..55d32444 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
index 99cbbae4..99cbbae4 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
index b8480ae0..b8480ae0 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/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/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
index 82268167..82268167 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/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/Yakindumm/old measurements/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/old measurements/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/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
index 41bcd510..41bcd510 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/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/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png
index b19bb958..b19bb958 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
index cccabc4e..cccabc4e 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
index 947ebdd2..947ebdd2 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png
index 0ff4ee89..0ff4ee89 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png
index 1f9e2e18..1f9e2e18 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png
index 2c63cc3a..2c63cc3a 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
index 8d76fed9..8d76fed9 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
index daa7929a..daa7929a 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
index e56b1b6e..e56b1b6e 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png
index 820df5c7..820df5c7 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png
index b6aa957a..b6aa957a 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png
index 161041d9..161041d9 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png
index 4f189578..4f189578 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png
index add3c0f8..add3c0f8 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png
index f4717a1a..f4717a1a 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/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 1ac7af75..d761ef82 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
@@ -12,26 +12,36 @@ import DistributionMetrics as metrics
12 12
13def main(): 13def main():
14 # read models 14 # read models
15 human = GraphCollection('../input/humanOutput/', 500, 'Human') 15 human = GraphCollection('../input/yakindumm/human_output_100/', 500, 'Human')
16 human_na = GraphCollection('../input/yakindumm/human_output_100/na_rep/', 1, 'Human rep')
17 human_mpc = GraphCollection('../input/yakindumm/human_output_100/mpc_rep/', 1, 'Human rep')
18 human_od = GraphCollection('../input/yakindumm/human_output_100/od_rep/', 1, 'Human rep')
19
20 #viatra75 = GraphCollection('../input/viatra_75/', 500, 'Viatra (75 nodes)')
16 # viatra30 = GraphCollection('../input/viatraOutput30/', 500,'Viatra (30 nodes)') 21 # viatra30 = GraphCollection('../input/viatraOutput30/', 500,'Viatra (30 nodes)')
17 # viatra60 = GraphCollection('../input/viatraOutput60/', 500, 'Viatra (60 nodes)') 22 # viatra60 = GraphCollection('../input/viatraOutput60/', 500, 'Viatra (60 nodes)')
18 viatra100 = GraphCollection('../input/viatraOutput100/', 500, 'Viatra (100 nodes)') 23 # viatra100 = GraphCollection('../input/viatraOutput100/', 500, 'Viatra (100 nodes)')
19 viatra100R = GraphCollection('../input/realisticViatraOutput_container/', 500, 'Realistic Viatra containers (100 nodes)') 24 # viatra100R = GraphCollection('../input/realisticViatraOutput_newMetric/', 500, 'Realistic Viatra (100 nodes)')
20 viatra100C = GraphCollection('../input/viatraOutput100C/', 500, 'Realistic Viatra consistent (100 nodes)') 25 viatra100C = GraphCollection('../input/yakindumm/viatraOutput100C/', 500, 'Viatra consistent (100 nodes)')
21 viatra100EE = GraphCollection('../input/realisticViatra_excludeExit/', 500, 'Realistic Viatra no Exit (100 nodes)') 26 # viatra100EE = GraphCollection('../input/realisticViatra_excludeExit/', 500, 'Realistic Viatra no Exit (100 nodes)')
27 # viatra100EEF = GraphCollection('../input/realisticViatra_excludeExitFinal/', 500, 'Realistic Viatra no Exit Final (100 nodes)')
28 viatra100NT = GraphCollection('../input/yakindumm/realisticVIatraOutput_nodeTypeKS/', 500, 'Realistic Viatra with Node Type KS (100 nodes)')
29
22 # random = GraphCollection('../input/randomOutput/', 500, 'Random') 30 # random = GraphCollection('../input/randomOutput/', 500, 'Random')
23 # alloy = GraphCollection('../input/alloyOutput/', 500, 'Alloy (30 nodes)') 31 # alloy = GraphCollection('../input/alloy/', 500, 'Alloy (30 nodes)')
24 # realistic_viatra = GraphCollection('../input/viatra_output_consistent_100/', 50, 'Realistic Viatra With Some Constraints (100 nodes)') 32 # realistic_viatra = GraphCollection('../input/viatra_output_consistent_100/', 50, 'Realistic Viatra With Some Constraints (100 nodes)')
25 # human100 = GraphCollection('../input/human_output_100/', 304, 'Human') 33 # human100 = GraphCollection('../input/human_output_100/', 304, 'Human')
26 models_to_compare = [human, viatra100EE,viatra100C] 34 models_to_compare_na = [human, human_na, viatra100C,viatra100NT]
35 models_to_compare_mpc = [human, human_mpc ,viatra100C,viatra100NT]
36 models_to_compare_od = [human, human_od, viatra100C,viatra100NT]
27 37
28 # define output folder 38 # define output folder
29 outputFolder = '../output/' 39 outputFolder = '../output/Yakindumm/'
30 40
31 #calculate metrics 41 #calculate metrics
32 metricStat(models_to_compare, 'Node Activity', nodeActivity, 0, outputFolder) 42 metricStat(models_to_compare_na, 'Node Activity', nodeActivity, 0, outputFolder)
33 metricStat(models_to_compare, 'Out Degree', outDegree, 1, outputFolder) 43 metricStat(models_to_compare_od, 'Out Degree', outDegree, 1, outputFolder)
34 metricStat(models_to_compare, 'MPC', mpc, 2, outputFolder) 44 metricStat(models_to_compare_mpc, 'MPC', mpc, 2, outputFolder)
35 45
36def calculateKSMatrix(dists): 46def calculateKSMatrix(dists):
37 dist = [] 47 dist = []
@@ -43,7 +53,7 @@ def calculateKSMatrix(dists):
43 for i in range(len(dist)): 53 for i in range(len(dist)):
44 matrix[i,i] = 0 54 matrix[i,i] = 0
45 for j in range(i+1, len(dist)): 55 for j in range(i+1, len(dist)):
46 value, p = metrics.ks_distance(dist[i], dist[j]) 56 value, p= metrics.ks_distance(dist[i], dist[j])
47 matrix[i, j] = value 57 matrix[i, j] = value
48 matrix[j, i] = value 58 matrix[j, i] = value
49 return matrix 59 return matrix
@@ -55,7 +65,7 @@ def calculateMDS(dissimilarities):
55 return trans 65 return trans
56 66
57def plot(graphTypes, coords, title='',index = 0, savePath = ''): 67def plot(graphTypes, coords, title='',index = 0, savePath = ''):
58 color = ['blue', 'red', 'green', 'yellow'] 68 color = ['blue', 'red', 'yellow', 'green', 'k']
59 plt.figure(index, figsize=(7, 4)) 69 plt.figure(index, figsize=(7, 4))
60 plt.title(title) 70 plt.title(title)
61 index = 0 71 index = 0
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 329a46f6..543b0ab7 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": 11, 19 "execution_count": 1,
20 "metadata": {}, 20 "metadata": {},
21 "outputs": [], 21 "outputs": [],
22 "source": [ 22 "source": [
@@ -70,7 +70,7 @@
70 { 70 {
71 "data": { 71 "data": {
72 "text/plain": [ 72 "text/plain": [
73 "304" 73 "231"
74 ] 74 ]
75 }, 75 },
76 "execution_count": 3, 76 "execution_count": 3,
@@ -90,8 +90,7 @@
90 " orientation='horizontal'\n", 90 " orientation='horizontal'\n",
91 ")\n", 91 ")\n",
92 "\n", 92 "\n",
93 "\n", 93 "humanFiles = reader.readmultiplefiles('../input/human_models_75/', 1300, False)\n",
94 "humanFiles = reader.readmultiplefiles('../input/human_output_100/', 1300, False)\n",
95 "modelToFileName = {}\n", 94 "modelToFileName = {}\n",
96 "for name in humanFiles:\n", 95 "for name in humanFiles:\n",
97 " modelToFileName[GraphStat(name)] = name\n", 96 " modelToFileName[GraphStat(name)] = name\n",
@@ -138,20 +137,29 @@
138 "cell_type": "markdown", 137 "cell_type": "markdown",
139 "metadata": {}, 138 "metadata": {},
140 "source": [ 139 "source": [
141 "### Find representative for out degree" 140 "## Find representative for out degree"
142 ] 141 ]
143 }, 142 },
144 { 143 {
145 "cell_type": "markdown", 144 "cell_type": "markdown",
146 "metadata": {}, 145 "metadata": {},
147 "source": [ 146 "source": [
147 "### For Yakindumm\n",
148 "#### For all human models\n", 148 "#### For all human models\n",
149 "* the rep found is ../input/humanOutput\\R_20158_run_1.csv\n", 149 "* the rep found is ../input/humanOutput\\R_20158_run_1.csv\n",
150 "* the average distance between it and others is 0.05515988287586802\n", 150 "* the average distance between it and others is 0.05515988287586802\n",
151 "\n", 151 "\n",
152 "#### For human models with $100 \\pm 10$ nodes\n", 152 "#### For human models with $100 \\pm 10$ nodes\n",
153 "* the rep found is ../input/human_output_100\\R_2015225_run_1.csv\n", 153 "* the rep found is ../input/human_output_100\\R_2015225_run_1.csv\n",
154 "* the average distance between it and others is $0.046150929558524685$" 154 "* the average distance between it and others is $0.046150929558524685$\n",
155 "\n",
156 "#### for human model with $100 \\pm 10$ nodes and new metric\n",
157 "* the rep found is ../input/human_output_100\\R_2015248_run_1.csv\n",
158 "* average distance: 0.052753778714861366\n",
159 "* median: 0.0468131868131868\n",
160 "* std: 0.0246917800149673\n",
161 "* max: 0.15993907083015996\n",
162 "* min: 0.0"
155 ] 163 ]
156 }, 164 },
157 { 165 {
@@ -163,8 +171,8 @@
163 "name": "stdout", 171 "name": "stdout",
164 "output_type": "stream", 172 "output_type": "stream",
165 "text": [ 173 "text": [
166 "../input/human_output_100\\R_2015225_run_1.csv\n", 174 "../input/human_models_75\\146.csv\n",
167 "../input/human_output_100\\R_2015225_run_1.csv\n" 175 "../input/human_models_75\\146.csv\n"
168 ] 176 ]
169 } 177 }
170 ], 178 ],
@@ -177,16 +185,17 @@
177 }, 185 },
178 { 186 {
179 "cell_type": "code", 187 "cell_type": "code",
180 "execution_count": 15, 188 "execution_count": 6,
181 "metadata": {}, 189 "metadata": {},
182 "outputs": [ 190 "outputs": [
183 { 191 {
184 "name": "stdout", 192 "name": "stdout",
185 "output_type": "stream", 193 "output_type": "stream",
186 "text": [ 194 "text": [
187 "average distance: 0.04615092955852465\n", 195 "average distance: 0.14846721554626746\n",
188 "std: 0.017305709419913242\n", 196 "median: 0.11344781014856264\n",
189 "max: 0.1411706837186424\n", 197 "std: 0.0839789139821567\n",
198 "max: 0.40999194198227235\n",
190 "min: 0.0\n" 199 "min: 0.0\n"
191 ] 200 ]
192 } 201 }
@@ -196,6 +205,7 @@
196 "for model in models:\n", 205 "for model in models:\n",
197 " distances.append(ks_value(od_rep_model.out_d, model.out_d))\n", 206 " distances.append(ks_value(od_rep_model.out_d, model.out_d))\n",
198 "print('average distance: ', np.mean(distances))\n", 207 "print('average distance: ', np.mean(distances))\n",
208 "print('median: ', np.median(distances))\n",
199 "print('std: ', np.std(distances))\n", 209 "print('std: ', np.std(distances))\n",
200 "print('max:', max(distances))\n", 210 "print('max:', max(distances))\n",
201 "print('min:', min(distances))" 211 "print('min:', min(distances))"
@@ -205,20 +215,29 @@
205 "cell_type": "markdown", 215 "cell_type": "markdown",
206 "metadata": {}, 216 "metadata": {},
207 "source": [ 217 "source": [
208 "### Find Representative for node activities" 218 "## Find Representative for node activities"
209 ] 219 ]
210 }, 220 },
211 { 221 {
212 "cell_type": "markdown", 222 "cell_type": "markdown",
213 "metadata": {}, 223 "metadata": {},
214 "source": [ 224 "source": [
225 "### For Yakindumm\n",
215 "#### For all human models\n", 226 "#### For all human models\n",
216 "* the rep found is ../input/humanOutput\\R_2016176_run_1.csv\n", 227 "* the rep found is ../input/humanOutput\\R_2016176_run_1.csv\n",
217 "* the average distance between it and others is 0.05275267434589047\n", 228 "* the average distance between it and others is 0.05275267434589047\n",
218 "\n", 229 "\n",
219 "#### For human models with $100 \\pm 10$ nodes\n", 230 "#### For human models with $100 \\pm 10$ nodes\n",
220 "* the rep found is ../input/human_output_100\\R_2017419_run_1.csv\n", 231 "* the rep found is ../input/human_output_100\\R_2017419_run_1.csv\n",
221 "* the average distance between it and others is $0.04679429311806747$" 232 "* the average distance between it and others is $0.04679429311806747$\n",
233 "\n",
234 "#### for human model with $100 \\pm 10$ nodes and new metric\n",
235 "* the rep found is ../input/human_output_100\\R_2017131_run_1.csv\n",
236 "* average distance: 0.024629205820449567\n",
237 "* median: 0.023787888564682946\n",
238 "* std: 0.013845547883198073\n",
239 "* max: 0.09044674910251294\n",
240 "* min: 0.0"
222 ] 241 ]
223 }, 242 },
224 { 243 {
@@ -230,8 +249,8 @@
230 "name": "stdout", 249 "name": "stdout",
231 "output_type": "stream", 250 "output_type": "stream",
232 "text": [ 251 "text": [
233 "../input/human_output_100\\R_2017419_run_1.csv\n", 252 "../input/human_models_75\\97.csv\n",
234 "../input/human_output_100\\R_2017419_run_1.csv\n" 253 "../input/human_models_75\\97.csv\n"
235 ] 254 ]
236 } 255 }
237 ], 256 ],
@@ -244,16 +263,17 @@
244 }, 263 },
245 { 264 {
246 "cell_type": "code", 265 "cell_type": "code",
247 "execution_count": 14, 266 "execution_count": 8,
248 "metadata": {}, 267 "metadata": {},
249 "outputs": [ 268 "outputs": [
250 { 269 {
251 "name": "stdout", 270 "name": "stdout",
252 "output_type": "stream", 271 "output_type": "stream",
253 "text": [ 272 "text": [
254 "average distance: 0.046794293118067494\n", 273 "average distance: 0.16296252607812808\n",
255 "std: 0.02880119213919405\n", 274 "median: 0.11606886657101867\n",
256 "max: 0.18702970297029703\n", 275 "std: 0.1196590575339798\n",
276 "max: 0.49411764705882355\n",
257 "min: 0.0\n" 277 "min: 0.0\n"
258 ] 278 ]
259 } 279 }
@@ -263,6 +283,7 @@
263 "for model in models:\n", 283 "for model in models:\n",
264 " distances.append(ks_value(na_rep_model.na, model.na))\n", 284 " distances.append(ks_value(na_rep_model.na, model.na))\n",
265 "print('average distance: ', np.mean(distances))\n", 285 "print('average distance: ', np.mean(distances))\n",
286 "print('median: ', np.median(distances))\n",
266 "print('std: ', np.std(distances))\n", 287 "print('std: ', np.std(distances))\n",
267 "print('max:', max(distances))\n", 288 "print('max:', max(distances))\n",
268 "print('min:', min(distances))" 289 "print('min:', min(distances))"
@@ -272,20 +293,29 @@
272 "cell_type": "markdown", 293 "cell_type": "markdown",
273 "metadata": {}, 294 "metadata": {},
274 "source": [ 295 "source": [
275 "### Find Representative for MPC" 296 "## Find Representative for MPC"
276 ] 297 ]
277 }, 298 },
278 { 299 {
279 "cell_type": "markdown", 300 "cell_type": "markdown",
280 "metadata": {}, 301 "metadata": {},
281 "source": [ 302 "source": [
303 "### For Yakindumm\n",
304 "\n",
282 "#### For all human models\n", 305 "#### For all human models\n",
283 "* the rep found is ../input/humanOutput\\R_2015246_run_1.csv\n", 306 "* the rep found is ../input/humanOutput\\R_2015246_run_1.csv\n",
284 "* the average distance between it and others is 0.08556632702185384\n", 307 "* the average distance between it and others is 0.08556632702185384\n",
285 "\n", 308 "\n",
286 "#### For human models with $100 \\pm 10$ nodes\n", 309 "#### For human models with $100 \\pm 10$ nodes\n",
287 "* the rep found is ../input/human_output_100\\R_2016324_run_1.csv\n", 310 "* the rep found is ../input/human_output_100\\R_2016324_run_1.csv\n",
288 "* the average distance between it and others is $0.07028909225833631$" 311 "* the average distance between it and others is $0.07028909225833631$\n",
312 "\n",
313 "#### for human model with $100 \\pm 10$ nodes and new metric\n",
314 "* average distance: 0.054782550772603904\n",
315 "* median: 0.048330503678551184\n",
316 "* std: 0.028208257424907526\n",
317 "* max: 0.21181525241675614\n",
318 "* min: 0.0"
289 ] 319 ]
290 }, 320 },
291 { 321 {
@@ -297,8 +327,8 @@
297 "name": "stdout", 327 "name": "stdout",
298 "output_type": "stream", 328 "output_type": "stream",
299 "text": [ 329 "text": [
300 "../input/human_output_100\\R_2016324_run_1.csv\n", 330 "../input/human_models_75\\151.csv\n",
301 "../input/human_output_100\\R_2016324_run_1.csv\n" 331 "../input/human_models_75\\151.csv\n"
302 ] 332 ]
303 } 333 }
304 ], 334 ],
@@ -311,16 +341,17 @@
311 }, 341 },
312 { 342 {
313 "cell_type": "code", 343 "cell_type": "code",
314 "execution_count": 16, 344 "execution_count": 10,
315 "metadata": {}, 345 "metadata": {},
316 "outputs": [ 346 "outputs": [
317 { 347 {
318 "name": "stdout", 348 "name": "stdout",
319 "output_type": "stream", 349 "output_type": "stream",
320 "text": [ 350 "text": [
321 "average distance: 0.07028909225833632\n", 351 "average distance: 0.18751521685526348\n",
322 "std: 0.03728189051222417\n", 352 "median: 0.13400833829660508\n",
323 "max: 0.21961550993809065\n", 353 "std: 0.13829078925748192\n",
354 "max: 0.5745366639806608\n",
324 "min: 0.0\n" 355 "min: 0.0\n"
325 ] 356 ]
326 } 357 }
@@ -330,6 +361,7 @@
330 "for model in models:\n", 361 "for model in models:\n",
331 " distances.append(ks_value(mpc_rep_model.mpc, model.mpc))\n", 362 " distances.append(ks_value(mpc_rep_model.mpc, model.mpc))\n",
332 "print('average distance: ', np.mean(distances))\n", 363 "print('average distance: ', np.mean(distances))\n",
364 "print('median: ', np.median(distances))\n",
333 "print('std: ', np.std(distances))\n", 365 "print('std: ', np.std(distances))\n",
334 "print('max:', max(distances))\n", 366 "print('max:', max(distances))\n",
335 "print('min:', min(distances))" 367 "print('min:', min(distances))"
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore
new file mode 100644
index 00000000..b3934b01
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore
@@ -0,0 +1,3 @@
1# ignore everything in this folder
2*
3!.gitignore \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb
new file mode 100644
index 00000000..ba62c3b1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb
@@ -0,0 +1,610 @@
1{
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 9,
6 "metadata": {},
7 "outputs": [],
8 "source": [
9 "import os, sys\n",
10 "import glob\n",
11 "lib_path = os.path.abspath(os.path.join('..', '..', 'utils'))\n",
12 "sys.path.append(lib_path)\n",
13 "import matplotlib.pyplot as plt\n",
14 "from GraphType import GraphStat\n",
15 "import readCSV as reader\n",
16 "import constants"
17 ]
18 },
19 {
20 "cell_type": "code",
21 "execution_count": 10,
22 "metadata": {},
23 "outputs": [],
24 "source": [
25 "def getModels(folderName, numberOfModels):\n",
26 " filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n",
27 " graphStats = [GraphStat(filename) for filename in filenames]\n",
28 " return graphStats"
29 ]
30 },
31 {
32 "cell_type": "code",
33 "execution_count": 11,
34 "metadata": {},
35 "outputs": [],
36 "source": [
37 "def drawTypeDistributions(folderName, numberOfModels):\n",
38 " graphStats = getModels(folderName, numberOfModels)\n",
39 " typeMap = {}\n",
40 " keys = set()\n",
41 " for g in graphStats:\n",
42 " keys = keys.union(set(g.nodeTypeStat.keys()))\n",
43 " for key in keys:\n",
44 " typeMap[key] = [float(g.nodeTypeStat.get(key,0)) for g in graphStats]\n",
45 " print(list(typeMap.keys()))\n",
46 " for i, key in enumerate(typeMap.keys()):\n",
47 " plt.figure(i)\n",
48 " plt.hist(typeMap[key], range = (0,1), bins=50)\n",
49 " plt.title(key)\n",
50 " plt.plot()"
51 ]
52 },
53 {
54 "cell_type": "code",
55 "execution_count": 12,
56 "metadata": {
57 "scrolled": true
58 },
59 "outputs": [
60 {
61 "name": "stdout",
62 "output_type": "stream",
63 "text": [
64 "['EAttribute', 'EGenericType', 'ETypeParameter', 'EPackage', 'EOperation', 'EStringToStringMapEntry', 'EEnum', 'EDataType', 'EClass', 'EReference', 'EObject', 'EEnumLiteral', 'EAnnotation', 'EParameter']\n"
65 ]
66 },
67 {
68 "data": {
69 "image/png": "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\n",
70 "text/plain": [
71 "<Figure size 432x288 with 1 Axes>"
72 ]
73 },
74 "metadata": {
75 "needs_background": "light"
76 },
77 "output_type": "display_data"
78 },
79 {
80 "data": {
81 "image/png": "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\n",
82 "text/plain": [
83 "<Figure size 432x288 with 1 Axes>"
84 ]
85 },
86 "metadata": {
87 "needs_background": "light"
88 },
89 "output_type": "display_data"
90 },
91 {
92 "data": {
93 "image/png": "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\n",
94 "text/plain": [
95 "<Figure size 432x288 with 1 Axes>"
96 ]
97 },
98 "metadata": {
99 "needs_background": "light"
100 },
101 "output_type": "display_data"
102 },
103 {
104 "data": {
105 "image/png": "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\n",
106 "text/plain": [
107 "<Figure size 432x288 with 1 Axes>"
108 ]
109 },
110 "metadata": {
111 "needs_background": "light"
112 },
113 "output_type": "display_data"
114 },
115 {
116 "data": {
117 "image/png": "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\n",
118 "text/plain": [
119 "<Figure size 432x288 with 1 Axes>"
120 ]
121 },
122 "metadata": {
123 "needs_background": "light"
124 },
125 "output_type": "display_data"
126 },
127 {
128 "data": {
129 "image/png": "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\n",
130 "text/plain": [
131 "<Figure size 432x288 with 1 Axes>"
132 ]
133 },
134 "metadata": {
135 "needs_background": "light"
136 },
137 "output_type": "display_data"
138 },
139 {
140 "data": {
141 "image/png": "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\n",
142 "text/plain": [
143 "<Figure size 432x288 with 1 Axes>"
144 ]
145 },
146 "metadata": {
147 "needs_background": "light"
148 },
149 "output_type": "display_data"
150 },
151 {
152 "data": {
153 "image/png": "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\n",
154 "text/plain": [
155 "<Figure size 432x288 with 1 Axes>"
156 ]
157 },
158 "metadata": {
159 "needs_background": "light"
160 },
161 "output_type": "display_data"
162 },
163 {
164 "data": {
165 "image/png": "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\n",
166 "text/plain": [
167 "<Figure size 432x288 with 1 Axes>"
168 ]
169 },
170 "metadata": {
171 "needs_background": "light"
172 },
173 "output_type": "display_data"
174 },
175 {
176 "data": {
177 "image/png": "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\n",
178 "text/plain": [
179 "<Figure size 432x288 with 1 Axes>"
180 ]
181 },
182 "metadata": {
183 "needs_background": "light"
184 },
185 "output_type": "display_data"
186 },
187 {
188 "data": {
189 "image/png": "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\n",
190 "text/plain": [
191 "<Figure size 432x288 with 1 Axes>"
192 ]
193 },
194 "metadata": {
195 "needs_background": "light"
196 },
197 "output_type": "display_data"
198 },
199 {
200 "data": {
201 "image/png": "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\n",
202 "text/plain": [
203 "<Figure size 432x288 with 1 Axes>"
204 ]
205 },
206 "metadata": {
207 "needs_background": "light"
208 },
209 "output_type": "display_data"
210 },
211 {
212 "data": {
213 "image/png": "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\n",
214 "text/plain": [
215 "<Figure size 432x288 with 1 Axes>"
216 ]
217 },
218 "metadata": {
219 "needs_background": "light"
220 },
221 "output_type": "display_data"
222 },
223 {
224 "data": {
225 "image/png": "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\n",
226 "text/plain": [
227 "<Figure size 432x288 with 1 Axes>"
228 ]
229 },
230 "metadata": {
231 "needs_background": "light"
232 },
233 "output_type": "display_data"
234 }
235 ],
236 "source": [
237 "drawTypeDistributions('../input/human_models_75/', 1500)"
238 ]
239 },
240 {
241 "cell_type": "code",
242 "execution_count": 13,
243 "metadata": {
244 "scrolled": true
245 },
246 "outputs": [
247 {
248 "name": "stdout",
249 "output_type": "stream",
250 "text": [
251 "['EAttribute', 'EGenericType', 'ETypeParameter', 'EPackage', 'EOperation', 'EStringToStringMapEntry', 'EEnum', 'EDataType', 'EClass', 'EReference', 'EObject', 'EEnumLiteral', 'EAnnotation', 'EParameter']\n"
252 ]
253 },
254 {
255 "data": {
256 "image/png": "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\n",
257 "text/plain": [
258 "<Figure size 432x288 with 1 Axes>"
259 ]
260 },
261 "metadata": {
262 "needs_background": "light"
263 },
264 "output_type": "display_data"
265 },
266 {
267 "data": {
268 "image/png": "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\n",
269 "text/plain": [
270 "<Figure size 432x288 with 1 Axes>"
271 ]
272 },
273 "metadata": {
274 "needs_background": "light"
275 },
276 "output_type": "display_data"
277 },
278 {
279 "data": {
280 "image/png": "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\n",
281 "text/plain": [
282 "<Figure size 432x288 with 1 Axes>"
283 ]
284 },
285 "metadata": {
286 "needs_background": "light"
287 },
288 "output_type": "display_data"
289 },
290 {
291 "data": {
292 "image/png": "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\n",
293 "text/plain": [
294 "<Figure size 432x288 with 1 Axes>"
295 ]
296 },
297 "metadata": {
298 "needs_background": "light"
299 },
300 "output_type": "display_data"
301 },
302 {
303 "data": {
304 "image/png": "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\n",
305 "text/plain": [
306 "<Figure size 432x288 with 1 Axes>"
307 ]
308 },
309 "metadata": {
310 "needs_background": "light"
311 },
312 "output_type": "display_data"
313 },
314 {
315 "data": {
316 "image/png": "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\n",
317 "text/plain": [
318 "<Figure size 432x288 with 1 Axes>"
319 ]
320 },
321 "metadata": {
322 "needs_background": "light"
323 },
324 "output_type": "display_data"
325 },
326 {
327 "data": {
328 "image/png": "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\n",
329 "text/plain": [
330 "<Figure size 432x288 with 1 Axes>"
331 ]
332 },
333 "metadata": {
334 "needs_background": "light"
335 },
336 "output_type": "display_data"
337 },
338 {
339 "data": {
340 "image/png": "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\n",
341 "text/plain": [
342 "<Figure size 432x288 with 1 Axes>"
343 ]
344 },
345 "metadata": {
346 "needs_background": "light"
347 },
348 "output_type": "display_data"
349 },
350 {
351 "data": {
352 "image/png": "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\n",
353 "text/plain": [
354 "<Figure size 432x288 with 1 Axes>"
355 ]
356 },
357 "metadata": {
358 "needs_background": "light"
359 },
360 "output_type": "display_data"
361 },
362 {
363 "data": {
364 "image/png": "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\n",
365 "text/plain": [
366 "<Figure size 432x288 with 1 Axes>"
367 ]
368 },
369 "metadata": {
370 "needs_background": "light"
371 },
372 "output_type": "display_data"
373 },
374 {
375 "data": {
376 "image/png": "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\n",
377 "text/plain": [
378 "<Figure size 432x288 with 1 Axes>"
379 ]
380 },
381 "metadata": {
382 "needs_background": "light"
383 },
384 "output_type": "display_data"
385 },
386 {
387 "data": {
388 "image/png": "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\n",
389 "text/plain": [
390 "<Figure size 432x288 with 1 Axes>"
391 ]
392 },
393 "metadata": {
394 "needs_background": "light"
395 },
396 "output_type": "display_data"
397 },
398 {
399 "data": {
400 "image/png": "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\n",
401 "text/plain": [
402 "<Figure size 432x288 with 1 Axes>"
403 ]
404 },
405 "metadata": {
406 "needs_background": "light"
407 },
408 "output_type": "display_data"
409 },
410 {
411 "data": {
412 "image/png": "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\n",
413 "text/plain": [
414 "<Figure size 432x288 with 1 Axes>"
415 ]
416 },
417 "metadata": {
418 "needs_background": "light"
419 },
420 "output_type": "display_data"
421 }
422 ],
423 "source": [
424 "drawTypeDistributions('../input/viatra_75/', 50)"
425 ]
426 },
427 {
428 "cell_type": "markdown",
429 "metadata": {},
430 "source": [
431 "## Extract Human Models with size [90, 101]"
432 ]
433 },
434 {
435 "cell_type": "code",
436 "execution_count": 8,
437 "metadata": {},
438 "outputs": [],
439 "source": [
440 "def extractModel():\n",
441 " from shutil import copy\n",
442 " list_of_files = reader.readmultiplefiles('../input/humanOutput/', 5000)\n",
443 " num_nodes_list =[]\n",
444 " human_size_dic = {}\n",
445 " for file in list_of_files:\n",
446 " contents = reader.readcsvfile(file)\n",
447 " num_of_node = contents[constants.NUMBER_NODES]\n",
448 " # human_size_dic[file] = int(num_of_node[0])\n",
449 " # num_nodes_list.append(int(num_of_node[0]))\n",
450 " if 90 <= num_of_node[0] <= 110:\n",
451 " copy(file, '../input/human_output_100/')"
452 ]
453 },
454 {
455 "cell_type": "markdown",
456 "metadata": {},
457 "source": [
458 "## Multinomial Distribution Analysis"
459 ]
460 },
461 {
462 "cell_type": "code",
463 "execution_count": 29,
464 "metadata": {},
465 "outputs": [
466 {
467 "name": "stdout",
468 "output_type": "stream",
469 "text": [
470 "{'EAnnotation': 0.04240463215258856, 'EClass': 0.1558242506811989, 'EAttribute': 0.12880336058128974, 'EStringToStringMapEntry': 0.07317211625794733, 'EGenericType': 0.3791439600363306, 'EReference': 0.14208673932788374, 'EPackage': 0.01759763851044505, 'EDataType': 0.005619891008174387, 'EEnumLiteral': 0.03139191643960036, 'EEnum': 0.008174386920980926, 'EOperation': 0.009366485013623978, 'EParameter': 0.00607402361489555, 'ETypeParameter': 0.00022706630336058128, 'EObject': 0.00011353315168029064}\n"
471 ]
472 }
473 ],
474 "source": [
475 "import numpy as np\n",
476 "import scipy.stats as stats\n",
477 "graphStats = getModels('../input/human_models_75/', 1500)\n",
478 "totalNodes = sum(list(map(lambda g: g.numNodes, graphStats)))[0]\n",
479 "typeMap = {}\n",
480 "for g in graphStats:\n",
481 " gKeys = g.nodeTypeStat.keys()\n",
482 " size = g.numNodes[0]\n",
483 " for key in gKeys:\n",
484 " curNum = typeMap.get(key, 0)\n",
485 " typeMap[key] = curNum + float(g.nodeTypeStat[key]) * size\n",
486 "\n",
487 "for key in typeMap.keys():\n",
488 " typeMap[key] /= totalNodes\n",
489 "print(typeMap)"
490 ]
491 },
492 {
493 "cell_type": "code",
494 "execution_count": 30,
495 "metadata": {},
496 "outputs": [],
497 "source": [
498 "def chiSquareMultinomialTest(freq, prob):\n",
499 " freq = np.array(freq)\n",
500 " prob = np.array(prob)\n",
501 " size = sum(freq)\n",
502 " e = prob * size\n",
503 " return stats.chisquare(freq, e)"
504 ]
505 },
506 {
507 "cell_type": "code",
508 "execution_count": 31,
509 "metadata": {},
510 "outputs": [],
511 "source": [
512 "def typeDistributionTest(g):\n",
513 " size = g.numNodes[0]\n",
514 " freq = []\n",
515 " prob = []\n",
516 " for key in typeMap.keys():\n",
517 " value = float(g.nodeTypeStat.get(key, 0))\n",
518 " freq.append(np.round(value * size))\n",
519 " prob.append(typeMap[key])\n",
520 " test = chiSquareMultinomialTest(freq, prob)\n",
521 " return test"
522 ]
523 },
524 {
525 "cell_type": "code",
526 "execution_count": 32,
527 "metadata": {},
528 "outputs": [
529 {
530 "name": "stdout",
531 "output_type": "stream",
532 "text": [
533 "[7.26359261e+01 6.82490355e-02]\n",
534 "[3.31848655e+01 1.59841378e-03]\n"
535 ]
536 }
537 ],
538 "source": [
539 "test = [typeDistributionTest(graphStats[i]) for i in range(len(graphStats))]\n",
540 "print(np.mean(test, 0))\n",
541 "print(np.median(test, 0))"
542 ]
543 },
544 {
545 "cell_type": "markdown",
546 "metadata": {},
547 "source": [
548 "## Node Counts Distribution"
549 ]
550 },
551 {
552 "cell_type": "code",
553 "execution_count": 32,
554 "metadata": {},
555 "outputs": [],
556 "source": [
557 "import matplotlib.pyplot as plt\n",
558 "from shutil import copyfile\n",
559 "\n",
560 "# graphStats = getModels('../input/human_models/', 1500)\n",
561 "# sizes = []\n",
562 "filenames = reader.readmultiplefiles('../input/human_models/', 1500, False)\n",
563 "count = 1\n",
564 "for filename in filenames:\n",
565 " graphStat = GraphStat(filename)\n",
566 " size = graphStat.numNodes[0]\n",
567 " if(size <= 87 and size >= 67):\n",
568 " copyfile(filename, '../input/human_models_75/{}.csv'.format(count))\n",
569 " count+=1\n",
570 " \n",
571 " \n",
572 " \n",
573 "# for g in graphStats:\n",
574 "# size = g.numNodes[0]\n",
575 " \n",
576 "# print(min(sizes))\n",
577 "# print(len(sizes))\n",
578 "# plt.hist(sizes, bins=10)\n"
579 ]
580 },
581 {
582 "cell_type": "code",
583 "execution_count": null,
584 "metadata": {},
585 "outputs": [],
586 "source": []
587 }
588 ],
589 "metadata": {
590 "kernelspec": {
591 "display_name": "Python 3",
592 "language": "python",
593 "name": "python3"
594 },
595 "language_info": {
596 "codemirror_mode": {
597 "name": "ipython",
598 "version": 3
599 },
600 "file_extension": ".py",
601 "mimetype": "text/x-python",
602 "name": "python",
603 "nbconvert_exporter": "python",
604 "pygments_lexer": "ipython3",
605 "version": "3.7.3"
606 }
607 },
608 "nbformat": 4,
609 "nbformat_minor": 2
610}
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py
new file mode 100644
index 00000000..e5e12f42
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py
@@ -0,0 +1,77 @@
1import matplotlib.pyplot as plt
2import numpy as np
3import cdf_histogram as cdf
4import readCSV as reader
5import constants
6import csv
7from shutil import copy
8
9
10# viatra_controlled = np.genfromtxt('../statistics/violations/viatra_controlled.csv', delimiter='\n')
11# viatra_controlled_mean = np.mean(viatra_controlled)
12# viatra_nocons = np.genfromtxt('../statistics/violations/viatra_no_cons_violation.csv', delimiter='\n')
13# viatra_nocons_mean = np.mean(viatra_nocons)
14# human = np.genfromtxt('../statistics/violations/human_violation.csv', delimiter='\n')
15# human_mean = np.mean(human)
16# print('viatra controlled violation mean: ' + str(viatra_controlled_mean))
17# print('viatra no cons violation mean: ' + str(viatra_nocons_mean))
18# print('human output violation mean: ' + str(human_mean))
19
20
21def read_violation_file(file_name):
22 violation = {}
23 with open(file_name) as f:
24 for i, line in enumerate(f):
25 line = int(line.rstrip())
26 if line in violation:
27 violation[line] += 1
28 else:
29 violation[line] = 1
30 f.close()
31 return violation
32
33# violation = read_violation_file('../statistics/violations/viatra_controlled.csv')
34# print(violation)
35# fig, ax = plt.subplots()
36# rects = ax.bar(violation.keys(), violation.values())
37# cdf.autolabel(rects, ax)
38# ax.set_title('viatra controlled violation distribution')
39# ax.set_xlabel('number of violations')
40# ax.set_ylabel('number of occurrence')
41# plt.show()
42# fig.savefig('../statistics/violations/viatra_controlled_violation_distribution.png')
43
44
45def plot_violation():
46 v = np.array([0,1,1,0,0])
47 print(v)
48 (n, bins) = np.histogram(v, bins=v.size, density=True) # NumPy version (no plot)
49 # plt.plot(.5 * (bins[1:] + bins[:-1]), n)
50 plt.hist(v, bins=50, density=1)
51 plt.show()
52
53
54def human_output_size():
55 list_of_files = reader.readmultiplefiles('../statistics/humanOutput/', 5000)
56 num_nodes_list =[]
57 human_size_dic = {}
58 for file in list_of_files:
59 contents = reader.readcsvfile(file)
60 num_of_node = contents[constants.NUMBER_NODES]
61 # human_size_dic[file] = int(num_of_node[0])
62 # num_nodes_list.append(int(num_of_node[0]))
63 if 90 <= num_of_node[0] <= 110:
64 copy(file, '../statistics/human_output_100/')
65
66 # mean = np.mean(num_nodes_list)
67 # std = np.std(num_nodes_list)
68 # with open('../statistics/human_output_size.csv', 'w', newline='') as csvfile:
69 # spamwriter = csv.writer(csvfile, delimiter=',',
70 # quotechar='|', quoting=csv.QUOTE_MINIMAL)
71 # spamwriter.writerow(['mean', mean])
72 # spamwriter.writerow(['standard deviation', std])
73 # for key, value in human_size_dic.items():
74 # spamwriter.writerow([key, value])
75
76
77
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
index d6bdad0d..feb9a0a9 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
@@ -25,6 +25,8 @@ class GraphStat:
25 # init with teh file name of the stat 25 # init with teh file name of the stat
26 def __init__(self, filename): 26 def __init__(self, filename):
27 contents, self.out_d, self.na, self.mpc = reader.getmetrics(filename) 27 contents, self.out_d, self.na, self.mpc = reader.getmetrics(filename)
28 self.num_nodes = np.array(contents[constants.NUMBER_NODES]) 28 self.numNodes = np.array(contents[constants.NUMBER_NODES])
29 if constants.STATE_ID in contents: 29 if constants.STATE_ID in contents:
30 self.id = (contents[constants.STATE_ID])[0] 30 self.id = (contents[constants.STATE_ID])[0]
31 if constants.Node_TYPE_KEY in contents:
32 self.nodeTypeStat = contents[constants.Node_TYPE_KEY]
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py b/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py
index aba81b13..51e538f8 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py
@@ -18,8 +18,13 @@ METAMODEL = 'Meta Mode'
18 18
19STATE_ID = 'State Id' 19STATE_ID = 'State Id'
20 20
21NODE_TYPE = 'Node Type'
22
23Node_TYPE_KEY = 'NodeType'
24
21HUMAN_OUT_D_REP = '../input/humanOutput/R_2015225_run_1.csv' 25HUMAN_OUT_D_REP = '../input/humanOutput/R_2015225_run_1.csv'
22 26
23HUMAN_MPC_REP = '../input/humanOutput/R_2016324_run_1.csv' 27HUMAN_MPC_REP = '../input/humanOutput/R_2016324_run_1.csv'
24 28
25HUMAN_NA_REP = '../input/humanOutput/R_2017419_run_1.csv' 29HUMAN_NA_REP = '../input/humanOutput/R_2017419_run_1.csv'
30
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
index 33378ce5..1cec2f0c 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
@@ -13,8 +13,10 @@ def readcsvfile(filename):
13 13
14 contents = {} 14 contents = {}
15 with open(filename) as f: 15 with open(filename) as f:
16 for i, line in enumerate(f): 16 data = list(f)
17 arr = line.split(',') 17 f.close()
18 for i, line in enumerate(data):
19 arr = line.replace('\n', '').split(',')
18 # if there is no element in the line, continue 20 # if there is no element in the line, continue
19 if len(line) < 0: continue 21 if len(line) < 0: continue
20 # else check for contents 22 # else check for contents
@@ -24,14 +26,17 @@ def readcsvfile(filename):
24 # meta models are string 26 # meta models are string
25 elif(arr[0] == constants.METAMODEL): 27 elif(arr[0] == constants.METAMODEL):
26 contents[constants.METAMODEL] = arr[1:] 28 contents[constants.METAMODEL] = arr[1:]
27 # NA and OD are integers 29 # Node types
30 elif(arr[0] == constants.NODE_TYPE):
31 types = data[i+1].replace('\n', '').split(',')
32 numbers = data[i+2].replace('\n', '').split(',')
33 contents[constants.Node_TYPE_KEY] = {t : n for t, n in zip(types, numbers)}
34 # NA and OD are integers, and store other information as string
28 else: 35 else:
29 try: 36 try:
30 contents[arr[0]] = list(map(int, arr[1:])) 37 contents[arr[0]] = list(map(int, arr[1:]))
31 except: 38 except:
32 message = arr[0], ' is not integer' 39 contents[arr[0]] = arr[1:]
33 #print(message)
34 f.close()
35 return contents 40 return contents
36 41
37def checkAndReshape(arr): 42def checkAndReshape(arr):