首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通量变化分析仅适用于舱室间的输运反应?

通量变化分析仅适用于舱室间的输运反应?
EN

Stack Overflow用户
提问于 2018-06-07 09:11:24
回答 1查看 188关注 0票数 3

我只想对选定的反应做一次FVA,在我的例子中,是关于室间(例如胞液和线粒体之间的运输反应)。我知道我可以像这样在selected_reactions中使用doFVA

代码语言:javascript
运行
复制
import cbmpy as cbm

mod = cbm.CBRead.readSBML3FBC('iMM904.xml.gz')

cbm.doFVA(mod, selected_reactions=['R_FORtm', 'R_CO2tm'])

有没有办法得到整个运输反应的清单,而不仅仅是我手动添加的两个?我考虑过根据它们的结尾tm来选择反应,但是'R_ORNt3m'失败了(可能还有其他反应)。

我想和其他人分享这个模式。在SBML文件中存储信息的最佳方法是什么?目前,我会将信息存储在reaction注释中,就像在this answer中一样。例如

代码语言:javascript
运行
复制
mod.getReaction('R_FORtm').setAnnotation('FVA', 'yes') 

可以被解析。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 15:43:00

这种任务没有内置的功能.正如您已经提到的,依赖if通常不是一个好主意,因为不同的数据库、模型和组之间可能存在差异(例如,如果有人决定只列举从r1rn的反应,或者从m1mm的代谢产物,基于if的过滤失败)。相反,我们可以利用物种的compartment场。在CBMPy中,您可以通过

代码语言:javascript
运行
复制
import cbmpy as cbm
import pandas as pd

mod = cbm.CBRead.readSBML3FBC('iMM904.xml.gz')

mod.getSpecies('M_atp_c').getCompartmentId()
# will return 'c'

# run a FBA
cbm.doFBA(mod)

这可以用来找出各舱室之间的所有通量,因为我们可以检查每一种反应,它们的试剂位于哪个隔间。可能的执行情况如下:

代码语言:javascript
运行
复制
def get_fluxes_associated_with_compartments(model_object, compartments, return_values=True):

    # check whether provided compartment IDs are valid
    if not isinstance(compartments, (list, set) or not set(compartments).issubset(model_object.getCompartmentIds())):
        raise ValueError("Please provide valid compartment IDs as a list!")
    else:
        compartments = set(compartments)

    # all reactions in the model
    model_reactions = model_object.getReactionIds()

    # check whether provided compartments are identical with the ones of the reagents of a reaction
    return_reaction_ids = [ri for ri in model_reactions if compartments == set(si.getCompartmentId() for si in
                           model_object.getReaction(ri).getSpeciesObj())]

    # return reaction along with its value
    if return_values:
        return {ri: model_object.getReaction(ri).getValue() for ri in return_reaction_ids}

    # return only a list with reaction IDs
    return return_reaction_ids

因此,您传递您的模型对象和一个隔间列表,然后对每个反应,检查是否至少有一种试剂位于指定的隔间。

在您的情况下,您将按以下方式使用它:

代码语言:javascript
运行
复制
# compartment IDs for mitochondria and cytosol
comps = ['c', 'm']

# you only want the reaction IDs; remove the ', return_values=False' part if you also want the corresponding values
trans_cyt_mit = get_fluxes_associated_with_compartments(mod, ['c', 'm'], return_values=False)

然后,列表trans_cyt_mit将包含所有所需的反应ID(也是您在问题中指定的两个),然后可以传递给doFVA函数。

关于你问题的第二部分。我强烈建议将这些反应存储在一个组中,而不是使用注释:

代码语言:javascript
运行
复制
# create an empty group
mod.createGroup('group_trans_cyt_mit')

# get the group object so that we can manipulate it
cyt_mit = mod.getGroup('group_trans_cyt_mit')

# we can only add objects to a group so we get the reaction object for each transport reaction
reaction_objects = [mod.getReaction(ri) for ri in trans_cyt_mit]

# add all the reaction objects to the group
cyt_mit.addMember(reaction_objects)

当您现在导出模型时,例如使用

代码语言:javascript
运行
复制
cbm.CBWrite.writeSBML3FBCV2(mod, 'iMM904_with_groups.xml')

这个组也将存储在SBML中。如果同事再次读取SBML,那么他/她就可以通过访问组成员轻松地运行一个FVA来获取相同的反应,这比解析注释容易得多:

代码语言:javascript
运行
复制
# do an FVA; fva_res: Reaction, Reduced Costs, Variability Min, Variability Max, abs(Max-Min), MinStatus, MaxStatus
fva_res, rea_names = cbm.doFVA(mod, selected_reactions=mod.getGroup('group_trans_cyt_mit').getMemberIDs())
fva_dict = dict(zip(rea_names, fva_res.tolist()))

# store results in a dataframe which makes the selection of reactions easier
fva_df = pd.DataFrame.from_dict(fva_dict, orient='index')
fva_df = fva_df.rename({0: "flux_value", 1: "reduced_cost_unscaled", 2: "variability_min", 3: "variability_max",
                       4: "abs_diff_var", 5: "min_status", 6: "max_status"}, axis='columns')

现在,您可以轻松地查询dataframe,并在您的组中找到灵活和不灵活的反应:

代码语言:javascript
运行
复制
# filter the reactions with flexibility
fva_flex = fva_df.query("abs_diff_var > 10 ** (-4)")

# filter the reactions that are not flexible
fva_not_flex = fva_df.query("abs_diff_var <= 10 ** (-4)")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50737364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档