因此,上一个问题显然没有明智地提出。以下是改写后的原始问题:
我计划从任何方面构建一个新的GSMM (也就是说,我需要一个空模型,0 reaction/metabolite/compartment/GPR/annotation,,但是工具箱将接受一个合适的模型结构)。
我曾使用Matlab和COBRA工具箱,但最近改为Python和cbmpy工具箱。我知道如何通过COBRA在Matlab中创建模型结构,但不知道如何使用cbmpy在python中创建模型结构。我真的不熟悉cmbpy的功能,我在这里寻求帮助。
有一些方法可以满足我的需要:
输入cbmpy作为cbmpy= cbm.CBRead.readSBML3FBC('example.xml'),用于mod.getSpeciesIds():mod.deleteSpecies( ri,also_delete = 'reaction')中的ri
类似地,不同的函数以“mod.delete.”开头。会把所有的东西都清理干净。最终你会有一个干净的空模型。
将cbmpy输入为cbmpy= cbm.CBModel.Model('Name') mod.createSpecies('M_a_c',boundary=False,value=float('nan'),name='AA',boundary=False=‘c’,charge=None,化学公式=‘C2H2O2’) mod.createSpecies('M_b_c',boundary=False,value=float('nan'),名称=‘BB’,boundary=False=‘c’,charge=None,化学公式=‘CHO’mod.createReaction('R_AB',reversible=False) mod.createReactionReagent('R_AB','M_a_c',‘M_a_c’,-1.0) mod.createReactionReagent('R_AB','M_b_c',2)
然后创建一个ID为“Name”的模型对象。如果你找到了正确的函数,这是一个非常简单的问题,它的答案非常简单。之后,你可以逐步添加反应/代谢物/等,并指定客观反应。当然,直接使用cbm.CBModelTools.quickDefaultBuild也是可能的,但是您需要准备必要的论据来添加反应/物种/边界/目标。
发布于 2018-06-07 06:53:23
虽然您确实可以像您所描述的那样构建一个模型,但使用起来可能更容易(也更干净)。
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当您查找为reaction 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。
https://stackoverflow.com/questions/50720107
复制相似问题