A small PSF noise-injection present in the previous (pre-v2.0) code is absent in the v2.0 module (Fabian's observation). The production PSF observation is built weightless and noiseless — psf_obs = Observation(psf, jacobian=psf_jacob) (src/shapepipe/modules/ngmix_package/ngmix.py:1100) — in contrast to the galaxy observation, which carries both weight and noise (ngmix.py:1143–1148). The older esheldon/aguinot pattern instead gave the PSF stamp a small injected noise and a matching finite weight (psf_noise = 1.0e-6, psf_wt = 1.0/psf_noise**2).
It survived only in dead example scripts, removed in bd60dc8e; the v2.0 module was a from-scratch rewrite that built the PSF observation weightless from the start (since 2b755516), so there's no single "removal" commit — the exact prior version Fabian recalls is most likely the pre-v2.0 aguinot/ngmix 1.3.6 fork. First step: pin which version + diff he saw, with Fabian.
Why it matters (and is pre-merge relevant): a weightless PSF observation leaves ngmix assuming a default (effectively uniform) weight for the PSF stamp, so the noise the PSF fit assumes differs from the old 1/psf_noise² budget. That feeds the metacal error bookkeeping and could change the star response R and the shape-measurement error model.
Checkable on the twin: re-introduce the PSF noise/weight as an additive knob, sweep it, and watch (a) the star response R and (b) χ²_red — does restoring it move either toward sanity, or was it correctly dropped?
Coupled to the reduced-χ² anomaly (#769, longer-term under #773): a weightless PSF observation is a leading candidate for the brightness-dependent error-model mis-specification that anomaly measures. Part of the ngmix v2.0 epic (#762).
— Claude on behalf of Cail
A small PSF noise-injection present in the previous (pre-v2.0) code is absent in the v2.0 module (Fabian's observation). The production PSF observation is built weightless and noiseless —
psf_obs = Observation(psf, jacobian=psf_jacob)(src/shapepipe/modules/ngmix_package/ngmix.py:1100) — in contrast to the galaxy observation, which carries bothweightandnoise(ngmix.py:1143–1148). The older esheldon/aguinot pattern instead gave the PSF stamp a small injected noise and a matching finite weight (psf_noise = 1.0e-6,psf_wt = 1.0/psf_noise**2).It survived only in dead example scripts, removed in
bd60dc8e; the v2.0 module was a from-scratch rewrite that built the PSF observation weightless from the start (since2b755516), so there's no single "removal" commit — the exact prior version Fabian recalls is most likely the pre-v2.0aguinot/ngmix1.3.6 fork. First step: pin which version + diff he saw, with Fabian.Why it matters (and is pre-merge relevant): a weightless PSF observation leaves ngmix assuming a default (effectively uniform) weight for the PSF stamp, so the noise the PSF fit assumes differs from the old
1/psf_noise²budget. That feeds the metacal error bookkeeping and could change the star response R and the shape-measurement error model.Checkable on the twin: re-introduce the PSF noise/weight as an additive knob, sweep it, and watch (a) the star response R and (b) χ²_red — does restoring it move either toward sanity, or was it correctly dropped?
Coupled to the reduced-χ² anomaly (#769, longer-term under #773): a weightless PSF observation is a leading candidate for the brightness-dependent error-model mis-specification that anomaly measures. Part of the ngmix v2.0 epic (#762).
— Claude on behalf of Cail