Predict expression modulation targets

Cameo provides algorithms to search for genes or reactions that can be over- or down-regulated in order to achieve a given biological objective.

from cameo import models
from cameo.visualization.plotting.with_plotly import PlotlyPlotter

Load the E. coli core model.

model = models.bigg.e_coli_core
plotter = PlotlyPlotter()

Flux Scanning based on Enforced Objective Flux

from cameo.strain_design.deterministic.flux_variability_based import FSEOF
fseof = FSEOF(model)
fseof.run(target=model.reactions.EX_succ_e)
Model: e_coli_core
Enforced objective: EX_succ_e
Primary objective: Maximize 1.0*BIOMASS_Ecoli_core_w_GAM - 1.0*BIOMASS_Ecoli_core_w_GAM_reverse_712e5

Reaction fluxes

1 2 3 4 5 6 7 8 9 10
PFK 7.756941 8.036499 8.242515 8.361048 8.479582 8.598115 8.747793 9.393102 9.830787 9.910940
PGI 5.485630 6.110399 6.513173 6.651876 6.790579 6.929282 7.161108 8.874882 9.965126 9.981645
PGK -16.431132 -16.838737 -17.173618 -17.421989 -17.670359 -17.918730 -18.198431 -18.976723 -19.547784 -19.761991
PGM -15.238892 -15.761645 -16.212407 -16.577535 -16.942662 -17.307790 -17.704415 -18.602292 -19.293292 -19.628048
PPC 3.758320 5.012330 5.878875 6.284516 6.690157 7.095799 7.532996 8.472367 9.615323 11.108854
PPS 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.410338 1.527283
ADK1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.410338 1.527283
ENO 15.238892 15.761645 16.212407 16.577535 16.942662 17.307790 17.704415 18.602292 19.293292 19.628048
SUCCt3 1.474575 2.949150 4.423725 5.898300 7.372875 8.847450 10.322025 11.796600 13.271175 14.745750
THD2 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.119674 2.143848 2.916807 1.535161
TPI 7.756941 8.036499 8.242515 8.361048 8.479582 8.598115 8.747793 9.393102 9.830787 9.910940
FBA 7.756941 8.036499 8.242515 8.361048 8.479582 8.598115 8.747793 9.393102 9.830787 9.910940
FRD7 0.000000 0.000000 0.000000 1.453235 3.175302 4.897369 6.586703 7.755141 9.127842 10.852285
GAPD 16.431132 16.838737 17.173618 17.421989 17.670359 17.918730 18.198431 18.976723 19.547784 19.761991
ICL 0.000000 0.000000 0.386057 1.231342 2.076627 2.921912 3.735322 4.041459 4.143333 3.893465
MALS 0.000000 0.000000 0.386057 1.231342 2.076627 2.921912 3.735322 4.041459 4.143333 3.893465
PDH 8.809270 8.336008 8.179868 8.400957 8.622045 8.843134 9.064539 9.290984 9.107760 8.219084
EX_succ_e 1.474575 2.949150 4.423725 5.898300 7.372875 8.847450 10.322025 11.796600 13.271175 14.745750

Differential flux variability analysis

Compares flux ranges of a reference model to a set of models that have been parametrized to lie on a grid of evenly spaced points in the n-dimensional production envelope (n being the number of reaction bounds to be varied).

from cameo.flux_analysis.analysis import phenotypic_phase_plane
from cameo.strain_design.deterministic import DifferentialFVA

Succinate production

The production envelope looks like this.

production_envelope = phenotypic_phase_plane(model,
                                             variables=[model.reactions.BIOMASS_Ecoli_core_w_GAM],
                                             objective=model.metabolites.succ_e)
production_envelope.plot(plotter, height=400)

Set up a model that represents a reference state (in this case a model with a constrained growth rate).

model.reactions.EX_o2_e.lower_bound = 0
reference_model = model.copy()
biomass_rxn = reference_model.reactions.BIOMASS_Ecoli_core_w_GAM
biomass_rxn.lower_bound = 0.
target = reference_model.metabolites.succ_e

Set up the differential flux variability analysis strain design method.

diffFVA = DifferentialFVA(design_space_model=model,
                          reference_model=reference_model,
                          objective=target,
                          variables=[biomass_rxn],
                          normalize_ranges_by=biomass_rxn,
                          points=10)

Run differential flux variability analysis (only on the surface of the production envelope)

result = diffFVA.run(surface_only=True)
HBox()
result.solutions
lower_bound upper_bound gaps normalized_gaps biomass production KO flux_reversal suddenly_essential free_flux reaction excluded
reaction
ACALD 0.000000 0.000000 -8.279455 NaN 0.000000 13.905778 True False False False ACALD False
ACALDt 0.000000 0.000000 0.000000 NaN 0.000000 13.905778 True False False False ACALDt False
ACKr -5.664889 -5.664889 -2.838696 NaN 0.000000 13.905778 False False False False ACKr False
ACONTa 0.429333 0.429333 0.200970 NaN 0.000000 13.905778 False False False False ACONTa False
ACONTb 0.429333 0.429333 0.200970 NaN 0.000000 13.905778 False False False False ACONTb False
... ... ... ... ... ... ... ... ... ... ... ... ...
TALA -0.033659 -0.033659 -0.004207 0.000000 0.188145 2.123333 False False False False TALA False
THD2 3.225950 3.225950 -0.403244 0.000000 0.188145 2.123333 False False False False THD2 False
TKT1 -0.033659 -0.033659 -0.004207 0.000000 0.188145 2.123333 False False False False TKT1 False
TKT2 -0.101579 -0.101579 -0.012697 0.000000 0.188145 2.123333 False False False False TKT2 False
TPI 9.812852 9.812852 0.023393 5.905616 0.188145 2.123333 False False False False TPI False

684 rows × 12 columns

result.plot(plotter, 5, variables=['FBP', 'G6PDH2r', 'PGL', 'PGK'])
result.display_on_map(2, map_name="iJO1366.Central metabolism")
Downloading Map from https://escher.github.io/1-0-0/6/maps/Escherichia%20coli/iJO1366.Central%20metabolism.json
Builder(reaction_data={'ACALD': -39.11622412349536, 'ACKr': 115.52882712367142, 'ACt2r': 115.52882712367142, '…