db27b63cccad7ae6f0f36d17fab27a1c1639ab0f
The error model splits a reflection's variance into a statistical part (a*sigma^2, which averages down with multiplicity) and a systematic part ((b*I)^2 - absorption, beam flicker, partiality, detector non-uniformity - correlated across a reflection's repeats). Inverse-variance merging (sigma = 1/sqrt(sum_w)) divided BOTH by the multiplicity, so high-multiplicity reflections got an unphysically small merged sigma: on lysoC the merged I/sigma reached 300 with a third of reflections above the ISa of 11.1, whereas XDS's tops out exactly at its ISa (23.2 vs 23.3). The too-small sigmas also faked screw-axis violations (the missed monoclinic 2_1) and mis-weight refinement. Floor the merged sigma at b*|I| (= I/sigma capped at ISa = 1/b), applied in the shared export loops of both merge paths: Merge.cpp (stills) and RotationScaleMerge.cpp (the rotation path, whose export loop is shared by the CPU and GPU merges, so parity is preserved). Intensities, weights, CC1/2 and R_meas are unchanged - only sigma changes. Validated on the 18-crystal rotation battery: merged I/sigma now caps at each crystal's ISa (was up to 300), overall <I/sigma> becomes honest (lysoC 11.6 -> 5.4), and no space group or indexing rate regresses. The one crystal still uncapped (EP_cs_01-24, ISa 0.0) is the known ice-ring failure where the error model does not fit, so there is no b*I floor - a separate issue. This is the root cause the SearchSpaceGroup E^2 gate patched downstream; the two now reinforce each other. It does not close the per-observation ISa gap vs XDS (integration quality), only makes the merged sigmas honest. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Jungfraujoch
Application to receive data from the PSI JUNGFRAU and EIGER detectors.
All documentation is now placed in docs/ subdirectory and for the current version hosted on Jungfraujoch Read The Docs page.
Languages
C++
73.7%
HTML
8.8%
C
7%
TypeScript
4.8%
Tcl
2.5%
Other
3.1%