如何从头开始在 cbmpy 中创建基因组规模的代谢模型?
How to create a genome scale metabolic model in cbmpy from scratch?
所以上一个问题显然问得不明智。所以这里是改写的原始问题:
我正计划从 nothong 构建一个新的 GSMM(即我需要一个空模型 0 reaction/metabolite/compartment/GPR/annotation,但具有工具箱可以接受的适当模型结构)。
我以前使用 Matlab 和 COBRA 工具箱,但最近改用 Python 和 cbmpy 工具箱。我知道如何通过 COBRA 在 Matlab 中创建模型结构,但不知道如何在 python 中使用 cbmpy。我对cmbpy的功能实在是不熟悉,特来求助
有方法可以满足我的需求:
最愚蠢的方法:读取现有模型并删除其所有内容。
import cbmpy as cbm
mod = cbm.CBRead.readSBML3FBC('example.xml')
for ri in mod.getSpeciesIds():
mod.deleteSpecies(ri, also_delete = 'reaction')</pre>
同样,以'mod.delete....'开头的不同函数将清除所有内容。最终你会得到一个干净的空模型。
按照 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)</pre>
然后创建 ID 为 'Name' 的模型对象。这是一个非常简单的问题,如果您找到了正确的函数,它的答案也非常简单。稍后您可以逐渐添加 reaction/metabolites/etc 并分配 objective 反应。当然直接使用cbm.CBModelTools.quickDefaultBuild
也是可以的,但是需要准备必要的参数来添加reactions/species/boundary/objective.
虽然您确实可以按照您的描述构建模型,但使用起来可能更容易(也更简洁)
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()
哪个returns
'((gene_1 or gene_2))'
我强烈建议使用这种方法,因为如果您想更改模型定义,这样更容易阅读和编辑。
如果你想添加更多的注释,你可以检查。
所以上一个问题显然问得不明智。所以这里是改写的原始问题:
我正计划从 nothong 构建一个新的 GSMM(即我需要一个空模型 0 reaction/metabolite/compartment/GPR/annotation,但具有工具箱可以接受的适当模型结构)。
我以前使用 Matlab 和 COBRA 工具箱,但最近改用 Python 和 cbmpy 工具箱。我知道如何通过 COBRA 在 Matlab 中创建模型结构,但不知道如何在 python 中使用 cbmpy。我对cmbpy的功能实在是不熟悉,特来求助
有方法可以满足我的需求:
最愚蠢的方法:读取现有模型并删除其所有内容。
import cbmpy as cbm mod = cbm.CBRead.readSBML3FBC('example.xml') for ri in mod.getSpeciesIds(): mod.deleteSpecies(ri, also_delete = 'reaction')</pre>
同样,以'mod.delete....'开头的不同函数将清除所有内容。最终你会得到一个干净的空模型。
按照 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)</pre>
然后创建 ID 为 'Name' 的模型对象。这是一个非常简单的问题,如果您找到了正确的函数,它的答案也非常简单。稍后您可以逐渐添加 reaction/metabolites/etc 并分配 objective 反应。当然直接使用cbm.CBModelTools.quickDefaultBuild
也是可以的,但是需要准备必要的参数来添加reactions/species/boundary/objective.
虽然您确实可以按照您的描述构建模型,但使用起来可能更容易(也更简洁)
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()
哪个returns
'((gene_1 or gene_2))'
我强烈建议使用这种方法,因为如果您想更改模型定义,这样更容易阅读和编辑。
如果你想添加更多的注释,你可以检查