docs: document the asymptotic ISa reporting and the azint Q-field precision

CHANGELOG: describe reporting ISa at its asymptotic definition (read from the
strong equivalents, relaxed threshold on weak/damaged data) and the frontend
azimuthal-integration Q fields gaining 5-decimal precision.
CPU_DATA_ANALYSIS: update the error-model section - ISa is the counting-
subtracted strong-reflection asymptote (and drives the systematic floor), not
1/b of the whole-range fit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-17 20:58:38 +02:00
co-authored by Claude Opus 4.8
parent 59e260876a
commit 3a23c79ea4
2 changed files with 3 additions and 1 deletions
+2
View File
@@ -3,6 +3,8 @@
### 1.0.0-rc.160
This is an UNSTABLE release. It includes many experimental features, as well as many AI generated fixes. We recommend using rc.152 for production use.
* rugnux: Report **ISa** at its asymptotic definition - the $I\to\infty$ signal-to-noise limit, i.e. the reproducibility of the strongest reflections (Diederichs, *Acta Cryst.* D66 (2010) 733). It was taken as `1/b` of the whole-intensity-range error-model fit, whose intensity-proportional term `b` is raised by a mild excess of scatter at intermediate intensity, so it understated that limit. ISa is now read directly from the strong symmetry equivalents - the counting-subtracted fractional scatter of well-measured reflection groups, a robust median over strong groups. The reported ISa and the merged-intensity systematic floor both use this asymptotic value, so a high-multiplicity merged I/sigma approaches ISa; the whole-range `(a, b)` fit and the per-observation sigmas are left unchanged, so CC1/2, R-meas and the anomalous statistics are bit-identical. The `I/sigma` threshold that selects "strong" is relaxed on weak or radiation-damaged data with few strong reflections, so those recover the asymptote their own reflections support instead of falling back to the conservative whole-range value. Across the rotation battery ISa rises to the true asymptote of each dataset with no space-group or accuracy change (reaching parity with the reference on several crystals - e.g. a strong lysozyme 19->24, and a room-temperature radiation-damage series 5->11 whose CC1/2 and R-meas already exceeded the reference).
* Frontend: Make the numeric-input decimal precision configurable and raise the azimuthal-integration **Q fields** (Q spacing / Low Q / High Q) to 5 decimals. The number field quantised every float input to 3 decimals, so the finest reachable `q_spacing` was 0.001 - capping the azint q-bin count around 200 regardless of the CPU/FPGA backend; those fields now match the `q_spacing` minimum of 1e-5 (all other fields keep the 3-decimal default).
* rugnux: Add a dataset-wide **Wilson B-factor** estimate to the merged output (mmCIF `_reflns.B_iso_Wilson_estimate`, the printed merge statistics and the log) - the analogue of XDS's Wilson-line B, which was not exported. Fitted from the shell-averaged intensity vs 1/d^2 over the meaningful resolution range; diagnostic only, not fed back into scaling. The per-image Wilson B (viewer plot) now emits NaN for an implausible fit instead of the spurious hundreds-of-A^2 value a bad frame used to produce.
* rugnux: Veto a merohedral-twin over-promotion in the de-novo space-group search. A partial twin whose merged chi^2 looks self-consistent could be promoted to the holohedral group even though merging its non-equivalent reflections balloons the error-model b; a chi^2-passing promotion whose systematic b balloons past a calibrated bound is now kept in its true lower symmetry (an R3 case previously merged as R32; battery space-group match 20->21/25, no change to any genuine high-symmetry crystal).
* rugnux: De-novo space-group search - decide lattice **centering** from the strength of the systematically-absent class instead of a per-reflection violation count. A real centering cancels structure factors, so its absent class is systematically weak (its mean I/sigma sits well below the present class); the previous test - how many absent reflections individually cleared I/sigma>3 - was brittle on noisy or obverse/reverse-twinned data, where enough genuinely-absent reflections cross the threshold to trip the bound although the class is several-fold weaker. A rhombohedral (R) lattice whose absent class ran to ~13% individual violations was wrongly kept primitive (P) and is now correctly centered (with lower R-meas and higher ISa, matching the reference); the false-centering cases stay rejected because their absent class is as strong as the present one. Screw/glide axes keep the count test - their predicted-absent class is a handful of axial reflections, too few to average. Battery space-group match 21->22/25.
+1 -1
View File
@@ -548,7 +548,7 @@ Per-shell and overall merging statistics are computed on corrected intensities,
- completeness against the enumerated reflections for the cell and symmetry,
- the anomalous signal-to-noise $\mathrm{SigAno}$ (below).
The error model is refined as $\sigma_\mathrm{corr}^2 = a\,\sigma^2 + (b\,\langle I\rangle)^2$ with a systematic floor $\sigma\ge b|I|$; the asymptotic signal-to-noise $\mathrm{ISa}=1/b$ is reported and written to the output files.
The error model is refined as $\sigma_\mathrm{corr}^2 = a\,\sigma^2 + (b\,\langle I\rangle)^2$, with $a$ set by the scatter of weak (counting-limited) reflections and $b$ the intensity-proportional systematic scatter of the strong ones. **ISa** is the asymptotic ($I\to\infty$) signal-to-noise — by definition the reproducibility limit of the strongest reflections (Diederichs, *Acta Cryst.* **D66** (2010) 733) — and is read directly from the strong symmetry equivalents as the counting-subtracted fractional scatter of well-measured reflection groups (a robust median over strong groups; the $I/\sigma$ threshold is relaxed on weak or radiation-damaged data that has few strong reflections), rather than as $1/b$ of the whole-range fit, whose $b$ is raised slightly by an intermediate-intensity excess and so understates the limit. The reported ISa and the merged-intensity systematic floor $\sigma \ge b_\mathrm{ISa}\,|I|$ both use this asymptotic value, so a high-multiplicity merged $I/\sigma$ approaches ISa; the per-observation $\sigma_\mathrm{corr}$ (the merge weights) uses the whole-range $a,b$ and is unchanged.
**Anomalous signal-to-noise (SigAno).** The strength of the anomalous signal is reported per shell and overall as $\mathrm{SigAno}=\langle|\Delta I|\rangle / \langle\sigma(\Delta I)\rangle$, where $\Delta I = I(+)-I(-)$ over acentric reflections measured in both Bijvoet hands and $\sigma(\Delta I)=\sqrt{\sigma_+^2+\sigma_-^2}$. It is computed from the **full-multiplicity** inverse-variance $I(+)/I(-)$ split (the same one written to the output), i.e. from all observations rather than a half-set. For pure noise $\mathrm{SigAno}$ approaches the half-normal value $\sqrt{2/\pi}\approx0.8$, and it rises above $1$ once a real anomalous difference is present. A half-set anomalous correlation ("$\mathrm{CC}_\mathrm{anom}$") is deliberately **not** used: its two half estimates $\Delta I_0,\Delta I_1$ are complementary partitions of one observation pool ($\Delta I_0+\Delta I_1=2\,\Delta I_\mathrm{full}$), so subtracting the two Bijvoet hands cancels the large common intensity that keeps $\mathrm{CC}_{1/2}$ non-negative and leaves only the small anomalous signal against the per-half split noise; once the anomalous signal-to-noise per half drops below $1$ that correlation is driven towards $-1$ rather than $0$, misrepresenting a weak-but-real signal, whereas $\mathrm{SigAno}$ has no such floor. It is emitted only when an anomalous split was made, using the standard PDBx items `_reflns.pdbx_absDiff_over_sigma_anomalous` (overall) and `_reflns_shell.pdbx_absDiff_over_sigma_anomalous` (per shell), and appears as the `SigAno` column of the printed merge-statistics table.