void createParameterAsRateRule(Model &m, SpeciesReference &sr, Rule &rr, unsigned int idCount) { char newid[15]; std::string id; // create parameter as variable of rate rule // and use stoichiometryMath to point to this sprintf(newid, "parameterId_%u", idCount); id.assign(newid); Parameter *p = m.createParameter(); p->setId(id); p->setConstant(false); rr.setVariable(id); StoichiometryMath *sm = sr.createStoichiometryMath(); if (sm != NULL) { ASTNode *ast = SBML_parseFormula(id.c_str()); sm->setMath(ast); } }
void useStoichMath(Model & m, SpeciesReference &sr, bool isRule) { // use stoichiometryMath instead StoichiometryMath *sm = sr.createStoichiometryMath(); if (sm != NULL) { if (isRule == true) { sm->setMath(m.getRule(sr.getId())->getMath()); m.removeRule(sr.getId()); } else { sm->setMath(m.getInitialAssignment(sr.getId())->getMath()); m.removeInitialAssignment(sr.getId()); } } }
END_TEST START_TEST ( test_StoichiometryMath ) { StoichiometryMath* sm = new StoichiometryMath(2, 4); fail_unless (!(sm->hasRequiredElements())); sm->setMath(SBML_parseFormula("ar")); fail_unless (sm->hasRequiredElements()); delete sm; }
void createNoValueStoichMath(Model & m, SpeciesReference & sr, unsigned int idCount) { char newid[15]; std::string id; // no stoichiometry and no id to set the stoichiometry // replace with stoichiometryMath using a parameter with no value sprintf(newid, "parameterId_%u", idCount); id.assign(newid); Parameter *p = m.createParameter(); p->setId(id); p->setConstant(false); StoichiometryMath *sm = sr.createStoichiometryMath(); if (sm != NULL) { ASTNode *ast = SBML_parseFormula(id.c_str()); sm->setMath(ast); } }
void dealWithL1Stoichiometry(Model & m, bool l2) { unsigned int idCount = 0; char newid[15]; std::string id; for (unsigned int i = 0; i < m.getNumReactions(); i++) { Reaction *r = m.getReaction(i); unsigned int j; for (j = 0; j < r->getNumReactants(); j++) { SpeciesReference *sr = r->getReactant(j); if (sr->getDenominator() != 1) { long stoich = static_cast<long>(sr->getStoichiometry()); int denom = sr->getDenominator(); ASTNode *node = new ASTNode(); node->setValue(stoich, denom); if (l2 == true) { StoichiometryMath * sm = sr->createStoichiometryMath(); sm->setMath(node); } else { sprintf(newid, "speciesRefId_%u", idCount); id.assign(newid); idCount++; sr->setId(id); InitialAssignment * ar = m.createInitialAssignment(); ar->setSymbol(id); ar->setMath(node); sr->unsetStoichiometry(); } } } for (j = 0; j < r->getNumProducts(); j++) { SpeciesReference *sr = r->getProduct(j); if (sr->getDenominator() != 1) { long stoich = static_cast<long>(sr->getStoichiometry()); int denom = sr->getDenominator(); ASTNode *node = new ASTNode(); node->setValue(stoich, denom); if (l2 == true) { StoichiometryMath * sm = sr->createStoichiometryMath(); sm->setMath(node); } else { sprintf(newid, "speciesRefId_%u", idCount); id.assign(newid); idCount++; sr->setId(id); InitialAssignment * ar = m.createInitialAssignment(); ar->setSymbol(id); ar->setMath(node); sr->unsetStoichiometry(); } } } } }