from cobra.io import load_model
model = load_model("textbook")
model.medium{'EX_co2_e': 1000.0,
'EX_glc__D_e': 10.0,
'EX_h_e': 1000.0,
'EX_h2o_e': 1000.0,
'EX_nh4_e': 1000.0,
'EX_o2_e': 1000.0,
'EX_pi_e': 1000.0}
营养物质的可用性对代谢通量有重大影响,cobrapy为管理外部环境与代谢模型之间的交换提供了一些帮助。在实验环境中,“环境”通常是由生长介质构成的,因此,所有代谢物和辅助因子的浓度都是模型生物可用的。然而,基于约束的代谢模型只考虑通量。因此,不能简单地使用浓度,因为通量的单位是mmol / [gDW h] 每克细胞干重和每小时的浓度)。 此外,您正在为特定导入通量设置上限,而不是为通量本身设置上限。这里有一些粗略的近似。例如,如果你每24小时向1克细菌提供1摩尔葡萄糖,你可以将葡萄糖的最高交换通量设置为1摩尔/1 mol / [1 gDW * 24 h] ,因为这是可以进口的名义最大值。但不能保证葡萄糖会随流量被消耗。因此,交换通量的优选数据是直接通量测量,例如从时间过程外代谢组测量中获得的数据。 那么在 COBRApy 中是什么样子的呢?模型的当前增长介质由“medium”属性管理。
from cobra.io import load_model
model = load_model("textbook")
model.medium{'EX_co2_e': 1000.0,
'EX_glc__D_e': 10.0,
'EX_h_e': 1000.0,
'EX_h2o_e': 1000.0,
'EX_nh4_e': 1000.0,
'EX_o2_e': 1000.0,
'EX_pi_e': 1000.0}
这将返回一个包含所有活动交换通量(具有非零通量边界的交换通量)的通量上限字典。现在我们看到我们已经实现了有氧生长。您可以通过将字典分配给模型来修改模型的生长介质。model.medium ,将交换反应映射到各自的进口上限。现在让我们通过关闭氧气输入来强制厌氧生长。
medium = model.medium
medium["EX_o2_e"] = 0.0
model.medium = medium
model.medium{'EX_co2_e': 1000.0,
'EX_glc__D_e': 10.0,
'EX_h_e': 1000.0,
'EX_h2o_e': 1000.0,
'EX_nh4_e': 1000.0,
'EX_pi_e': 1000.0}
正如我们所看到的,氧气进口现在从活跃的交换列表中删除,我们可以验证这也导致了较低的增长率。
model.slim_optimize()0.21166294973531258
这里有个小陷阱。 因为model.medium不能直接分配,所以以下操作将不起作用:
model.medium["EX_co2_e"] = 0.0
model.medium{'EX_co2_e': 1000.0,
'EX_glc__D_e': 10.0,
'EX_h_e': 1000.0,
'EX_h2o_e': 1000.0,
'EX_nh4_e': 1000.0,
'EX_pi_e': 1000.0}
正如你所看到的,EX_co2_e没有设置为零。这是因为model.medium只是当前交换通量的副本。直接用model.medium[...] = ... 不会改变模式。你必须用改变后的导入通量上界来分配整个字典:
medium = model.medium
medium["EX_co2_e"] = 0.0
model.medium = medium
model.medium # now it worked{'EX_glc__D_e': 10.0,
'EX_h_e': 1000.0,
'EX_h2o_e': 1000.0,
'EX_nh4_e': 1000.0,
'EX_pi_e': 1000.0}
设置生长介质还连接到上下文管理器,因此您可以以可逆的方式设置特定的生长介质。
model = load_model("textbook")
with model:
medium = model.medium
medium["EX_o2_e"] = 0.0
model.medium = medium
print(model.slim_optimize())
print(model.slim_optimize())
model.medium0.21166294973531258
0.8739215069684315
{'EX_co2_e': 1000.0,
'EX_glc__D_e': 10.0,
'EX_h_e': 1000.0,
'EX_h2o_e': 1000.0,
'EX_nh4_e': 1000.0,
'EX_o2_e': 1000.0,
'EX_pi_e': 1000.0}
因此,介质变化仅在with块内应用并自动恢复。
在某些情况下,您可能对能够保持特定生长速率的最小生长介质感兴趣,即所谓的最小介质。为此,我们提供了minimal_medium`函数,默认情况下获得具有最低总进口通量的介质。这个函数需要两个参数:模型和其必须达到的最小增长率(或其他目标)。
from cobra.medium import minimal_medium
max_growth = model.slim_optimize()
minimal_medium(model, max_growth)d:\ProgramData\anaconda3\Lib\site-packages\cobra\medium\minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
medium = pd.Series()
EX_glc__D_e 10.000000
EX_nh4_e 4.765319
EX_o2_e 21.799493
EX_pi_e 3.214895
dtype: float64
所以我们看到生长实际上受到葡萄糖输入的限制。 或者,您可能对具有最少数量的活动导入的最小介质感兴趣。这可以通过使用minimize_components参数来实现(注意,这使用了MIP公式,因此会慢得多)。
minimal_medium(model, 0.1, minimize_components=True)d:\ProgramData\anaconda3\Lib\site-packages\cobra\medium\minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
medium = pd.Series()
EX_glc__D_e 10.00000
EX_nh4_e 0.54528
EX_pi_e 0.36787
dtype: float64
在尽量减少进口通量的数量时,可能有许多替代解决方案。为了得到其中的几个,你也可以传递一个正整数来minimize_components,这将给你最多50个备选解。让我们在我们的模型中尝试一下,并使用 open_exchanges 参数,该参数将为模型中的所有进口反应分配一个大的上界。返回类型将是pandas.DataFrame。
minimal_medium(model, 0.8, minimize_components=8, open_exchanges=True)d:\ProgramData\anaconda3\Lib\site-packages\cobra\medium\minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
medium = pd.Series()
d:\ProgramData\anaconda3\Lib\site-packages\cobra\medium\minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
medium = pd.Series()
d:\ProgramData\anaconda3\Lib\site-packages\cobra\medium\minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
medium = pd.Series()
d:\ProgramData\anaconda3\Lib\site-packages\cobra\medium\minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
medium = pd.Series()
d:\ProgramData\anaconda3\Lib\site-packages\cobra\medium\minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
medium = pd.Series()
d:\ProgramData\anaconda3\Lib\site-packages\cobra\medium\minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
medium = pd.Series()
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| EX_fru_e | 0.000000 | 308.82944 | 0.00000 | 0.000000 | 0.000000 | 0.000000 |
| EX_glc__D_e | 0.000000 | 0.00000 | 308.82944 | 31.084608 | 502.051914 | 0.000000 |
| EX_gln__L_e | 0.000000 | 0.00000 | 0.00000 | 2.181120 | 0.000000 | 0.000000 |
| EX_glu__L_e | 346.141716 | 4.36224 | 4.36224 | 0.000000 | 0.000000 | 24.798770 |
| EX_mal__L_e | 0.000000 | 0.00000 | 0.00000 | 0.000000 | 0.000000 | 1000.000000 |
| EX_nh4_e | 0.000000 | 0.00000 | 0.00000 | 0.000000 | 8.417918 | 0.000000 |
| EX_o2_e | 500.000000 | 0.00000 | 0.00000 | 0.000000 | 0.000000 | 0.000000 |
| EX_pi_e | 65.104125 | 2.94296 | 2.94296 | 2.942960 | 5.679100 | 15.546299 |
所以总共有4个解。一个好氧和三个厌氧使用不同的碳源。
除交换反应外,还有其他类型的边界反应,如需求反应或吸收反应。cobrapy 使用各种启发式方法来识别它们,并且可以通过使用适当的属性来访问它们。对于交换反应:
ecoli = load_model("iJO1366")
ecoli.exchanges[0:5][<Reaction EX_12ppd__R_e at 0x21342599f10>,
<Reaction EX_12ppd__S_e at 0x21342576390>,
<Reaction EX_14glucan_e at 0x21342576350>,
<Reaction EX_15dap_e at 0x21342576750>,
<Reaction EX_23camp_e at 0x21342576b10>]
对于需求反应:
ecoli.demands[<Reaction DM_4crsol_c at 0x21342573a50>,
<Reaction DM_5drib_c at 0x21342573bd0>,
<Reaction DM_aacald_c at 0x21342574450>,
<Reaction DM_amob_c at 0x21342574810>,
<Reaction DM_mththf_c at 0x21342574c10>,
<Reaction DM_oxam_c at 0x21342574fd0>]
对于汇反应:
ecoli.sinks[]
所有边界反应(任何消耗或引入质量到系统中的反应)都可以用boundary属性获得:
ecoli.boundary[0:10][<Reaction DM_4crsol_c at 0x21342573a50>,
<Reaction DM_5drib_c at 0x21342573bd0>,
<Reaction DM_aacald_c at 0x21342574450>,
<Reaction DM_amob_c at 0x21342574810>,
<Reaction DM_mththf_c at 0x21342574c10>,
<Reaction DM_oxam_c at 0x21342574fd0>,
<Reaction EX_12ppd__R_e at 0x21342599f10>,
<Reaction EX_12ppd__S_e at 0x21342576390>,
<Reaction EX_14glucan_e at 0x21342576350>,
<Reaction EX_15dap_e at 0x21342576750>]