Lengthy example of creating SBML models presented in the SBML specification.
54 ProgramName =
"createExampleModels";
55 ProgramVersion =
"1.0.0";
82 def createExampleEnzymaticReaction():
92 sbmlDoc = SBMLDocument(level, version);
100 model = sbmlDoc.createModel();
101 model.setId(
"EnzymaticReaction");
113 unitdef = model.createUnitDefinition();
114 unitdef.setId(
"per_second");
118 unit = unitdef.createUnit();
119 unit.setKind(UNIT_KIND_SECOND);
120 unit.setExponent(-1);
130 unitdef = model.createUnitDefinition();
131 unitdef.setId(
"litre_per_mole_per_second");
135 unit = unitdef.createUnit();
136 unit.setKind(UNIT_KIND_MOLE);
137 unit.setExponent(-1);
141 unit = unitdef.createUnit();
142 unit.setKind(UNIT_KIND_LITRE);
147 unit = unitdef.createUnit();
148 unit.setKind(UNIT_KIND_SECOND);
149 unit.setExponent(-1);
158 compName =
"cytosol";
162 comp = model.createCompartment();
163 comp.setId(compName);
186 sp = model.createSpecies();
193 sp.setCompartment(compName);
208 sp.setInitialAmount(0);
214 sp = model.createSpecies();
215 sp.setCompartment(compName);
218 sp.setInitialAmount(0);
224 sp = model.createSpecies();
225 sp.setCompartment(compName);
228 sp.setInitialAmount(1e-20);
234 sp = model.createSpecies();
235 sp.setCompartment(compName);
238 sp.setInitialAmount(5e-21);
251 reaction = model.createReaction();
252 reaction.setId(
"veq");
258 spr = reaction.createReactant();
264 spr = reaction.createReactant();
272 spr = reaction.createProduct();
273 spr.setSpecies(
"ES");
279 kl = reaction.createKineticLaw();
314 astCytosol = ASTNode(AST_NAME);
315 astCytosol.setName(
"cytosol");
317 astKon = ASTNode(AST_NAME);
318 astKon.setName(
"kon");
320 astKoff = ASTNode(AST_NAME);
321 astKoff.setName(
"koff");
323 astE = ASTNode(AST_NAME);
326 astS = ASTNode(AST_NAME);
329 astES = ASTNode(AST_NAME);
344 astTimes1 = ASTNode(AST_TIMES);
345 astTimes1.addChild(astKoff);
346 astTimes1.addChild(astES);
380 astTimes2 = ASTNode(AST_TIMES);
381 astTimes2.addChild(astE);
382 astTimes2.addChild(astS);
384 astTimes = ASTNode(AST_TIMES);
385 astTimes.addChild(astKon);
386 astTimes.addChild(astTimes2);
408 astMinus = ASTNode(AST_MINUS);
409 astMinus.addChild(astTimes);
410 astMinus.addChild(astTimes1);
437 astMath = ASTNode(AST_TIMES);
438 astMath.addChild(astCytosol);
439 astMath.addChild(astMinus);
456 para = kl.createParameter();
458 para.setValue(1000000);
459 para.setUnits(
"litre_per_mole_per_second");
463 para = kl.createParameter();
466 para.setUnits(
"per_second");
473 reaction = model.createReaction();
474 reaction.setId(
"vcat");
475 reaction.setReversible(
False);
484 spr = reaction.createReactant();
485 spr.setSpecies(
"ES");
493 spr = reaction.createProduct();
498 spr = reaction.createProduct();
505 kl = reaction.createKineticLaw();
519 mathXMLString =
"""<math xmlns="http://www.w3.org/1998/Math/MathML">
539 para = kl.createParameter();
542 para.setUnits(
"per_second");
558 def createExampleInvolvingUnits():
568 sbmlDoc = SBMLDocument(level, version);
574 sbmlDoc.getNamespaces().add(
"http://www.w3.org/1999/xhtml",
"xhtml");
582 model = sbmlDoc.createModel();
583 model.setId(
"unitsExample");
598 unitdef = model.createUnitDefinition();
599 unitdef.setId(
"substance");
603 unit = unitdef.createUnit();
604 unit.setKind(UNIT_KIND_MOLE);
615 unitdef = model.createUnitDefinition();
616 unitdef.setId(
"mmls");
620 unit = unitdef.createUnit();
621 unit.setKind(UNIT_KIND_MOLE);
626 unit = unitdef.createUnit();
627 unit.setKind(UNIT_KIND_LITRE);
628 unit.setExponent(-1);
632 unit = unitdef.createUnit();
633 unit.setKind(UNIT_KIND_SECOND);
634 unit.setExponent(-1);
640 unitdef = model.createUnitDefinition();
641 unitdef.setId(
"mml");
645 unit = unitdef.createUnit();
646 unit.setKind(UNIT_KIND_MOLE);
651 unit = unitdef.createUnit();
652 unit.setKind(UNIT_KIND_LITRE);
653 unit.setExponent(-1);
666 comp = model.createCompartment();
667 comp.setId(compName);
689 sp = model.createSpecies();
695 sp.setCompartment(compName);
707 sp.setInitialConcentration(1);
713 sp = model.createSpecies();
715 sp.setCompartment(compName);
716 sp.setInitialConcentration(1);
722 sp = model.createSpecies();
723 sp.setCompartment(compName);
725 sp.setInitialConcentration(1);
731 sp = model.createSpecies();
732 sp.setCompartment(compName);
734 sp.setInitialConcentration(1);
744 para = model.createParameter();
747 para.setUnits(
"mmls");
751 para = model.createParameter();
754 para.setUnits(
"mml");
767 reaction = model.createReaction();
768 reaction.setId(
"v1");
777 spr = reaction.createReactant();
778 spr.setSpecies(
"x0");
786 spr = reaction.createProduct();
787 spr.setSpecies(
"s1");
793 kl = reaction.createKineticLaw();
801 notesString =
"<xhtml:p> ((vm * s1)/(km + s1)) * cell </xhtml:p>";
802 kl.setNotes(notesString);
836 astMath = ASTNode(AST_TIMES);
838 astMath.addChild(ASTNode(AST_DIVIDE));
839 astDivide = astMath.getLeftChild();
841 astDivide.addChild(ASTNode(AST_TIMES));
842 astTimes = astDivide.getLeftChild();
844 astTimes.addChild(ASTNode(AST_NAME));
845 astTimes.getLeftChild().setName(
"vm");
847 astTimes.addChild(ASTNode(AST_NAME));
848 astTimes.getRightChild().setName(
"s1");
850 astDivide.addChild(ASTNode(AST_PLUS));
851 astPlus = astDivide.getRightChild();
853 astPlus.addChild(ASTNode(AST_NAME));
854 astPlus.getLeftChild().setName(
"km");
856 astPlus.addChild(ASTNode(AST_NAME));
857 astPlus.getRightChild().setName(
"s1");
860 astMath.addChild(ASTNode(AST_NAME));
861 astMath.getRightChild().setName(
"cell");
875 reaction = model.createReaction();
876 reaction.setId(
"v2");
885 spr = reaction.createReactant();
886 spr.setSpecies(
"s1");
894 spr = reaction.createProduct();
895 spr.setSpecies(
"s2");
901 kl = reaction.createKineticLaw();
913 notesXMLNode = XMLNode(
914 XMLTriple(
"p",
"",
"xhtml"),
919 notesXMLNode.addChild(XMLNode(
" ((vm * s2)/(km + s2)) * cell "));
923 kl.setNotes(notesXMLNode);
937 mathXMLString =
"""<math xmlns="http://www.w3.org/1998/Math/MathML">
967 reaction = model.createReaction();
968 reaction.setId(
"v3");
977 spr = reaction.createReactant();
978 spr.setSpecies(
"s2");
986 spr = reaction.createProduct();
987 spr.setSpecies(
"x1");
994 kl = reaction.createKineticLaw();
998 notesString =
"<xhtml:p> ((vm * x1)/(km + x1)) * cell </xhtml:p>";
999 kl.setNotes(notesString);
1005 mathXMLString =
"""<math xmlns="http://www.w3.org/1998/Math/MathML">
1027 kl.setMath(astMath);
1044 def createExampleInvolvingFunctionDefinitions():
1054 sbmlDoc = SBMLDocument(level, version);
1062 model = sbmlDoc.createModel();
1063 model.setId(
"functionExample");
1071 fdef = model.createFunctionDefinition();
1076 mathXMLString =
"""<math xmlns="http://www.w3.org/1998/Math/MathML">
1091 fdef.setMath(astMath);
1099 compName =
"compartmentOne";
1103 comp = model.createCompartment();
1104 comp.setId(compName);
1125 sp = model.createSpecies();
1131 sp.setCompartment(compName);
1144 sp.setInitialConcentration(1);
1150 sp = model.createSpecies();
1152 sp.setCompartment(compName);
1153 sp.setInitialConcentration(0);
1164 para = model.createParameter();
1167 para.setUnits(
"second");
1180 reaction = model.createReaction();
1181 reaction.setId(
"reaction_1");
1182 reaction.setReversible(
False);
1191 spr = reaction.createReactant();
1192 spr.setSpecies(
"S1");
1200 spr = reaction.createProduct();
1201 spr.setSpecies(
"S2");
1208 kl = reaction.createKineticLaw();
1214 mathXMLString =
"""<math xmlns="http://www.w3.org/1998/Math/MathML">
1223 <ci> compartmentOne </ci>
1231 kl.setMath(astMath);
1256 def validateExampleSBML(sbmlDoc):
1257 if (sbmlDoc ==
None):
1258 print(
"validateExampleSBML: given a None SBML Document");
1261 consistencyMessages =
"";
1262 validationMessages =
"";
1264 numCheckFailures = 0;
1265 numConsistencyErrors = 0;
1266 numConsistencyWarnings = 0;
1267 numValidationErrors = 0;
1268 numValidationWarnings = 0;
1275 numCheckFailures = sbmlDoc.checkInternalConsistency();
1276 if (numCheckFailures > 0):
1278 for i
in range(0, numCheckFailures):
1279 sbmlErr = sbmlDoc.getError(i);
1280 if (sbmlErr.isFatal()
or sbmlErr.isError()):
1281 numConsistencyErrors = 1 + numConsistencyErrors;
1283 numConsistencyWarnings = 1+numConsistencyWarnings;
1284 sbmlDoc.printErrors();
1290 if (numConsistencyErrors > 0):
1291 consistencyMessages = consistencyMessages +
"Further validation aborted.";
1293 numCheckFailures = sbmlDoc.checkConsistency();
1294 if (numCheckFailures > 0):
1296 for i
in range(0, numCheckFailures):
1297 sbmlErr = sbmlDoc.getError(i);
1298 if (sbmlErr.isFatal()
or sbmlErr.isError()):
1299 numValidationErrors = 1+numValidationErrors;
1301 numValidationWarnings = 1+numValidationWarnings;
1302 sbmlDoc.printErrors();
1307 if (numConsistencyErrors > 0):
1309 if (numConsistencyErrors > 1):
1311 print(
"ERROR: encountered " + str(numConsistencyErrors) +
" consistency error" + tmp +
" in model '" + sbmlDoc.getModel().getId() +
"'.");
1313 if (numConsistencyWarnings > 0):
1315 if (numConsistencyWarnings > 1):
1317 print(
"Notice: encountered " + str(numConsistencyWarnings)
1318 +
" consistency warning" + tmp
1319 +
" in model '" + sbmlDoc.getModel().getId() +
"'.");
1320 print(consistencyMessages);
1322 if (numValidationErrors > 0):
1324 if (numValidationErrors > 1):
1326 print(
"ERROR: encountered " + str(numValidationErrors) +
" validation error" + (tmp)
1327 +
" in model '" + sbmlDoc.getModel().getId() +
"'.");
1328 if (numValidationWarnings > 0):
1330 if (numValidationWarnings > 1):
1332 print(
"Notice: encountered " + str(numValidationWarnings)
1333 +
" validation warning" + (tmp)
1334 +
" in model '" + sbmlDoc.getModel().getId() +
"'.");
1335 print(validationMessages);
1337 return (numConsistencyErrors == 0
and numValidationErrors == 0);
1345 def writeExampleSBML(sbmlDoc, filename):
1348 print(
"Wrote file '" + filename +
"'");
1351 print(
"Failed to write '" + filename +
"'");
1376 sbmlDoc = createExampleEnzymaticReaction();
1377 SBMLok = validateExampleSBML(sbmlDoc);
1379 writeExampleSBML(sbmlDoc,
"enzymaticreaction.xml");
1387 sbmlDoc = createExampleInvolvingUnits();
1388 SBMLok = validateExampleSBML(sbmlDoc);
1390 writeExampleSBML(sbmlDoc,
"units.xml");
1398 sbmlDoc = createExampleInvolvingFunctionDefinitions();
1399 SBMLok = validateExampleSBML(sbmlDoc);
1401 writeExampleSBML(sbmlDoc,
"functiondef.xml");
1405 print(
"Unexpected exceptional condition encountered.");
1412 if __name__ ==
'__main__':