Overview#
System Context#
The calibration engine sits at the heart of the CCAT data reduction chain, between raw data ingestion and science-ready reduction:
graph LR
FITS[FITS files<br/>telescope] -->|zarr-fits| L0[L0 Zarr<br/>raw counts]
L0 -->|calibrate| L1[L1 Zarr<br/>T_A* spectra]
L1 -->|reduction_pipeline| L2[L2 Zarr<br/>gridded maps]
style L0 fill:#e3f2fd
style L1 fill:#e8f5e9
style L2 fill:#fff3e0
The engine accepts L0 Zarr stores produced by the FITS-to-Zarr converter and writes calibrated L1 Zarr stores consumed by the downstream reduction pipeline (baseline subtraction, flagging, gridding, mapping).
What It Does#
Ingest — reads raw 5D count arrays and metadata from L0 Zarr stores (optionally converting FITS folders on the fly)
Calibrate — applies the heterodyne calibration equation using HOT/COLD loads, atmospheric model, and receiver parameters to produce antenna temperature \(T_A^*\)
Write — stores calibrated spectra, system temperature, flags, and quality metrics in L1 Zarr stores
Workspace#
Seven-crate Cargo workspace:
Crate |
Purpose |
C deps |
Feature gate |
|---|---|---|---|
cal-schema |
Shared L0/L1 schema constants (zero dependencies) |
none |
|
cal-core |
Pure calibration math — RJ correction, gamma, Tsys, PWV fitting, modes |
none |
|
cal-io |
Zarr I/O, pipeline orchestration, optional FITS ingest |
cfitsio (optional) |
|
cal-cli |
|
cfitsio (optional) |
|
cal-py |
PyO3 Python bindings |
cfitsio (optional) |
|
zarr-fits-core |
FITS → Zarr v3 conversion library |
cfitsio |
|
zarr-fits-cli |
Standalone |
cfitsio |
Build Profiles#
Profile |
Binaries |
C deps |
Use case |
|---|---|---|---|
Pure Zarr (default) |
|
none |
Production calibration from pre-converted Zarr stores |
Full ( |
|
|
Development, ingestion, end-to-end processing |
Supported Telescopes#
Telescope support is driven by YAML profiles (see Telescope Profiles):
CCAT/FYST — 200–1200 GHz, Atacama site (5612 m)
SOFIA/upGREAT — 1000–5000 GHz, airborne (13 km)
Generic — fallback for any FITS data with standard keywords
Parity Validation#
The engine is validated against the legacy kalibrate (C++/Fortran) pipeline across 7 datasets covering all production modes:
Dataset |
Mode |
Pixels |
Max Dev |
Status |
|---|---|---|---|---|
HFAV_OTF |
OTF TP |
7 HFA |
0.004% |
PASS |
HFAV_OI_BLANK_TEST |
OTF TP |
7 HFA |
0.034% |
PASS |
OFF_EXCLUDE_TEST |
OTF TP |
1 LFA |
0.001% |
PASS |
LFAV_HONEYCOMB |
OTF-OFF |
1 LFA |
0.0004% |
PASS |
HFAV_4G_MISSING_DATA |
multi-band |
11 |
0.635% |
PASS |
HFA_4G_LOAD_TABLE |
multi-band + load_temp |
11 |
0.642% |
PASS |
SIMULATED_DATA_HFA_4G |
multi-band (Tier 3) |
5 |
0.034% |
PASS |
All deviations are below the 1% acceptance threshold and arise from controlled differences (f64 vs f32 truncation in the legacy code).