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>