Ver código fonte

output being produced with csv

Claudio Gomes 7 anos atrás
pai
commit
96bfda111f

+ 1 - 0
.gitignore

@@ -5,3 +5,4 @@
 /HintCO/xtend-gen/
 /HintCO/instances/generated
 /HintCO/src-gen/
+/HintCO/results-gen/

+ 1 - 0
HintCO/.classpath

@@ -3,6 +3,7 @@
 	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry kind="src" path="lib/nativebinaries"/>
 	<classpathentry kind="src" path="resources"/>
+	<classpathentry exported="true" kind="lib" path="lib/opencsv-4.3.2.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/commons-lang3-3.8.1.jar" sourcepath="lib/commons-cli-1.4-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/commons-beanutils-1.9.3.jar" sourcepath="lib/commons-beanutils-1.9.3-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/commons-cli-1.4.jar" sourcepath="lib/commons-cli-1.4-sources.jar"/>

+ 2 - 1
HintCO/META-INF/MANIFEST.MF

@@ -12,7 +12,8 @@ Bundle-ClassPath: .,
  lib/slf4j-simple.jar,
  lib/commons-cli-1.4.jar,
  lib/commons-beanutils-1.9.3.jar,
- lib/commons-lang3-3.8.1.jar
+ lib/commons-lang3-3.8.1.jar,
+ lib/opencsv-4.3.2.jar
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Automatic-Module-Name: ua.ansymo.HintCO

+ 2 - 1
HintCO/build.properties

@@ -23,5 +23,6 @@ bin.includes = META-INF/,\
                lib/slf4j-simple.jar,\
                lib/commons-cli-1.4.jar,\
                lib/commons-beanutils-1.9.3.jar,\
-               lib/commons-lang3-3.8.1.jar
+               lib/commons-lang3-3.8.1.jar,\
+               lib/opencsv-4.3.2.jar
 jars.compile.order = .

+ 0 - 1
HintCO/src/ua/ansymo/hintco/CandidatesGenerator.xtend

@@ -4,7 +4,6 @@ import java.util.ArrayList
 import java.util.Deque
 import java.util.HashMap
 import java.util.List
-import java.util.Map
 import java.util.Set
 import org.eclipse.core.runtime.Assert
 

+ 33 - 6
HintCO/src/ua/ansymo/hintco/OutputProcessor.xtend

@@ -1,28 +1,55 @@
 package ua.ansymo.hintco
 
+import com.opencsv.CSVWriter
 import java.io.File
+import java.io.FileWriter
 import java.util.Map
+import org.apache.commons.io.FileUtils
+import org.eclipse.core.runtime.Assert
 
 class OutputProcessor implements IOutputProcessor {
 	
+	var String outDirPrefix;
+	val Map<CosimUnitInstance, CSVWriter> fmuFileMap = newHashMap()
 	var String outDirPath;
-	var File outDir
 	
 	new (String d){
-		outDirPath = d
+		outDirPrefix = d
 	}
 	
 	override initialize(CandidateScenario scenario, double stepSize, double stopTime) {
-		// Prepare output directory
+		// Prepare output directories
+		var outDir = new File(outDirPrefix)
+		if (outDir.exists){
+			FileUtils.deleteDirectory(outDir)
+		}
+		Assert.isTrue(outDir.mkdirs())
+		Assert.isTrue(outDir.isDirectory)
+		outDirPath = outDir + "/" + String.format("%s_%g_%g",scenario.identifier, stepSize, stopTime)
+		outDir = new File(outDirPath)
+		Assert.isTrue(outDir.mkdirs())
 		
+		// Open csv files
+		for (u : scenario.cosimunits){
+			val f = new CSVWriter(new FileWriter(new File(outDirPath + "/" + u.identifier + ".csv")), ";", CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END) 
+			// Write header
+			f.writeNext(#["step","time"] + u.ports.filter(OutputPortInstance).map[p | p.identifier])
+			
+			// Record file handler
+			fmuFileMap.put(u, f)
+		}
 	}
 	
-	override setOutputs(int i, double d, Map<OutputPortInstance, Double> map) {
-		
+	override setOutputs(int step, double time, Map<OutputPortInstance, Double> values) {
+		for (u : fmuFileMap.keySet){
+			fmuFileMap.get(u).writeNext(#[String.format("%d",step),String.format("%g",time)] + u.ports.filter(OutputPortInstance).map[p | String.format("%g", values.get(p))])
+		}
 	}
 	
 	override terminate() {
-		
+		for (u : fmuFileMap.keySet){
+			fmuFileMap.get(u).close()
+		}
 	}
 		
 }

+ 3 - 1
HintCO/test/ua/ansymo/hintco/test/CosimRunnerTest.xtend

@@ -1,6 +1,7 @@
 package ua.ansymo.hintco.test
 
 import java.io.File
+import org.apache.commons.io.FileUtils
 import org.intocps.fmi.Fmi2Status
 import org.intocps.fmi.IFmuCallback
 import org.intocps.fmi.jnifmuapi.Factory
@@ -96,8 +97,9 @@ class CosimRunnerTest {
 	
 	@Test
 	def void executeCosimulationTest(){
+		val resultsDirPath = "results-gen/cosimTest"
 		val loader = new ModelStorage()
-		val generator = new CandidatesGenerator(new ConstraintChecker(),new VariantValidator, new VariantProcessor(new CosimRunner(new OutputProcessor("output"))))
+		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(new CosimRunner(new OutputProcessor(resultsDirPath))))
 		val src = loader.loadCandidates("instances/execute_cosim_test.xmi")
 		generator.createVariantTree(src)
 		generator.generateVariants(src)