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.rsCalibrationLoadFull with [C, R, A] arrays

  • cal-core/src/calibrate.rscalibrate_full() broadcasts across all pixels

  • cal-io/src/pipeline/wrappers.rscommon_pwv_source()

  • cal-io/src/pipeline/linked_pwv.rs – multi-frontend PWV pooling