Method
MBES — Michaelis-Menten sensor with first-order drift
What it predicts
Limit of detection, linear range, t₉₀ response time and weekly drift for a whole-cell or enzyme sensor.
Governing relations
Each relation is transcribed from the implementation. Where the code cites no source, the source line says so.
Hill signal with competitive inhibition Source: Unsourced engineering default in mbes.ts (2026-10 citation audit).
The per-analyte constants are unsourced; the table they were attributed to does not exist.
Symbol Meaning Unit steady-state signal current density A/m² saturating signal (BOD 0.8) A/m² analyte concentration (default 50) mg/L Hill coefficient (BOD 1.2) 1 half-saturation constant (BOD 100) mg/L interferent concentration and its inhibition constant mg/L Limit of detection Source: The 3σ-of-blank detection rule, inverted through the Hill curve; constants unsourced (mbes.ts).
Symbol Meaning Unit concentration whose signal equals three blank standard deviations mg/L blank-current noise (BOD 8×10⁻⁴) A/m² Worked example
These inputs, passed to the predictor, return the output below. A test re-runs the example on every change, so this number is the one the code produces.
input value unit temperatureC 25 °C ph 7 pH electrodeSpacingCm 2 cm hrtHours 24 h codMgL 1,000 mg/L Output · mbes.limitOfDetectionMgPerL = 0.792 mg/L, within ±0.1 %
By hand · Default analyte BOD, no interferent: K_app = 100 mg/L, h = 1.2, i_max = 0.8 A/m², 3σ = 0.0024 A/m². LOD = 100 × (0.0024 / 0.7976)^(1/1.2) = 100 × 0.003 009^0.8333 = 0.7919 mg/L.
Reproduce · Pinned by libs/shared/electrochemistry/src/predictors/worked-examples.test.ts. Run it from the repository root:
pnpm exec jest -c libs/shared/electrochemistry/jest.config.js worked-examples.test.ts -t "mbes.limitOfDetectionMgPerL"
Linear range Source: Unsourced engineering default in mbes.ts (2026-10 citation audit).
A rule of thumb, not a fitted linearity criterion.
Symbol Meaning Unit upper-end multiple of K_app 1 Response time Source: Diffusion time scale; mbes.ts cites no source for it.
Symbol Meaning Unit time to 90 % of the steady-state signal s biofilm thickness (default 0.05 mm) m effective analyte diffusivity in the biofilm (BOD 5×10⁻¹⁰) m²/s −ln(0.1) = 2.302 6, truncated to four figures in the code 1 First-order drift Source: Unsourced engineering default in mbes.ts (2026-10 citation audit).
Symbol Meaning Unit first-order fade rate (BOD 0.10) week⁻¹ sensor age week
Assumptions and constants
- Anode current from the shared Butler-Volmer biofilm kinetics in predict.ts (Geobacter on acetate), with the same Arrhenius, substrate, pH and ohmic corrections as the MFC predictor.
- Linear range from LOD to ≈ 3 · K_M (1.5 · K_M for a cooperative Hill response).
- Effective analyte diffusivity through the biofilm D_eff ≈ 10⁻⁹–10⁻¹⁰ m²/s.
- Drift follows first-order decay of the biofilm / enzyme signal.
Corrections applied
- Interferents raise apparent K_M (poorer LOD, narrower range).
Not modelled
- Sensor recalibration / two-point standardisation.
- Diffusional broadening in flow injection — steady state assumed.
- Temperature / pH compensation — fixed K_M / V_max for the stated analyte.
Literature anchors in the source
- Modin & Wilén 2012, Water Res 46:6113
- Karube et al. 1977, Biotechnol Bioeng 19:1535
Implementation
libs/shared/electrochemistry/src/predictors/mbes.ts
Interval the predictor ships
heuristic_fixed_fraction — A fixed ±25 % placeholder band. It is NOT a calibrated interval; when served through /api/ml/predict it is replaced by the benchmark band below, or withheld. How served intervals are built
Calibration artifacts used when served
- Benchmark out-of-fold residual quantiles: bes-benchmark-v1 · gkf5 · generated 2026-09-09
- Split-conformal calibration: split-conformal · generated 2026-05-21
- Hierarchical-priors v2 trust snapshot: populated · generated 2026-05-16
Benchmark cells for this predictor’s systems
Each row is a stratum with n ≥ 30 residuals at nominal level 90%. Coverage is the cross-validated share of held-out points inside the band.
| target | stratum | n | papers | coverageCV |
|---|---|---|---|---|
| No data (n = 0) | ||||
No benchmark cell reaches the minimum n for these systems — intervals are withheld.
Prior trust by served parameter
The state the lab badge shows for each served parameter and system, from the v2 priors fit.
| parameter | system | state | papers | prior |
|---|---|---|---|---|
| No data (n = 0) | ||||
No v2 prior row for these systems.
Scientific-rigor gates
pnpm verify:science runs these rules over the committed priors and validation artifacts in pre-commit. Known violations are baselined per rule and slug; a new one blocks the commit. Baseline from hierarchical-priors-v2.json@2026-10-26T00:10:47.721880+00:00.
| rule | baselined |
|---|---|
| gate-honestyNo parameter may pass a rounded-threshold gate read while converged=false | 1 |
| support-containmentBounded quantities must have ci95 inside physical support, width <= range | 3 |
| magnitude-sanityNo ci95 bound may exceed the plausibility ceiling (1.0e+6) | 0 |
| slug-uniquenessNo two slugs may share a spelling-independent identity; scale must agree | 2 |
| secondary-source-purityNo fitted prior may carry a REVIEW (secondary-source) stratum | 0 |
| artifact-pairingEach fit must have its own coverage evidence; the served fit must have some | 0 |
| coverage-sharpnessAny coverage figure must ship its interval width alongside | 0 |
| interval-calibrationHeld-out interval coverage per parameter may not newly degrade | 128 |
| effects-gap-completenesseffects.json is schema 2.0; every non-high effect has a gap per archetype; no gap is "high" | 0 |