PSFEx native sampling leaves a g1 residual on sub-0.5″ exposures; PSF consumers assume PSF_SAMP = 1
Maintainer antworten meist innerhalb von 2 Tagen
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 25/100
Rechercherichtung
Start with psfex_interp.py and the PSFExInterpolator.interpsfex entry point; inspect how it reads PSF_SAMP and find its existing tests. The proposed guard should reject sampling values other than 1, with a test that covers the rejection. Later sampling support and the bounded galaxy shear pilot require separate validation; completion criteria for those are not specified in the issue.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Claude Opus on behalf of Cail; investigation by GPT-6.1 Sol.
On the best-seeing exposures, PSFEx at native sampling (PSF_SAMPLING 1) leaves a coherent g1 residual. Our PSF consumers assume unit sampling, so the obvious config fix would silently break them.
The residual shows up at exposure level once the mean PSF FWHM is below ≈0.5″ (≈2.7 px). 286 of the 15,523 v2 validation exposures (1.8%) are that sharp; 2,504 (16%) are below 0.6″. Above ≈0.5″ the median residual is flat at zero, so a blanket seeing cut isn't warranted.

For one exposure, 2780860 (18BD97, 2 Sept 2022, 0.50″), against a same-region control at 0.70″:
- Production gives Δg1 = −4.0×10⁻³; the control gives −0.2×10⁻³. The rerun reproduces production's PSFEx basis exactly.
- PSFEx at 0.5-px sampling (101×101 model) gives −1.3×10⁻³ with centered validation stamps. Rendered at each validation star's sub-pixel phase, it gives −0.02 to +0.26×10⁻³, depending on the Lanczos kernel: consistent with zero.
- Phase-matching the native model alone brings it to −1.0 to −2.7×10⁻³ (kernel-dependent). On the control, all four conventions agree, so pixel phase matters only once the stars are undersampled.

Why PSF_SAMPLING 0 (auto) is not the fix: with SAMPLE_AUTOSELECT N, PSFEx assumes a nominal 6-px FWHM and picks 1.28 px per model pixel, which is coarser. And any sampling other than 1 breaks the consumers:
PSFExInterpolator.interpsfex(psfex_interp.py) returns the rawPSF_MASKgrid and ignoresPSF_SAMP.- PSF validation attaches the CCD's native WCS to that grid. On a 0.5-sampled model it measures ΔT/T = −0.75: twice the linear size, four times the area.
- The
galaxy_psfstore carries the array without sampling metadata, and ngmix'smake_ngmix_observationbuilds the PSF Jacobian from the image WCS.
Proposed:
- A guard, now:
psfex_interpraises ifPSF_SAMP ≠ 1, with a test. It protects every consumer until sampling is supported. - For run 2:
psfex_interpemits native-pixel effective-PSF stamps with an explicit centering convention. Then validate sampling 0.5 / size 101 as the candidate configuration. - For run 1: flag the sub-0.5″ exposures for diagnostics. Measure the galaxy shear bias on a bounded pilot (a few nights, paired ngmix fits) before any rerun. The galaxy-level effect is unmeasured; the star residual does not set it.
Possibly related: #956, a ~0.4% PSF size residual on P3 tiles, measured with phase-shifted models. Not the same measurement.
Report, data and reproduction: Nibi /scratch/cdaley/psf-undersampling/REPORT.md.
- Vorherrschende Sprache
- Python
- Sterne
- 18
- Forks
- 14
- Ø Merge
- 4 T. 16 Std.
- Gemergte PRs (30 T.)
- 35
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus CosmoStat/shapepipe
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 2 Tagen
-
PSF star selection needs a deep-sky-object veto: M33, M101, M13 and M92 enter the PSF star sampleOffen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in CosmoStat/shapepipe
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
pytest-dev/pytest-html#1085 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 90/100
pollen-robotics/reachy_mini#1527 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 66/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
A seed and its negative give the same run, so realizations of a negative seed repeat each otherOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
Maintainer antworten meist innerhalb von 1 Tag