Skip to content

feat: add Euclid NISP survey (Y, J, H photometric bands) - #136

Merged
aboucaud merged 1 commit into
mainfrom
add-euclid-nisp
Oct 1, 2026
Merged

aboucaud merged 1 commit into
mainfrom
add-euclid-nisp

Conversation

@aboucaud

Copy link
Copy Markdown
Member

Summary

Addresses item 2.1 of survey_upgrade_plan.md: Euclid carries two instruments, VIS (already Euclid_VIS.yaml) and NISP (near-infrared spectrometer and photometer), whose photometric channel images in Y, J, H — previously completely absent from surveycodex.

  • New surveycodex/data/Euclid_NISP.yaml with filters YE, JE, HE (matching the IE naming convention already used for VIS).
  • zeropoint and effective_wavelength computed with speclite (Euclid-Y/-J/-H), exactly like Euclid_VIS's IE filter — validated by first reproducing Euclid_VIS's existing zeropoint (25.92) and effective_wavelength (750.64 nm) with the same formula before trusting it for the new filters.
  • mirror_diameter/obscuration reused from Euclid_VIS (same shared 1.2 m telescope, split by a dichroic between VIS and NISP).
  • pixel_scale (0.3"/px) and full_exposure_time (112s/band) sourced from Scaramella et al. 2022 (arXiv:2108.01201), the Euclid Wide Survey definition paper — 112s is the single-pointing NISP exposure in the reference observing sequence, matching the per-dither convention already used for Euclid_VIS's full_exposure_time=565s.
  • gain (2 e-/ADU), sky_brightness, and psf_fwhm sourced from the Euclid ERO compact/diffuse-emission photometry pipeline paper (arXiv:2405.13496) — all in-flight measured values (gain and sky background from instrument performance sections, PSF FWHM from Table 2, measured on stacked ERO survey images).
  • Generalised the Euclid_VIS-only "IE" -> "VIS" filter-name mapping in scripts/check_zeropoints.py and check_effective_wavelengths.py into an EUCLID_FILTER_NAMES dict covering NISP's YE/JE/HE -> Y/J/H too, and added Euclid_NISP to SPECLITE_SURVEY_PREFIXES so both CI-run scripts validate it against speclite, same as Euclid_VIS.

Test plan

  • python3 -c "import surveycodex; ..." — Euclid_NISP loads with 3 filters and correct units
  • scripts/check_zeropoints.py and scripts/check_effective_wavelengths.py — Euclid_NISP's Y/J/H match speclite exactly
  • python -m surveycodex and surveycodex --refs run cleanly
  • python -m surveycodex --rich — renders with the satellite icon
  • pre-commit run --all-files passes
  • pytest --cov — 36 passed

🤖 Generated with Claude Code

Euclid carries two instruments: VIS (already in Euclid_VIS.yaml) and
NISP (near-infrared spectrometer and photometer), whose photometric
channel images in Y, J, H -- previously completely absent from
surveycodex. speclite ships all three NISP filter curves (Euclid-Y,
Euclid-J, Euclid-H), so zeropoint and effective_wavelength are computed
with speclite exactly like Euclid_VIS's IE filter, and validated by
reproducing the existing Euclid_VIS zeropoint (25.92) and
effective_wavelength (750.64 nm) with the same formula before trusting
it for the new filters.

NISP shares Euclid's 1.2 m telescope with VIS (same mirror_diameter/
obscuration), but has its own pixel scale, gain, and per-band
sky_brightness/psf_fwhm/full_exposure_time, sourced from:
- Scaramella et al. 2022 (arXiv:2108.01201), the Euclid Wide Survey
  definition paper, for pixel_scale (0.3"/px) and full_exposure_time
  (112s per band -- the single-pointing exposure in the reference
  observing sequence, matching the per-dither convention already used
  for Euclid_VIS's full_exposure_time=565s, its sibling instrument in
  the same survey).
- The Euclid ERO compact/diffuse-emission photometry pipeline paper
  (arXiv:2405.13496), Table 2 and Sect. 4.3.7, for gain (2 e-/ADU,
  in-flight measured), sky_brightness, and psf_fwhm (both median
  in-flight values measured on stacked ERO survey images, per band).

Also generalises the Euclid_VIS-only "IE" -> "VIS" filter-name mapping
in scripts/check_zeropoints.py and check_effective_wavelengths.py into
an EUCLID_FILTER_NAMES dict covering NISP's YE/JE/HE -> Y/J/H too, and
wires Euclid_NISP into SPECLITE_SURVEY_PREFIXES so both scripts (run in
CI) validate it against speclite, same as Euclid_VIS.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@aboucaud
aboucaud merged commit 688072c into main Oct 1, 2026
7 checks passed
@aboucaud
aboucaud deleted the add-euclid-nisp branch October 1, 2026 00:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant