Skip to content

Retire patch logic — ShapePipe v2 has no patches #340

Description

@cailmdaley

ShapePipe's Snakemake workflow (CosmoStat/shapepipe#852) processes a campaign — a tile list — with no intermediate "patch" (P1…P7) unit. Its merged products (CosmoStat/shapepipe#879) are one final_cat_<campaign>.hdf5 and one full_starcat-0000000.fits per campaign. sp_validation still carries the patch layer throughout, and the workflow currently has to write a legacy patches/<campaign>/<tile-ID> group into the hdf5 purely so catalog.py's reader opens it.

Where patch assumptions live today (rough grep, jackknife npatch excluded):

  • src/sp_validation/catalog.py — hdf5 reader hardcodes patches/{name}/<ID>
  • src/sp_validation/catalog_builders.py — get_patches() (v1/v1.5 → P1..P7/8), patch→survey merge_catalogues over <patch>/sp_output/shape_catalog_comprehensive_*.fits
  • src/sp_validation/survey.py — patch boundary coordinates
  • src/sp_validation/rho_tau.py, cosmo_val/real_space.py — patch-keyed paths/labels
  • scripts: combine_results.py, merge_psf_cat.py, prepare_patch_for_spval.sh, plot_rho_stats_patches.py, survey_stats_all.sh, stats_tile_id_gal_counts.py, star_match_stats.py, check_tile_IDs_SP_LF.py, compute_area.py

Proposed end state: sp_validation takes a campaign's two merged files directly (hdf5 with a flat per-tile layout, or a single top-level group; star cat as-is), and any cross-campaign combination is expressed as "list of campaigns", not "list of patches". Scripts that only ever made sense for the P1–P7 era get deleted rather than ported. Once the reader is flat, the patches/ key in ShapePipe's final_cat_merge goes too.

— Claude (Fable) on behalf of Cail

Activity

  1. cailmdaley commented on Sep 26, 2026

    @cailmdaley
    CollaboratorAuthor

    @martinkilbinger on second thought, do we need to keep the patch logic so that older catalogs can still be read/analyzed?

  2. cailmdaley commented on Sep 26, 2026

    @cailmdaley
    CollaboratorAuthor

    and if we need to keep some backwards compatibility, how much? #343 purports to still be able to read the old layout, but also deletes some patch-based scripts...

  3. cailmdaley commented on Oct 1, 2026

    @cailmdaley
    CollaboratorAuthor

    Answer as implemented in #343: reading old catalogues needs no patch logic. The released v1 merged catalogues are flat files (data/data_ext, with an int8 patch column that just passes through), and the reader plus grammar.adapt open them directly. So #343 keeps only the reader and adapter for v1, and everything else speaks campaigns: JointCat merges campaign files, and the patch-only scripts are gone (combine_results.py, compute_area.py and the five listed above). The one thing lost is re-merging v1 from per-patch FITS intermediates, which nothing needs while the merged releases exist.

    One follow-up stays ShapePipe-side: create_final_cat.py still wraps tiles in patches/<campaign>/. The reader walks through it, so nothing here depends on it; dropping it wants its own small ShapePipe PR at a campaign boundary.

    — Claude (Opus) on behalf of Cail

  4. cailmdaley commented on Oct 1, 2026

    @cailmdaley
    CollaboratorAuthor

    Reading and analysing older catalogues doesn't need the patch logic. Only rebuilding them from patch outputs does.

    • Every released v1 product is one survey-wide file: the comprehensive HDF5, the per-version cut_struc FITS, and the PSF/star FITS. Patches appear only in the inputs that build them, such as P*/sp_output/shape_catalog_comprehensive_ngmix.fits and P*/sp_output/psf_catalog_ngmix.fits.
    • On develop, the patch logic is therefore build-only. It lives in extract_info on per-patch final_cat, in JointCat.get_patches/merge_catalogues (behind create_joint_comprehensive_cat.py), in the v1/v1.5/v1.6 shortcuts of merge_psf_cat.py, and in the per-patch diagnostic scripts.
    • After Read ShapePipe v1 and v2 products side by side #343, v1 analysis still works through the grammar adapter. Recalibrating from the v1.4 comprehensive reproduces released v1.4.6.3 bit-identically on a 1M-row window, and ρ/τ on SP_v1.4.6.3 matches the earlier run.
    • What Read ShapePipe v1 and v2 products side by side #343 removes is rebuilding a v1.x comprehensive catalogue from patch outputs in this repo. extract_info no longer reads per-patch final_cat, create_joint_comprehensive_cat.py merges campaign files, and the patch-only scripts are deleted. merge_psf_cat.py still accepts an explicit -p P1+…+P9, but writes a campaign column instead of patch.

    So #343 can go in as it is. Anyone who needs to rebuild a v1.x catalogue from patch outputs can use a checkout from before #343.

    — Claude Opus 5.5 on behalf of Cail

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions