package com.plectix.simulator.simulator.api.steps; import com.plectix.simulator.interfaces.SolutionInterface; import com.plectix.simulator.simulator.KappaSystem; import com.plectix.simulator.simulator.SimulationArguments; import com.plectix.simulator.simulator.SimulationData; import com.plectix.simulator.simulator.api.OperationType; import com.plectix.simulator.staticanalysis.observables.Observables; import com.plectix.simulator.staticanalysis.rulecompression.RuleCompressionType; public class SolutionInitializationOperation extends AbstractOperation<KappaSystem> { private final SimulationData simulationData; public SolutionInitializationOperation(SimulationData simulationData) { super(simulationData, OperationType.INITIALIZATION); this.simulationData = simulationData; } protected KappaSystem performDry() throws Exception { SimulationArguments args = simulationData.getSimulationArguments(); KappaSystem kappaSystem = simulationData.getKappaSystem(); OperationManager manager = kappaSystem.getOperationManager(); Observables observables = kappaSystem.getObservables(); SolutionInterface solution = kappaSystem.getSolution(); observables.init(args.getTimeLimit(), args.getInitialTime(), args .getMaxNumberOfEvents(), args.getPoints(), args.isTime()); observables.checkAutomorphisms(); // !!!!!!!!INJECTIONS!!!!!!!!! if (args.solutionNeedsToBeRead()) { manager.perform(new InjectionBuildingOperation(kappaSystem)); } if (solution.getSuperStorage() != null) { solution.getSuperStorage().setAgentsLimit(args.getAgentsLimit()); } if (args.needToCreateSubViews()) { manager.perform(new SubviewsComputationOperation(kappaSystem)); } if (args.needToFindDeadRules()) { manager.perform(new DeadRuleDetectionOperation(kappaSystem)); } if (args.getSimulationType() == SimulationArguments.SimulationType.CONTACT_MAP) { manager.perform(new ContactMapComputationOperation(simulationData)); } if (args.needToBuildActivationMap() || args.needToBuildInhibitionMap()) { kappaSystem.setInfluenceMap(manager.perform(new InfluenceMapComputationOperation(simulationData))); } if (args.needToCreateLocalViews()) { kappaSystem.setLocalViews(manager.perform(new LocalViewsComputationOperation(simulationData))); } if (args.needToEnumerationOfSpecies()) { manager.perform(new SpeciesEnumerationOperation(kappaSystem)); } if (args.needToRunQualitativeCompression()) { manager.perform(new RuleCompressionOperation(kappaSystem, RuleCompressionType.QUALITATIVE)); } if (args.needToRunQuantitativeCompression()) { manager.perform(new RuleCompressionOperation(kappaSystem, RuleCompressionType.QUANTITATIVE)); } return kappaSystem; } @Override protected boolean noNeedToPerform() { return simulationData.getKappaSystem().getState().kappaSystemIsInitialized(); // return false; } @Override protected KappaSystem retrievePreparedResult() { return simulationData.getKappaSystem(); } }