Search in sources :

Example 6 with Event

use of cbit.vcell.math.Event in project vcell by virtualcell.

the class XmlReader method getEvent.

private Event getEvent(MathDescription mathdesc, Element eventElement) throws XmlParseException {
    String name = unMangle(eventElement.getAttributeValue(XMLTags.NameAttrTag));
    Element element = eventElement.getChild(XMLTags.TriggerTag, vcNamespace);
    Expression triggerExp = unMangleExpression(element.getText());
    element = eventElement.getChild(XMLTags.DelayTag, vcNamespace);
    Delay delay = null;
    if (element != null) {
        boolean useValuesFromTriggerTime = Boolean.valueOf(element.getAttributeValue(XMLTags.UseValuesFromTriggerTimeAttrTag)).booleanValue();
        Expression durationExp = unMangleExpression(element.getText());
        delay = new Delay(useValuesFromTriggerTime, durationExp);
    }
    ArrayList<EventAssignment> eventAssignmentList = new ArrayList<EventAssignment>();
    Iterator<Element> iter = eventElement.getChildren(XMLTags.EventAssignmentTag, vcNamespace).iterator();
    while (iter.hasNext()) {
        element = iter.next();
        String varname = element.getAttributeValue(XMLTags.EventAssignmentVariableAttrTag);
        Expression assignExp = unMangleExpression(element.getText());
        Variable var = mathdesc.getVariable(varname);
        EventAssignment eventAssignment = new EventAssignment(var, assignExp);
        eventAssignmentList.add(eventAssignment);
    }
    Event event = new Event(name, triggerExp, delay, eventAssignmentList);
    transcribeComments(eventElement, event);
    return event;
}
Also used : FilamentVariable(cbit.vcell.math.FilamentVariable) OutsideVariable(cbit.vcell.math.OutsideVariable) StochVolVariable(cbit.vcell.math.StochVolVariable) RandomVariable(cbit.vcell.math.RandomVariable) VolumeRandomVariable(cbit.vcell.math.VolumeRandomVariable) VolumeParticleVariable(cbit.vcell.math.VolumeParticleVariable) VolumeRegionVariable(cbit.vcell.math.VolumeRegionVariable) InsideVariable(cbit.vcell.math.InsideVariable) VolVariable(cbit.vcell.math.VolVariable) MembraneRegionVariable(cbit.vcell.math.MembraneRegionVariable) PointVariable(cbit.vcell.math.PointVariable) MembraneRandomVariable(cbit.vcell.math.MembraneRandomVariable) MembraneParticleVariable(cbit.vcell.math.MembraneParticleVariable) ParticleVariable(cbit.vcell.math.ParticleVariable) MemVariable(cbit.vcell.math.MemVariable) FilamentRegionVariable(cbit.vcell.math.FilamentRegionVariable) Variable(cbit.vcell.math.Variable) EventAssignment(cbit.vcell.math.Event.EventAssignment) Expression(cbit.vcell.parser.Expression) Element(org.jdom.Element) ArrayList(java.util.ArrayList) Event(cbit.vcell.math.Event) BioEvent(cbit.vcell.mapping.BioEvent) Delay(cbit.vcell.math.Event.Delay)

Example 7 with Event

use of cbit.vcell.math.Event in project vcell by virtualcell.

the class OdeFileWriter method writeEvents.

private String writeEvents(HashMap<Discontinuity, String> discontinuityNameMap) throws ExpressionException {
    Simulation simulation = simTask.getSimulation();
    StringBuffer sb = new StringBuffer();
    MathDescription mathDescription = simulation.getMathDescription();
    Iterator<Event> iter = mathDescription.getEvents();
    sb.append("EVENTS " + mathDescription.getNumEvents() + "\n");
    while (iter.hasNext()) {
        Event event = iter.next();
        sb.append("EVENT " + event.getName() + "\n");
        Expression triggerExpression = event.getTriggerExpression();
        triggerExpression = MathUtilities.substituteFunctions(triggerExpression, varsSymbolTable).flatten();
        Vector<Discontinuity> v = triggerExpression.getDiscontinuities();
        for (Discontinuity od : v) {
            od = getSubsitutedAndFlattened(od, varsSymbolTable);
            String dname = discontinuityNameMap.get(od);
            if (dname == null) {
                dname = ROOT_VARIABLE_PREFIX + discontinuityNameMap.size();
                discontinuityNameMap.put(od, dname);
            }
            triggerExpression.substituteInPlace(od.getDiscontinuityExp(), new Expression("(" + dname + "==1)"));
        }
        sb.append("TRIGGER " + triggerExpression.infix() + ";\n");
        Delay delay = event.getDelay();
        if (delay != null) {
            Expression durationExpression = delay.getDurationExpression();
            durationExpression = MathUtilities.substituteFunctions(durationExpression, varsSymbolTable).flatten();
            sb.append("DELAY " + delay.useValuesFromTriggerTime() + " " + durationExpression.infix() + ";\n");
        }
        sb.append("EVENTASSIGNMENTS " + event.getNumEventAssignments() + "\n");
        Iterator<EventAssignment> iter2 = event.getEventAssignments();
        while (iter2.hasNext()) {
            EventAssignment eventAssignment = iter2.next();
            Expression assignmentExpression = eventAssignment.getAssignmentExpression();
            assignmentExpression = MathUtilities.substituteFunctions(assignmentExpression, varsSymbolTable).flatten();
            Variable assignmentTarget = eventAssignment.getVariable();
            for (int i = 0; i < fieldStateVariables.size(); i++) {
                if (assignmentTarget.getName().equals(fieldStateVariables.get(i).getVariable().getName())) {
                    sb.append(i + " " + assignmentExpression.infix() + ";\n");
                    break;
                }
            }
        }
    }
    return sb.toString();
}
Also used : Discontinuity(cbit.vcell.parser.Discontinuity) ReservedVariable(cbit.vcell.math.ReservedVariable) ParameterVariable(cbit.vcell.math.ParameterVariable) Variable(cbit.vcell.math.Variable) VolVariable(cbit.vcell.math.VolVariable) EventAssignment(cbit.vcell.math.Event.EventAssignment) MathDescription(cbit.vcell.math.MathDescription) Delay(cbit.vcell.math.Event.Delay) Simulation(cbit.vcell.solver.Simulation) Expression(cbit.vcell.parser.Expression) Event(cbit.vcell.math.Event)

Example 8 with Event

use of cbit.vcell.math.Event in project vcell by virtualcell.

the class MathModel_SBMLExporter method addSbmlEvent.

protected static void addSbmlEvent(Model sbmlModel, Event vcellMathEvent) {
    org.sbml.jsbml.Event sbmlEvent = sbmlModel.createEvent();
    sbmlEvent.setId(vcellMathEvent.getName());
    // create trigger
    Trigger trigger = sbmlEvent.createTrigger();
    Expression triggerExpr = vcellMathEvent.getTriggerExpression();
    // 
    // if trigger expression is not already in "boolean" form, then new expression is (exp != 0.0) ...nonzero is true.
    // 
    ASTNode triggerMath = getFormulaFromExpression(triggerExpr, MathType.BOOLEAN);
    trigger.setMath(triggerMath);
    // create delay
    cbit.vcell.math.Event.Delay vcellMathDelay = vcellMathEvent.getDelay();
    if (vcellMathDelay != null && vcellMathDelay.getDurationExpression() != null && !vcellMathDelay.getDurationExpression().isZero()) {
        Delay delay = sbmlEvent.createDelay();
        Expression delayExpr = vcellMathDelay.getDurationExpression();
        ASTNode delayMath = getFormulaFromExpression(delayExpr, MathType.REAL);
        delay.setMath(delayMath);
        sbmlEvent.setUseValuesFromTriggerTime(vcellMathDelay.useValuesFromTriggerTime());
    }
    // create eventAssignments
    Iterator<EventAssignment> vcEventAssignments = vcellMathEvent.getEventAssignments();
    while (vcEventAssignments.hasNext()) {
        EventAssignment vcEventAssignment = vcEventAssignments.next();
        org.sbml.jsbml.EventAssignment sbmlEA = sbmlEvent.createEventAssignment();
        Variable target = vcEventAssignment.getVariable();
        sbmlEA.setVariable(target.getName());
        Expression eventAssgnExpr = new Expression(vcEventAssignment.getAssignmentExpression());
        ASTNode eaMath = getFormulaFromExpression(eventAssgnExpr, MathType.REAL);
        sbmlEA.setMath(eaMath);
    }
}
Also used : ReservedVariable(cbit.vcell.math.ReservedVariable) Variable(cbit.vcell.math.Variable) EventAssignment(cbit.vcell.math.Event.EventAssignment) Delay(org.sbml.jsbml.Delay) Trigger(org.sbml.jsbml.Trigger) Expression(cbit.vcell.parser.Expression) ASTNode(org.sbml.jsbml.ASTNode) Event(cbit.vcell.math.Event)

Aggregations

Event (cbit.vcell.math.Event)8 Variable (cbit.vcell.math.Variable)7 MathDescription (cbit.vcell.math.MathDescription)5 VolVariable (cbit.vcell.math.VolVariable)5 BioEvent (cbit.vcell.mapping.BioEvent)4 Delay (cbit.vcell.math.Event.Delay)4 MemVariable (cbit.vcell.math.MemVariable)4 MembraneRegionVariable (cbit.vcell.math.MembraneRegionVariable)4 CompartmentSubDomain (cbit.vcell.math.CompartmentSubDomain)3 Constant (cbit.vcell.math.Constant)3 Equation (cbit.vcell.math.Equation)3 EventAssignment (cbit.vcell.math.Event.EventAssignment)3 MembraneSubDomain (cbit.vcell.math.MembraneSubDomain)3 PointVariable (cbit.vcell.math.PointVariable)3 SubDomain (cbit.vcell.math.SubDomain)3 VariableHash (cbit.vcell.math.VariableHash)3 VolumeRegionVariable (cbit.vcell.math.VolumeRegionVariable)3 Expression (cbit.vcell.parser.Expression)3 SubVolume (cbit.vcell.geometry.SubVolume)2 SurfaceClass (cbit.vcell.geometry.SurfaceClass)2