END_TEST START_TEST (test_WriteL3SBML_Reaction_compartment) { const char* expected = "<reaction id=\"r\" reversible=\"false\"" " fast=\"true\" compartment=\"c\"/>"; const char* expected1 = "<reaction id=\"r\" reversible=\"false\"" " fast=\"true\"/>"; Reaction *r = D->createModel()->createReaction(); r->setId("r"); r->setReversible(false); r->setFast(true); r->setCompartment("c"); char* sbml = r->toSBML(); fail_unless( equals(expected, sbml) ); safe_free(sbml); r->unsetCompartment(); sbml = r->toSBML(); fail_unless( equals(expected1, sbml) ); safe_free(sbml); }
END_TEST START_TEST (test_WriteL3SBML_Reaction_full) { const char* expected = "<reaction id=\"v1\" reversible=\"true\" fast=\"false\">\n" " <listOfReactants>\n" " <speciesReference species=\"x0\"/>\n" " </listOfReactants>\n" " <listOfProducts>\n" " <speciesReference species=\"s1\"/>\n" " </listOfProducts>\n" " <listOfModifiers>\n" " <modifierSpeciesReference species=\"m1\"/>\n" " </listOfModifiers>\n" " <kineticLaw>\n" " <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" " <apply>\n" " <divide/>\n" " <apply>\n" " <times/>\n" " <ci> vm </ci>\n" " <ci> s1 </ci>\n" " </apply>\n" " <apply>\n" " <plus/>\n" " <ci> km </ci>\n" " <ci> s1 </ci>\n" " </apply>\n" " </apply>\n" " </math>\n" " </kineticLaw>\n" "</reaction>"; D->createModel(); Reaction* r = D->getModel()->createReaction(); r->setId("v1"); r->setReversible(true); r->setFast(false); r->createReactant()->setSpecies("x0"); r->createProduct ()->setSpecies("s1"); r->createModifier()->setSpecies("m1"); r->createKineticLaw()->setFormula("(vm * s1)/(km + s1)"); char* sbml = r->toSBML(); fail_unless( equals(expected, sbml) ); safe_free(sbml); }
LIBSBML_CPP_NAMESPACE_USE int main(int argc,char** argv) { SBMLNamespaces sbmlns(3,1,"fbc",1); // create the document SBMLDocument *document = new SBMLDocument(&sbmlns); document->setPackageRequired("fbc", false); // create the Model Model* model=document->createModel(); // create the Compartment Compartment* compartment = model->createCompartment(); compartment->setId("compartment"); compartment->setConstant(true); compartment->setSize(1); // create the Species Species* species = model->createSpecies(); species->setId("Node1"); species->setCompartment("compartment"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node2"); species->setCompartment("compartment"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node3"); species->setCompartment("compartment"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node4"); species->setCompartment("compartment"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node5"); species->setCompartment("compartment"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node6"); species->setCompartment("compartment"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node7"); species->setCompartment("compartment"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node8"); species->setCompartment("compartment"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node0"); species->setCompartment("compartment"); species->setBoundaryCondition(true); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("Node9"); species->setCompartment("compartment"); species->setBoundaryCondition(true); species->setConstant(false); species->setHasOnlySubstanceUnits(false); Reaction* reaction = model->createReaction(); reaction->setId("J0"); reaction->setReversible(false); reaction->setFast(false); SpeciesReference* reactant = reaction->createReactant(); reactant->setSpecies("Node0"); reactant->setStoichiometry(1); reactant->setConstant(true); SpeciesReference* product = reaction->createProduct(); product->setSpecies("Node1"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J1"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node1"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node2"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J2"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node2"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node3"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J3"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node1"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node4"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J4"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node4"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node3"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J5"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node3"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node5"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J6"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node5"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node6"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J7"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node6"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node7"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J8"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node5"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node8"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J9"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node8"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node7"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("J10"); reaction->setReversible(false); reaction->setFast(false); reactant = reaction->createReactant(); reactant->setSpecies("Node7"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("Node9"); product->setStoichiometry(1); product->setConstant(true); // // Get a FbcModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // FbcModelPlugin* mplugin = static_cast<FbcModelPlugin*>(model->getPlugin("fbc")); FluxBound* bound= mplugin->createFluxBound(); bound->setId("bound1"); bound->setReaction("J0"); bound->setOperation("equal"); bound->setValue(10); Objective* objective = mplugin->createObjective(); objective->setId("obj1"); objective->setType("maximize"); // mark obj1 as active objective mplugin->setActiveObjectiveId("obj1"); FluxObjective* fluxObjective = objective->createFluxObjective(); fluxObjective->setReaction("J8"); fluxObjective->setCoefficient(1); writeSBML(document,"fbc_example1.xml"); delete document; }
void Model::assignRequiredValues() { // when converting to L3 some attributes which have default values in L1/L2 // but are required in L3 are not present or set unsigned int i, n; if (getNumUnitDefinitions() > 0) { for (i = 0; i < getNumUnitDefinitions(); i++) { for (n = 0; n < getUnitDefinition(i)->getNumUnits(); n++) { Unit *u = getUnitDefinition(i)->getUnit(n); if (!u->isSetExponent()) u->setExponent(1.0); if (!u->isSetScale()) u->setScale(0); if (!u->isSetMultiplier()) u->setMultiplier(1.0); } } } if (getNumCompartments() > 0) { for (i = 0; i < getNumCompartments(); i++) { Compartment *c = getCompartment(i); c->setConstant(c->getConstant()); } } if (getNumSpecies() > 0) { for (i = 0; i < getNumSpecies(); i++) { Species * s = getSpecies(i); s->setBoundaryCondition(s->getBoundaryCondition()); s->setHasOnlySubstanceUnits(s->getHasOnlySubstanceUnits()); s->setConstant(s->getConstant()); } } if (getNumParameters() > 0) { for (i = 0; i < getNumParameters(); i++) { Parameter * p = getParameter(i); p->setConstant(p->getConstant()); } } if (getNumReactions() > 0) { for (i = 0; i < getNumReactions(); i++) { Reaction * r = getReaction(i); r->setFast(r->getFast()); r->setReversible(r->getReversible()); if (r->getNumReactants() > 0) { for (n = 0; n < r->getNumReactants(); n++) { SpeciesReference *sr = r->getReactant(n); if (sr->isSetStoichiometryMath()) { sr->setConstant(false); } else { sr->setConstant(true); } } } if (r->getNumProducts() > 0) { for (n = 0; n < r->getNumProducts(); n++) { SpeciesReference *sr = r->getProduct(n); if (sr->isSetStoichiometryMath()) { sr->setConstant(false); } else { sr->setConstant(true); } } } } } if (getNumEvents() > 0) { for (i = 0; i < getNumEvents(); i++) { Event * e = getEvent(i); e->setUseValuesFromTriggerTime(e->getUseValuesFromTriggerTime()); if (e->isSetTrigger()) { Trigger *t = e->getTrigger(); t->setPersistent(true); t->setInitialValue(true); } } } }
LIBSBML_CPP_NAMESPACE_USE int main(int argc,char** argv) { DynPkgNamespaces sbmlns; // create the document SBMLDocument *document = new SBMLDocument(&sbmlns); document->setPackageRequired("dyn", true); // create the Model Model* model=document->createModel(); model->setId("singleCell"); // create the Compartment Compartment* compartment = model->createCompartment(); compartment->setId("Extracellular"); compartment->setConstant(true); compartment->setSize(8000000); compartment->setSpatialDimensions(3.0); compartment = model->createCompartment(); compartment->setId("PlasmaMembrane"); compartment->setConstant(true); compartment->setSize(314); compartment->setSpatialDimensions(2.0); compartment = model->createCompartment(); compartment->setId("Cytosol"); compartment->setConstant(true); compartment->setSize(523); compartment->setSpatialDimensions(3.0); // create the Species Species* species = model->createSpecies(); species->setId("C_EC"); species->setCompartment("Extracellular"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("RTR_M"); species->setCompartment("PlasmaMembrane"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("RCC_M"); species->setCompartment("PlasmaMembrane"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("A_C"); species->setCompartment("Cytosol"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("AA_C"); species->setCompartment("Cytosol"); species->setBoundaryCondition(false); species->setConstant(false); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("T"); species->setCompartment("Cytosol"); species->setBoundaryCondition(false); species->setConstant(false); species->setInitialConcentration(10); species->setHasOnlySubstanceUnits(false); species = model->createSpecies(); species->setId("S"); species->setCompartment("Cytosol"); species->setBoundaryCondition(false); species->setConstant(false); species->setInitialConcentration(5); species->setHasOnlySubstanceUnits(false); // create the Reactions Reaction* reaction = model->createReaction(); reaction->setId("r1"); reaction->setReversible(true); reaction->setFast(false); reaction->setCompartment("Extracellular"); SpeciesReference* reactant = reaction->createReactant(); reactant->setSpecies("RTR_M"); reactant->setStoichiometry(1); reactant->setConstant(true); reactant = reaction->createReactant(); reactant->setSpecies("C_EC"); reactant->setStoichiometry(1); reactant->setConstant(true); SpeciesReference* product = reaction->createProduct(); product->setSpecies("RCC_M"); product->setStoichiometry(1); product->setConstant(true); reaction = model->createReaction(); reaction->setId("r2"); reaction->setReversible(true); reaction->setFast(false); reaction->setCompartment("Cytosol"); reactant = reaction->createReactant(); reactant->setSpecies("A_C"); reactant->setStoichiometry(1); reactant->setConstant(true); product = reaction->createProduct(); product->setSpecies("AA_C"); product->setStoichiometry(1); product->setConstant(true); SimpleSpeciesReference* modifier = reaction->createModifier(); modifier->setSpecies("RCC_M"); // Create Event Event* event = model->createEvent(); event->setUseValuesFromTriggerTime(true); Trigger* trigger = event->createTrigger(); trigger->setInitialValue(false); trigger->setPersistent(true); trigger->setMath(SBML_parseFormula("lt(AA_C, T)")); // // Get a DynEventPlugin object plugged in the event object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // DynEventPlugin* eplugin = static_cast<DynEventPlugin*>(event->getPlugin("dyn")); eplugin->setApplyToAll(true); eplugin->setCboTerm("http://cbo.biocomplexity.indiana.edu/svn/cbo/trunk/CBO_1_0.owl#CellDeath"); event = model->createEvent(); event->setUseValuesFromTriggerTime(true); trigger = event->createTrigger(); trigger->setInitialValue(false); trigger->setPersistent(true); trigger->setMath(SBML_parseFormula("lt(AA_C, S)")); eplugin = static_cast<DynEventPlugin*>(event->getPlugin("dyn")); eplugin->setApplyToAll(true); eplugin->setCboTerm("http://cbo.biocomplexity.indiana.edu/svn/cbo/trunk/CBO_1_0.owl#CellDevision"); document->checkConsistency(); if (document->getNumErrors(LIBSBML_SEV_ERROR) > 0) document->printErrors(); writeSBML(document,"dyn_example1.xml"); delete document; }
void writeSpatialSBML() { /* // SBMLNamespaces of SBML Level 3 Version 1 with Spatial Version 1 SBMLNamespaces sbmlns(3,1,"spatial",1); // SpatialPkgNamespaces spatialns(3,1,1); // add Required Elements package namespace sbmlns.addPkgNamespace("req", 1); */ // SBMLNamespaces of SBML Level 3 Version 1 with 'req' Version 1 // then add 'spatial' package namespace. RequiredElementsPkgNamespaces sbmlns(3,1,1); sbmlns.addPkgNamespace("spatial",1); // create the L3V1 document with spatial package SBMLDocument document(&sbmlns); // set 'required' attribute on document for 'spatial' and 'req' packages to 'T'?? SBMLDocumentPlugin* dplugin; dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("spatial")); dplugin->setRequired(true); dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("req")); dplugin->setRequired(true); // create the Model Model *model = document.createModel(); model-> setId("trial_spatial"); model-> setName("trial_spatial"); // create the Compartments Compartment* compartment = model->createCompartment(); compartment->setId("cytosol"); compartment->setConstant(true); // create the Species Species* species1 = model->createSpecies(); species1->setId("ATPc"); species1->setCompartment("cytosol"); species1->setInitialConcentration(1.0); species1->setHasOnlySubstanceUnits(false); species1->setBoundaryCondition(false); species1->setConstant(false); // spatial package extension to species. // required elements package extention to parameter RequiredElementsSBasePlugin* reqplugin; reqplugin = static_cast<RequiredElementsSBasePlugin*>(species1->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); SpatialSpeciesRxnPlugin* srplugin; srplugin = static_cast<SpatialSpeciesRxnPlugin*>(species1->getPlugin("spatial")); srplugin->setIsSpatial(true); // add parameter for diff coeff of species1 Parameter* paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_dc"); paramSp->setValue(1.0); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); DiffusionCoefficient* diffCoeff = pplugin->getDiffusionCoefficient(); diffCoeff->setVariable(species1->getId()); diffCoeff->setCoordinateIndex(0); // add parameter for adv coeff of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_ac"); paramSp->setValue(1.5); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); AdvectionCoefficient* advCoeff = pplugin->getAdvectionCoefficient(); advCoeff->setVariable(species1->getId()); advCoeff->setCoordinateIndex(0); // add parameter for boundary condition of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_bc"); paramSp->setValue(2.0); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); BoundaryCondition* boundCon = pplugin->getBoundaryCondition(); boundCon->setVariable(species1->getId()); boundCon->setType("value"); boundCon->setCoordinateBoundary("Xmin"); Species* species2 = model->createSpecies(); species2->setId("ADPc"); species2->setCompartment("cytosol"); species2->setInitialConcentration(1); species2->setHasOnlySubstanceUnits(false); species2->setBoundaryCondition(false); species2->setConstant(false); srplugin = static_cast<SpatialSpeciesRxnPlugin*>(species2->getPlugin("spatial")); srplugin->setIsSpatial(true); /* // create a parameter Parameter* param = model->createParameter(); param->setId("k_1"); param->setValue(0.24); param->setConstant(true); // create an assignment rule AssignmentRule* assignRule = model->createAssignmentRule(); assignRule->setVariable(species1->getId()); assignRule->setFormula("species2+k_1"); */ /* reqplugin = static_cast<RequiredElementsSBasePlugin*>(assignRule->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(false); */ Reaction* reaction = model->createReaction(); reaction->setId("rxn1"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("cytosol"); srplugin = static_cast<SpatialSpeciesRxnPlugin*>(reaction->getPlugin("spatial")); srplugin->setIsLocal(true); // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // SpatialModelPlugin* mplugin; mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); // // Creates a geometry object via SpatialModelPlugin object. // Geometry* geometry = mplugin->getGeometry(); geometry->setCoordinateSystem("XYZ"); CoordinateComponent* coordX = geometry->createCoordinateComponent(); coordX->setSpatialId("coordComp1"); coordX->setComponentType("cartesian"); coordX->setSbmlUnit("umeter"); coordX->setIndex(1); BoundaryMin* minX = coordX->createBoundaryMin(); minX->setSpatialId("Xmin"); minX->setValue(0.0); BoundaryMax* maxX = coordX->createBoundaryMax(); maxX->setSpatialId("Xmax"); maxX->setValue(10.0); Parameter* paramX = model->createParameter(); paramX->setId("x"); paramX->setValue(8.0); // required elements package extention to parameter // RequiredElementsSBasePlugin* reqplugin; reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramX->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. // SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramX->getPlugin("spatial")); SpatialSymbolReference* spSymRef = pplugin->getSpatialSymbolReference(); spSymRef->setSpatialId(coordX->getSpatialId()); spSymRef->setType(coordX->getElementName()); DomainType* domainType = geometry->createDomainType(); domainType->setSpatialId("dtype1"); domainType->setSpatialDimensions(3); // Spatial package extension to compartment (mapping compartment with domainType) // required elements package extention to compartment reqplugin = static_cast<RequiredElementsSBasePlugin*>(compartment->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); SpatialCompartmentPlugin* cplugin; cplugin = static_cast<SpatialCompartmentPlugin*>(compartment->getPlugin("spatial")); CompartmentMapping* compMapping = cplugin->getCompartmentMapping(); compMapping->setSpatialId("compMap1"); compMapping->setCompartment(compartment->getId()); compMapping->setDomainType(domainType->getSpatialId()); compMapping->setUnitSize(1.0); Domain* domain = geometry->createDomain(); domain->setSpatialId("domain1"); domain->setDomainType("dtype1"); domain->setImplicit(false); domain->setShapeId("circle"); InteriorPoint* internalPt1 = domain->createInteriorPoint(); internalPt1->setCoord1(1.0); domain = geometry->createDomain(); domain->setSpatialId("domain2"); domain->setDomainType("dtype1"); domain->setImplicit(false); domain->setShapeId("square"); InteriorPoint* internalPt2 = domain->createInteriorPoint(); internalPt2->setCoord1(5.0); AdjacentDomains* adjDomain = geometry->createAdjacentDomains(); adjDomain->setSpatialId("adjDomain1"); adjDomain->setDomain1("domain1"); adjDomain->setDomain2("domain2"); AnalyticGeometry* analyticGeom = geometry->createAnalyticGeometry(); analyticGeom->setSpatialId("analyticGeom1"); AnalyticVolume* analyticVol = analyticGeom->createAnalyticVolume(); analyticVol->setSpatialId("analyticVol1"); analyticVol->setDomainType(domainType->getSpatialId()); analyticVol->setFunctionType("squareFn"); analyticVol->setOrdinal(1); const char* mathMLStr = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><apply xmlns=\"\"><plus /><apply><times /><ci>x</ci><ci>x</ci></apply><apply><minus /><cn>1.0</cn></apply></apply></math>"; ASTNode* mathNode = readMathMLFromString(mathMLStr); analyticVol->setMath(mathNode); SampledFieldGeometry* sfg = geometry->createSampledFieldGeometry(); sfg->setSpatialId("sampledFieldGeom1"); SampledField* sampledField = sfg->createSampledField(); sampledField->setSpatialId("sampledField1"); sampledField->setNumSamples1(4); sampledField->setNumSamples2(4); sampledField->setNumSamples3(2); sampledField->setDataType("double"); sampledField->setInterpolationType("linear"); sampledField->setEncoding("encoding1"); //int samples[5] = {1, 2, 3, 4, 5}; int samples[32] = { // z=0 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0, // z=1 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0 }; ImageData* id = sampledField->createImageData(); id->setDataType("compressed"); id->setSamples(samples, 32); SampledVolume* sampledVol = sfg->createSampledVolume(); sampledVol->setSpatialId("sv_1"); sampledVol->setDomainType(domainType->getSpatialId()); sampledVol->setSampledValue(128.0); sampledVol->setMinValue(0.0); sampledVol->setMaxValue(255.0); ParametricGeometry* pg = geometry->createParametricGeometry(); pg->setSpatialId("parametricGeom1"); ParametricObject* paramObj = pg->createParametricObject(); paramObj->setSpatialId("po_1"); paramObj->setDomain(domain->getSpatialId()); paramObj->setPolygonType("hexagon"); int ptIndices[5] = {1, 2, 3, 4, 5}; PolygonObject* po = paramObj->createPolygonObject(); po->setPointIndices(ptIndices, 5); SpatialPoint* spPt = pg->createSpatialPoint(); spPt->setSpatialId("sp_1"); spPt->setDomain(domain->getSpatialId()); spPt->setCoord1(1); spPt->setCoord2(2); spPt->setCoord3(3); CSGeometry* csg = geometry->createCSGeometry(); csg->setSpatialId("csGeom1"); CSGObject* csgObj = csg->createCSGObject(); csgObj->setSpatialId("csg_csgo_1"); csgObj->setDomainType(domainType->getSpatialId()); csgObj->setOrdinal(1); CSGScale* scale = csgObj->createCSGScale(); scale->setScaleX(2.0); scale->setScaleY(3.0); scale->setScaleZ(4.0); CSGPrimitive* prim1 = scale->createCSGPrimitive(); prim1->setPrimitiveType("SOLID_SPHERE"); csgObj = csg->createCSGObject(); csgObj->setSpatialId("csg_csgo_2"); csgObj->setDomainType(domainType->getSpatialId()); CSGSetOperator* setUnion = csgObj->createCSGSetOperator(); setUnion->setOperationType("UNION"); /* CSGPrimitive* prim = setUnion->createCSGPrimitive(); prim->setPrimitiveType("SOLID_SPHERE"); CSGPrimitive* prim2 = setUnion->createCSGPrimitive(); prim2->setPrimitiveType("SOLID_CONE"); */ CSGPrimitive* prim2 = new CSGPrimitive(3,1,1); prim2->setSpatialId("cone0"); prim2->setPrimitiveType("SOLID_CONE"); CSGTranslation* translatedCone = new CSGTranslation(3,1,1); translatedCone->setSpatialId("translation0"); translatedCone->setTranslateX(2.0); translatedCone->setTranslateY(2.0); translatedCone->setTranslateZ(2.0); translatedCone->setChild(prim2); int n = setUnion->addCSGNodeChild(translatedCone); CSGPrimitive* prim3 = new CSGPrimitive(3,1,1); prim3->setSpatialId("sphere0"); prim3->setPrimitiveType("SOLID_SPHERE"); n = setUnion->addCSGNodeChild(prim3); writeSBML(&document, "spatial_example0.xml"); }
void writeSpatialSBML() { // SBMLNamespaces of SBML Level 3 Version 1 with 'req' Version 1 // then add 'spatial' package namespace. SpatialPkgNamespaces sbmlns(3,1,1); // create the L3V1 document with spatial package SBMLDocument document(&sbmlns); // set 'required' attribute on document for 'spatial' and 'req' packages to 'T'?? SBMLDocumentPlugin* dplugin; dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("spatial")); dplugin->setRequired(true); // create the Model Model *model = document.createModel(); model-> setId("trial_spatial"); model-> setName("trial_spatial"); // create the Compartments Compartment* compartment = model->createCompartment(); compartment->setId("cytosol"); compartment->setConstant(true); // create the Species Species* species1 = model->createSpecies(); species1->setId("ATPc"); species1->setCompartment("cytosol"); species1->setInitialConcentration(1.0); species1->setHasOnlySubstanceUnits(false); species1->setBoundaryCondition(false); species1->setConstant(false); // spatial package extension to species. SpatialSpeciesPlugin* srplugin; srplugin = static_cast<SpatialSpeciesPlugin*>(species1->getPlugin("spatial")); srplugin->setIsSpatial(true); // add parameter for diff coeff of species1 Parameter* paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_dc"); paramSp->setValue(1.0); // spatial package extension to parameter. SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); DiffusionCoefficient* diffCoeff = pplugin->createDiffusionCoefficient(); diffCoeff->setVariable(species1->getId()); diffCoeff->setType(SPATIAL_DIFFUSIONKIND_ANISOTROPIC); CoordinateReference* coordRef = diffCoeff->createCoordinateReference(); coordRef->setCoordinate(SPATIAL_COORDINATEKIND_CARTESIAN_X); // add parameter for adv coeff of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_ac"); paramSp->setValue(1.5); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); AdvectionCoefficient* advCoeff = pplugin->createAdvectionCoefficient(); advCoeff->setVariable(species1->getId()); advCoeff->setCoordinate(SPATIAL_COORDINATEKIND_CARTESIAN_X); // add parameter for boundary condition of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_bc"); paramSp->setValue(2.0); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); BoundaryCondition* boundCon = pplugin->createBoundaryCondition(); boundCon->setVariable(species1->getId()); boundCon->setType(SPATIAL_BOUNDARYKIND_DIRICHLET); boundCon->setCoordinateBoundary("Xmin"); Species* species2 = model->createSpecies(); species2->setId("ADPc"); species2->setCompartment("cytosol"); species2->setInitialConcentration(1); species2->setHasOnlySubstanceUnits(false); species2->setBoundaryCondition(false); species2->setConstant(false); srplugin = static_cast<SpatialSpeciesPlugin*>(species2->getPlugin("spatial")); srplugin->setIsSpatial(true); Reaction* reaction = model->createReaction(); reaction->setId("rxn1"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("cytosol"); SpatialReactionPlugin* rplugin = static_cast<SpatialReactionPlugin*>(reaction->getPlugin("spatial")); rplugin->setIsLocal(true); // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // SpatialModelPlugin* mplugin; mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); // // Creates a geometry object via SpatialModelPlugin object. // Geometry* geometry = mplugin->createGeometry(); geometry->setCoordinateSystem(SPATIAL_GEOMETRYKIND_CARTESIAN); CoordinateComponent* coordX = geometry->createCoordinateComponent(); coordX->setId("coordComp1"); coordX->setType(SPATIAL_COORDINATEKIND_CARTESIAN_X); coordX->setUnit("umeter"); Boundary* minX = coordX->createBoundaryMin(); minX->setId("Xmin"); minX->setValue(0.0); Boundary* maxX = coordX->createBoundaryMax(); maxX->setId("Xmax"); maxX->setValue(10.0); Parameter* paramX = model->createParameter(); paramX->setId("x"); paramX->setValue(8.0); // spatial package extension to parameter. // SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramX->getPlugin("spatial")); SpatialSymbolReference* spSymRef = pplugin->createSpatialSymbolReference(); spSymRef->setSpatialRef(coordX->getId()); DomainType* domainType = geometry->createDomainType(); domainType->setId("dtype1"); domainType->setSpatialDimension(3); // Spatial package extension to compartment (mapping compartment with domainType) SpatialCompartmentPlugin* cplugin; cplugin = static_cast<SpatialCompartmentPlugin*>(compartment->getPlugin("spatial")); CompartmentMapping* compMapping = cplugin->createCompartmentMapping(); compMapping->setId("compMap1"); compMapping->setDomainType(domainType->getId()); compMapping->setUnitSize(1.0); Domain* domain = geometry->createDomain(); domain->setId("domain1"); domain->setDomainType("dtype1"); InteriorPoint* internalPt1 = domain->createInteriorPoint(); internalPt1->setCoord1(1.0); domain = geometry->createDomain(); domain->setId("domain2"); domain->setDomainType("dtype1"); InteriorPoint* internalPt2 = domain->createInteriorPoint(); internalPt2->setCoord1(5.0); AdjacentDomains* adjDomain = geometry->createAdjacentDomains(); adjDomain->setId("adjDomain1"); adjDomain->setDomain1("domain1"); adjDomain->setDomain2("domain2"); AnalyticGeometry* analyticGeom = geometry->createAnalyticGeometry(); analyticGeom->setId("analyticGeom1"); AnalyticVolume* analyticVol = analyticGeom->createAnalyticVolume(); analyticVol->setId("analyticVol1"); analyticVol->setDomainType(domainType->getId()); analyticVol->setFunctionType(SPATIAL_FUNCTIONKIND_LAYERED); analyticVol->setOrdinal(1); const char* mathMLStr = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><apply xmlns=\"\"><plus /><apply><times /><ci>x</ci><ci>x</ci></apply><apply><minus /><cn>1.0</cn></apply></apply></math>"; ASTNode* mathNode = readMathMLFromString(mathMLStr); analyticVol->setMath(mathNode); SampledFieldGeometry* sfg = geometry->createSampledFieldGeometry(); sfg->setId("sampledFieldGeom1"); SampledField* sampledField = sfg->createSampledField(); sampledField->setId("sampledField1"); sampledField->setNumSamples1(4); sampledField->setNumSamples2(4); sampledField->setNumSamples3(2); sampledField->setDataType("double"); sampledField->setInterpolationType("linear"); sampledField->setEncoding("encoding1"); //int samples[5] = {1, 2, 3, 4, 5}; int samples[32] = { // z=0 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0, // z=1 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0 }; ImageData* id = sampledField->createImageData(); id->setDataType("uint8"); id->setSamples(samples, 32); SampledVolume* sampledVol = sfg->createSampledVolume(); sampledVol->setId("sv_1"); sampledVol->setDomainType(domainType->getId()); sampledVol->setSampledValue(128.0); sampledVol->setMinValue(0.0); sampledVol->setMaxValue(255.0); writeSBML(&document, "spatial_example2.xml"); }
LIBSBML_CPP_NAMESPACE_USE int main(int argc,char** argv) { DynPkgNamespaces sbmlns; sbmlns.addPackageNamespace("comp", 1, "comp"); // create the document SBMLDocument *document = new SBMLDocument(&sbmlns); document->setPackageRequired("dyn", true); document->setPackageRequired("comp", true); // create the Model Model* model=document->createModel(); model->setId("grid2x2"); // create the Compartment Compartment* compartment = model->createCompartment(); compartment->setId("Loc1"); compartment->setConstant(false); compartment->setSize(1); compartment->setSpatialDimensions(2.0); DynCompartmentPlugin* cplugin = static_cast<DynCompartmentPlugin*>(compartment->getPlugin("dyn")); SpatialComponent* component = cplugin->createSpatialComponent(); component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANX); component->setVariable("q1_X"); component = cplugin->createSpatialComponent(); component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANY); component->setVariable("q1_Y"); CompSBasePlugin* compPlugin = static_cast<CompSBasePlugin*>(compartment->getPlugin("comp")); ReplacedElement* relement = compPlugin->createReplacedElement(); relement->setIdRef("C"); relement->setSubmodelRef("GRID_1_1_cell"); compartment = model->createCompartment(); compartment->setId("Loc2"); compartment->setConstant(false); compartment->setSize(1); compartment->setSpatialDimensions(2.0); cplugin = static_cast<DynCompartmentPlugin*>(compartment->getPlugin("dyn")); component = cplugin->createSpatialComponent(); component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANX); component->setVariable("q2_X"); component = cplugin->createSpatialComponent(); component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANY); component->setVariable("q2_Y"); compPlugin = static_cast<CompSBasePlugin*>(compartment->getPlugin("comp")); relement = compPlugin->createReplacedElement(); relement->setIdRef("C"); relement->setSubmodelRef("GRID_1_2_cell"); compartment = model->createCompartment(); compartment->setId("Loc3"); compartment->setConstant(false); compartment->setSize(1); compartment->setSpatialDimensions(2.0); cplugin = static_cast<DynCompartmentPlugin*>(compartment->getPlugin("dyn")); component = cplugin->createSpatialComponent(); component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANX); component->setVariable("q3_X"); component = cplugin->createSpatialComponent(); component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANY); component->setVariable("q3_Y"); compPlugin = static_cast<CompSBasePlugin*>(compartment->getPlugin("comp")); relement = compPlugin->createReplacedElement(); relement->setIdRef("C"); relement->setSubmodelRef("GRID_2_1_cell"); compartment = model->createCompartment(); compartment->setId("Loc4"); compartment->setConstant(false); compartment->setSize(1); compartment->setSpatialDimensions(2.0); cplugin = static_cast<DynCompartmentPlugin*>(compartment->getPlugin("dyn")); component = cplugin->createSpatialComponent(); component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANX); component->setVariable("q4_X"); component = cplugin->createSpatialComponent(); component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANY); component->setVariable("q4_Y"); compPlugin = static_cast<CompSBasePlugin*>(compartment->getPlugin("comp")); relement = compPlugin->createReplacedElement(); relement->setIdRef("C"); relement->setSubmodelRef("GRID_2_2_cell"); // create Parameters Parameter* param = model->createParameter(); param->initDefaults(); param->setId("q1_X"); param->setValue(1); param = model->createParameter(); param->initDefaults(); param->setId("q1_Y"); param->setValue(1); param = model->createParameter(); param->initDefaults(); param->setId("q2_X"); param->setValue(2); param = model->createParameter(); param->initDefaults(); param->setId("q2_Y"); param->setValue(1); param = model->createParameter(); param->initDefaults(); param->setId("q3_X"); param->setValue(1); param = model->createParameter(); param->initDefaults(); param->setId("q3_Y"); param->setValue(2); param = model->createParameter(); param->initDefaults(); param->setId("q4_X"); param->setValue(2); param = model->createParameter(); param->initDefaults(); param->setId("q4_Y"); param->setValue(2); // create SubModels CompModelPlugin* mplugin = static_cast<CompModelPlugin*>(model->getPlugin("comp")); Submodel* submodel = mplugin->createSubmodel(); submodel->setId("GRID_1_1_cell"); submodel->setModelRef("Cell"); submodel = mplugin->createSubmodel(); submodel->setId("GRID_1_2_cell"); submodel->setModelRef("Cell"); submodel = mplugin->createSubmodel(); submodel->setId("GRID_2_1_cell"); submodel->setModelRef("Cell"); submodel = mplugin->createSubmodel(); submodel->setId("GRID_2_2_cell"); submodel->setModelRef("Cell"); // create the ModelDefinition CompSBMLDocumentPlugin* dplugin = static_cast<CompSBMLDocumentPlugin*>(document->getPlugin("comp")); ModelDefinition* mdef = dplugin->createModelDefinition(); mdef->setId("Cell"); compartment = mdef->createCompartment(); compartment->initDefaults(); compartment->setId("C"); compartment->setSpatialDimensions(2.0); compartment->setSize(1.0); Species* species = mdef->createSpecies(); species->setId("R"); species->setCompartment("C"); species->setHasOnlySubstanceUnits(false); species->setBoundaryCondition(false); species->setConstant(false); species = mdef->createSpecies(); species->setId("S"); species->setCompartment("C"); species->setHasOnlySubstanceUnits(false); species->setBoundaryCondition(false); species->setConstant(false); Reaction* reaction = mdef->createReaction(); reaction->setId("Degradation_R"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("C"); SpeciesReference* reactant = reaction->createReactant(); reactant->setSpecies("R"); reactant->setStoichiometry(1); reactant->setConstant(true); reaction = mdef->createReaction(); reaction->setId("Degradation_S"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("C"); reactant = reaction->createReactant(); reactant->setSpecies("S"); reactant->setStoichiometry(1); reactant->setConstant(true); document->checkConsistency(); Event* event = mdef->createEvent(); event->setId("event0"); event->setUseValuesFromTriggerTime(false); DynEventPlugin* eplugin = static_cast<DynEventPlugin*>(event->getPlugin("dyn")); eplugin->setApplyToAll(true); eplugin->setCboTerm("http://cbo.biocomplexity.indiana.edu/svn/cbo/trunk/CBO_1_0.owl#CellDivision"); Trigger* trigger = event->createTrigger(); trigger->setInitialValue(false); trigger->setPersistent(false); trigger->setMath(SBML_parseFormula("true")); if (document->getNumErrors(LIBSBML_SEV_ERROR) > 0) document->printErrors(); writeSBML(document,"dyn_example2.xml"); delete document; }