aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend
blob: b1986d50655d2e9a98af98cf745e5645fac647e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app

import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph
import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter
import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader
import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl
import java.util.ArrayList

//import yakindumm2.impl.Yakindumm2PackageImpl

class Main {
	static class RWInformation{
		public var String inputFolder;
		public var String outputFolder;
		public var int numRuns;
		
		new(String inputFolder, String outputFolder, int numRuns){
			this.inputFolder = inputFolder;
			this.outputFolder = outputFolder;
			this.numRuns = numRuns;
		}
	}
	
	def static void main(String[] args){
		//init model
		YakindummPackageImpl.eINSTANCE.eClass;
//		Yakindumm2PackageImpl.eINSTANCE.eClass;
		//val infos = initData();									
										
		println("Start Reading Models...");
		var reader = new GraphReader(YakindummPackageImpl.eINSTANCE);
//		for(info : infos){
//			calculateAllModels(info.inputFolder, info.outputFolder,info.numRuns, reader);
//		}
		
		//human input has different package declaration
//		reader = new GraphReader(Yakindumm2PackageImpl.eINSTANCE);
		val human = new RWInformation("Inputs/config15/", "outputs/", 1);
		calculateAllModels(human.inputFolder, human.outputFolder,human.numRuns, reader);
		
		
		println("finished");
	}
	
	static def initData(){
		val infos = new ArrayList<RWInformation>();
		infos.add(new RWInformation("inputs/alloyInput/models/", "../plot/statistics/alloyOutput/", 20));
		infos.add(new RWInformation("inputs/randomInput/models/", "../plot/statistics/randomOutput/", 20));
		infos.add(new RWInformation("inputs/viatraInput30/", "../plot/statistics/viatraOutput30/", 20));
		infos.add(new RWInformation("inputs/viatraInput100/", "../plot/statistics/viatraOutput100/", 10));
		return infos;
	}
	
	static def calculateAllModels(String inputFolder, String outputFolder, int numRuns, GraphReader reader){
		for(var i = 1; i <= numRuns; i++){
			val models = new ArrayList<EMFGraph>();
			models.addAll(reader.readModels(inputFolder + "run" + i));
			for(model : models){
				calculateAndOutputMetrics(model, YakindummPackageImpl.eNAME, outputFolder+model.name+"_run_"+i+".csv");
			}
		}
		println("output results Ended for: " + outputFolder);
		
		
	}
	
	static def calculateAndOutputMetrics(EMFGraph model, String metaModel, String fileName){
		//println("evaluating for " + model.name);
		model.metaModel = metaModel;
		CsvFileWriter.write(model.evaluateAllMetrics(), fileName);
	}
}