package com.plectix.simulator.simulator.api.steps.experiments; import com.plectix.simulator.controller.SimulatorInputData; import com.plectix.simulator.simulator.Simulator; import com.plectix.simulator.simulator.api.steps.ExperimentWorkflow; import com.plectix.simulator.simulator.api.steps.KappaModelBuildingOperation; import com.plectix.simulator.simulator.api.steps.OperationManager; import com.plectix.simulator.simulator.api.steps.SimulatorInitializationOperation; public class Experiment { private Simulator simulator = new Simulator(); public Experiment(SimulatorInputData simulatorInputData) throws Exception { super(); OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager(); manager.perform(new SimulatorInitializationOperation(simulator, simulatorInputData)); manager.perform(new KappaModelBuildingOperation(simulator.getSimulationData())); } public final void run(int numberOfRuns, ExperimentListener experimentListener) { int runNo= 0; try { OperationManager manager = simulator.getSimulationData().getKappaSystem().getOperationManager(); while (runNo < numberOfRuns) { if (experimentListener != null) { experimentListener.startingRun(runNo, simulator); // the listener may change the input data here... } // run the simulator manager.perform(new ExperimentWorkflow(simulator)); if (experimentListener != null) { experimentListener.finishedRun(runNo, simulator); // the listener processes the results here... } // reset the solution, observables, etc. in the simulator but not the kappa file, keep that in memory... simulator.getSimulationData().reset(); // increase the run count: runNo++; } } catch (Exception e) { e.printStackTrace(); simulator.cleanUpAfterException(e); } catch (OutOfMemoryError outOfMemoryError) { outOfMemoryError.printStackTrace(); simulator.getSimulatorResultsData().getSimulatorExitReport().setException(new Exception(outOfMemoryError)); System.err.println("Caught an OutOfMemoryError!"); } finally { if (experimentListener != null) { experimentListener.finishedAllRuns(runNo, simulator); } } } public final Simulator getSimulator() { return simulator; } }