将sbml公式转换为程序代码

时间:2017-01-30 14:18:26

标签: python c++ xml

我是sbml的新手,我真的很困惑。

我想用Runge Kutta解决ODE问题。 ODE存储在SBML文件中。 该文件的一部分看起来如下

<listOfReactions>
  <reaction id="growth_P" reversible="false" fast="false">
    <listOfReactants>
      <speciesReference species="P" constant="false"/>
    </listOfReactants>
    <listOfProducts>
      <speciesReference species="P" constant="false"/>
    </listOfProducts>
    <kineticLaw>
      <math xmlns="http://www.w3.org/1998/Math/MathML">
        <apply>
          <times/>
          <ci> Rp </ci>
          <ci> P </ci>
        </apply>
      </math>
      <listOfLocalParameters>
        <localParameter id="Rp" value="1" units="per_second"/>
      </listOfLocalParameters>
    </kineticLaw>
  </reaction>
....
</listOfReactions>

这应该描述反应dP / dt = Rp * P

这就是我的问题。我不知道如何将sbml公式转换为我的程序可以处理的公式(python / C ++,无论如何)

所以最好的选择是像

这样的功能
Product = evaluate_sbml_formula(formula,value_of_reactant)

我阅读了sbml文档但没找到它。

你有什么建议吗? 感谢

2 个答案:

答案 0 :(得分:1)

没有看到整个SBML文件,很难构建一组要解决的ODE。在我的python课程(1)中,我使用libSBML(可用作pypi / anaconda包)来解决使用python的SBML文件。这里是一个文件的链接,该文件将SBML转换为ODE,然后用scipy解决:

https://www.dropbox.com/s/2bfpiausejp0gd0/convert_reactions.py?dl=0

我希望有帮助

答案 1 :(得分:0)

sbml片段有点不寻常。反应物和产物均为P,因此反应为P->P。这意味着P的变化率为零,即

dp / dt = 0

在这种情况下,费率定律无关紧要。