END_TEST START_TEST (test_infer_localParam_fromReaction) { string filename(TestDataDirectory); filename += "inferUnits-3.xml"; SBMLDocument* d = readSBMLFromFile(filename.c_str()); fail_unless(d != NULL); LocalParameter * p = d->getModel()->getReaction(1)-> getKineticLaw()->getLocalParameter("k2"); fail_unless(p->isSetUnits() == false); p->setCalculatingUnits(true); UnitDefinition *ud = p->getDerivedUnitDefinition(); fail_unless(ud->getNumUnits() == 1); fail_unless(ud->getUnit(0)->getMultiplier() == 1); fail_unless(ud->getUnit(0)->getScale() == 0); fail_unless(ud->getUnit(0)->getExponent() == -1); fail_unless(ud->getUnit(0)->getOffset() == 0.0); fail_unless(ud->getUnit(0)->getKind() == UNIT_KIND_SECOND); delete ud; // TO DO make the units converter do local parameters; //fail_unless(d->getModel()->getNumUnitDefinitions() == 3); // //SBMLInferUnitsConverter * units = new SBMLInferUnitsConverter(); //units->setDocument(d); //fail_unless (units->convert() == LIBSBML_OPERATION_SUCCESS); //kl = d->getModel()->getReaction(1)->getKineticLaw(); //fail_unless(kl->getLocalParameter("k2")->isSetUnits() == true); //fail_unless(kl->getLocalParameter("k2")->getUnits() == "per_time"); //delete units; delete d; }
void updateKineticLawFromBound(Reaction* reaction, FluxBound* current) { if (reaction == NULL || current == NULL) return; const string operation = current -> getOperation(); KineticLaw *law = reaction->getKineticLaw(); LocalParameter* LB = law->getLocalParameter("LOWER_BOUND"); LocalParameter* UB = law->getLocalParameter("UPPER_BOUND"); if (operation == "less" || operation == "lessEqual" || operation == "equal") { UB->setValue(current->getValue()); } if (operation == "greater" || operation == "greaterEqual" || operation == "equal") { LB->setValue(current->getValue()); } }
END_TEST START_TEST (test_WriteL3SBML_KineticLaw_ListOfParameters) { const char* expected = "<kineticLaw>\n" " <listOfLocalParameters>\n" " <localParameter id=\"n\" value=\"1.2\"/>\n" " </listOfLocalParameters>\n" "</kineticLaw>"; KineticLaw *kl = D->createModel()->createReaction()->createKineticLaw(); LocalParameter *p = kl->createLocalParameter(); p->setId("n"); p->setValue(1.2); char* sbml = kl->toSBML(); fail_unless( equals(expected, sbml) ); safe_free(sbml); }
void setObjectiveCoefficient(FbcModelPlugin* plugin, Model* model) { if (plugin == NULL || model == NULL) return; Objective* obj = plugin->getActiveObjective(); if (obj == NULL) return; for (unsigned int i = 0; i < obj->getNumFluxObjectives(); ++i) { FluxObjective* fluxObj = obj->getFluxObjective(i); if (fluxObj == NULL) continue; Reaction* reaction = model->getReaction(fluxObj->getReaction()); if (reaction == NULL) continue; KineticLaw* law = reaction->getKineticLaw(); if (law == NULL) continue; LocalParameter* param = law->getLocalParameter("OBJECTIVE_COEFFICIENT"); param->setValue(fluxObj->getCoefficient()); } }
void createKineticLawForReaction(Reaction* reaction) { if (reaction == NULL) return; reaction->unsetKineticLaw(); KineticLaw *law = reaction->getKineticLaw(); if (law == NULL) { law = reaction->createKineticLaw(); LocalParameter* fluxValue = law->createLocalParameter(); fluxValue->initDefaults(); fluxValue->setId("FLUX_VALUE"); fluxValue->setValue(0); fluxValue->setUnits("dimensionless"); law->setMath(SBML_parseFormula("FLUX_VALUE")); } LocalParameter* LB = law->getLocalParameter("LOWER_BOUND"); if (LB == NULL) { LB = law->createLocalParameter(); LB->initDefaults(); LB->setId("LOWER_BOUND"); LB->setUnits("dimensionless"); LB->setValue(-std::numeric_limits<double>::infinity()); } LocalParameter* UB = law->getLocalParameter("UPPER_BOUND"); if (UB == NULL) { UB = law->createLocalParameter(); UB->initDefaults(); UB->setId("UPPER_BOUND"); UB->setUnits("dimensionless"); LB->setValue(std::numeric_limits<double>::infinity()); } LocalParameter* param = law->getLocalParameter("OBJECTIVE_COEFFICIENT"); if (param == NULL) { param = law->createLocalParameter(); param->initDefaults(); param->setId("OBJECTIVE_COEFFICIENT"); param->setUnits("dimensionless"); param->setValue(0); } }