Goal. Replace ShapePipe's internal mask generation (GSC-2.3 star halos/spikes rasterized by WeightWatcher, Messier/NGC patches — THELI-vintage, cf. #15) with the external healsparse masks produced by the maskforce pipeline (Hendrik / Ludo / Mike). Design: query-everything — no rasterization of external masks. Every healsparse bit is queried once per object (RA, Dec) and stored as catalogue flag columns; rejection happens downstream at the catalogue level. The instrument flag images remain the only per-exposure, pixel-level path. PSF star selection cuts on the star bit + MaxiMask, but halo bits do not reject PSF stars (2026-07-21 mask-force telecon: measure everything, flag, reject at catalogue level). The old masking code stays config-selectable until the real-data comparison validates the switch (#850).
Key agreements (Slack 2026-07-14→16 + 07-21 telecon):
Mask provenance. Ludo assembles pixel/FITS masks tile-by-tile → Mike converts to healsparse (Healsparse_mask_pool.py, nside 131072, conservatively fattened); regeneration tooling at lvanwaerbeke/UNIONS_mask_processing. Products are boolean healsparse maps, one file per reason bit (1 faint star halo / 2 bright star halo / 4 bright stars / 8 manual / 1024 maximask; 512 out-of-bounds); the combined r mask = OR{1,2,4,8,64,1024}, verified empirically on P3. Current products: the post-2026-07-31 rerun (fixed, de-duplicated reg files), announced in #mask-force with paths in the Mask_Assembly canvas; images on the wiki masking page.
— Fable, on behalf of Cail
Goal. Replace ShapePipe's internal mask generation (GSC-2.3 star halos/spikes rasterized by WeightWatcher, Messier/NGC patches — THELI-vintage, cf. #15) with the external healsparse masks produced by the maskforce pipeline (Hendrik / Ludo / Mike). Design: query-everything — no rasterization of external masks. Every healsparse bit is queried once per object (RA, Dec) and stored as catalogue flag columns; rejection happens downstream at the catalogue level. The instrument flag images remain the only per-exposure, pixel-level path. PSF star selection cuts on the star bit + MaxiMask, but halo bits do not reject PSF stars (2026-07-21 mask-force telecon: measure everything, flag, reject at catalogue level). The old masking code stays config-selectable until the real-data comparison validates the switch (#850).
Key agreements (Slack 2026-07-14→16 + 07-21 telecon):
Mask provenance. Ludo assembles pixel/FITS masks tile-by-tile → Mike converts to healsparse (
Healsparse_mask_pool.py, nside 131072, conservatively fattened); regeneration tooling at lvanwaerbeke/UNIONS_mask_processing. Products are boolean healsparse maps, one file per reason bit (1faint star halo /2bright star halo /4bright stars /8manual /1024maximask;512out-of-bounds); the combined r mask =OR{1,2,4,8,64,1024}, verified empirically on P3. Current products: the post-2026-07-31 rerun (fixed, de-duplicated reg files), announced in #mask-force with paths in the Mask_Assembly canvas; images on the wiki masking page.— Fable, on behalf of Cail