The battery is bound by reading images from disk, so instead of one battery run per setting each
set now runs in all its variants in a row while its images are still in the page cache:
open arm bare, then model (rugnux --model <deposited coordinates>)
XDS arms bare, then xds (XDS's resolution range forced, -A where XDS was anomalous)
bare (plain rugnux <input>) runs first on every arm, so its time always carries the set's disk
read whichever variants are selected; each row records first_read and the report's timing table
says which variant's times are cold. --variants runs a subset; --unforced is gone (--variants
bare). Rows, work dirs (work/<arm>/<set>/<variant>/), compare and the report are per variant;
compare pairs (arm, set, variant) on the variants both runs have on an arm, and a schema-1 run is
read as one variant. The model variant takes the coordinates and published R-free from
model_check's RCSB cache (site key pdb_cache) and records rugnux's R-free/R-work and the ratio;
the REFMAC check is now opt-in (--model-check) and its keys moved to refmac_*. results_schema 2.
model_sweep.py is retired: the model variant replaces it (its --spot/--scaling-low-resolution 50
were rugnux's defaults, so the command is the same).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Site config: site.example.json is committed; the local site.json (git-ignored) or
$JFJOCH_BATTERY_SITE / --site names this machine's paths and the private manifest.
Data roots are the arms' own directories, so copying them and editing the site
config moves the battery.
- Run states: manifest records the runner's pid; a run is complete, running, aborted
(Ctrl-C/SIGTERM, or `abort RUN`) or unfinished. compare and report refuse a run
that did not finish unless --allow-incomplete, and the report says so.
- `list` shows runs and their state; `run` defaults its label to the rugnux version
and its baseline to the site's persisted one; a baseline must be complete and of
the same privacy as the run; a private report cannot be written into the repo.
- XDS reference d_min: when the finest shell of XDS's table has no significant
CC1/2, XDS merged past its own signal (no resolution cut, or a cut at the detector
edge) and its limit is the detector's reach. The reference is then where XDS's
CC1/2 falls through 0.30 (rugnux's own target), and that is also the range forced
on rugnux. The manifest keeps XDS's limit (dmin_xds) and the rule (dmin_rule).
Forcing the old 1.08 A on the weak insulin set turned rugnux's I23 into I222
(ISa 12.5); forced at the derived 1.81 A it is I23 again (ISa 18.0). Changed in
the inhouse arm: insu_I_weak 1.08 -> 1.81, lyso_half_image 0.80 -> 2.60,
cytc_eiger 2.04 -> 2.27, lyso_strong 1.18 -> 1.24; every other inhouse limit stands.
- inhouse.json follows the directory rename (ids and inputs, data root
/home/data/inhouse); `remap` applies such a rename and keeps the old ids as
aliases, so runs from before it still compare set by set.
- Optional open-arm model check (model_check.py, when present): R-free of the
deposited model against each merge, recorded and plotted.
- results.json has a fixed, documented row schema (results_schema 1); the HTML
report gains inline-SVG plots (verdicts per arm, d_min and R-free ratios per set).
- README.md: arms, data layout and provenance, prerequisites, running, run
directory, results schema, report, comparing, protocol, adding datasets.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>