3

I have a model and want to add an entire new pathway to it. Some of the metabolites already exist in the model, others have to be created. I also have to add GPRs to the reactions using genes not yet present in the model.

I found the function addReaction, but always get an error when I use it:

import cbmpy

cmod = cbmpy.CBRead.readSBML3FBC('model.xml')

cmod.addReaction('R_foo')

AssertionError: ERROR: requires a Reaction object, not something of type <type 'str'>

Any ideas how I can pass a reaction object and add metabolites and a GPR?

4

1 回答 1

0

您正在寻找createReaction. 以下将起作用(我使用这个问题的模型):

import cbmpy as cbm

mod = cbm.CBRead.readSBML3FBC('e_coli_core.xml')

mod.createReaction('R_foo')

这将打印

反应“R_foo”界限设置为:-INF <= R_foo <= INF 使用 cmod.createReactionReagent(R_foo, metabolite, coefficient) 添加试剂

因此,默认情况下,添加可逆反应(见下文如何添加不可逆反应),它还告诉您如何添加试剂。

我们首先假设您添加了一个反应,其中所有试剂都已存在于模型中。然后您可以使用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')]

然后,您可以使用以下方法轻松地将 GPR 添加到反应中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)

您可以查看有关如何向物种或反应添加附加注释的问题。

然后,您可能还想将属于此路径的所有反应添加到一个组中,这样以后可以很容易地访问这些反应:

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()

如果您对反应对象本身感兴趣。

于 2018-06-05T19:06:25.313 回答