Multi-Pixel#
CHAI-class receivers have multiple pixels per array (e.g., 7 HFA pixels) and multiple arrays (HFA, LFA, 4G1–4G4). The engine handles this via a single vectorized path.
Vectorized Path#
resolve_calibration_load_full() computes gamma, T_rec, and bad
channels for all pixels simultaneously as [C, R, A] arrays.
The calibration loop (calibrate_full) broadcasts these across the
dump and subscan axes – no per-pixel loop needed.
This is the only calibration path used by cal-cli,
cal-io::pipeline, and cal-py.
Common PWV Strategy#
By default (pwv_per_pixel = false), PWV is fitted from pixel 0 only
and propagated to all other pixels via PwvSource::External. This
ensures consistent atmospheric correction across the focal plane and
reduces computation by $\frac{1}{N_{pixels}}$.
Set pwv_per_pixel = true (--pwv-per-pixel on the CLI) to fit
each pixel independently (useful for diagnosing receiver-dependent
systematics).
Per-Pair Atmosphere Fitting#
When pwv_per_pixel is enabled, the engine can also perform per-pair
atmosphere fitting (determine_atmosphere_per_pair), where each
ON-OFF pair gets its own atmospheric transmission computed from its
associated OFF subscan’s airmass and sky signal.
Multi-Frontend Linked PWV#
For multi-frontend observations (e.g., HFA + LFA + 4G bands observed
simultaneously), the engine pools PWV estimates across all frontends to
produce a single linked PWV value. This is handled by
cal-io/src/pipeline/linked_pwv.rs and ensures physically consistent
atmospheric correction across all bands in a multi-frontend session.
Implementation:
cal-core/src/scan/cal_load.rs–CalibrationLoadFullwith[C, R, A]arrayscal-core/src/calibrate.rs–calibrate_full()broadcasts across all pixelscal-io/src/pipeline/wrappers.rs–common_pwv_source()cal-io/src/pipeline/linked_pwv.rs– multi-frontend PWV pooling