我有一个模型,想要为它添加一个全新的途径。一些代谢物已经存在于模型中,其他代谢物必须被创建。我还必须使用模型中尚未存在的基因将GPR添加到反应中。
我找到了函数addReaction
,但在使用时总是出错:
import cbmpy
cmod = cbmpy.CBRead.readSBML3FBC('model.xml')
cmod.addReaction('R_foo')
AssertionError:错误:需要一个Reaction对象,而不是 输入
<type 'str'>
我是如何通过反应物体并添加代谢物和GPR的?
答案 0 :(得分:0)
您正在寻找createReaction
。以下内容适用(我使用this question中的模型):
import cbmpy as cbm
mod = cbm.CBRead.readSBML3FBC('e_coli_core.xml')
mod.createReaction('R_foo')
这将打印
反应“R_foo”界限设置为:-INF&lt; = R_foo&lt; = INF添加试剂 cmod.createReactionReagent(R_foo,代谢物,系数)
因此,默认情况下,会添加可逆反应(请参阅下文如何添加不可逆转的反应),它还会告诉您如何添加试剂。
让我们首先假设你添加了一个反应,其中所有试剂已经存在于模型中。然后您可以使用createReactionReagent
添加试剂及其化学计量因子,如下所示:
mod.createReactionReagent('R_foo', 'M_fum_c', -1.)
mod.createReactionReagent('R_foo', 'M_nh4_c', 5.)
我们可以检查反应是否正确添加:
mod.getReaction('R_foo').getStoichiometry()
将返回
[(-1.0, 'M_fum_c'), (5.0, 'M_nh4_c')]
然后,您可以使用createGeneProteinAssociation
:
mod.createGeneProteinAssociation('R_foo', 'gene_1 or gene_2')
再次检查它是否按预期工作:
mod.getGPRforReaction('R_foo').getAssociationStr()
的产率:
'((gene_1 or gene_2))'
如果模型中没有基因,它们将自动添加:
mod.getGeneIds()[-2:]
将返回
['gene_1', 'gene_2']
如果您想添加一个完整的途径,我们现在也做同样的事情,对于尚未成为该模型一部分的试剂进行第二次反应:
# add an irreversible reaction
mod.createReaction('R_bar', reversible=False)
mod.createReactionReagent('R_bar', 'M_succ_c', -1.5)
我们假设,您要添加的代谢物称为A
,然后是
mod.createReactionReagent('R_bar', 'A', 1.0)
将失败
AssertionError:代谢物A不存在
这意味着我们首先必须使用createSpecies
创建它:
mod.createSpecies('A', name='species A', compartment='c', charge=-2, chemFormula='C1H2O3')
不需要参数name
直到chemFormula
。现在你可以打电话了
mod.createReactionReagent('R_bar', 'A', 1.0)
您可以查看this question如何为物种或反应添加其他注释。
然后,您可能还希望将属于此途径的所有反应添加到一个组中,以便以后轻松访问这些反应:
pw_reactions = ['R_foo', 'R_bar']
# create an empty group
mod.createGroup('my_new_pathway')
# we can only add objects to a group so we get the reaction object for each reaction in the pathway
reaction_objects = [mod.getReaction(ri) for ri in pw_reactions]
# add all the reaction objects to the group
new_pw.addMember(reaction_objects)
现在您可以使用
访问该组的成员mod.getGroup('my_new_pathway').getMemberIDs()
# returns ['R_foo', 'R_bar']
如果您对反应ID感兴趣或
mod.getGroup('my_new_pathway').getMembers()
如果您对反应物本身感兴趣。