一部のデータセットでは、シミュレーションに組み込みたい固定フラックス比を観察することがあります。CBMPyでこれを行うにはどうすればよいですか?
たとえば、ここからモデルがあり、コハク酸の流出とピルビン酸の流出の比率を2.0に制限したいと思います。私は個々の反応に制約を設定する方法を知っています:
import cbmpy
# downloaded from http://bigg.ucsd.edu/models/e_coli_core
ecoli = cbmpy.CBRead.readSBML3FBC('e_coli_core.xml')
ecoli.setReactionBounds('R_EX_pyr_e', 1.0, 1000.0)
ecoli.setReactionBounds('R_EX_succ_e', 2.0, 1000.0)
# solve the model
cbmpy.doFBA(ecoli)
# get all reaction values
solution = ecoli.getReactionValues()
print(solution['R_EX_pyr_e'])
print(solution['R_EX_succ_e'])
この場合、比率は正しいですが、すべての条件で満たされるという制約としてどのように追加できますか?
これは確かに流束均衡分析(FBA)の一般的なアプローチであり、addUserConstraint
この関数を使用してこれを実現できます。
コードサンプル全体は次のようになります(以下の説明)。
import cbmpy as cbm
# downloaded from http://bigg.ucsd.edu/models/e_coli_core
ecoli = cbm.CBRead.readSBML3FBC('e_coli_core.xml')
# make a clone of the original model
ecoli_ratio = ecoli.clone()
# add the desired user constraint; explanation follows below
ecoli_ratio.addUserConstraint("pyr_succ_ratio", fluxes=[(1.0, 'R_EX_pyr_e' ),(-0.5, 'R_EX_succ_e')], operator='=', rhs=0.0)
# now we have to set only one flux bound; if you think it is naturally excreted, this step is not needed
ecoli_ratio.setReactionBounds('R_EX_succ_e', 4.0, cbm.INF)
cbm.doFBA(ecoli_ratio)
solution = ecoli_ratio.getReactionValues()
print("{}: {}".format("succinate excretion rate", solution['R_EX_succ_e']))
print("{}: {}".format("pyruvate excretion rate", solution['R_EX_pyr_e']))
これは印刷されます
succinate excretion rate: 4.0
pyruvate excretion rate: 2.0
ご覧のとおり、比率は2.0
希望どおりです。
もう少し説明:
制約は
J_succ / J_pyr = 2.0
に書き換えることができます
J_succ = 2.0 J_pyr
そして最後に
J_pyr - 0.5 J_succ = 0
それはまさに私たちが渡すものfluxes
ですaddUserConstraint
:
fluxes=[(1.0, 'R_EX_pyr_e' ),(-0.5, 'R_EX_succ_e')], operator='=', rhs=0.0)
以下を印刷することにより、ユーザー定義の制約を確認できます。
print(ecoli_ratio.user_constraints)
{'pyr_succ_ratio': {'operator': 'E', 'rhs': 0.0, 'fluxes': [(1.0, 'R_EX_pyr_e'), (-0.5, 'R_EX_succ_e')]}}
これは辞書であるため、次の操作を行うだけで制約を削除できます。
del ecoli_ratio.user_constraints['pyr_succ_ratio']
print(ecoli_ratio.user_constraints)
{}
ただし、モデルに大きな変更を加えるたびにクローンを作成することを強くお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加