You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Keep measured-zero enzyme concentrations distinct from missing data #6
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.
@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)?
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.
Activity
edkerk commentedon Oct 16, 2026
edkerk commented on 2026-09-10 in SysBioChalmers/GECKO#479:
@fma91Does 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)?
edkerk commentedon Nov 3, 2026
Implemented in CompMetEng/GECKO#30 (geckopy: CompMetEng/geckopy#86).
loadProtDatareads a 0 as not measured (NaN) by default, as asked in the comment above, and the optionzerosAsMeasuredkeeps a 0 as a measured replicate, whichconstrainEnzConcsturns into a usage bound of 0. The convention (NaN means no information and draws from the protein pool, 0 means measured absent) is documented inloadProtData,fillEnzConcsandconstrainEnzConcs.flexibilizeEnzConcscannot raise a bound of 0, because it multiplies the concentration; it warns about enzymes at 0.