Atmospheric CO2 Rebuild Guide (First Principles)

This guide explains how atmospheric CO2 data is measured and reconstructed across time windows, where to obtain each source, and how to assemble a clear long-run chart for non-specialist visitors.

BP convention: in ice-core datasets, BP means years before 1950 CE.
Deep time: use Ma (million years ago) rather than BP for Cenozoic and older windows.
Main split: NOAA NCEI for 0-800 kyr; paleo-co2.org for 800 kyr and older.

Static Time-Window Guide (Log Years BP)

Orientation map. Horizontal position uses a logarithmic years-BP axis (older left, recent right), with a small right-edge extension for post-1950 CE observations.

Current year
1 billion
100 million
10M (10^7)
1M (10^6)
100,000
10,000
1,000
100
0 BP = 1950 CE
Direct atmospheric (NOAA GML): 1958 CE to current year
Law Dome ice-core (NOAA NCEI): 1 CE to 2006 CE (about 1,949 BP to modern)
Antarctic composite ice-core (NOAA NCEI): 803,718 BCE to 2001 CE
Vetted CenCO2PIP source window: about 66 million years ago to near-present
Archive extension (original published proxy estimates, mixed methods): about 540 to 66 million years ago
Proxy method: phytoplankton (listed in current CSV metadata)
Proxy method: boron
Proxy method: stomata
Proxy method: leaf gas exchange
Proxy method: liverworts
Proxy method: land plant d13C
Proxy method: palaeosols
Proxy method: nahcolite
How to read BP: BP means years before 1950 CE. So 0 BP = 1950 CE. Mauna Loa starts in 1958 CE, which is after the BP origin; that is why the blue direct bar sits just to the right of the BP line. The current year is shown in the top-right label.
Direct atmospheric source
Law Dome ice-core source
Antarctic composite ice-core source
Vetted Cenozoic synthesis
Archive extension
Proxy method: phytoplankton
Proxy method: boron
Proxy method: stomata
Proxy method: leaf gas exchange
Proxy method: liverworts
Proxy method: land plant d13C
Proxy method: palaeosols
Proxy method: nahcolite
Each row has one continuous segment, and colors are now one-to-one with row meaning (no duplicate ice-core color).
These rows describe source availability windows for data you can obtain, not just what is currently loaded in one local parsed file.
Proxy-method rows above reflect the method list present in the current proxy_type metadata string. This file does not yet carry row-level per-method tags, so these method rows show source-availability scope rather than method-isolated ranges.

Start Here (60-Second Decision Rule)

  1. If you need modern atmospheric CO2, use NOAA GML direct observations.
  2. If you need late Quaternary through 800 kyr BP, use NOAA ice-core records and the Antarctic composite.
  3. If you need Cenozoic deep time (66 Ma to 800 kyr), use CenCO2PIP vetted product.
  4. If you need older than 66 Ma, extend with CO2PIP archive data and keep that layer visually separate.

For non-expert visitors, the safest chart is a tiered hybrid: direct + ice-core + vetted product by default, with archive proxy data optional and clearly labeled as lower-standardized extension material.

First Principles: What These Data Types Mean

How The Releases Fit Together

Canonical Local Build Output (Single Source of Truth)

Every source should be converted into one harmonized table before plotting: ../../data/paleo_co2/co2_unified.csv.

Provenance file: ../../data/paleo_co2/manifest_downloads.csv.

Rebuild From Scratch (Only This Page Needed)

  1. Prerequisites
    • Python 3 installed and available as python3.
    • Parser dependencies installed (minimum):
      cd /Users/mintz/code/jim/trumps-tariffs.com
      python3 -m venv .venv
      source .venv/bin/activate
      python3 -m pip install --upgrade pip
      python3 -m pip install pandas openpyxl
  2. Rebuild harmonized CSV from raw downloads
    cd /Users/mintz/code/jim/trumps-tariffs.com
    python3 frontend/jim_cornelius_site/scripts/parse_all_co2_to_csv.py
  3. Validate parse output immediately
    python3 - <<'PY'
    import csv
    from collections import Counter
    from pathlib import Path
    p = Path('frontend/jim_cornelius_site/data/paleo_co2/co2_unified.csv')
    rows = list(csv.DictReader(p.open()))
    print('rows', len(rows))
    print('archives', dict(Counter(r['archive'] for r in rows)))
    PY

    Current expected shape for this repository (as of May 2026): row count around 9.3k, with archive families including Modern instrumental, Merged Antarctic ice-core CO2, Byrd ice core, and CenCO2PIP vetted product.

  4. Serve and open chart page
    cd /Users/mintz/code/jim/trumps-tariffs.com/frontend/jim_cornelius_site
    python3 -m http.server 8000
    # default: http://localhost:8000/pages/climate/co2_long_run_hybrid.html
    # optional custom host if configured: http://jim-cornelius.localhost:8000/pages/climate/co2_long_run_hybrid.html

Chart Behavior Spec (For Non-Expert Visitors)

If you rebuild or replace the chart, keep these controls and defaults so the output is interpretable.

Quality Gates Before Publishing

  1. No future-year artifacts in paleo/ice-core layers.
  2. No unresolved cross-product duplicates in overlapping vetted/product families.
  3. Archive extension is visibly distinct from vetted and direct evidence.
  4. Axis text clearly explains BCE/CE and log/linear mode.
  5. Default view is readable for non-specialists without touching controls.

Troubleshooting Fast Path