def writeSbml(self, sbml_speciesReference, sbml_level=Settings.defaultSbmlLevel, sbml_version=Settings.defaultSbmlVersion):
""" Writes a species reference to a sbml file """
sbml_speciesReference.setSpecies(self.__species)
SbmlObject.writeSbml(self, sbml_speciesReference, sbml_level, sbml_version)
if sbml_level == 3 and self.__hasId:
Variable.writeSbml(self, sbml_speciesReference, sbml_level, sbml_version)
elif not sbml_speciesReference.isModifier():
if sbml_level == 1:
t_stoichiometry = nsimplify(self.stoichiometry.getInternalMathFormula())
if t_stoichiometry.is_Rational and t_stoichiometry.q != 1:
sbml_speciesReference.setStoichiometry(int(t_stoichiometry.p))
sbml_speciesReference.setDenominator(int(t_stoichiometry.q))
elif t_stoichiometry != MathFormula.ONE:
# print srepr(t_stoichiometry)
# t_stoichiometry = self.stoichiometry.getSbmlMathFormula(sbml_level, sbml_version)
sbml_speciesReference.setStoichiometry(int(t_stoichiometry))
else:
t_stoichiometry = self.stoichiometry.getSbmlMathFormula(sbml_level, sbml_version)
if t_stoichiometry.getType() == AST_REAL:
if t_stoichiometry.getReal() != 1.0 or sbml_level == 3:
sbml_speciesReference.setStoichiometry(t_stoichiometry.getReal())
elif t_stoichiometry.getType() == AST_INTEGER:
if t_stoichiometry.getInteger() != 1 or sbml_level == 3:
sbml_speciesReference.setStoichiometry(t_stoichiometry.getInteger())
elif t_stoichiometry.getType() == AST_RATIONAL:
sbml_speciesReference.setStoichiometry(t_stoichiometry.getNumerator())
sbml_speciesReference.setDenominator(t_stoichiometry.getDenominator())
else:
if sbml_level == 3:
if self.__model.listOfVariables.containsSymbol(self.stoichiometry.getInternalMathFormula()):
sbml_speciesReference.setId(t_stoichiometry.getName())
else:
sbml_speciesReference.setStoichiometry(t_stoichiometry)
else:
sbml_stoichiometry_math = sbml_speciesReference.createStoichiometryMath()
sbml_stoichiometry_math.setMath(t_stoichiometry)
if sbml_level >= 3:
sbml_speciesReference.setConstant(self.constant)
评论列表
文章目录