Since CosmoStat/shapepipe#847, ShapePipe generates no masks. Tile detection runs with no flag image, so IMAFLAGS_ISO — which was the rasterized star/galaxy/external mask OR'd over each object's isophote — no longer exists in the shear catalogue. Its replacement is one column per UNIONS mask bit, MASK_n1 … MASK_n2048, queried from the sky-fixed healsparse maps at each object's position (True = masked; see the bit table in #847). The wiring lands in CosmoStat/shapepipe#886 and the columns reach final_cat_<campaign>.hdf5 via CosmoStat/shapepipe#879.
sp_validation still cuts on IMAFLAGS_ISO == 0 (galaxy.py:175 classification_galaxy_base, scripts/calibration/extract_info.py:163, scripts/masking.py, params.py column lists). Against a v2 catalogue that raises a missing-column error.
Proposed: define the galaxy-sample mask as an explicit set of bits and cut on their OR. The set {n1, n2, n4, n8, n64, n1024} reproduces the v1 r-band mask exactly (OR == mask_r on P3; n64 is an undocumented reason bit in the r-band default bitmask, not a coverage flag) — star mask (n4), halos (n1 | n2, combined: which is faint vs bright is unconfirmed for the Aug-2026 products), manual galaxy masks (n8), MaxiMask (n1024). Do not OR every MASK_* column: n16/n32/n128/n256 are per-band (u g i z) coverage flags and n2048 is 1 wherever Pan-STARRS z2 is absent, so a blanket OR masks the whole footprint. The bit list should be config, not code.
Related: #879 also moves the star catalogue to full_starcat_<campaign>.hdf5 (exposures/<exp> datasets) — the fits.getdata readers in extract_info.py and compute_leakage_harmony.py need an hdf5 path. Both fit naturally with #340.
— Claude (Fable) on behalf of Cail
Since CosmoStat/shapepipe#847, ShapePipe generates no masks. Tile detection runs with no flag image, so
IMAFLAGS_ISO— which was the rasterized star/galaxy/external mask OR'd over each object's isophote — no longer exists in the shear catalogue. Its replacement is one column per UNIONS mask bit,MASK_n1 … MASK_n2048, queried from the sky-fixed healsparse maps at each object's position (True = masked; see the bit table in #847). The wiring lands in CosmoStat/shapepipe#886 and the columns reachfinal_cat_<campaign>.hdf5via CosmoStat/shapepipe#879.sp_validation still cuts on
IMAFLAGS_ISO == 0(galaxy.py:175classification_galaxy_base,scripts/calibration/extract_info.py:163,scripts/masking.py,params.pycolumn lists). Against a v2 catalogue that raises a missing-column error.Proposed: define the galaxy-sample mask as an explicit set of bits and cut on their OR. The set {n1, n2, n4, n8, n64, n1024} reproduces the v1 r-band mask exactly (
OR == mask_ron P3; n64 is an undocumented reason bit in the r-band default bitmask, not a coverage flag) — star mask (n4), halos (n1 | n2, combined: which is faint vs bright is unconfirmed for the Aug-2026 products), manual galaxy masks (n8), MaxiMask (n1024). Do not OR everyMASK_*column: n16/n32/n128/n256 are per-band (u g i z) coverage flags and n2048 is 1 wherever Pan-STARRS z2 is absent, so a blanket OR masks the whole footprint. The bit list should be config, not code.Related: #879 also moves the star catalogue to
full_starcat_<campaign>.hdf5(exposures/<exp>datasets) — thefits.getdatareaders inextract_info.pyandcompute_leakage_harmony.pyneed an hdf5 path. Both fit naturally with #340.— Claude (Fable) on behalf of Cail