Table · dataset · 2026
Rising CO₂ closes the temperature window on the C3-to-C4 transition — model, data and verification
Listed in figshare and Loughborough Research Repository — shown once because both records carry DOI 10.6084/m9.figshare.33972085.v1
Description
<p dir="ltr">This deposit contains everything behind the manuscript of the same name: the</p><p dir="ltr">leaf model, the seven simulation batches that produced every number, the script</p><p dir="ltr">that draws every figure, and `verify.py`, which recomputes each quantitative</p><p dir="ltr">claim in the paper from the deposited data and reports a pass or failure against</p><p dir="ltr">it.</p><p><br></p><p dir="ltr">No new experimental data were generated.
All validation is against published</p><p dir="ltr">literature.</p><p><br></p><p>---</p><p><br></p><p dir="ltr">## Quick start</p><p><br></p><p dir="ltr">```bash</p><p dir="ltr">pip install numpy scipy pandas matplotlib</p><p dir="ltr">python scripts/verify.py # 150 checks; prints ALL PASS</p><p dir="ltr">python scripts/figures.py # redraws every figure into figures/</p><p>```</p><p><br></p><p dir="ltr">Both run from any working directory and find the data relative to themselves.</p><p dir="ltr">Set `PATHWAYS_DEPOSIT` to point them at a copy of this tree somewhere else.</p><p><br></p><p dir="ltr">Reproducing a batch from scratch takes longer.
Read the rest (12 more)
Each script is resumable — it</p><p dir="ltr">skips any row already present in its output CSV — so it can be stopped and</p><p dir="ltr">restarted freely:</p><p><br></p><p dir="ltr">```bash</p><p dir="ltr">python scripts/final.py --workers 16 # ~2301 leaf-days</p><p dir="ltr">python scripts/vogan_axis.py --workers 16 # ~274 leaf-days, about 12 min</p><p>```</p><p><br></p><p dir="ltr">Delete (or move aside) the corresponding `results_*/` directory first if you</p><p dir="ltr">want a genuinely fresh run rather than a resume.</p><p><br></p><p>---</p><p><br></p><p dir="ltr">## What is here</p><p><br></p><p>```</p><p dir="ltr">pathways/ the model package</p><p dir="ltr">scripts/ the seven batch scripts, verify.py, figures.py</p><p dir="ltr">results_final/ the production batch the paper reports</p><p dir="ltr">results_barrier/ the matched-barrier and fixed-mean sweeps</p><p dir="ltr">results_controls/ hydraulic, drought and CAM controls</p><p dir="ltr">results_light/ photon flux, leaf nitrogen, and the λ endpoints</p><p dir="ltr">results_vogan/ the continuous sweep along the ¹⁴C-fixation axis</p><p dir="ltr">results_topt_convention/ the thermal validation under the mean temperature convention</p><p dir="ltr">results_superseded/ three earlier batches, deposited unchanged</p><p dir="ltr">figures/ output of scripts/figures.py, under its internal names</p><p dir="ltr">figures_as_published/ the same figures under the numbers used in the paper</p><p>```</p><p><br></p><p dir="ltr">### The model</p><p><br></p><p dir="ltr">`pathways/` implements one leaf in two compartments, mesophyll and bundle</p><p dir="ltr">sheath, coupled by diffusion through the bundle-sheath conductance *g*bs.
The</p><p dir="ltr">carboxylation core is Farquhar–von Caemmerer–Berry in each compartment; the C4</p><p dir="ltr">cycle follows von Caemmerer (2021). Six pathway configurations — C3, C2, two</p><p dir="ltr">C3–C4 intermediate states, C4 and CAM — are points in one continuous</p><p dir="ltr">configuration space, not separate models, and they share a leaf-nitrogen budget,</p><p dir="ltr">a soil–plant hydraulic system and a single marginal water cost λ.</p><p><br></p><p dir="ltr">| file | what it holds |</p><p>|---|---|</p><p dir="ltr">| `leaf.py` | the two-compartment leaf and its steady state |</p><p dir="ltr">| `ledger.py` | the shared ATP/NADPH budget, c₁₄ ATP-synthase stoichiometry |</p><p dir="ltr">| `nitrogen.py` | the leaf-nitrogen budget and how capacity is bought from it |</p><p dir="ltr">| `kinetics_v2.py` | pathway-specific Rubisco kinetics and their temperature response |</p><p dir="ltr">| `optimal_stomata.py` | the Cowan–Farquhar optimality solution for *g*s |</p><p dir="ltr">| `soil.py` | the soil column and the plant hydraulic path |</p><p dir="ltr">| `cam.py` | the CAM configuration and the diurnal forcing |</p><p dir="ltr">| `config.py` | the configuration vector θ |</p><p><br></p><p dir="ltr">Modules not imported by the seven batch scripts (`stomata.py`, `photo3.py`,</p><p dir="ltr">`compete.py`, `kinetics.py`, `optimal_cam.py`) are earlier or alternative</p><p dir="ltr">implementations, kept so that the superseded batches can be re-derived.</p><p><br></p><p dir="ltr">### The batches</p><p><br></p><p dir="ltr">One leaf-day is one 24-step diurnal integration of one configuration under one</p><p dir="ltr">forcing. 6487 leaf-days in the current batches, plus 6850 superseded.</p><p><br></p><p dir="ltr">| script | output | leaf-days | what it supports in the paper |</p><p>|---|---|---|---|</p><p dir="ltr">| `final.py` | `results_final/` | 2301 | the ladder, the acclimated grid, the respiration control, the Rubisco swap, the λ sweep, the thermal optima |</p><p dir="ltr">| `barrier.py` | `results_barrier/` | 810 | the second step at a matched barrier; the amplitude envelope at fixed reported mean |</p><p dir="ltr">| `controls.py` | `results_controls/` | 756 | evaporative demand × drought; the hydraulic null; CAM priced in the same water |</p><p dir="ltr">| `light.py` | `results_light/` | 2250 | photon flux 200–1600; leaf nitrogen 1.0–3.0 g m⁻²; the Way *et al.* λ endpoints |</p><p dir="ltr">| `vogan_axis.py` | `results_vogan/` | 274 | the water step on Vogan's own ¹⁴C axis, swept continuously |</p><p dir="ltr">| `topt_convention.py` | `results_topt_convention/` | 96 | the thermal validation re-run under the mean temperature convention |</p><p dir="ltr">| `production.py` | `results_superseded/results_production/` | 2292 | superseded; see below |</p><p><br></p><p dir="ltr">`results_vogan/vogan_axis.csv` carries 302 rows for 274 configurations.
Ten</p><p dir="ltr">"rung" jobs are written out with their actual *f*R,BS while the job spec leaves</p><p dir="ltr">it blank, so the original resume key never matched them and they were recomputed</p><p dir="ltr">on each restart. The duplicates agree to 2×10⁻¹⁰, `verify.py` de-duplicates</p><p dir="ltr">before using the file, and the key has been fixed in the deposited</p><p dir="ltr">`vogan_axis.py` — re-running it against this CSV now reports "0 to run" rather</p><p dir="ltr">than repeating those ten.
The CSV is deposited as it was produced.</p><p><br></p><p dir="ltr">### Superseded batches</p><p><br></p><p dir="ltr">Three earlier batches are deposited unchanged so that numbers quoted in earlier</p><p dir="ltr">versions of this work can be re-derived. **They are not the batches the paper</p><p dir="ltr">reports**, and where a superseded file and its replacement both exist the paper</p><p dir="ltr">uses the replacement:</p><p><br></p><p dir="ltr">- `results_production/` — run before day respiration was charged against the</p><p dir="ltr"> whole nitrogen budget.
Its `gbs_band.csv` measures the second step without</p><p dir="ltr"> matching the bundle-sheath barrier, which `results_barrier/matched_barrier.csv`</p><p dir="ltr"> replaces.</p><p dir="ltr">- `results_revision/` — run on a leaf-nitrogen allocation that gave</p><p dir="ltr"> *J*max/*V*cmax outside the measured range.</p><p dir="ltr">- `results_testbatch/`, `sweep.csv` — exploratory.</p><p><br></p><p dir="ltr">### Figures</p><p><br></p><p dir="ltr">`scripts/figures.py` redraws all eleven figures and writes a `.json` sidecar</p><p dir="ltr">beside each one recording the input files and their SHA-256 hashes, so a figure</p><p dir="ltr">can always be traced to the data it was drawn from.
The script uses its own</p><p dir="ltr">internal names; the paper renumbers them:</p><p><br></p><p dir="ltr">| in the paper | in `figures/` |</p><p>|---|---|</p><p dir="ltr">| Fig. 1 | `Fig1_crossover` |</p><p dir="ltr">| Fig. 2 | `Fig2_c2_advantage` |</p><p dir="ltr">| Fig. 3 | `Fig4_three_currencies` |</p><p dir="ltr">| Fig. 4 | `Fig6_undetermined_step` |</p><p dir="ltr">| Fig. 5 | `Fig7_rubisco_kinetics` |</p><p dir="ltr">| Fig. 6 | `Fig5_validation` |</p><p dir="ltr">| Fig. 7 | `Fig8_cam` |</p><p dir="ltr">| Fig. S1 | `Fig3_design_space` |</p><p dir="ltr">| Fig. S2 | `Fig9_water_robustness` |</p><p dir="ltr">| Fig. S3 | `Fig10_light` |</p><p dir="ltr">| Fig. S4 | `Fig11_nitrogen` |</p><p><br></p><p dir="ltr">`figures_as_published/` holds the same files under the paper's numbering.</p><p><br></p><p dir="ltr">`figures.py` refuses to run without `results_controls/`, because two of its</p><p dir="ltr">panels must not be built from the superseded nitrogen arm.</p><p><br></p><p>---</p><p><br></p><p dir="ltr">## verify.py</p><p><br></p><p dir="ltr">The point of this deposit. `verify.py` transcribes each claim in the paper as a</p><p dir="ltr">literal, recomputes the same quantity from the deposited CSVs, and prints a pass</p><p dir="ltr">or failure.
It does not import the manuscript, so a transcription error in the</p><p dir="ltr">paper fails here rather than being reproduced.</p><p><br></p><p>```</p><p dir="ltr">$ python scripts/verify.py</p><p>...</p><p>==============================================================================</p><p dir="ltr">ALL PASS</p><p>```</p><p><br></p><p dir="ltr">150 checks. Among them: the crossover temperatures and the window closing at</p><p dir="ltr">both ends; the C2 carbon and water results across every sensitivity axis; the</p><p dir="ltr">matched-barrier second step; the Rubisco swap at equal nitrogen and at equal</p><p dir="ltr">*V*cmax; the thermal optima under both temperature conventions; and the water</p><p dir="ltr">step on the ¹⁴C axis, including the two failures the paper reports.</p><p><br></p><p dir="ltr">Three checks in an earlier version failed once the `vogan_axis` batch was</p><p dir="ltr">complete, and the claims were corrected rather than the checks relaxed.
The</p><p dir="ltr">checker is written so that this is the normal way a wrong number is caught.</p><p><br></p><p>---</p><p><br></p><p dir="ltr">## Two failures the paper reports rather than hides</p><p><br></p><p dir="ltr">Both are checked here, so a reader can confirm them.</p><p><br></p><p dir="ltr">**The thermal optimum.** On the quantity a cuvette *A*–temperature response</p><p dir="ltr">actually measures, the modelled C3 optimum is 6–10 °C too warm and reproduces</p><p dir="ltr">42% of the measured shift with growth CO₂ (34% under the mean temperature</p><p dir="ltr">convention).
The C4 optimum moves −1.7 °C against a measured +2.5 — identically</p><p dir="ltr">under both conventions, so it is not an artefact of which temperature is called</p><p dir="ltr">the growth temperature.</p><p><br></p><p dir="ltr">**The water step.** Across the 50–65% ¹⁴C-fixation interval Vogan (2010)</p><p dir="ltr">measured, the model gives 0.97–1.22× at 380 µmol mol⁻¹ and 1.06–1.35× at 180,</p><p dir="ltr">against a measured 2–2.5×.
Over the *whole* axis it gives 2.31× and 2.11× — the</p><p dir="ltr">size that was measured. The defect is where the water gain sits along the axis,</p><p dir="ltr">not its total.</p><p><br></p><p>---</p><p><br></p><p dir="ltr">## Requirements</p><p><br></p><p dir="ltr">Python 3.9 or later with `numpy`, `scipy`, `pandas` and `matplotlib`. No</p><p dir="ltr">compiled extensions, no configuration, no network access.
See</p><p dir="ltr">`requirements.txt`.</p><p><br></p><p dir="ltr">## Depositing this elsewhere</p><p><br></p><p dir="ltr">Nothing here is tied to a particular archive. `DEPOSIT-METADATA.txt` holds the</p><p dir="ltr">title, authors, ORCIDs, description, keywords and licence in plain text, ready</p><p dir="ltr">to paste into any repository's upload form; `zenodo.json` is the machine-readable</p><p dir="ltr">form for Zenodo and other InvenioRDM sites, and `CITATION.cff` is read by GitHub,</p><p dir="ltr">Dataverse and most citation tooling.
Whichever archive is used, the DOI it issues</p><p dir="ltr">goes into the manuscript's Data availability statement in place of</p><p dir="ltr">"[DOI on acceptance]".</p><p><br></p><p dir="ltr">## Licence</p><p><br></p><p dir="ltr">Code is MIT (`LICENSE`). Data files in `results_*/` and the figures are</p><p dir="ltr">CC BY 4.0. Cite the manuscript and this deposit if you use either.</p><p><br></p>
Links
Where it is published
- DOI doi.org/10.6084/m9.figshare.33972085.v1 ↗
DOI / persistent id · from figshare com
Catalogue records · 1
- OAI-PMH record api.figshare.com/v2/oai?verb=GetRecord&metadataPrefix=oai_dc&identifier=oai%3Af… ↗
metadata API · from figshare com
Topics
- From keywords
- Astronomy & Astrophysics · Bioinformatic methods development · Bioinformatic methods development · Chemistry · Chemistry · Computer Science & AI · Computer Science & AI · Earth & Environmental Science · Earth & Environmental Science · Ecological physiology · Ecological physiology · Economics & Finance · Economics & Finance · Engineering · Engineering · Humanities · Humanities · Life Sciences · Life Sciences · Materials Science · Mathematics & Statistics · Medicine & Health · Medicine & Health · Ocean & Atmospheric Science · Plant biochemistry · Plant biochemistry · Plant physiology · Plant physiology · Psychology & Behavioral Science · Social Science · Social Science
- Inferred from text
- Simulation 75% · Text 75%
Provenance · 2 source records, 38 field assertions
| Source | Key | Last seen | Raw |
|---|---|---|---|
| figshare | oai:figshare.com:article/33972085 | 5 d ago | JSON v1 |
| Loughborough Research Repository | oai:figshare.com:article/33972085 | 5 d ago | JSON v1 |
| Field | Assertion | Extractor | Evidence |
|---|---|---|---|
| access_level | source · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].anzsrc:field:310201 | mapping · repository lboro ac uk | vocabulary-mapper@1.0.0 | keywords['Bioinformatic methods development'] |
| concepts[field].anzsrc:field:310201 | mapping · figshare com | vocabulary-mapper@1.0.0 | keywords['Bioinformatic methods development'] |
| concepts[field].anzsrc:field:310303 | mapping · repository lboro ac uk | vocabulary-mapper@1.0.0 | keywords['Ecological physiology'] |
| concepts[field].anzsrc:field:310303 | mapping · figshare com | vocabulary-mapper@1.0.0 | keywords['Ecological physiology'] |
| concepts[field].anzsrc:field:310802 | mapping · repository lboro ac uk | vocabulary-mapper@1.0.0 | keywords['Plant biochemistry'] |
| concepts[field].anzsrc:field:310802 | mapping · figshare com | vocabulary-mapper@1.0.0 | keywords['Plant biochemistry'] |
| concepts[field].anzsrc:field:310806 | mapping · repository lboro ac uk | vocabulary-mapper@1.0.0 | keywords['Plant physiology'] |
| concepts[field].anzsrc:field:310806 | mapping · figshare com | vocabulary-mapper@1.0.0 | keywords['Plant physiology'] |
| concepts[field].local:field:astronomy | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:chemistry | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:chemistry | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:computer-science-ai | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:computer-science-ai | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:earth-environmental | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:earth-environmental | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:economics-finance | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:economics-finance | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:engineering | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:engineering | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:humanities | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:humanities | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:life-sciences | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:life-sciences | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:materials-science | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:mathematics-statistics | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:medicine-health | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:medicine-health | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:ocean-atmospheric | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[field].local:field:psychology-behavioral | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:social-science | mapping · repository lboro ac uk | connector:repository_lboro_ac_uk@1.0.0 | |
| concepts[field].local:field:social-science | mapping · figshare com | connector:figshare_com@1.0.0 | |
| concepts[method].local:method:simulation | enrichment · figshare com | keyword-concept-rules@1.0.0 | title+description (75%) |
| concepts[modality].local:modality:text | enrichment · figshare com | keyword-concept-rules@1.0.0 | title+description (75%) |
| description | source · figshare com | connector:figshare_com@1.0.0 | /metadata/dc/description |
| license | source · figshare com | connector:figshare_com@1.0.0 | /metadata/dc/rights |
| publication_date | source · figshare com | connector:figshare_com@1.0.0 | |
| title | source · figshare com | connector:figshare_com@1.0.0 | /metadata/dc/title |