<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="/v2/static/oai2.xsl"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
  <responseDate>2026-10-07T22:26:45Z</responseDate>
  <request identifier="oai:figshare.com:article/33972085" metadataPrefix="oai_dc" verb="GetRecord">https://api.figshare.com/v2/oai</request>
  <GetRecord>
    <record>
      <header>
        <identifier>oai:figshare.com:article/33972085</identifier>
        <datestamp>2026-09-23T08:41:58Z</datestamp>
        <setSpec>category_24220</setSpec>
        <setSpec>category_24184</setSpec>
        <setSpec>category_24208</setSpec>
        <setSpec>category_24391</setSpec>
        <setSpec>category_24379</setSpec>
        <setSpec>category_24394</setSpec>
        <setSpec>item_type_3</setSpec>
        <setSpec>month_year_09_2026</setSpec>
      </header>
      <metadata>
        <oai_dc:dc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
          <dc:title>Rising CO₂ closes the temperature window on the C3-to-C4 transition — model, data and verification</dc:title>
          <dc:creator>Emre Yazar (25095388)</dc:creator>
          <dc:creator>Bülent Akgün (25095407)</dc:creator>
          <dc:subject>Ecological physiology</dc:subject>
          <dc:subject>Bioinformatic methods development</dc:subject>
          <dc:subject>Bioinformatics and computational biology not elsewhere classified</dc:subject>
          <dc:subject>Plant physiology</dc:subject>
          <dc:subject>Plant biochemistry</dc:subject>
          <dc:subject>Plant biology not elsewhere classified</dc:subject>
          <dc:subject>C2 photosynthesis</dc:subject>
          <dc:subject>C3–C4 intermediate</dc:subject>
          <dc:subject>CAM</dc:subject>
          <dc:subject>elevated CO₂</dc:subject>
          <dc:subject>nitrogen allocation</dc:subject>
          <dc:subject>photorespiration</dc:subject>
          <dc:subject>Rubisco kinetics</dc:subject>
          <dc:subject>stomatal optimality</dc:subject>
          <dc:description>&lt;p dir="ltr"&gt;This deposit contains everything behind the manuscript of the same name: the&lt;/p&gt;&lt;p dir="ltr"&gt;leaf model, the seven simulation batches that produced every number, the script&lt;/p&gt;&lt;p dir="ltr"&gt;that draws every figure, and `verify.py`, which recomputes each quantitative&lt;/p&gt;&lt;p dir="ltr"&gt;claim in the paper from the deposited data and reports a pass or failure against&lt;/p&gt;&lt;p dir="ltr"&gt;it.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;No new experimental data were generated. All validation is against published&lt;/p&gt;&lt;p dir="ltr"&gt;literature.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;## Quick start&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;```bash&lt;/p&gt;&lt;p dir="ltr"&gt;pip install numpy scipy pandas matplotlib&lt;/p&gt;&lt;p dir="ltr"&gt;python scripts/verify.py          # 150 checks; prints ALL PASS&lt;/p&gt;&lt;p dir="ltr"&gt;python scripts/figures.py         # redraws every figure into figures/&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Both run from any working directory and find the data relative to themselves.&lt;/p&gt;&lt;p dir="ltr"&gt;Set `PATHWAYS_DEPOSIT` to point them at a copy of this tree somewhere else.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Reproducing a batch from scratch takes longer. Each script is resumable — it&lt;/p&gt;&lt;p dir="ltr"&gt;skips any row already present in its output CSV — so it can be stopped and&lt;/p&gt;&lt;p dir="ltr"&gt;restarted freely:&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;```bash&lt;/p&gt;&lt;p dir="ltr"&gt;python scripts/final.py --workers 16      # ~2301 leaf-days&lt;/p&gt;&lt;p dir="ltr"&gt;python scripts/vogan_axis.py --workers 16 # ~274 leaf-days, about 12 min&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Delete (or move aside) the corresponding `results_*/` directory first if you&lt;/p&gt;&lt;p dir="ltr"&gt;want a genuinely fresh run rather than a resume.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;## What is here&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p dir="ltr"&gt;pathways/                 the model package&lt;/p&gt;&lt;p dir="ltr"&gt;scripts/                  the seven batch scripts, verify.py, figures.py&lt;/p&gt;&lt;p dir="ltr"&gt;results_final/            the production batch the paper reports&lt;/p&gt;&lt;p dir="ltr"&gt;results_barrier/          the matched-barrier and fixed-mean sweeps&lt;/p&gt;&lt;p dir="ltr"&gt;results_controls/         hydraulic, drought and CAM controls&lt;/p&gt;&lt;p dir="ltr"&gt;results_light/            photon flux, leaf nitrogen, and the λ endpoints&lt;/p&gt;&lt;p dir="ltr"&gt;results_vogan/            the continuous sweep along the ¹⁴C-fixation axis&lt;/p&gt;&lt;p dir="ltr"&gt;results_topt_convention/  the thermal validation under the mean temperature convention&lt;/p&gt;&lt;p dir="ltr"&gt;results_superseded/       three earlier batches, deposited unchanged&lt;/p&gt;&lt;p dir="ltr"&gt;figures/                  output of scripts/figures.py, under its internal names&lt;/p&gt;&lt;p dir="ltr"&gt;figures_as_published/     the same figures under the numbers used in the paper&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;### The model&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;`pathways/` implements one leaf in two compartments, mesophyll and bundle&lt;/p&gt;&lt;p dir="ltr"&gt;sheath, coupled by diffusion through the bundle-sheath conductance *g*bs. The&lt;/p&gt;&lt;p dir="ltr"&gt;carboxylation core is Farquhar–von Caemmerer–Berry in each compartment; the C4&lt;/p&gt;&lt;p dir="ltr"&gt;cycle follows von Caemmerer (2021). Six pathway configurations — C3, C2, two&lt;/p&gt;&lt;p dir="ltr"&gt;C3–C4 intermediate states, C4 and CAM — are points in one continuous&lt;/p&gt;&lt;p dir="ltr"&gt;configuration space, not separate models, and they share a leaf-nitrogen budget,&lt;/p&gt;&lt;p dir="ltr"&gt;a soil–plant hydraulic system and a single marginal water cost λ.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;| file | what it holds |&lt;/p&gt;&lt;p&gt;|---|---|&lt;/p&gt;&lt;p dir="ltr"&gt;| `leaf.py` | the two-compartment leaf and its steady state |&lt;/p&gt;&lt;p dir="ltr"&gt;| `ledger.py` | the shared ATP/NADPH budget, c₁₄ ATP-synthase stoichiometry |&lt;/p&gt;&lt;p dir="ltr"&gt;| `nitrogen.py` | the leaf-nitrogen budget and how capacity is bought from it |&lt;/p&gt;&lt;p dir="ltr"&gt;| `kinetics_v2.py` | pathway-specific Rubisco kinetics and their temperature response |&lt;/p&gt;&lt;p dir="ltr"&gt;| `optimal_stomata.py` | the Cowan–Farquhar optimality solution for *g*s |&lt;/p&gt;&lt;p dir="ltr"&gt;| `soil.py` | the soil column and the plant hydraulic path |&lt;/p&gt;&lt;p dir="ltr"&gt;| `cam.py` | the CAM configuration and the diurnal forcing |&lt;/p&gt;&lt;p dir="ltr"&gt;| `config.py` | the configuration vector θ |&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Modules not imported by the seven batch scripts (`stomata.py`, `photo3.py`,&lt;/p&gt;&lt;p dir="ltr"&gt;`compete.py`, `kinetics.py`, `optimal_cam.py`) are earlier or alternative&lt;/p&gt;&lt;p dir="ltr"&gt;implementations, kept so that the superseded batches can be re-derived.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;### The batches&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;One leaf-day is one 24-step diurnal integration of one configuration under one&lt;/p&gt;&lt;p dir="ltr"&gt;forcing. 6487 leaf-days in the current batches, plus 6850 superseded.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;| script | output | leaf-days | what it supports in the paper |&lt;/p&gt;&lt;p&gt;|---|---|---|---|&lt;/p&gt;&lt;p dir="ltr"&gt;| `final.py` | `results_final/` | 2301 | the ladder, the acclimated grid, the respiration control, the Rubisco swap, the λ sweep, the thermal optima |&lt;/p&gt;&lt;p dir="ltr"&gt;| `barrier.py` | `results_barrier/` | 810 | the second step at a matched barrier; the amplitude envelope at fixed reported mean |&lt;/p&gt;&lt;p dir="ltr"&gt;| `controls.py` | `results_controls/` | 756 | evaporative demand × drought; the hydraulic null; CAM priced in the same water |&lt;/p&gt;&lt;p dir="ltr"&gt;| `light.py` | `results_light/` | 2250 | photon flux 200–1600; leaf nitrogen 1.0–3.0 g m⁻²; the Way *et al.* λ endpoints |&lt;/p&gt;&lt;p dir="ltr"&gt;| `vogan_axis.py` | `results_vogan/` | 274 | the water step on Vogan's own ¹⁴C axis, swept continuously |&lt;/p&gt;&lt;p dir="ltr"&gt;| `topt_convention.py` | `results_topt_convention/` | 96 | the thermal validation re-run under the mean temperature convention |&lt;/p&gt;&lt;p dir="ltr"&gt;| `production.py` | `results_superseded/results_production/` | 2292 | superseded; see below |&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;`results_vogan/vogan_axis.csv` carries 302 rows for 274 configurations. Ten&lt;/p&gt;&lt;p dir="ltr"&gt;"rung" jobs are written out with their actual *f*R,BS while the job spec leaves&lt;/p&gt;&lt;p dir="ltr"&gt;it blank, so the original resume key never matched them and they were recomputed&lt;/p&gt;&lt;p dir="ltr"&gt;on each restart. The duplicates agree to 2×10⁻¹⁰, `verify.py` de-duplicates&lt;/p&gt;&lt;p dir="ltr"&gt;before using the file, and the key has been fixed in the deposited&lt;/p&gt;&lt;p dir="ltr"&gt;`vogan_axis.py` — re-running it against this CSV now reports "0 to run" rather&lt;/p&gt;&lt;p dir="ltr"&gt;than repeating those ten. The CSV is deposited as it was produced.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;### Superseded batches&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Three earlier batches are deposited unchanged so that numbers quoted in earlier&lt;/p&gt;&lt;p dir="ltr"&gt;versions of this work can be re-derived. **They are not the batches the paper&lt;/p&gt;&lt;p dir="ltr"&gt;reports**, and where a superseded file and its replacement both exist the paper&lt;/p&gt;&lt;p dir="ltr"&gt;uses the replacement:&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;- `results_production/` — run before day respiration was charged against the&lt;/p&gt;&lt;p dir="ltr"&gt;  whole nitrogen budget. Its `gbs_band.csv` measures the second step without&lt;/p&gt;&lt;p dir="ltr"&gt;  matching the bundle-sheath barrier, which `results_barrier/matched_barrier.csv`&lt;/p&gt;&lt;p dir="ltr"&gt;  replaces.&lt;/p&gt;&lt;p dir="ltr"&gt;- `results_revision/` — run on a leaf-nitrogen allocation that gave&lt;/p&gt;&lt;p dir="ltr"&gt;  *J*max/*V*cmax outside the measured range.&lt;/p&gt;&lt;p dir="ltr"&gt;- `results_testbatch/`, `sweep.csv` — exploratory.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;### Figures&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;`scripts/figures.py` redraws all eleven figures and writes a `.json` sidecar&lt;/p&gt;&lt;p dir="ltr"&gt;beside each one recording the input files and their SHA-256 hashes, so a figure&lt;/p&gt;&lt;p dir="ltr"&gt;can always be traced to the data it was drawn from. The script uses its own&lt;/p&gt;&lt;p dir="ltr"&gt;internal names; the paper renumbers them:&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;| in the paper | in `figures/` |&lt;/p&gt;&lt;p&gt;|---|---|&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. 1 | `Fig1_crossover` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. 2 | `Fig2_c2_advantage` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. 3 | `Fig4_three_currencies` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. 4 | `Fig6_undetermined_step` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. 5 | `Fig7_rubisco_kinetics` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. 6 | `Fig5_validation` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. 7 | `Fig8_cam` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. S1 | `Fig3_design_space` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. S2 | `Fig9_water_robustness` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. S3 | `Fig10_light` |&lt;/p&gt;&lt;p dir="ltr"&gt;| Fig. S4 | `Fig11_nitrogen` |&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;`figures_as_published/` holds the same files under the paper's numbering.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;`figures.py` refuses to run without `results_controls/`, because two of its&lt;/p&gt;&lt;p dir="ltr"&gt;panels must not be built from the superseded nitrogen arm.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;## verify.py&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;The point of this deposit. `verify.py` transcribes each claim in the paper as a&lt;/p&gt;&lt;p dir="ltr"&gt;literal, recomputes the same quantity from the deposited CSVs, and prints a pass&lt;/p&gt;&lt;p dir="ltr"&gt;or failure. It does not import the manuscript, so a transcription error in the&lt;/p&gt;&lt;p dir="ltr"&gt;paper fails here rather than being reproduced.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p dir="ltr"&gt;$ python scripts/verify.py&lt;/p&gt;&lt;p&gt;...&lt;/p&gt;&lt;p&gt;==============================================================================&lt;/p&gt;&lt;p dir="ltr"&gt;ALL PASS&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;150 checks. Among them: the crossover temperatures and the window closing at&lt;/p&gt;&lt;p dir="ltr"&gt;both ends; the C2 carbon and water results across every sensitivity axis; the&lt;/p&gt;&lt;p dir="ltr"&gt;matched-barrier second step; the Rubisco swap at equal nitrogen and at equal&lt;/p&gt;&lt;p dir="ltr"&gt;*V*cmax; the thermal optima under both temperature conventions; and the water&lt;/p&gt;&lt;p dir="ltr"&gt;step on the ¹⁴C axis, including the two failures the paper reports.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Three checks in an earlier version failed once the `vogan_axis` batch was&lt;/p&gt;&lt;p dir="ltr"&gt;complete, and the claims were corrected rather than the checks relaxed. The&lt;/p&gt;&lt;p dir="ltr"&gt;checker is written so that this is the normal way a wrong number is caught.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;## Two failures the paper reports rather than hides&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Both are checked here, so a reader can confirm them.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;**The thermal optimum.** On the quantity a cuvette *A*–temperature response&lt;/p&gt;&lt;p dir="ltr"&gt;actually measures, the modelled C3 optimum is 6–10 °C too warm and reproduces&lt;/p&gt;&lt;p dir="ltr"&gt;42% of the measured shift with growth CO₂ (34% under the mean temperature&lt;/p&gt;&lt;p dir="ltr"&gt;convention). The C4 optimum moves −1.7 °C against a measured +2.5 — identically&lt;/p&gt;&lt;p dir="ltr"&gt;under both conventions, so it is not an artefact of which temperature is called&lt;/p&gt;&lt;p dir="ltr"&gt;the growth temperature.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;**The water step.** Across the 50–65% ¹⁴C-fixation interval Vogan (2010)&lt;/p&gt;&lt;p dir="ltr"&gt;measured, the model gives 0.97–1.22× at 380 µmol mol⁻¹ and 1.06–1.35× at 180,&lt;/p&gt;&lt;p dir="ltr"&gt;against a measured 2–2.5×. Over the *whole* axis it gives 2.31× and 2.11× — the&lt;/p&gt;&lt;p dir="ltr"&gt;size that was measured. The defect is where the water gain sits along the axis,&lt;/p&gt;&lt;p dir="ltr"&gt;not its total.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;## Requirements&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Python 3.9 or later with `numpy`, `scipy`, `pandas` and `matplotlib`. No&lt;/p&gt;&lt;p dir="ltr"&gt;compiled extensions, no configuration, no network access. See&lt;/p&gt;&lt;p dir="ltr"&gt;`requirements.txt`.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;## Depositing this elsewhere&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Nothing here is tied to a particular archive. `DEPOSIT-METADATA.txt` holds the&lt;/p&gt;&lt;p dir="ltr"&gt;title, authors, ORCIDs, description, keywords and licence in plain text, ready&lt;/p&gt;&lt;p dir="ltr"&gt;to paste into any repository's upload form; `zenodo.json` is the machine-readable&lt;/p&gt;&lt;p dir="ltr"&gt;form for Zenodo and other InvenioRDM sites, and `CITATION.cff` is read by GitHub,&lt;/p&gt;&lt;p dir="ltr"&gt;Dataverse and most citation tooling. Whichever archive is used, the DOI it issues&lt;/p&gt;&lt;p dir="ltr"&gt;goes into the manuscript's Data availability statement in place of&lt;/p&gt;&lt;p dir="ltr"&gt;"[DOI on acceptance]".&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;## Licence&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Code is MIT (`LICENSE`). Data files in `results_*/` and the figures are&lt;/p&gt;&lt;p dir="ltr"&gt;CC BY 4.0. Cite the manuscript and this deposit if you use either.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;</dc:description>
          <dc:date>2026-09-23T08:41:58Z</dc:date>
          <dc:type>Dataset</dc:type>
          <dc:type>Dataset</dc:type>
          <dc:identifier>10.6084/m9.figshare.33972085.v1</dc:identifier>
          <dc:relation>https://figshare.com/articles/dataset/Rising_CO_closes_the_temperature_window_on_the_C3-to-C4_transition_model_data_and_verification/33972085</dc:relation>
          <dc:rights>MIT</dc:rights>
        </oai_dc:dc>
      </metadata>
    </record>
  </GetRecord>
</OAI-PMH>
