Repository navigation
Complex levelling, per-complex relaxation and relax_enz_concs - #63
Merged
Merged
Conversation
level_complex_concs (and level_complex_abundances for molar data) gives every enzyme complex one abundance, the median per copy over its measured subunits, so a single badly quantified subunit no longer sets the complex's capacity. complex_families groups isozyme variants into one complex and leaves subunits shared between complexes as measured. flexibilize_enz_concs(per_complex=True) raises all subunits of a limiting complex by the same factor. See raven-gecko-parity#131.
…ering caps Two enzyme sets merge only when they share two or more subunits and half of the larger set, so electron carriers no longer chain complexes together; a subunit in two complexes belongs to the one with more reactions. per_complex ranks complexes by summed control coefficients, counts iterations per complex and never lowers a cap.
… no dual is positive
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds three things for proteomics-constrained ecModels: one abundance per enzyme complex, relaxation of whole complexes, and relaxation of enzyme caps by the least total amount in one LP. All are opt-in; existing models and the tutorials are unchanged. Discussed in CompMetEng/raven-gecko-parity#131.
Why
Complex subunits are quantified unevenly. Absolute proteomics recovers the subunits of one complex unevenly. In the yeast chemostat data of SysBioChalmers/overflow, subunits of complex III that are present 1:1 come out up to tenfold apart, while their replicates agree within 2–9%.
constrain_enz_concscaps every subunit on its own, so a complex can carry no more flux than its least abundant measurement allows.Single-subunit relaxation scatters a complex.
flexibilize_enz_concsraises the single most limiting subunit, so a complex ends up with subunits at unrelated levels. In that analysis, pyruvate dehydrogenase was capped by LAT1 in one condition and by PDA1 in another, because a different subunit had been raised in each. Whether the model had to secrete ethanol at that growth rate followed from which subunit that was.Iterative relaxation depends on order. Which enzymes end up raised depends on the ranking signal and on the order in which enzymes become limiting. In the same analysis, changing only the ranking from gain per mg to gain per fold changed which fast-growth conditions were predicted to overflow.
What it adds
complex_families(model)Groups the enzymes of every multi-subunit reaction in
ec.rxn_enz_matinto complexes.Returns a
ComplexFamilieswithmembers(enzyme)andowned(index).level_complex_concs(model)/level_complex_abundances(model, ids, values)Gives every complex one abundance: the median, over its measured owned subunits, of molar abundance / copies, written back × copies (× MW for
ec.concs).level_complex_concsworks onec.concs(mg/gDCW) betweenfill_enz_concsandconstrain_enz_concs;level_complex_abundancesworks on molar data before it is written into the model.statistic="mean"is available.flexibilize_enz_concs(..., per_complex=True)Treats every complex as one unit:
usage_prot_i| × cap. Unlike theprot_<id>shadow price, this leaves out the protein pool's price, which would otherwise be counted once per subunit and favour large complexes. The sum is also the same for every optimal dual when a levelled complex binds on all subunits at once.relax_enz_concs(model, per_complex=False, weight="relative", pool_weight=1000.0)The order-independent counterpart of
flexibilize_enz_concs.usage <= cap * (1 + x), the protein pool may grow by a fold too, and the sum of thexis minimised subject togrowth >= exp_growth.weight="relative"minimises summed folds;"absolute"minimises the mg added.pool_weighttimes an enzyme's, so the pool grows only where raising enzymes cannot reach the target.per_complex=True, a complex's measured subunits share onex.FlexEnzResult. It raisesValueErrorwhen no relaxation reaches the target, because growth is then not limited by protein.When it helps
relax_enz_concsgives one answer; comparing it withflexibilize_enz_concsshows which conclusions depend on the relaxation heuristic.Use levelling and per-complex relaxation together. Per-complex relaxation on unlevelled subunits raises every subunit by the fold its worst-measured subunit needs, which inflates the well-measured ones.
Limitations
ec.rxn_enz_mat. Whereapply_complex_datafound no exact ComplexPortal match, every subunit counts as one copy (raven-gecko-parity#120).Usage
Tests and docs
tests/test_level_complex_concs.py: grouping, including isozyme variants, a single shared protein, a carrier, ownership by reaction count, a tie and an enzyme that also works alone; median levelling with stoichiometry, filling and mass units; per-complex flexibilization, including levelled subunits binding together, a binding pool and never lowering a cap.tests/test_relax_enz_concs.py: least summed fold, no relaxation needed, pool only when needed, earlier raises kept, an unreachable target, per complex, weighting.docs/relaxation_methods.mddescribes the new method and the complex options;CHANGELOG.mdhas the entries.cmadependency (not installed in the test environment).There is no MATLAB counterpart yet; ledger rows and parity scenarios are tracked in CompMetEng/raven-gecko-parity#133.