Skip to content
Methods & data · documentation

How it was made, how far it was checked, and how to reuse it

Everything behind the Lab, the Atlas and the evidence gap. Every value here comes from the published data files, with its interval and evidence status.

Overview

Three historical sources, read as recipes: every passage is transcribed, its preparation fields extracted, its plant names resolved to candidate species, and each preparation’s extraction estimated as a range.
Recipes
631
Studies audited
303
Modelled species
19
Names pending check
45

Extraction is not detection

  1. 1 · outside the modelPlant contentHow much the plant held. Varies by species, part, season, storage.
  2. 2 · modelledExtractionWhether the preparation would carry it into the liquid. This is what we estimate.
  3. 3 · outside the modelLab detectionWhether an assay would find it. Also depends on content and the method’s limit of detection.

Pipeline

Each step shows one of four statuses: independently validated, validated against external data, provisional, or not independently validated. Provisional checks help find problems; they are never a validation.
  1. 1IngestTEI and Project Gutenberg parsersCulpeper 1652, Culpeper 1850 and Pliny (Bostock & Riley) into located passages.
  2. 2Recipes (M1)Structured extraction, prompt v3; verbatim-quote checkStructured recipes, every field backed by a verbatim quote; failures rejected, never repaired.
  3. 3Names (M2)GBIF + WFO, heuristic weightsHistorical name → accepted species (WFO), with candidates, confidence and disputed flags.
  4. 4Compounds (M3)LOTUS · RDKitKnown compounds per species (LOTUS via Wikidata), standardised with RDKit.
  5. 5Preparation model (M4)RDKit Crippen logP; GFN2-xTB comparedPredicted extraction per compound and preparation, with ranges; solvent, heat, filtration and acidity separate.
  6. 6Audit (M5)Rule-based extractor (keyword lexicon)How modern studies prepared each plant, coded with a versioned keyword lexicon; unstated = unknown.
  7. 7Ranking (M6)Coupled Monte Carlo drawsHypotheses ranked only on profile gaps that hold across the uncertainty range.

How accurate each step is

Each value is a point with its 95% interval and sample size. A step not yet measured says so.

Step metrics

  • M1
    Measure
    Extraction F1 (part) vs an independent referenceawaiting adjudicated gold set (data/gold/annotations/gold.json)
    Value
    Not measured
    n
    Unknown
    Status
  • M1
    Measure
    Recipes rejected by the verbatim checkrecipes rejected on the single attempt (session extraction, no retries) because a quote was not verbatim; 0 passages failed whole (refusal/max_tokens/schema)
    Value
    0.00 (interval unknown)share, 0–1
    n
    151
    Status
  • M1
    Measure
    Re-annotation agreement (heat)not yet measured
    Value
    Not measured
    n
    Unknown
    Status
  • M2
    Measure
    Top-1 vs scholarly identificationsawaiting scholarly identifications in data/gold/name_identifications.csv (name + citation per row)
    Value
    Not measured
    n
    Unknown
    Status
  • M2
    Measure
    Resolved names disputed · all sourcesshare of resolved names whose top candidate is flagged disputed (descriptive)
    Value
    0.69 (interval unknown)share, 0–1
    n
    812
    Status
  • M2
    Measure
    Resolved names disputed · culpepershare of resolved names flagged disputed, culpeper (Culpeper = the 1652 herbal; the 1850 edition is resolved through its 1652 entry); descriptive
    Value
    0.27 (95% interval 0.22–0.34)share, 0–1
    n
    223
    Status
  • M2
    Measure
    Resolved names disputed · plinyshare of resolved names flagged disputed, pliny (Culpeper = the 1652 herbal; the 1850 edition is resolved through its 1652 entry); descriptive
    Value
    0.84 (95% interval 0.81–0.87)share, 0–1
    n
    608
    Status
  • M4
    Measure
    logP error, RDKit Crippen (MAE vs experiment)MAE vs experimental logP (SangsterLogP neutral subset); RMSE 0.8374, Spearman 0.8324 [0.7625, 0.8851]
    Value
    0.66 (95% interval 0.58–0.74)logP units
    n
    150
    Status
  • M4
    Measure
    logP error, GFN2-xTB (MAE vs experiment)MAE vs experimental logP (SangsterLogP neutral subset); RMSE 1.9244, Spearman 0.688 [0.5961, 0.7616]
    Value
    1.51 (95% interval 1.32–1.71)logP units
    n
    150
    Status
  • M5
    Measure
    Audit v1: share of studies faithful (as pre-registered)audit v1 as pre-registered (docs/AUDIT_PROTOCOL_v1.md): share of (pair, study) units faithful to a historical preparation, among 67 with a known status (277 unknown); 95% CI bootstrap over pairs. v1's solvent rule makes non-water recipes unmatchable, so this mostly reflects the protocol; audit v2 and the reporting-gap headline are in RESULTS.md (metrics.reportingGap and metrics.auditV2)
    Value
    0.01 (95% interval 0.00–0.06)share, 0–1
    n
    67
    Status
  • M5
    Measure
    Audit v2: share of studies faithful (re-analysis)share of (pair, eligible study) units faithful to a historical preparation; 11 known, 32 unknown, 4 with no modern analogue; bootstrap 95% CI over pairs
    Value
    0.00 (95% interval 0.00–0.00)share, 0–1
    n
    11
    Status

Honest findings

Including the ones that did not go our way.

Does GFN2-xTB predict logP better than RDKit’s Crippen method?

  • RDKit Crippen logP
    0.66 (95% interval 0.58–0.74)MAE, logP units
  • GFN2-xTB / ALPB
    1.51 (95% interval 1.32–1.71)MAE, logP units
Lower is better. Bar scale 0–1.5 log units.

GFN2-xTB had a larger error than RDKit, and the intervals do not overlap.

The descriptor with the lower error is the model’s default; the other is kept as a comparison.

View as table
Does GFN2-xTB predict logP better than RDKit’s Crippen method?
MethodErrorLowHigh
RDKit Crippen logP0.660.580.74
GFN2-xTB / ALPB1.511.321.71
Borderlinepositive control · pre-registered check PR-ARTEMISININ

Artemisinin in Artemisia annua

Expected: Low in cold water, high in a low-temperature nonpolar extract (pre-registered thresholds in the explanation).

Descriptor rdkit (logP 2.40). Endoperoxide heat flag: True. Cold water 0.27 [0.03–0.78]; decoction 0.05 (heat factor 0.23); low-temperature hexane 0.79 [0.23–0.98]. Pre-registered thresholds: cold water < 0.3, nonpolar > 0.6. Exploratory xTB Wiberg bond order of the O–O bond: 0.944. BORDERLINE: the 5th–95th percentile range crosses a threshold (cold water 0.03–0.78 vs < 0.3; nonpolar 0.23–0.98 vs > 0.6). Cold water is filtered (filtration factor 1.00): its value comes from the solvent factor alone. Without straining, the suspension assumption raises it to 0.41 (filtration factor 1.42).

Ranked hypotheses (M6)

The plant–use pairs no retrieved study tested in the historical preparation, ranked on predicted profile gaps that hold across the uncertainty range.

3 ranked hypotheses, each with its caveats, toxicity entry and evidence trail. Ones with toxicity reported are shown for analysis only.

See the ranked hypotheses

Where quantum helps, and where it doesn’t

Two places in this project could use quantum methods. In both, a classical method did better at our scale.

Quantum chemistry for the descriptor

GFN2-xTB (semi-empirical quantum chemistry) against RDKit’s Crippen logP, both compared with measured logP values.

  • RDKit Crippen logP0.66 (95% interval 0.58–0.74)MAE, logP units
  • GFN2-xTB / ALPB1.51 (95% interval 1.32–1.71)MAE, logP units

GFN2-xTB had a larger error than RDKit, and the intervals do not overlap.

The descriptor with the lower error is the model’s default; the other is kept as a comparison.

Quantum optimisation for the re-test panel

QAOA with a penalty mixer and with an XY mixer (depths 1–3), simulated, against the exact solver on the same instances (n = 8, 12, 16).

Approximation ratio: exact solver 1.00; QAOA 0.46–0.64; a random feasible panel 0.46–0.52.

  • n = 8: best P(optimum) 0.105 (xy mixer, p = 2) vs 0.079 for a uniform random panel (1.34×)
  • n = 12: best P(optimum) 0.011 (xy mixer, p = 2) vs 0.007 for a uniform random panel (1.44×)
  • n = 16: best P(optimum) 0.001 (xy mixer, p = 2) vs 0.001 for a uniform random panel (0.60×)

Under noise (parametric depolarising noise (Qiskit Aer) on a heavy-hex coupling map; not a device calibration): 0.0% two-qubit error → best P(optimum) 0.187; 0.1% two-qubit error → best P(optimum) 0.099; 0.5% two-qubit error → best P(optimum) 0.020; 1.0% two-qubit error → best P(optimum) 0.009; 2.0% two-qubit error → best P(optimum) 0.007.

Hardware: not used: no IBM Quantum account or token on this machine, and none was created.

The full benchmark on the Lab Planner

What would have to change for quantum to help here

  • Problems far beyond what exact classical solvers handle; ours solve in seconds.
  • Ansätze that respect every constraint natively, or better parameter training than these restarts found.
  • Two-qubit error rates well below those in the sweep, at circuit depths of hundreds of gates.

The contribution is the formulation, the penalty-versus-XY comparison, the noise analysis and a reproducible pipeline; no quantum advantage is claimed.

Pre-registered checks

Criteria fixed before the results were seen. Outcomes are reported as they came out, including fails.
  1. PR-ARTEMISININ · date unknownBorderlineArtemisinin known-case testborderline pass
  2. PR-PREPMODELVSLITERATURE_PREREGISTERED · date unknownPRE-REGISTERED literature check, provisional; unverified rule and code, not independently validatedagreement: 1.00 (n = 19)
  3. PR-PREPMODELVSLITERATURE_PREREGISTERED_V2 · date unknownPRE-REGISTERED v2 (aqueous preparations) literature check, provisional; unverified rule and code, not independently validatedagreement: 0.76 (n = 17)
  4. PR-PREPMODELVSLITERATURE_PREREGISTERED_V3 · date unknownPRE-REGISTERED v3 (paired, within plant) literature check, provisional; unverified rule and code, not independently validatedmeanPerArticleAgreement: 0.62 (n = 5)

Heuristics

Rules of thumb the model applies where no measurement exists. Anywhere one is used, it is marked.
  • Heat is treated as lowering compounds flagged as heat-labile or volatile, with an assumed range; it is not fitted to data.
  • Acidic vehicles (vinegar, wine) are treated as favouring basic nitrogen compounds, which form salts; a rule of thumb with an assumed range.
  • Unfiltered preparations are treated as carrying some undissolved material; filtration lowers what is carried over.
  • A compound counts when the 5th–95th range of its predicted difference between the two preparations excludes zero and the median difference reaches an assumed threshold (differ_delta in config/m8_qubo_v2.toml); not fitted to data.
  • Compound classes come from simple structure rules, labelled “(heuristic)” in the data.

Audited studies

Every modern study, field by field. “Not stated” means the paper does not say; it is never read as “no”. Both pre-registered analyses are reported as they are; the analysis is frozen.
Audit v1 · as pre-registeredShare faithful to the historical preparation: 1% (1 of 67 units with a known status; 95% interval 95% CI 0–6%)277 more units have an unknown status and are not in the share.

Design flaw. v1’s solvent rule makes every non-water recipe unmatchable: only a historical water preparation could ever match a modern solvent. Its share mostly reflects the protocol, not the literature.

Audit v2 · pre-registered re-analysis after v1's design flawShare faithful: 0% (0 of 11 units with a known status; 95% interval 95% CI 0–0%)

Small n. Only 11 (plant–use pair, study) units have a known status: 32 are unknown and 4 have no modern analogue. 43 studies were eligible across 46 of 238 pairs. Too few to estimate a field-wide rate.

Loading 56 study preparations…

Limitations

  • Extraction is not detection: the model predicts extracted fractions, while studies record detection, which also depends on plant content and detection limits.
  • One descriptor: the aqueous prediction rests on Crippen logP alone; solubility, melting point, dose and contact time are not modelled.
  • Heuristic factors (heat, volatility, filtration carry-over, acidity) have assumed ranges and are not fitted to data.
  • The recipe extraction is provisional: its accuracy against an independent reference annotation is not yet measured.
  • The audit coding is a keyword heuristic; abstracts often omit preparation details, so many studies stay unknown. Its accuracy has only a provisional check against a second coding of a study sample.
  • Pliny is lower confidence than Culpeper: a 19th-century translation of a 1st-century text, with far more disputed names.
  • LOTUS records compounds per organism, not per plant part, so a recipe’s part cannot be matched to the part analysed.

Sources & licences

Each licence carries its own status: validated only once its terms have been independently read.

Sources and licences

  • The English Physitian, or An Astrologo-Physical Discourse of the Vulgar Herbs of this NationEEBO-TCP Phase I text; TEI header availability statement: CC0 1.0 Universal.
    Role
    historical text
    Edition · year
    Nicholas Culpeper · 1652
    Licence
    CC0 1.0 Universal (EEBO-TCP Phase I; TEI header, checked 2026-11-05).
  • Role
    historical text
    Edition · year
    Nicholas Culpeper · 1850
    Licence
    Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.
  • The Natural History of Pliny, Volume 4 (of 6): Books XVIII–XXIIIUS status only; worldwide status not independently verified.
    Role
    translation
    Edition · year
    Pliny the Elder, trans. John Bostock; H. T. Riley · 1856
    Licence
    Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.
  • The Natural History of Pliny, Volume 5 (of 6): Books XXIV–XXXIUS status only; worldwide status not independently verified. Printer imprint suggests a later reprint of the 1856 edition (unverified).
    Role
    translation
    Edition · year
    Pliny the Elder, trans. John Bostock; H. T. Riley · 1856
    Licence
    Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.

Code: MIT. The project’s derived data: CC BY 4.0, with the exceptions in LICENSE-DATA (Culpeper 1652 CC0; the Gutenberg passages public domain in the USA; short third-party quotes keep their own licences). Illustrations: 19th-century public-domain plates from Wikimedia Commons, listed with author, date and licence on the credits page.

Downloads

The same files that drive every screen, checked against the data contract at build time.
  • recipes.jsonEvery extracted recipe, with verbatim quotes, provenance and logged corrections.recipes.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • species.jsonSpecies candidates for each recipe’s plant name, with confidence, basis and disputed flags.species.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • profiles/index.jsonThe species with predicted extraction profiles, with their toxicity entries.profiles.index.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • audit.jsonAudit v1, as pre-registered: how modern studies prepared each plant for each use.audit.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • audit_v2.jsonAudit v2, the pre-registered re-analysis after v1’s design flaw.audit_v2.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • hypotheses.jsonRanked hypotheses worth re-testing, with caveats and evidence trails.hypotheses.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • case_studies.jsonDocumented extraction corrections and their effect on the ranking.case_studies.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • metrics.jsonEvery metric with its interval, n and source file, including the reporting gap.metrics.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • sources.jsonThe digitised historical sources, with checksums and licences.sources.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • engine/model.jsonThe preparation model’s parameters and uncertainty settings, for the in-browser engine.engine.model.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
  • plates.jsonBotanical plates: Commons file, author, date and licence as stated on Commons.plates.schema.json · licence Public domain images; record CC BY 4.0