Enzyme usage#

MATLAB functions in GECKO/src/enzyme_usage of the GECKO toolbox.

Functions#

Function

Summary

getEnzymeBottlenecks

Top-N enzymes limiting the current objective.

getEnzymeUsage

Compute enzyme usages from a provided flux distribution.

reportEnzymeUsage

Summarize the results from getEnzymeUsage.

Reference#

getEnzymeBottlenecks#

function bottlenecks = getEnzymeBottlenecks(model, varargin)

Top-N enzymes limiting the current objective.

Solves the model and ranks every enzyme by the change of the objective after the upper bound of its usage_prot_ reaction is raised by foldChange and the model is solved again. The objective is maximised, so the gain is the rise of the maximised objective. Only enzymes whose usage runs at its upper bound are solved again; raising a bound that does not bind cannot change the optimum, so every other enzyme has an objectiveGain of 0 without a solve.

The shadow price of the prot_ mass-balance constraint is reported for reference and does not enter the order: at a degenerate optimum, which is common in enzyme-constrained models, several constraints are active and the solver assigns the dual to one of them depending on the basis. Enzymes with equal objectiveGain (rounded to 9 decimals) keep their order in model.ec.enzymes.

Parameters

model : struct

a full ecModel in GECKO 3 format (with ecModel.ec structure). Not supported for gecko-light models, which have no per-enzyme prot_ / usage_prot_ machinery.

Name-Value Arguments

top : double

number of enzymes to return (default 10).

foldChange : double

a value how much to increase the usage upper bound of an enzyme that runs at its upper bound; must be greater than 1 (default 2).

Returns

bottlenecks : table

one row per returned enzyme, sorted by descending objectiveGain, with columns uniprot, gene, objectiveGain (objective after raising the bound minus the objective of the unchanged model; 0 for enzymes not at their upper bound, for gains below 1e-10 and for solves that are not optimal), shadowPrice, flux, capUsage (abs(flux)/upperBound, NaN if upperBound is 0), upperBound and multipleActive. An enzyme is at its upper bound when upperBound is above 0 and capUsage is at least 1 - 1e-6. multipleActive is true when at least one other constraint is active: another enzyme at its upper bound, or prot_pool_exchange at its upper bound (within 1e-6 relative). Where it is true, the dual is not informative about a single enzyme. The table property UserData.nResolved holds the number of enzymes that were solved again and UserData.activeConstraints the number of active constraints. When no enzyme is at its usage bound a warning (getEnzymeBottlenecks:noEnzymeAtBound) says that no single enzyme limits the objective; every objectiveGain is then 0 and the rows are in model order.

Examples

bottlenecks = getEnzymeBottlenecks(ecModel);
bottlenecks = getEnzymeBottlenecks(ecModel, 'top', 5, 'foldChange', 3);

getEnzymeUsage#

function usageData = getEnzymeUsage(ecModel,fluxes,varargin)

Compute enzyme usages from a provided flux distribution.

Gives enzyme usages based on a provided flux distribution, as obtained from a full GECKO model. It can give:

  1. absolute usage: the specific enzyme usage in mg/gDCW, which can be given for enzymes with- and without concentration information;

  2. capacity usage: the ratio of available enzyme that is used, calculated by (absUsage/UB) (note that capacity usage is 0 if an enzyme concentration was not constrained in the model);

  3. UB: the upper bound of each enzyme exchange reaction, which may not be the same as the enzyme concentration, if it has been flexibilized;

  4. protID: the protein identifiers for each enzyme, in the same order as ecModel.ec.enzymes.

Parameters

ecModel : struct

an ecModel in GECKO 3 format (with ecModel.ec structure).

fluxes : double

vector of fluxes, for instance sol.x.

Name-Value Arguments

zero : logical

whether also enzymes with zero absolute usage should be included (default true).

Returns

usageData : struct

structure with enzyme usage data.

Notes

The usageData structure has the following fields:

  • capUsage : vector of enzyme capacity usages.

  • absUsage : vector of absolute enzyme usages.

  • UB : vector of enzyme exchange reaction upper bounds.

  • protID : string array of matching protein IDs. An enzyme without a usage_prot_ reaction in the model is left out, with the warning getEnzymeUsage:missingUsageReaction.

  • fluxes : vector of fluxes, copy of input fluxes.

Examples

% optional arguments may be given positionally or as name-value pairs:
usageData = getEnzymeUsage(ecModel,fluxes,zero);
usageData = getEnzymeUsage(ecModel,fluxes,'zero',false);

See also

reportEnzymeUsage

reportEnzymeUsage#

function usageReport = reportEnzymeUsage(ecModel, usageData, varargin)

Summarize the results from getEnzymeUsage.

Ranks the enzymes from getEnzymeUsage into two tables: those with the highest capacity usage, and those with the highest absolute usage.

Parameters

ecModel : struct

a GECKO3 ecModel.

usageData : struct

output from getEnzymeUsage.

Name-Value Arguments

highCapUsage : double

minimum fraction of enzyme capacity usage to be listed as high usage (default 0.9, i.e. at least 90% capacity usage).

topAbsUsage : double

how many top enzymes by absolute usage to list (default 10). Use 0 or Inf to list all enzymes instead. Enzymes whose reactions carry no flux are never listed here, as they do not contribute to the solution. A negative value raises reportEnzymeUsage:invalidTopAbsUsage.

Returns

usageReport : struct

highCapUsage : table enzymes at or above the highCapUsage threshold. topAbsUsage : table the topAbsUsage enzymes with the highest absolute usage. totalUsageFlux : double total protein pool used, i.e. the upper bound of prot_pool_exchange.

Examples

% optional arguments may be given positionally or as name-value pairs:
usageReport = reportEnzymeUsage(ecModel, usageData, highCapUsage, topAbsUsage);
usageReport = reportEnzymeUsage(ecModel, usageData, 'topAbsUsage', 20);

See also

getEnzymeUsage