Skip to content

Divide a BRENDA kcat by the substrate it was measured on - #57

Merged
edkerk merged 1 commit into
developfrom
fix/kcat-matched-substrate-coefficient
Sep 20, 2026
Merged

edkerk merged 1 commit into
developfrom
fix/kcat-matched-substrate-coefficient

Conversation

@edkerk

@edkerk edkerk commented Sep 20, 2026

Copy link
Copy Markdown
Collaborator

Problem

A BRENDA kcat is a turnover per molecule of one named substrate. To use it as a
reaction turnover it has to be divided by that substrate's stoichiometric
coefficient. match_kcat divided by the smallest coefficient in the reaction
instead.

Those are the same number only when the reaction happens to be written per the
measured substrate. When another substrate has a coefficient below 1, the
division inflates the kcat rather than reducing it.

Effect

yeast-GEM writes cytochrome c oxidase (r_0438) per one cytochrome c, so its
substrates are ferrocytochrome c at 1.0, H+ at 1.266 and oxygen at 0.25.
BRENDA's S. cerevisiae value under EC 7.1.1.9 is 1500/s, and 1500 / 0.25 gives
the 6000/s carried by the full_ecModel tutorial model, at wildcard level 0 and
origin 1.

Measured turnover for cytochrome c oxidase is in the low hundreds per second.
The inflated value makes respiration look cheap enough that the electron
transport chain no longer saturates in proteomics-constrained models built on
this ecModel.

Fix

Divide by the coefficient of the substrate the BRENDA row matched on. The
matching loop already knows which substrate that is.

In the full_ecModel tutorial this changes 26 of 4671 matched reactions, all of
them previously inflated, by factors of 2, 3 and 4. No reaction changes which
BRENDA row or match level it draws from.

Two regression tests are included: one for the cytochrome c oxidase case, one
for the case the division is meant to handle (two molecules of the measured
substrate per turnover).

The same line is in GECKO MATLAB, src/gather_kcats/fuzzyKcatMatching.m line
401; a matching PR is open there.

A BRENDA kcat is a turnover per molecule of one named substrate, so it
becomes a reaction turnover by dividing by that substrate's coefficient.
The division used the smallest coefficient in the reaction instead.

Where a reaction is not written per the measured substrate, that inflates
the kcat. yeast-GEM writes cytochrome c oxidase per one cytochrome c, so
oxygen carries 0.25, and BRENDA's S. cerevisiae value of 1500/s became
6000/s in the full_ecModel tutorial.

26 of 4671 matched reactions change there, all previously inflated, by
factors of 2, 3 and 4. None changes which BRENDA row or match level it
draws from.
@edkerk
edkerk merged commit 2ce94b2 into develop Sep 20, 2026
5 checks passed
@edkerk
edkerk deleted the fix/kcat-matched-substrate-coefficient branch September 20, 2026 13:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant