#!/usr/bin/env python3 """Rugnux still battery: run serial (XFEL stills) datasets, score the deposited model against each merge, report, compare. The rotation battery (battery.py) scores a lattice and a space group. For stills both are given (-C/-S, the way a serial user runs), so this battery reports what the merge is worth and what it costs instead: indexing rate, R_split, the R-free of the deposited model against our merge, not refined (model_check.py: REFMAC's first cycle, the deposition's own free set) beside the R-free of the same protocol on the deposited data (the target the verdict is taken against; the published R-free is shown for information), and the wall time of the rugnux command with the input's I/O floor next to it. Usage (README.md in this directory, section "The still battery", is the guide): still_battery.py run --rugnux BIN [--label L] [--only a,b | --tier smoke] [--threads N] [--cold] [--io-gbps G] still_battery.py compare RUN_A RUN_B still_battery.py report RUN [--out DIR] re-render a run's report.md (a run scored by an older protocol is rescored: give --out) still_battery.py list still runs under the runs root still_battery.py keep RUN --as workstation|server copy report.md, results.json, manifest.json into results/// (committed); refuses a private run The site config is the rotation battery's (--site, $JFJOCH_BATTERY_SITE, tools/battery/site.json), with a "still" section: {"manifest": "still_manifest.json", "data_root": DIR} and optionally "private_manifest" for local-only sets. A run writes /__still-