copy scenario
diff --git a/org.eclipse.stem/analysis/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithmExecuter.java b/org.eclipse.stem/analysis/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithmExecuter.java index 231aff3..4046e4f 100644 --- a/org.eclipse.stem/analysis/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithmExecuter.java +++ b/org.eclipse.stem/analysis/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithmExecuter.java
@@ -26,6 +26,7 @@ import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.stem.analysis.ErrorFunction; import org.eclipse.stem.analysis.ErrorResult; import org.eclipse.stem.analysis.LogInitializationException; @@ -40,6 +41,9 @@ import org.eclipse.stem.jobs.simulation.ISimulation; import org.eclipse.stem.jobs.simulation.Simulation; import org.eclipse.stem.util.loggers.views.CustomCSVLogger; +import org.eclipse.stem.loggers.csv.CSVLogger; +import org.eclipse.stem.loggers.csv.impl.CSVLoggerImpl; +import org.eclipse.stem.loggers.csv.logger.DelimetedFileSimulationLogger; public class SimplexAlgorithmExecuter @@ -180,12 +184,14 @@ public ErrorResult getValue(double[] parameters) { + // SED: Fix for multiple trigger problem., Just run with a deep copy of the scenario + Scenario copyScenario = EcoreUtil.copy(baseScenario); - simulation = createSimulation(baseScenario); + simulation = createSimulation(copyScenario); simulation.setSequenceNumber(simulation.getSequenceNumber()+1); // Descend into the Scenario looking for something with a double field - final EList<Decorator> decs = baseScenario.getCanonicalGraph().getDecorators(); + final EList<Decorator> decs = copyScenario.getCanonicalGraph().getDecorators(); Decorator defaultDecorator = null; for (Decorator decorator : decs) { @@ -214,18 +220,19 @@ if (simulation != null) { uniqueID = simulation.getUniqueIDString(); } + + String directoryName = SIMULATION_OUTPUT_DIR + File.separator+uniqueID + File.separator; File dir = new File(directoryName); if(!dir.exists()) dir.mkdirs(); - - + csvLogger = new CustomCSVLogger(directoryName, simulation, (IntegrationDecorator) defaultDecorator); - + // This will reinit the infectors/inoc etc to the new values try { - baseScenario.reset(); + copyScenario.reset(); } catch(ScenarioInitializationException sie) { Utility.handleException(sie.getErrorMessage(), true, sie); } @@ -244,8 +251,8 @@ ((AbstractErrorAnalysisAlgorithm)algorithm).fireEvent( newEvent); runSimulation(simulation); - - result = getErrorValue(simulation.getUniqueIDString()); + + result = getErrorValue(simulation.getUniqueIDString(), copyScenario); newEvent = new ErrorAnalysisAlgorithmEvent(result, ALGORITHM_STATUS.FINISHED_SIMULATION); newEvent.parameterNames = parameterNames; @@ -274,10 +281,10 @@ return result; } - private ErrorResult getErrorValue(String simulationUniqueId) { + private ErrorResult getErrorValue(String simulationUniqueId, Scenario scenario) { ErrorResult result = null; try { - final EList<Decorator> decs = baseScenario.getCanonicalGraph().getDecorators(); + final EList<Decorator> decs = scenario.getCanonicalGraph().getDecorators(); DiseaseModel defaultDecorator = null; for (Decorator decorator : decs) {