PSFEx native sampling leaves a g1 residual on sub-0.5″ exposures; PSF consumers assume PSF_SAMP = 1
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 25/100
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Python
- Estrelas
- 18
- Forks
- 14
- Merge médio
- 3d 18h
- PRs com merge (30d)
- 27
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de CosmoStat/shapepipe
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia
-
PSF star selection: apply the manual mask; M33 shows outlier rejection fails where contaminants dominateTalvez já em andamento @cailmdaley assumiu hoje. Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
CosmoStat/shapepipe#993 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Run 2: publish the survey as order-5 HATS pixels, uploaded once per pixel, replacing latest/ and snapshotsTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
Mantenedores costumam responder em até 1 dia
Todas as issues de CosmoStat/shapepipe
Issues semelhantes
-
_chunk_scan_fwd launches its Triton kernel without a device guard: NaN when a model is split across GPUsTalvez já em andamento @toddwbucy assumiu hoje. Aberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
state-spaces/mamba#1072 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
loopj/aiovantage#414 ·
Mantenedores costumam responder em até 1 dia
-
power_mismatch_deline docstring: the rear-to-total RMAD conversion has an extra bifaciality factorAberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
pvlib/pvlib-python#2929 ·
Mantenedores costumam responder em até 1 dia
-
data good first issue launch-day unverified
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
BradGroux/wow-forever-mission-control#8 ·
Mantenedores costumam responder em até 1 dia
-
check bilibili falsely reports read/subtitle as broken: live_test fixture BV1GJ411x7h7 is gone (404)Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Panniantong/Agent-Reach#889 ·
Mantenedores costumam responder em até 2 dias