package com.plectix.simulator.simulationclasses.perturbations; import com.plectix.simulator.interfaces.ObservableInterface; import com.plectix.simulator.parser.abstractmodel.perturbations.conditions.ConditionType; import com.plectix.simulator.simulationclasses.perturbations.util.LinearExpression; import com.plectix.simulator.simulationclasses.perturbations.util.VectorObservable; import com.plectix.simulator.staticanalysis.observables.Observables; import com.plectix.simulator.util.InequalitySign; public class SpeciesCondition implements ConditionInterface { // the one in left hand side private final ObservableInterface pickedObservable; private final LinearExpression<VectorObservable> expression; private final Observables observables; private final InequalitySign inequalitySign; public SpeciesCondition(ObservableInterface watchedObservable, LinearExpression<VectorObservable> expression, InequalitySign inequalitySign, Observables observables) { super(); this.pickedObservable = watchedObservable; this.expression = expression; this.observables = observables; this.inequalitySign = inequalitySign; } private final double countObservable(ObservableInterface observable) { return this.pickedObservable.getCurrentState(observables); } @Override public boolean check(double currentTime) { double quantity = countObservable(pickedObservable); return inequalitySign.satisfy(quantity, expression.calculate()); } @Override public ConditionType getType() { return ConditionType.SPECIES; } @Override public InequalitySign inequalitySign() { return inequalitySign; } public ObservableInterface getPickedObservable() { return pickedObservable; } public LinearExpression<VectorObservable> getExpression() { return expression; } @Override public String toString() { StringBuffer sb = new StringBuffer("'"); sb.append(pickedObservable.getName()); sb.append("' " + inequalitySign + " "); sb.append(expression); return sb.toString(); } }