如何从头开始在cbmpy中创建基因组级代谢模型?

2024-03-28 23:02:38 发布

您现在位置:Python中文网/ 问答频道 /正文

所以前面的问题显然是不明智的。原来的问题是:

我计划从nothong建立一个新的GSMM(即,我需要一个空模型,0反应/代谢物/隔室/GPR/注释,但是有一个工具箱可以接受的适当模型结构)。你知道吗

我以前使用Matlab和COBRA工具箱,但最近改成了Python和cbmpy工具箱。我知道如何通过COBRA在Matlab中创建模型结构,但不知道如何使用cbmpy在python中创建模型结构。我真的不熟悉cmbpy的功能,我在这里寻求帮助。你知道吗

有几种方法可以满足我的需求:

  1. 最愚蠢的方法:读取一个exist模型并删除它的所有内容。你知道吗

    import cbmpy as cbm
    mod = cbm.CBRead.readSBML3FBC('example.xml')
    for ri in mod.getSpeciesIds():
        mod.deleteSpecies(ri, also_delete = 'reaction')

类似地,不同的函数以'修改删除会把所有东西都清理干净。最终你会有一个干净的空模型。你知道吗

  1. 按照Cleb的建议,我查看了源代码并找到了所需的函数

    import cbmpy as cbm
    mod = cbm.CBModel.Model('Name')
    mod.createSpecies('M_a_c',boundary=False,value=float('nan'),name='AA',compartment='c',charge=None,chemFormula='C2H2O2')
    mod.createSpecies('M_b_c',boundary=False,value=float('nan'),name='BB',compartment='c',charge=None,chemFormula='CHO')
    mod.createReaction('R_AB',reversible=False)
    mod.createReactionReagent('R_AB','M_a_c',-1.0)
    mod.createReactionReagent('R_AB','M_b_c',2)

然后创建一个ID为“Name”的模型对象。如果你找到了正确的函数,这是一个非常简单的问题,它的答案非常直接。以后你可以逐渐添加反应物/代谢物等,并指定目标反应。当然也可以直接使用cbm.CBModelTools.quickDefaultBuild,但是您需要准备必要的参数来添加反应/物种/边界/目标。你知道吗


Tags: 方法函数模型importmodfalseabas
1条回答
网友
1楼 · 发布于 2024-03-28 23:02:38

虽然您确实可以像您描述的那样构建一个模型,但它可能更容易(更干净)使用

cbm.CBModelTools.quickDefaultBuild

我将展示如何将其用于一个非常简单的示例:

import cbmpy as cbm


def define_new_model():

    model_name = 'my_great_model'

    reactions = {
        'R01': {'id': 'R01', 'reversible': True, 'reagents': [(-1., 'A'), (1., 'A_ext')], 'SUBSYSTEM': ''},
        'R02': {'id': 'R02', 'reversible': True, 'reagents': [(-1., 'B'), (1., 'B_ext')], 'SUBSYSTEM': '',
                'GENE_ASSOCIATION': '(gene_1 or gene_2)'},
        'R_EX_A': {'id': 'R_EX_A', 'reversible': True, 'reagents': [(1., 'A_b'), (-1., 'A_ext')], 'SUBSYSTEM': ''},
        'R_EX_B': {'id': 'R_EX_B', 'reversible': True, 'reagents': [(1., 'B_b'), (-1., 'B_ext')], 'SUBSYSTEM': ''},
        'R_biomass': {'id': 'R_biomass', 'reversible': False, 'reagents': [(-1., 'A'), (-1., 'B')], 'SUBSYSTEM': ''}
    }

    species = {
        'A': {'id': 'A', 'boundary': False, 'SUBSYSTEM': 'C1'},
        'B': {'id': 'B', 'boundary': False, 'SUBSYSTEM': 'C1'},
        'A_ext': {'id': 'A_ext', 'boundary': False, 'SUBSYSTEM': 'C0'},
        'B_ext': {'id': 'B_ext', 'boundary': False, 'SUBSYSTEM': 'C0'},
        'A_b': {'id': 'A_b', 'boundary': True, 'SUBSYSTEM': ''},
        'B_b': {'id': 'B_b', 'boundary': True, 'SUBSYSTEM': ''},
    }

    bounds = {'R_EX_A': {'lower': -1., 'upper': 0.},
              'R_EX_B': {'lower': -1., 'upper': 0.}}

    objective_function = {'objMaxJ1': {'id': 'biomass_obj1',
                                       'flux': 'R_biomass',
                                       'coefficient': 1,
                                       'sense': 'Maximize',
                                       'active': True}}

    return model_name, reactions, species, bounds, objective_function


model_def = define_new_model()

mod = cbm.CBModelTools.quickDefaultBuild(*model_def)

现在你可以打电话了

mod.getReactionIds()
['R01', 'R02', 'R_EX_A', 'R_EX_B', 'R_biomass']

以及

mod.getSpeciesIds()
['A', 'A_b', 'A_ext', 'B', 'B_b', 'B_ext']

以及

mod.getBoundarySpeciesIds()
['A_b', 'B_b']

你也可以模拟模型

cbm.doFBA(mod)
analyzeModel objective value: 1.0

当你寻找你为反应R02定义的基因时,你会看到一个空列表:

mod.getGeneIds()
[]

你得先打电话

mod.createGeneAssociationsFromAnnotations()

哪个指纹

INFO: used key(s) '['GENE_ASSOCIATION']'
INFO: Added 2 new genes and 1 associations to model

然后呢

mod.getGeneIds()

将产生预期的结果

['gene_1', 'gene_2']

以及

mod.getGPRforReaction('R02').getAssociationStr()

它回来了

'((gene_1 or gene_2))'

我强烈建议您使用这种方法,因为如果您想更改模型定义,以后可以更容易地阅读和编辑这种方法。你知道吗

如果要添加进一步的注释,可以选中this question。你知道吗

相关问题 更多 >