Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

member_winters.csv is written by load_cache(rebuild=True) in ../lensml.py (run from chapter 1, The member-winter table) and read by every chapter. Its first line is a # header recording the parameters it was derived with. The committed copy says derived by 02_applications.ipynb, this cookbook’s earlier single-notebook version, which produced it on 2026-10-20; the same derivation now lives in lensml.py, and a rebuild writes derived by lensml.py. The header records (SEASON, WINDOW, FRONT_RANGE, NINO34, n_members_per_half, RNG_SEED, access date). One row = one member-winter: member_id, forcing_variant, winter, nino34_son_K, prect_winter_mm_day — the raw SON Niño 3.4 box mean and the raw season-mean precipitation; the forced response is removed and the target defined in chapter 2, on training members only, so the cache carries no split-dependent quantity.

columnwhat it isunit
member_idthe CESM2 LENS ensemble member the row belongs to (the form the table carries, e.g. r10i1181p1f1)—
forcing_variantthe forcing half the member comes from (cmip6 or smbb)—
winterthe year label of the member-winter, inside the header’s WINDOWyear
nino34_son_Kthe raw SON Niño 3.4 box meanK
prect_winter_mm_daythe raw season-mean precipitation over the Front Range boxmm/day

Shape of the committed copy, each value measured from the file itself (the command in the last column, run over the lines after the # header with csv.DictReader; chapter 1 prints the member and winter counts it reads at run time):

measurementvaluemeasured by
rows (member-winters)11500len(rows)
distinct member_id100len({r["member_id"] for r in rows})
forcing variants2 (cmip6, smbb)sorted({r["forcing_variant"] for r in rows})
winter range1900–2014min(int(r["winter"]) for r in rows), max(...)
header fields7 (SEASON, WINDOW, FRONT_RANGE, NINO34, n_members_per_half, RNG_SEED, access)re.findall(r"(\w+)=", first_line)

member_winters_ssp370.csv (chapter 7)

The same 100 members, boxes, DJF season and SON autumn under SSP3-7.0, winters 2016–2100 (DJF 2015 would need December 2014 from the historical store), derived from the ssp370 stores by derive_future_cache in ../lensml.py with the same derive_member_winters. Its header records the experiment, window, parameters, member count and access date (2026-10-29); load_future_cache asserts that the header contains FUTURE_RECORD (experiment, season, window, both boxes, autumn months) and that its access= date equals FUTURE_ACCESS_DATE in lensml.py. ssp370-test-protocol.md, beside it, is the protocol chapter 7 follows, verbatim. Chapter 7 is the only reader, under a protocol written, by the author’s account, before the file was derived (self-attested; no external timestamp). The protocol is kept exactly as written, so two of its phrases predate the published text: its title and chapter 7’s printed rule say “pre-registered”, meaning fixed in advance by the author, not lodged with a registry; and its “seven limits” refer to a draft of chapter 6 that day, not in the repository history (chapter 6 now lists eight). Its second line (Glen chose "2") is the author’s note of choosing a fresh test; the “2” numbers an option in a list that is not in this repository. Its “scored on 2026-10-20” omits the neural network’s second scoring of the test members, on 2026-10-29 (chapter 6). Chapter 7 compares the file’s SHA-256 with its hash as committed with the test (851d900), so any edit, even a typo fix, shows there as “differs”; an amendment belongs in a new, dated file beside it.