Workflow overview#
The diagram orders the functions that build, parameterise, tune and analyse an ecModel, with the parts that run in parallel and the alternatives. Each stage is a guide page. A solid arrow connects functions that run one after another, a dashed arrow an optional preview or an alternative way to reach the next step, a diamond a choice between paths, and a dashed outline an optional step. The button in the corner of a diagram opens it in full screen, where the mouse wheel zooms and a drag pans. In the page, the wheel zooms with Ctrl (Cmd on macOS) held. The download icon at the top of each tab saves its diagram as a PDF.
---
config:
flowchart:
useMaxWidth: false
---
flowchart TB
classDef opt stroke-dasharray: 5 4
A["<b>Getting started</b><br/>createGECKOproject<br/>Fill model_adapter.toml"]
B["<b>Building an empty ecModel</b><br/>ModelAdapterManager.setDefault<br/>loadConventionalGEM<br/>makeEcModel (full or light)<br/>getComplexData, applyComplexData (optional)<br/>saveEcModel"]
A --> B
EC["EC numbers<br/>getECfromGEM or getECfromDatabase"]
SM["Metabolite SMILES<br/>findMetSmiles"]
HO["kcatsFromHomologs"]
BR["kcatsFromBrenda"]
TR["kcatsFromECTree"]
DL["kcatsFromDLKcat"]
OK["kcatsFromOKP"]
CU["data/kcats/custom.tsv"]:::opt
GA["<b>Gathering kcats</b><br/>any subset of the sources"]
B --> GA
GA --> EC
GA --> SM
GA --> HO
EC --> BR
EC --> TR
SM --> DL
SM --> OK
AS["<b>Applying kcats</b><br/>assignKcats (preview: collectKcats)<br/>getKcatAcrossIsozymes, getStandardKcat (optional)<br/>applyKcatConstraints<br/>setProtPoolSize"]
BR --> AS
TR --> AS
HO --> AS
DL --> AS
OK --> AS
CU --> AS
TU{"solveLP: growth reaches the target?"}
AS --> TU
SE["<b>Growth-rate tuning</b><br/>sensitivityTuning<br/>sigmaFitter"]
CM["<b>Tuning against experimental data</b><br/>screenKcatLeverage<br/>reviewKcatAssignment<br/>cmaesKcatTuning"]
TU -->|no| SE
TU -->|no, several conditions measured| CM
FM["Functional ecModel<br/>saveEcModel"]
TU -->|yes| FM
SE --> FM
CM --> FM
PR["<b>Proteomics integration</b><br/>loadProtData, fillEnzConcs<br/>levelComplexConcs, constrainEnzConcs<br/>calculateFfactor, setProtPoolSize<br/>loadFluxData, constrainFluxData"]:::opt
FM --> PR
RL{"Growth reaches the target?"}
PR --> RL
FX["<b>Relaxing</b>, gradual<br/>flexibilizeEnzConcs"]
GR["<b>Relaxing</b>, fast<br/>relaxProteomicsGreedy"]
RL -->|no, gradual| FX
RL -->|no, fast| GR
RD["ecModel for simulation and analysis"]
RL -->|yes| RD
FX --> RD
GR --> RD
FM -.->|without proteomics| RD
I1["<b>Simulation</b><br/>ecFVA, randomSampling<br/>ecFSEOF<br/>getSubsetEcModel"]
I2["<b>Enzyme usage</b><br/>getEnzymeUsage<br/>getEnzymeBottlenecks"]
RD --> I1
RD --> I2
---
config:
flowchart:
useMaxWidth: false
---
flowchart TB
classDef opt stroke-dasharray: 5 4
A["<b>Getting started</b><br/>geckopy init<br/>Fill model_adapter.toml"]
B["<b>Building an empty ecModel</b><br/>ModelAdapter.from_folder<br/>load_conventional_gem<br/>make_ec_model (full or light)<br/>get_complex_data, apply_complex_data (optional)<br/>save_ec_model"]
A --> B
EC["EC numbers<br/>fill_eccodes_from_gem or fill_eccodes_from_database"]
SM["Metabolite SMILES<br/>find_met_smiles"]
HO["kcats_from_homologs"]
BR["kcats_from_brenda"]
TR["kcats_from_ec_tree"]
DL["kcats_from_dlkcat"]
OK["kcats_from_okp"]
CU["data/kcats/custom.tsv"]:::opt
GA["<b>Gathering kcats</b><br/>any subset of the sources"]
B --> GA
GA --> EC
GA --> SM
GA --> HO
EC --> BR
EC --> TR
SM --> DL
SM --> OK
AS["<b>Applying kcats</b><br/>assign_kcats (preview: collect_kcats)<br/>fill_kcats_from_isozymes, assign_standard_kcat (optional)<br/>apply_kcat_constraints<br/>set_prot_pool_size"]
BR --> AS
TR --> AS
HO --> AS
DL --> AS
OK --> AS
CU --> AS
TU{"model.optimize: growth reaches the target?"}
AS --> TU
SE["<b>Growth-rate tuning</b><br/>sensitivity_tuning<br/>fit_sigma"]
CM["<b>Tuning against experimental data</b><br/>screen_kcat_leverage<br/>review_assignment<br/>cmaes_kcat_tuning"]
TU -->|no| SE
TU -->|no, several conditions measured| CM
FM["Functional ecModel<br/>save_ec_model"]
TU -->|yes| FM
SE --> FM
CM --> FM
PR["<b>Proteomics integration</b><br/>load_prot_data, fill_enz_concs<br/>level_complex_concs, constrain_enz_concs<br/>calculate_f_factor, set_prot_pool_size<br/>load_flux_data, apply_flux_data_constraints"]:::opt
FM --> PR
RL{"Growth reaches the target?"}
PR --> RL
FX["<b>Relaxing</b>, gradual<br/>flexibilize_enz_concs"]
GR["<b>Relaxing</b>, fast<br/>relax_proteomics_greedy"]
RL -->|no, gradual| FX
RL -->|no, fast| GR
SA["<b>Relaxing</b>, smallest total amount<br/>relax_enz_concs"]
RL -->|no, smallest total amount| SA
RD["ecModel for simulation and analysis"]
RL -->|yes| RD
FX --> RD
GR --> RD
SA --> RD
FM -.->|without proteomics| RD
I1["<b>Simulation</b><br/>ec_fva, random_sampling<br/>ec_fseof<br/>get_subset_ec_model"]
I2["<b>Enzyme usage</b><br/>enzyme_usage<br/>get_enzyme_bottlenecks"]
RD --> I1
RD --> I2
Stages, order and alternatives#
Each row is a stage with the stage it runs after, its functions and what it leaves behind. "Any subset" marks functions that run independently of each other, "alternative" a path that replaces another, and "one of" a choice of algorithm.
Stage |
Run after |
Functions |
Output |
|---|---|---|---|
none |
|
project folder |
|
project and model adapter |
|
ecModel file |
|
built ecModel |
any subset of |
|
|
at least one source file or |
|
|
|
applied kcats, growth rate below the target |
|
tuned |
|
applied kcats, growth rates and fluxes of several conditions |
alternative to sensitivity tuning: |
tuned |
|
functional ecModel |
|
proteomics-constrained ecModel |
|
proteomics-constrained ecModel below the target growth rate |
relaxed ecModel |
||
any ecModel |
independent of each other: |
results |
Stage |
Run after |
Functions |
Output |
|---|---|---|---|
none |
|
project folder |
|
project and model adapter |
|
ecModel file |
|
built ecModel |
any subset of |
|
|
at least one source file or |
|
|
|
applied kcats, growth rate below the target |
|
tuned |
|
applied kcats, growth rates and fluxes of several conditions |
alternative to sensitivity tuning: |
tuned |
|
functional ecModel |
|
proteomics-constrained ecModel |
|
proteomics-constrained ecModel below the target growth rate |
one of |
relaxed ecModel |
|
any ecModel |
independent of each other: |
results |
Reading the paths#
Kcat sources: each
kcatsFrom*function (Pythonkcats_from_*) writes its own file indata/kcats.assignKcatsreads the files that[kcat_assignment]ofmodel_adapter.tomllists, so any combination of sources works. The EC numbers feed the BRENDA, EC tree and homolog sources, and the metabolite SMILES feed DLKcat and OpenKineticsPredictor (see Gathering kcats).updateKcatSources(Pythonupdate_kcat_sources) gathers the sources thatmodel_adapter.tomlneeds in one call.Tuning: sensitivity tuning raises kcats one at a time until one target growth rate is reached. Tuning against experimental data fits many kcats to the measured growth rates and fluxes of several conditions.
Relaxation:
flexibilizeEnzConcsandrelaxProteomicsGreedyare alternatives with different stringency (see Relaxing overconstrained proteomics).Analysis: the analysis functions work on the finished ecModel and do not depend on each other.
See also#
Guide, the list of pages.
Basic model operations, bounds, objectives and FBA.