Offline --scale re-scales the reflections stored in a _process.h5 without
re-integration, but was broken for a self-contained integrated snapshot:
1. HDF5MetadataSource::ReadReflections fell back per-image to the linked
source pixel files for every non-indexed frame (a snapshot's master holds
/entry/reflections only for the sparse indexed images). With the raw
_data_NNNNNN.h5 absent or not co-located this threw an HDF5 error; when
present it needlessly reopened multi-GB files thousands of times. Decide
once whether the master is the authoritative reflection store and, if so,
never fall back - a missing per-image group just means the frame has none.
Legacy/VDS acquisitions (no /entry/reflections in the master) still resolve
reflections lazily to the source data files.
2. The scale-only stills branch never fit the (a,b) error model, so it merged
with the identity model - far worse intensities than the full pipeline
(lyso8 CC1/2 76%->21%). Fit RefineErrorModel and honour --reject-outliers,
mirroring Rugnux.cpp.
Round-trip validated: full merge == integrate(--no-merge) + --scale (identical
error model a=0.793 b=2.287, matching unique reflection counts), and --scale
now reads reflections in ~2.5s with no raw-file access.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>