tools/battery: the like-for-like table covers XDS's own range

--report-resolution now gets XDS's own d_min, the range its CORRECT.LP totals
cover, so the comparison is exact; shells past rugnux's cut print as not
merged. The derived reference d_min stays what rugnux's own cut is scored
against.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-19 11:22:49 +02:00
co-authored by Claude Opus 5
parent 9b3eea72fe
commit a20e27a69f
2 changed files with 14 additions and 10 deletions
+6 -6
View File
@@ -30,7 +30,7 @@ Every set runs **once**, with one command per arm:
| arm (reference) | command |
|---|---|
| open (deposition) | `rugnux -o p --no-export-unmerged --model <deposited coordinates> <input>`; sets without a deposited model (small molecules, unpublished sets, or coordinates that cannot be downloaded) run the same command without `--model` |
| inhouse, private (XDS) | `rugnux -o p --no-export-unmerged [-A] --report-resolution <reference d_min>,<XDS d_max> <input>` |
| inhouse, private (XDS) | `rugnux -o p --no-export-unmerged [-A] --report-resolution <XDS d_min>,<XDS d_max> <input>` |
Neither `--model` nor `--report-resolution` changes the processing: the merged reflections, the
resolution cut and every decision are the same with and without them (verified bit for bit). So
@@ -50,8 +50,8 @@ the reference:
data's own determination instead (`SOHNCKE_SPACE_GROUP` where `SPACE_GROUP_ENANTIOMORPH` is
`ASSUMED_FROM_MODEL`) and keeps the label in `sg_label`.
- **`--report-resolution`** (XDS arms): a second statistics table from the same merge, binned over
XDS's range (the reference d_min, see "The XDS reference d_min" below, and XDS's d_max as given,
999 included), and `-A` where XDS merged with `FRIEDEL'S_LAW=FALSE` (`"anomalous": true` in the
XDS's own range (`dmin_xds` and XDS's d_max as given, 999 included, so it covers exactly what
XDS's CORRECT.LP totals cover), and `-A` where XDS merged with `FRIEDEL'S_LAW=FALSE` (`"anomalous": true` in the
manifest), so the two tables count the same way. Its REFRES_* numbers are scored against XDS's
CORRECT.LP totals: completeness, multiplicity, R_meas, CC1/2 and ISa (I/sigma is shown; the
manifest holds no XDS value for it). Where rugnux's own cut is coarser than the reference
@@ -325,9 +325,9 @@ is significant, and that decides which case applies (`inputs.reference_dmin`):
point where XDS's CC1/2 falls through 0.30 (the target of rugnux's own cutoff), interpolated in
1/d² between shell centres.
The derived value is both the score reference and the d_min of the reference-range table. The manifest keeps XDS's own
limit as `dmin_xds` and the rule used as `dmin_rule`. XDS's pooled R_meas, CC1/2 and completeness
still cover its whole range.
The derived value is the reference rugnux's own cut is scored against. The reference-range table
uses XDS's own limit, `dmin_xds`, because XDS's pooled R_meas, CC1/2 and completeness cover its
whole range; the manifest keeps the rule used as `dmin_rule`.
## Adding or changing datasets
+8 -4
View File
@@ -68,7 +68,7 @@ PDB_ID = re.compile(r"^[0-9][A-Za-z0-9]{3}$")
COMMAND_DOC = {
"deposition": "`rugnux --model <deposited coordinates> <input>` (without --model where there is no "
"deposited model: small molecules, unpublished sets)",
"xds": "`rugnux [-A] --report-resolution <reference d_min>,<XDS d_max> <input>`: -A where XDS kept "
"xds": "`rugnux [-A] --report-resolution <XDS d_min>,<XDS d_max> <input>`: -A where XDS kept "
"Friedel mates apart; the second statistics table at XDS's range is report-only",
}
@@ -178,10 +178,14 @@ def command(binary, e, opts, model=None):
# statistics are not comparable
if ref.get("anomalous"):
cmd.append("-A")
# a second statistics table over XDS's range, from the same merge (report only)
if ref.get("dmin"):
# a second statistics table over XDS's own range, from the same merge (report only). XDS's
# own limit, not the derived reference d_min: the manifest's XDS totals are over XDS's range,
# so only that makes the table like for like. Shells past rugnux's own cut print as not
# merged.
dmin = ref.get("dmin_xds") or ref.get("dmin")
if dmin:
cmd += ["--report-resolution",
f"{ref['dmin']:.3f}" + (f",{ref['dmax']:.3f}" if ref.get("dmax") else "")]
f"{dmin:.3f}" + (f",{ref['dmax']:.3f}" if ref.get("dmax") else "")]
if model:
cmd += ["--model", model]
cmd += opts["extra_args"]