Battery: per-set rugnux options (args), for files that misdescribe their experiment

A row may carry "args": [...] and an "args_why". The options go into that set's command
ahead of any the run passes to every set, and show in the row's cmd. They are meant for files from
a retired acquisition system that misdescribe the experiment in a way rugnux is not expected to
detect, e.g. a placeholder detector distance, or a run padded with frames recorded after the
shutter closed. They should stay limited to what the reference itself was given (its frame range,
its refined distance), so the comparison remains like for like.

Also names L-ascorbic acid in the Arms table and in doc_check's specimen map; the row was added
without them and doc_check failed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UqXYdL4qBGYRiSXSGXfCLu
This commit is contained in:
leonarski_fandClaude Opus 5.5 committed 2026-11-03 12:41:20 +01:00
1 parent 87912e1ca8
commit 6c5fbc8dae
3 files changed
+9 -2

No files matched your search

+7 -1
View File
@@ -23,7 +23,7 @@ data): `cd tools/battery && python3 doc_check.py`.
| arm | datasets | reference | manifest |
|---|---|---|---|
| **open** | public PDB depositions of raw diffraction data, plus a few published small-molecule sets | the deposited space group, cell and resolution | `open.json` (committed) |
| **inhouse** | standard test crystals measured at the SLS (lysozyme, thaumatin, insulin, cytochrome C, myoglobin), small-molecule standards (aspirin, citric acid, HEPES, YAG, KDP, L-cystine), plus no-crystal controls | XDS, from the `CORRECT.LP` beside each dataset (the standard proteins also carry a reference model for R-free, reported only: `--model` below); for the small molecules the space group is the literature's (`ref_override`), as XDS reports only Sohncke groups; L-cystine, which XDS does not index, has only the literature reference | `inhouse.json` (committed) |
| **inhouse** | standard test crystals measured at the SLS (lysozyme, thaumatin, insulin, cytochrome C, myoglobin), small-molecule standards (aspirin, citric acid, HEPES, YAG, KDP, L-cystine, L-ascorbic acid), plus no-crystal controls | XDS, from the `CORRECT.LP` beside each dataset (the standard proteins also carry a reference model for R-free, reported only: `--model` below); for the small molecules the space group is the literature's (`ref_override`), as XDS reports only Sohncke groups; L-cystine, which XDS does not index, has only the literature reference | `inhouse.json` (committed) |
| **private** | user data | XDS, like inhouse | outside the repository; the local site config gives its path |
| **refine** | public PDB depositions whose structure factors and coordinates go through refinement only, nothing processed | none: a set passes when the refinement ran; the R-factors and the solvent audit are reported | `refine.json` (committed) |
| **multisweep** | several sweeps merged as one - small wedges of several crystals, several sweeps of one crystal (swung detector, kappa runs, repeated sweeps), small molecules - plus must-not-merge controls; opt-in, never part of a default run | the base row's: each row names an open or in-house row (`base`), whose reference scores the merge as that arm scores it, plus which sweeps joined (`sweeps_expect`, below) | `multisweep.json` (committed) |
@@ -909,6 +909,12 @@ whole range; the manifest keeps the rule used as `dmin_rule`.
A reference measured by hand goes in `ref_override`, which `refs` leaves alone.
A set whose reference is known to be wrong gets `"unscored": "<why>"`: it still runs, but
scores `unscored` instead of pass or fail.
A set whose files misdescribe the experiment in a way rugnux is not meant to detect (a placeholder
distance written by a retired acquisition system, a run padded with frames recorded after the
shutter closed) gets `"args": [...]` and `"args_why": "<why>"`: the options are added to that set's
command, ahead of any the run passes to every set, and appear in the row's `cmd`. Keep them to
what the reference itself was given (its frame range, its refined distance), so the comparison
stays like for like; anything rugnux should work out on its own does not belong here.
A set where two answers are both defensible gets
`"ref_alternatives": [{"sg": ..., "sgno": ..., "cell": [...], "why": "<reason>"}]` - the fields
given replace the reference's, the row passes on any of its references, and `why` is mandatory.
+1
View File
@@ -412,6 +412,7 @@ def command(binary, e, opts, model=None):
f"{dmin:.3f}" + (f",{ref['dmax']:.3f}" if ref.get("dmax") else "")]
if model:
cmd += ["--model", model]
cmd += e.get("args", []) # the set's own options (see README), then the run's
cmd += opts["extra_args"]
cmd += e.get("input_paths") or [e["input_path"]]
if opts["gpulock"] and "--no-gpu" not in cmd: # a CPU run has no card to share
+1 -1
View File
@@ -30,7 +30,7 @@ DOCS = os.path.join(HERE, "..", "..", "docs")
INHOUSE = {"lyso": "lysozyme", "lysoI": "lysozyme", "thau": "thaumatin", "insu": "insulin",
"cytc": "cytochrome C", "myob": "myoglobin", "nothing": "no-crystal controls",
"aspirin": "aspirin", "citricacid": "citric acid", "hepes": "HEPES", "yag": "YAG",
"kdp": "KDP", "lcystine": "L-cystine"}
"kdp": "KDP", "lcystine": "L-cystine", "lascorbate": "L-ascorbic acid"}
errors = []