Skip to content

Keep measured-zero enzyme concentrations distinct from missing data #6

Open

Description

@edkerk

Copied from SysBioChalmers/GECKO#479, opened by edkerk on 2026-09-10.

Why
A protein measured at zero abundance and a protein that was never measured carry different meaning downstream: one should force its usage reaction to zero, the other should leave it pool-limited. Erasing that distinction before the data reaches model.ec.concs lets a measured zero get converted to NaN.

Current situation
constrainEnzConcs.m treats model.ec.concs correctly: a NaN entry leaves a usage reaction drawing from prot_pool unconstrained; a non-NaN entry, including 0, caps usage at that value. loadProtData.m's default missing-replicate filter counts only values greater than 0 as present (sum(condAbund>0,2) < maxMisRepl*size(condAbund,2)), so a genuine zero-abundance measurement is counted as missing alongside true missing data.

What should change
Change loadProtData.m so a measured zero survives filtering as 0, separate from an unmeasured NaN. Document the convention, NaN means no information and draw from the pool, 0 means measured absent and force usage to zero, in fillEnzConcs.m and constrainEnzConcs.m.

Activity

  1. edkerk commented on Oct 16, 2026

    @edkerk
    ContributorAuthor

    edkerk commented on 2026-09-10 in SysBioChalmers/GECKO#479:

    @fma91 Does this address what we discussed this morning? This way you can "disable" reactions by not allowing any protein usage.

    By default, ec.concs values should still be NaN. This needs to be documented well, what it means if loadProtData is loading proteomics data with zeros => should it be interpreted as NaN (default setting) or 0 (optional)?

  2. edkerk commented on Nov 3, 2026

    @edkerk
    ContributorAuthor

    Implemented in CompMetEng/GECKO#30 (geckopy: CompMetEng/geckopy#86). loadProtData reads a 0 as not measured (NaN) by default, as asked in the comment above, and the option zerosAsMeasured keeps a 0 as a measured replicate, which constrainEnzConcs turns into a usage bound of 0. The convention (NaN means no information and draws from the protein pool, 0 means measured absent) is documented in loadProtData, fillEnzConcs and constrainEnzConcs. flexibilizeEnzConcs cannot raise a bound of 0, because it multiplies the concentration; it warns about enzymes at 0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    fixed in developHas already been addressed in develop branch

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions