{
 "about": {
  "method": "od600-cell-estimate",
  "recordedOn": "2026-10-10",
  "script": "pipeline/lab-calculators/od600_reference.py",
  "scriptSha256": "a1f918abf98ff81832fae8eab2f8771260f9f94c75f02ded1150617e5e5c478d",
  "source": "CSO Wave 3 memo section 2.6 (the method, the worked and adverse cases); every factor here is a stated example of a person's own calibration, not a reference value",
  "tolerances": {
   "values": "within 1e-9 relative",
   "refusals": "exact"
  }
 },
 "oracle": {
  "name": "Python fractions and decimal",
  "version": "3.13.16"
 },
 "count": 14,
 "recordedOn": "2026-10-10",
 "cases": [
  {
   "name": "worked-cso-example",
   "about": "The CSO's worked example: 0.45 read on a 1:10 dilution against a 0.05 blank, the person's own k = 8 × 10⁸ per OD: 0.40 × 10 × 8 × 10⁸ = 3.2 × 10⁹ per mL",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.45,
    "blank": 0.05,
    "dilution": 10,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "ok",
    "rows": {
     "correctedReading": 0.4,
     "dilutionFactor": 10.0,
     "factor": 800000000.0,
     "estimatePerML": 3200000000.0,
     "rangeLow": 0.05,
     "rangeHigh": 0.6
    },
    "basis": "cells"
   }
  },
  {
   "name": "undiluted",
   "about": "An undiluted reading of 0.3 against a 0.04 blank",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.3,
    "blank": 0.04,
    "dilution": 1,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "ok",
    "rows": {
     "correctedReading": 0.26,
     "dilutionFactor": 1.0,
     "factor": 800000000.0,
     "estimatePerML": 208000000.0,
     "rangeLow": 0.05,
     "rangeHigh": 0.6
    },
    "basis": "cells"
   }
  },
  {
   "name": "cfu-basis",
   "about": "A CFU-based factor gives an estimate in CFU, never cells",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.25,
    "blank": 0.05,
    "dilution": 20,
    "factor": 520000000.0,
    "factorBasis": "cfu",
    "output": "cfu",
    "factorSource": "Own plate counts",
    "instrument": "96-well plate, 200 µL",
    "organism": "E. coli",
    "rangeLow": 0.02,
    "rangeHigh": 0.5
   },
   "expected": {
    "expect": "ok",
    "rows": {
     "correctedReading": 0.2,
     "dilutionFactor": 20.0,
     "factor": 520000000.0,
     "estimatePerML": 2080000000.0,
     "rangeLow": 0.02,
     "rangeHigh": 0.5
    },
    "basis": "cfu"
   }
  },
  {
   "name": "microsphere-basis",
   "about": "A factor from silica microspheres gives microsphere-equivalent particles",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.12,
    "blank": 0.02,
    "dilution": 4,
    "factor": 3100000000.0,
    "factorBasis": "microspheres",
    "output": "microspheres",
    "factorSource": "Silica microsphere calibration (Beal et al. 2020 protocol)",
    "instrument": "96-well plate, 100 µL",
    "organism": "E. coli",
    "rangeLow": 0.01,
    "rangeHigh": 0.8
   },
   "expected": {
    "expect": "ok",
    "rows": {
     "correctedReading": 0.1,
     "dilutionFactor": 4.0,
     "factor": 3100000000.0,
     "estimatePerML": 1240000000.0,
     "rangeLow": 0.01,
     "rangeHigh": 0.8
    },
    "basis": "microspheres"
   }
  },
  {
   "name": "edge-of-range",
   "about": "A corrected reading exactly at the top of the calibrated range is inside it",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.65,
    "blank": 0.05,
    "dilution": 2,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "ok",
    "rows": {
     "correctedReading": 0.6,
     "dilutionFactor": 2.0,
     "factor": 800000000.0,
     "estimatePerML": 960000000.0,
     "rangeLow": 0.05,
     "rangeHigh": 0.6
    },
    "basis": "cells"
   }
  },
  {
   "name": "refused-above-range-cso",
   "about": "The CSO's adverse case: 1.2 against a calibration over 0.05–0.6 is refused; dilute and re-measure",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 1.25,
    "blank": 0.05,
    "dilution": 1,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "refused",
    "problem": "od-above-range"
   }
  },
  {
   "name": "refused-below-range",
   "about": "A corrected reading below the calibrated range",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.08,
    "blank": 0.05,
    "dilution": 1,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "refused",
    "problem": "od-below-range"
   }
  },
  {
   "name": "refused-not-above-blank",
   "about": "A reading at or below the blank",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.05,
    "blank": 0.05,
    "dilution": 1,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "refused",
    "problem": "od-not-above-blank"
   }
  },
  {
   "name": "refused-dilution-below-1",
   "about": "A dilution factor below 1",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.3,
    "blank": 0.05,
    "dilution": 0.5,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "refused",
    "problem": "od-dilution"
   }
  },
  {
   "name": "refused-no-factor",
   "about": "No factor: there is no default",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.3,
    "blank": 0.05,
    "dilution": 1,
    "factor": null,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "refused",
    "problem": "od-factor"
   }
  },
  {
   "name": "refused-no-basis",
   "about": "A factor without its basis",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.3,
    "blank": 0.05,
    "dilution": 1,
    "factor": 800000000.0,
    "factorBasis": null,
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "refused",
    "problem": "od-factor"
   }
  },
  {
   "name": "refused-no-source",
   "about": "A factor without its source",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.3,
    "blank": 0.05,
    "dilution": 1,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": " ",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "refused",
    "problem": "od-factor"
   }
  },
  {
   "name": "refused-basis-mismatch",
   "about": "A cell-count factor asked for CFU",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.3,
    "blank": 0.05,
    "dilution": 1,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cfu",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": 0.6
   },
   "expected": {
    "expect": "refused",
    "problem": "od-basis-mismatch"
   }
  },
  {
   "name": "refused-no-range",
   "about": "No calibrated range",
   "input": {
    "v": 1,
    "kind": "od600",
    "reading": 0.3,
    "blank": 0.05,
    "dilution": 1,
    "factor": 800000000.0,
    "factorBasis": "cells",
    "output": "cells",
    "factorSource": "Own calibration against haemocytometer counts, 3 September 2026",
    "instrument": "1 cm cuvette, spectrophotometer",
    "organism": "E. coli, exponential phase",
    "rangeLow": 0.05,
    "rangeHigh": null
   },
   "expected": {
    "expect": "refused",
    "problem": "od-range"
   }
  }
 ]
}
