Every script runs alone on a raw completed-test CSV — the shared cores are embedded verbatim in each file, so there are no imports between them and nothing to install. The real contingencies are drawn below, not hidden: the formal models take their RCI-P70 bridge threshold from the RCI component's baseline stage; the shared-Ki comparison is built on the formal trajectory layer; the plots draw what the analyses compute. normalized_assays.csv is the interchange format — every script accepts it in place of raw data, and this website exports the identical file. Each component below ships in both Python and R, and its "what differs" note says exactly where behavior departs from the workflow behind the published catalog — so nothing between the versions is left to guesswork. One rule everywhere: actual sown/tested + germinated counts, never an assumed sample size.
Normalize
The shared upload layer: completed-test CSV in, normalized_assays.csv out — counts required, exact time kept, Initial made explicit, protocol keys built, duplicates flagged (never merged).
What differs here — Python vs R vs the catalog workflow
Python ↔ R
None by design: one contract, two languages. Both are cross-validated against each other and the site engine on the verification fixtures by the site's test suite.
vs the workflow behind the catalog
The archival workflow rounded date-derived ages to whole years; here dates become exact elapsed days (a 1,740-day test is 4.76 y, never 5). Legacy storage="Initial" is recognized and mapped to an explicit flag. Protocol keys use trivial case/whitespace normalization only, and a row missing both substrate and treatment is keyed "unspecified" per the current specification. No sample size is ever assumed — percentage-only files are blocked, not padded.
RCI analysis
The RCI management analysis: early-window baselines, RCI P70, observed intervals with GLM + Wilson support, Overall observed RCI kept separate from RCI at recommended storage, freeze flags, censoring-honest notation.
What differs here — Python vs R vs the catalog workflow
Python ↔ R
None by design. The R script's probit support-CIs come from stats::glm — the same IRLS family the archival workflow used — and agree with the Python and site fits to at least six decimal places on the fixtures.
vs the workflow behind the catalog
Three deliberate departures, all specification-mandated. (1) The baseline is always the highest observed germination in the early 5-year window — the archival snapshot forced the age-0/1 value for accessions with exactly two assay ages; that exception is preserved only in the site's frozen-snapshot regression and is guarded against here by verification fixture 11. (2) Notation keeps fractional precision ("4.8+", not "5+"). (3) Overall observed RCI and observed RCI at recommended storage are separate outputs — the archive published a single interval with storage attribution. Also: CI support is aggregated with a plain any() across accessions; the archival code preserves an any(isTRUE(·)) expression that can silently miss support when several accessions qualify (its own comments mark that as frozen-snapshot compatibility). The −18C-only rule matches the archive: such species record freeze-sensitive = FALSE with an explicit only-−18C reason.
Formal survival
Protocol-specific formal survival models: taxon × accession × storage × germination protocol, matched same-protocol Initial at t = 0, Formal / Exploratory / Do-not-interpret / No-fit classes, raw AND display crossings.
What differs here — Python vs R vs the catalog workflow
Python ↔ R
None by design; identical grouping, anchoring, tiers, and QC. Python fits with its own IRLS (validated against R-equivalent references); the R script fits with stats::glm itself.
vs the workflow behind the catalog
Trajectory unit, matched-Initial rule (≤1 y, never borrowed across protocols, late Initials excluded and reported), early-rise and plateau QC, and the bridge-tier classification reproduce the reference. One deliberate difference: on separated or extreme fits the reference falls back to a bias-reduced estimator (brglm2); these scripts and the site flag the fit and downgrade its tier instead of substituting a different estimator — flagged, not faked. Plateau flags are computed, but the reference's plateau-trimmed sensitivity refits are not included.
Shared-Ki comparison
Paired 5 °C vs −18 °C: one shared Ki, temperature-specific decline slopes, slope-difference CI/p, LRT, evidence tiers (Primary / Review / Exploratory — different caution types), neutral wording.
What differs here — Python vs R vs the catalog workflow
Python ↔ R
None by design; joint coefficients, slope-difference statistics, and LRTs agree to at least six decimals on the fixtures.
vs the workflow behind the catalog
The joint model, LRT semantics (non-inferential under extreme-fit warnings), tier precedence, and CI-based direction call reproduce the reference exactly. The same no-bias-reduction stance as component 03 applies. Evidence-tier wording follows the current specification (Primary / Review / Exploratory); the reference retained development-era labels. Two audit columns the reference emitted (shifts of the joint fit versus the independent per-temperature fits) are not written — both sides of that subtraction are in this CSV and component 03's.
Model comparison
The AICc workbench: Ellis–Roberts, control-viability, resistant-fraction and Avrami fit to every trajectory on the same counts; the data picks the winner, near-ties go to the simpler model.
What differs here — Python vs R vs the catalog workflow
Python ↔ R
None by design; the same coordinate-descent optimizer in both, same winners, same AICc to the fixture tolerance.
vs the workflow behind the catalog
No counterpart exists: the reference workflow fits one model family. This component is a site-native extension for asking which decay shape a trajectory follows, and its result never overrides the observed RCI, the storage recommendation, or the shared-Ki comparison.
Plots
The three finalized plot families: RCI management per accession, formal survival per trajectory, shared-Ki per pair — line style encodes evidence tier; uninterpretable comparisons get no fitted curves.
What differs here — Python vs R vs the catalog workflow
Python ↔ R
Same plot semantics; different renderers (matplotlib vs base R graphics), so typography and spacing differ. The R script keeps plot text ASCII-safe so it renders identically in any locale.
vs the workflow behind the catalog
Markers, the baseline ring with its source, RCI P70 labeling, plotting-only probit overlays, tier line styles (solid / long-dash / dash), and curve suppression for uninterpretable comparisons follow the finalized plot definitions. The reference plot library skipped accessions with fewer than two non-zero observations; these scripts (like the site) plot every RCI-evaluable accession.
Run everything
The orchestrator: normalize → RCI → formal (reusing the RCI thresholds file) → shared-Ki → models → plots, one command, one output folder.
What differs here — Python vs R vs the catalog workflow
Python ↔ R
Identical chains; python run_all.py and Rscript run_all.R produce the same set of CSVs from the same input.
vs the workflow behind the catalog
The reference's master runners orchestrated the full historical archive (provenance, cross-source dedup, master workbook). Those stages are institutional-archive machinery, deliberately out of scope for the public lab.















































