From e7c4cb128c57687eee6ed85bf8bb7966da7a7a34 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Mon, 5 Oct 2026 16:32:36 +0200 Subject: [PATCH] Docs: results report - rejection counters, every CENTRE_STATISTICS key, build flags - OBSERVATIONS_REJECTED / _WILSON / _OVERLOAD: what each counts and how they relate (the overload count is not part of OBSERVATIONS_REJECTED). - CENTRE_STATISTICS_REFLECTIONS and the three per-statistic _F keys are named; NOT_APPLICABLE is stated as the code decides it (any of the three outside -0.3..1.3, or the control below 0.5). - BUILD_CXX_FLAGS no longer says that -march moves the results: the build turns floating-point contraction off and the indexer's reductions no longer depend on SIMD width, so CPU levels agree. The RUGNUX_GIT and BUILD_CXX_FLAGS keys were also listed twice in the header paragraph. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01K5K8jvPPbmCrbqnWkddTuB --- docs/RUGNUX_REPORT.md | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/docs/RUGNUX_REPORT.md b/docs/RUGNUX_REPORT.md index 84596d33b..eace1fde4 100644 --- a/docs/RUGNUX_REPORT.md +++ b/docs/RUGNUX_REPORT.md @@ -60,6 +60,13 @@ scaled-up counting error gives it, and is in `R_MEAS_WEIGHTED=` at that weight t the number with its noise; a large gap between the two says weak frames are kept at low weight. `MULTIPLICITY=` stays a count of observations. +**`OBSERVATIONS_REJECTED=`** counts the observations the merge's outlier tests removed, and +**`OBSERVATIONS_REJECTED_WILSON=`** the part of them the Wilson test took (each listed in the developer +report). **`OBSERVATIONS_REJECTED_OVERLOAD=`** is separate from both: the rotation measurements left +out because a pixel of the spot was overloaded on one of its frames, as XDS leaves out an overloaded +reflection. Outlier rejection takes observations out of `R_MEAS=` and `CC_HALF=` too, so a run that +rejects much scores better on both; read the counts beside them. + The last blocks before `END OF REPORT` are the authorship and the acknowledgement: who wrote rugnux, its licence (GPLv3 — free to use for academic institutions and commercial companies alike) and where releases are published, then the credit to the X-ray research community whose methods @@ -74,15 +81,14 @@ line. It counts releases, not changes: it moves at most once per release, howeve changes that release carries, because a reader only ever meets the format that was released. The header block above section 1 records **how the result was produced**: `RUGNUX_VERSION=` and -`RUGNUX_DOWNLOAD=` (the release page of exactly that version), `RUGNUX_GIT=`, `BUILD_CXX_FLAGS=`, -`DATE=`, `INPUT_FILE=` and `OUTPUT_PREFIX=`, plus +`RUGNUX_DOWNLOAD=` (the release page of exactly that version), `DATE=`, `INPUT_FILE=` and +`OUTPUT_PREFIX=`, plus - **`RUGNUX_GIT=`** — the commit the binary was built from, stamped at build time so it cannot go stale in a reconfigured tree; a `-dirty` suffix marks a build from uncommitted changes. -- **`BUILD_CXX_FLAGS=`** — the compiler flags of the build (`NONE` for a plain configure). Two - builds of one commit can differ by flags alone, and `-march` moves the CPU-bound results, so a - comparison of two reports starts here. - +- **`BUILD_CXX_FLAGS=`** — the compiler flags of the build (`NONE` for a plain configure). The build + is set up so that the CPU level it targets (`-march`) does not change the results, only the speed; + where two reports of one commit still disagree, this is the first line to compare. - **`COMMAND_LINE=`** — the invocation as one shell-ready line, arguments containing spaces quoted. - **`WALL_TIME=`** — the whole invocation in seconds. It covers everything the process did, opening the file and setting up included, so it is a little larger than the `Processing time` printed on @@ -265,15 +271,18 @@ I4_1md); the lowest-numbered is written and the other listed as the alternative. `CENTRE_STATISTICS_*` are the intensity statistics behind that, read on every searched run on the general reflections - those no operator of the Laue class but the identity maps to themselves, which -are centric exactly when the crystal is centrosymmetric. `CENTRE_STATISTICS_L=` is <|L|> (Padilla & -Yeates; 0.5 acentric, 2/pi centric), `CENTRE_STATISTICS_E2_MINUS_1=` <|E^2-1|> (0.736 / 0.968) and -`CENTRE_STATISTICS_NZ01=` N(0.1), the fraction with E^2 < 0.1 (0.095 / 0.248). Each `_F` places its -statistic between the values the same reflections read when simulated acentric (0) and centric (1) -with their own shell means and sigmas; `CENTRE_STATISTICS_CONTROL_F=` does the same for the -reflections centric in every candidate, which must read centric. `CENTRE_STATISTICS_VERDICT=` is -`ACENTRIC` when <|L|> reads `_F` <= 0.3 and the other two <= 0.5, `NOT_APPLICABLE` when any reading -falls outside -0.3..1.3 (a structure with a few heavy atoms on special positions reads beyond centric) -or the control is not centric, and `INCONCLUSIVE` otherwise. A twinned crystal reads acentric whether +are centric exactly when the crystal is centrosymmetric; `CENTRE_STATISTICS_REFLECTIONS=` is how many +there were. `CENTRE_STATISTICS_L=` is <|L|> (Padilla & Yeates; 0.5 acentric, 2/pi centric), +`CENTRE_STATISTICS_E2_MINUS_1=` <|E^2-1|> (0.736 / 0.968) and `CENTRE_STATISTICS_NZ01=` N(0.1), the +fraction with E^2 < 0.1 (0.095 / 0.248). Each has an `_F` beside it (`CENTRE_STATISTICS_L_F=`, +`_E2_MINUS_1_F=`, `_NZ01_F=`) that places the statistic between the values the same reflections read +when simulated acentric (0) and centric (1) with their own shell means and sigmas; +`CENTRE_STATISTICS_CONTROL_F=` does the same for the reflections centric in every candidate, which +must read centric. The statistics are written only where L-test pairs and control reflections were +found. `CENTRE_STATISTICS_VERDICT=` is `ACENTRIC` when <|L|> reads `_F` <= 0.3 and the other two +<= 0.5, `NOT_APPLICABLE` when any of the three falls outside -0.3..1.3 (a structure with a few heavy +atoms on special positions reads beyond centric) or the control reads below 0.5, and `INCONCLUSIVE` +otherwise. A twinned crystal reads acentric whether or not it has a centre, which is why the verdict decides only with twinning excluded by the lattice. `SPACE_GROUP_ENANTIOMORPH=` in section 2 reads **`ASSUMED_FROM_MODEL`** when the hand written in the