use of cbit.vcell.constraints.SimpleBounds in project vcell by virtualcell.
the class ConstraintsGraphModel method setConstraintContainerImpl.
public void setConstraintContainerImpl(ConstraintContainerImpl constraintContainerImpl) {
ConstraintContainerImpl oldValue = fieldConstraintContainerImpl;
if (oldValue != null) {
oldValue.removePropertyChangeListener(this);
GeneralConstraint[] oldConstraints = oldValue.getGeneralConstraints();
for (int i = 0; i < oldConstraints.length; i++) {
oldConstraints[i].removePropertyChangeListener(this);
}
SimpleBounds[] oldSimpleBounds = oldValue.getSimpleBounds();
for (int i = 0; i < oldSimpleBounds.length; i++) {
oldSimpleBounds[i].removePropertyChangeListener(this);
}
}
fieldConstraintContainerImpl = constraintContainerImpl;
if (fieldConstraintContainerImpl != null) {
fieldConstraintContainerImpl.addPropertyChangeListener(this);
GeneralConstraint[] newConstraints = fieldConstraintContainerImpl.getGeneralConstraints();
for (int i = 0; i < newConstraints.length; i++) {
newConstraints[i].addPropertyChangeListener(this);
}
SimpleBounds[] newSimpleBounds = fieldConstraintContainerImpl.getSimpleBounds();
for (int i = 0; i < newSimpleBounds.length; i++) {
newSimpleBounds[i].addPropertyChangeListener(this);
}
}
firePropertyChange("constraintContainerImpl", oldValue, constraintContainerImpl);
refreshAll();
}
use of cbit.vcell.constraints.SimpleBounds in project vcell by virtualcell.
the class ConstraintsGraphModel method refreshAll.
public void refreshAll() {
Set<Shape> unwantedShapes = new HashSet<Shape>();
unwantedShapes.addAll(getShapes());
for (Shape shape : getShapes()) {
if (shape instanceof ConstraintVarNode) {
((ConstraintVarNode) shape).setDegree(1);
}
}
ContainerShape containerShape = (ContainerShape) getShapeFromModelObject(getConstraintContainerImpl());
if (containerShape == null) {
containerShape = new SimpleContainerShape(getConstraintContainerImpl(), this, "constraint network");
containerShape.setLabel("constraint network");
addShape(containerShape);
}
containerShape.refreshLabel();
unwantedShapes.remove(containerShape);
//
// add nodes for GeneralConstraints and edges to its Variables (add Variable when necessary)
//
GeneralConstraint[] generalConstraints = getConstraintContainerImpl().getGeneralConstraints();
for (int i = 0; i < generalConstraints.length; i++) {
String[] symbols = generalConstraints[i].getExpression().getSymbols();
if (symbols == null) {
continue;
}
GeneralConstraintNode generalConstraintNode = (GeneralConstraintNode) getShapeFromModelObject(generalConstraints[i]);
if (generalConstraintNode == null) {
generalConstraintNode = new GeneralConstraintNode(generalConstraints[i], this, symbols.length);
containerShape.addChildShape(generalConstraintNode);
addShape(generalConstraintNode);
}
generalConstraintNode.refreshLabel();
unwantedShapes.remove(generalConstraintNode);
for (int j = 0; j < symbols.length; j++) {
ConstraintVarNode constraintVarNode = (ConstraintVarNode) getShapeFromLabel(symbols[j]);
if (constraintVarNode == null) {
constraintVarNode = new ConstraintVarNode(symbols[j], this, 1);
containerShape.addChildShape(constraintVarNode);
addShape(constraintVarNode);
} else {
constraintVarNode.setDegree(constraintVarNode.getDegree() + 1);
}
constraintVarNode.refreshLabel();
unwantedShapes.remove(constraintVarNode);
ConstraintDependencyEdgeShape constraintDependencyEdgeShape = null;
for (Shape shape : getShapes()) {
if (shape instanceof ConstraintDependencyEdgeShape) {
if (((ConstraintDependencyEdgeShape) shape).getConstraintShape() == generalConstraintNode && ((ConstraintDependencyEdgeShape) shape).getVarShape() == constraintVarNode) {
constraintDependencyEdgeShape = (ConstraintDependencyEdgeShape) shape;
}
}
}
if (constraintDependencyEdgeShape == null) {
constraintDependencyEdgeShape = new ConstraintDependencyEdgeShape(generalConstraintNode, constraintVarNode, this);
containerShape.addChildShape(constraintDependencyEdgeShape);
addShape(constraintDependencyEdgeShape);
}
unwantedShapes.remove(constraintDependencyEdgeShape);
}
}
//
// add nodes for SimpleBounds and edges to its Variables (add Variable when necessary)
//
cbit.vcell.constraints.SimpleBounds[] simpleBounds = getConstraintContainerImpl().getSimpleBounds();
for (int i = 0; i < simpleBounds.length; i++) {
BoundsNode boundsNode = (BoundsNode) getShapeFromModelObject(simpleBounds[i]);
if (boundsNode == null) {
boundsNode = new BoundsNode(simpleBounds[i], this);
containerShape.addChildShape(boundsNode);
addShape(boundsNode);
}
boundsNode.refreshLabel();
unwantedShapes.remove(boundsNode);
ConstraintVarNode constraintVarNode = (ConstraintVarNode) getShapeFromLabel(simpleBounds[i].getIdentifier());
if (constraintVarNode == null) {
constraintVarNode = new ConstraintVarNode(simpleBounds[i].getIdentifier(), this, 1);
containerShape.addChildShape(constraintVarNode);
addShape(constraintVarNode);
} else {
constraintVarNode.setDegree(constraintVarNode.getDegree() + 1);
}
constraintVarNode.refreshLabel();
unwantedShapes.remove(constraintVarNode);
ConstraintDependencyEdgeShape constraintDependencyEdgeShape = null;
for (Shape shape : getShapes()) {
if (shape instanceof ConstraintDependencyEdgeShape) {
if (((ConstraintDependencyEdgeShape) shape).getConstraintShape() == boundsNode && ((ConstraintDependencyEdgeShape) shape).getVarShape() == constraintVarNode) {
constraintDependencyEdgeShape = (ConstraintDependencyEdgeShape) shape;
}
}
}
if (constraintDependencyEdgeShape == null) {
constraintDependencyEdgeShape = new ConstraintDependencyEdgeShape(boundsNode, constraintVarNode, this);
containerShape.addChildShape(constraintDependencyEdgeShape);
addShape(constraintDependencyEdgeShape);
}
constraintDependencyEdgeShape.refreshLabel();
unwantedShapes.remove(constraintDependencyEdgeShape);
}
for (Shape unwantedShape : unwantedShapes) {
removeShape(unwantedShape);
}
fireGraphChanged(new GraphEvent(this));
}
use of cbit.vcell.constraints.SimpleBounds in project vcell by virtualcell.
the class ConstraintSolverTableModel method setConstraintSolver.
/**
* Sets the constraintContainerImpl property (cbit.vcell.constraints.ConstraintContainerImpl) value.
* @param constraintContainerImpl The new value for the property.
* @see #getConstraintContainerImpl
*/
public void setConstraintSolver(ConstraintSolver constraintSolver) {
ConstraintSolver oldValue = fieldConstraintSolver;
if (oldValue != null) {
oldValue.removePropertyChangeListener(this);
if (oldValue.getConstraintContainerImpl() != null) {
oldValue.getConstraintContainerImpl().removePropertyChangeListener(this);
SimpleBounds[] oldSimpleBounds = oldValue.getConstraintContainerImpl().getSimpleBounds();
for (int i = 0; i < oldSimpleBounds.length; i++) {
oldSimpleBounds[i].removePropertyChangeListener(this);
}
}
}
fieldConstraintSolver = constraintSolver;
firePropertyChange("constraintSolver", oldValue, constraintSolver);
if (constraintSolver != null) {
constraintSolver.addPropertyChangeListener(this);
if (constraintSolver.getConstraintContainerImpl() != null) {
constraintSolver.getConstraintContainerImpl().addPropertyChangeListener(this);
SimpleBounds[] newSimpleBounds = constraintSolver.getConstraintContainerImpl().getSimpleBounds();
for (int i = 0; i < newSimpleBounds.length; i++) {
newSimpleBounds[i].removePropertyChangeListener(this);
}
}
}
}
use of cbit.vcell.constraints.SimpleBounds in project vcell by virtualcell.
the class SimpleBoundsTableModel method setConstraintContainerImpl.
/**
* Sets the constraintContainerImpl property (cbit.vcell.constraints.ConstraintContainerImpl) value.
* @param constraintContainerImpl The new value for the property.
* @see #getConstraintContainerImpl
*/
public void setConstraintContainerImpl(ConstraintContainerImpl constraintContainerImpl) {
ConstraintContainerImpl oldValue = fieldConstraintContainerImpl;
if (oldValue != null) {
oldValue.removePropertyChangeListener(this);
SimpleBounds[] oldBounds = oldValue.getSimpleBounds();
for (int i = 0; i < oldBounds.length; i++) {
oldBounds[i].removePropertyChangeListener(this);
}
}
fieldConstraintContainerImpl = constraintContainerImpl;
firePropertyChange("constraintContainerImpl", oldValue, constraintContainerImpl);
if (constraintContainerImpl != null) {
constraintContainerImpl.addPropertyChangeListener(this);
SimpleBounds[] newBounds = constraintContainerImpl.getSimpleBounds();
for (int i = 0; i < newBounds.length; i++) {
newBounds[i].addPropertyChangeListener(this);
}
}
}
use of cbit.vcell.constraints.SimpleBounds in project vcell by virtualcell.
the class ApplicationConstraintsGenerator method steadyStateFromApplication.
/**
* Insert the method's description here.
* Creation date: (6/26/01 8:25:55 AM)
* @return cbit.vcell.constraints.ConstraintContainerImpl
*/
public static ConstraintContainerImpl steadyStateFromApplication(SimulationContext simContext, double tolerance) {
try {
ConstraintContainerImpl ccImpl = new ConstraintContainerImpl();
// ====================
// add physical limits
// ====================
//
// no negative concentrations
//
cbit.vcell.model.Model model = simContext.getModel();
cbit.vcell.model.SpeciesContext[] speciesContexts = model.getSpeciesContexts();
for (int i = 0; i < speciesContexts.length; i++) {
ccImpl.addSimpleBound(new SimpleBounds(speciesContexts[i].getName(), new RealInterval(0, Double.POSITIVE_INFINITY), AbstractConstraint.PHYSICAL_LIMIT, "non-negative concentration"));
}
for (int i = 0; i < speciesContexts.length; i++) {
SpeciesContextSpecParameter initParam = (simContext.getReactionContext().getSpeciesContextSpec(speciesContexts[i])).getInitialConditionParameter();
if (initParam != null) {
double initialValue = initParam.getExpression().evaluateConstant();
double lowInitialValue = Math.min(initialValue / tolerance, initialValue * tolerance);
double highInitialValue = Math.max(initialValue / tolerance, initialValue * tolerance);
ccImpl.addSimpleBound(new SimpleBounds(speciesContexts[i].getName(), new RealInterval(lowInitialValue, highInitialValue), AbstractConstraint.MODELING_ASSUMPTION, "close to specified \"initialCondition\""));
}
}
// =========================
// add modeling assumptions
// =========================
//
// mass action forward and reverse rates should be non-negative
//
cbit.vcell.model.ReactionStep[] reactionSteps = model.getReactionSteps();
for (int i = 0; i < reactionSteps.length; i++) {
Kinetics kinetics = reactionSteps[i].getKinetics();
if (kinetics instanceof MassActionKinetics) {
Expression forwardRateConstraintExp = new Expression(((MassActionKinetics) kinetics).getForwardRateParameter().getExpression().infix() + ">=0");
forwardRateConstraintExp = getSteadyStateExpression(forwardRateConstraintExp);
if (!forwardRateConstraintExp.compareEqual(new Expression(1.0))) {
ccImpl.addGeneralConstraint(new GeneralConstraint(forwardRateConstraintExp, AbstractConstraint.MODELING_ASSUMPTION, "non-negative forward rate"));
}
Expression reverseRateConstraintExp = new Expression(((MassActionKinetics) kinetics).getReverseRateParameter().getExpression().infix() + ">=0");
reverseRateConstraintExp = getSteadyStateExpression(reverseRateConstraintExp);
if (!reverseRateConstraintExp.compareEqual(new Expression(1.0))) {
ccImpl.addGeneralConstraint(new GeneralConstraint(reverseRateConstraintExp, AbstractConstraint.MODELING_ASSUMPTION, "non-negative reverse rate"));
}
}
KineticsParameter authoritativeParameter = kinetics.getAuthoritativeParameter();
Expression kineticRateConstraintExp = new Expression(authoritativeParameter.getName() + "==" + authoritativeParameter.getExpression().infix());
kineticRateConstraintExp = getSteadyStateExpression(kineticRateConstraintExp);
if (!kineticRateConstraintExp.compareEqual(new Expression(1.0))) {
ccImpl.addGeneralConstraint(new GeneralConstraint(kineticRateConstraintExp, AbstractConstraint.MODELING_ASSUMPTION, "definition"));
}
}
//
try {
simContext.setMathDescription(simContext.createNewMathMapping().getMathDescription());
} catch (Throwable e) {
e.printStackTrace(System.out);
throw new RuntimeException("cannot create mathDescription");
}
MathDescription mathDesc = simContext.getMathDescription();
if (mathDesc.getGeometry().getDimension() > 0) {
throw new RuntimeException("spatial simulations not yet supported");
}
CompartmentSubDomain subDomain = (CompartmentSubDomain) mathDesc.getSubDomains().nextElement();
java.util.Enumeration<Equation> enumEquations = subDomain.getEquations();
while (enumEquations.hasMoreElements()) {
Equation equation = (Equation) enumEquations.nextElement();
Expression rateConstraintExp = new Expression(equation.getRateExpression().infix() + "==0");
rateConstraintExp = getSteadyStateExpression(rateConstraintExp);
if (!rateConstraintExp.compareEqual(new Expression(1.0))) {
// not a trivial constraint (always true)
ccImpl.addGeneralConstraint(new GeneralConstraint(rateConstraintExp, AbstractConstraint.PHYSICAL_LIMIT, "definition of steady state"));
}
}
//
for (int i = 0; i < reactionSteps.length; i++) {
Kinetics kinetics = reactionSteps[i].getKinetics();
Kinetics.KineticsParameter[] parameters = kinetics.getKineticsParameters();
for (int j = 0; j < parameters.length; j++) {
Expression exp = parameters[j].getExpression();
if (exp.getSymbols() == null || exp.getSymbols().length == 0) {
//
try {
double constantValue = exp.evaluateConstant();
double lowValue = Math.min(constantValue / tolerance, constantValue * tolerance);
double highValue = Math.max(constantValue / tolerance, constantValue * tolerance);
RealInterval interval = new RealInterval(lowValue, highValue);
ccImpl.addSimpleBound(new SimpleBounds(parameters[j].getName(), interval, AbstractConstraint.MODELING_ASSUMPTION, "parameter close to model default"));
} catch (cbit.vcell.parser.ExpressionException e) {
System.out.println("error evaluating parameter " + parameters[j].getName() + " in reaction step " + reactionSteps[i].getName());
}
} else {
Expression parameterDefinitionExp = new Expression(parameters[j].getName() + "==" + parameters[j].getExpression().infix());
ccImpl.addGeneralConstraint(new GeneralConstraint(getSteadyStateExpression(parameterDefinitionExp), AbstractConstraint.MODELING_ASSUMPTION, "parameter definition"));
}
}
}
ccImpl.addSimpleBound(new SimpleBounds(model.getFARADAY_CONSTANT().getName(), new RealInterval(model.getFARADAY_CONSTANT().getExpression().evaluateConstant()), AbstractConstraint.PHYSICAL_LIMIT, "Faraday's constant"));
ccImpl.addSimpleBound(new SimpleBounds(model.getTEMPERATURE().getName(), new RealInterval(300), AbstractConstraint.PHYSICAL_LIMIT, "Absolute Temperature Kelvin"));
ccImpl.addSimpleBound(new SimpleBounds(model.getGAS_CONSTANT().getName(), new RealInterval(model.getGAS_CONSTANT().getExpression().evaluateConstant()), AbstractConstraint.PHYSICAL_LIMIT, "ideal gas constant"));
ccImpl.addSimpleBound(new SimpleBounds(model.getKMILLIVOLTS().getName(), new RealInterval(model.getKMILLIVOLTS().getExpression().evaluateConstant()), AbstractConstraint.PHYSICAL_LIMIT, "ideal gas constant"));
//
// add K_fluxs
//
java.util.Enumeration<Variable> enumVars = mathDesc.getVariables();
while (enumVars.hasMoreElements()) {
Variable var = (Variable) enumVars.nextElement();
if (var.getName().startsWith("Kflux_") && var instanceof Function) {
Expression kfluxExp = new Expression(((Function) var).getExpression());
kfluxExp.bindExpression(mathDesc);
kfluxExp = MathUtilities.substituteFunctions(kfluxExp, mathDesc);
kfluxExp = kfluxExp.flatten();
ccImpl.addSimpleBound(new SimpleBounds(var.getName(), new RealInterval(kfluxExp.evaluateConstant()), AbstractConstraint.MODELING_ASSUMPTION, "flux conversion factor"));
}
}
return ccImpl;
} catch (cbit.vcell.parser.ExpressionException e) {
e.printStackTrace(System.out);
return null;
} catch (java.beans.PropertyVetoException e) {
e.printStackTrace(System.out);
return null;
}
}
Aggregations