Skip to main content

JWST NIRCam ETC and Simulator

Project description

A JWST NIRCam ETC and Simulator

Badge showing current released PyPI version Zenodo DOI Documentation Status

Authors: Jarron Leisenring (U. of Arizona, Steward Observatory)

Contributors: Everett Schlawin, Jonathan Fraine, Jonathan Aguilar

pyNRC is a set of Python-based tools for planning observations with JWST NIRCam, such as an ETC, a simple slope image simulator, and an enhanced data simulator compatible with the JWST pipeline.

While special attention has been placed on NIRCam coronagraphic modes, this package also works for a variety of NIRCam observing modes including:

  • direct imaging

  • coronagraphic imaging

  • weak lens imaging

  • slitless grism spectroscopy

  • DHS observations (TBI)

All PSFs are generated by WebbPSF as implemented by the WebbPSF Extensions package to reproduce realistic JWST images and spectra.

Documentation can be found at https://pynrc.readthedocs.io.

Similar to some of its dependencies, pyNRC requires input data files in order to generate simulations. Due to the size of these files, they are not included with this source distribution. Please see the documentation for instructions on how to to download the required data files.

Simulating PSFs

Simulating PSFs with WebbPSF can become computationally expensive if generating new ones on the fly, especially considering JWST PSFs vary with respect to wavelength, field position, and time-dependent wavefront error drift. In an effort to speed up this process, pyNRC uses WebbPSF to generate a series of monochromatic PSF simulations, then produces polynomial fits to each oversampled pixel. Storing the coefficients rather than a library of PSFS allows for quick creation (via matrix multiplication) of PSF images for an arbitrary number of wavelengths (subject to hardware memory limitations, of course). The applications range from quickly creating PSFs for many different stellar types over wide bandpasses to generating a large number of monochromatic PSFs for spectral dispersion.

In addition, each science instrument PSF is dependent on the detector position due to field-dependent wavefront errors. Such changes are tracked in WebbPSF, but it becomes burdensome to generate new PSFs from scratch at each location, especially for large starfields. Instead, these changes can be stored by the fitting the residuals of the PSF coefficients across an instrument’s field of view, then interpolating for an arbitrary location. A similar scheme can be achieved for coronagraphic occulters, where the PSF changes as the source position moves with respect to the mask.

JWST’s thermal evolution (e.g., changing the angle of the sunshield after slewing to a new target) causes small but significant distortions to the telescope backplane. WebbPSF has tools to modify OPDs, but high-fidelity simulations take time to calculate. Since the change to the PSF coefficients varies smoothly with respect to WFE drift components, it’s simple to parameterize the coefficient residuals in a fashion similar to the field-dependence.

Revision History

v1.3.2 (Oct 7, 2024)

  • Improved handling of LWBAR in nrc_hci obs_hci classes. Specifically fixed double counting of PSF offsets along the bar.

v1.3.1 (Sept 19, 2024)

  • Fix index transformations between image and oversampled equivalent

v1.3.0 (Sept 19, 2024)

  • Bump to version 1.3.0 to attempt to fix PyPI upload issue

v1.2.2 (Sept 19, 2024)

  • Bug fix in charge migration to check to break out if no saturated pixels

  • Correctly crop stellar PSF in obs_hci class while generating slope image

v1.2.1 (May 24, 2024)

  • Bug fix for poppy requirement version. (should have been >1.1.0 rather than >1.2.0)

v1.2.0 (May 13, 2024)

  • Bring up to date with WebbPSF v1.2.0 and webbpsf_ext v1.2.0

  • Add analysis tools for PCA and NMF PSF subtraction

  • Add a number of simulation features to match flight performance

v1.0.4 (Dec 28, 2021)

  • check if im_star is int or float if not None

  • set nexposures = 1 for level1b using NIRCam() class function

  • deprecate nghxrg.py

  • add tutorial ipynb files

  • update api docs auto generation

  • use webbpsf_ext v1.0.4

v1.0.3 (Dec 23, 2021)

  • Minor updates to seamlessly generate new releases on PyPI and new docs on readthedocs

v1.0.1 (Dec 14, 2021)

  • Default OPD JWST_OTE_OPD_RevAA_prelaunch_predicted.fits

v1.0.0 (Nov 22, 2021)

  • Updates to work with WebbPSF v1 release candidate

  • Move PSF generation to new webbpsf_ext package (https://github.com/JarronL/webbpsf_ext)

  • Create DMS-like level1b FITS files using pipeline data models for imaging and coronagraphy

  • PSF coefficients now use Legendre polynomials by default

  • Create calibration files for each SCA (darks, IPC, noise, flats, linearity, etc)

  • Background roll-off at grism edges

  • SIAF-aware locations

v0.9.0beta (no release)

  • Updates to work with WebbPSF 0.9.0.

  • Start working on commissioning and DMS-like data

  • Add more advanced time-dependent detector effects

  • BEX model isochrones for low-mass companions from Linder et al (2019)

  • There was a pandemic…

v0.8.0beta (no release)

  • Updates to work with WebbPSF 0.8.0.

  • Phasing out support for Python 2

  • Add info on saturation limits in terms of surface brightness

  • Include option to create grism 2nd order

  • Detector pixel timing bugs

  • Field-dependent WFE extrapolated beyond FoV for better sampling diversity

  • Included field-dependent WFE for coronagraphy

  • Added wavelength dispersion of LW coronagraphic PSF

v0.7.0 (Jun 2018)

  • Did not make it out of development before WebbPSF 0.8.0 release.

  • Works with WebbPSF 0.7.0.

    • Field-dependent WFE

    • Image plane distortions

  • Implemented jwst_backgrounds (not required)

v0.6.5 (Mar 2018)

  • Fixed a critical bug where the off-axis PSF size was incorrect when performing WFE drift calculations.

v0.6.4 (Mar 2018)

  • Off-axis PSFs now get drifted in the same way as their on-axis counterparts.

  • Created an intermediate nrc_hci class to enable offsets of WFE drifted PSFs.

v0.6.3 (Mar 2018)

  • First PyPI release.

  • Effectively the same as 0.6.2, but better documentation of packaging and distributing.

v0.6.2 (Mar 2018)

  • Implemented coronagraphic wedges, including arbitrary offsets along bar

  • Renamed obs_coronagraphy to ~pynrc.obs_hci

    • Faster modeling of off-axis PSFs

    • Include coronagraphic features (e.g.: ND squares) in slope images

    • Roll subtracted images include option to use Roll1-Roll2

    • Fixed bug that was slowing down PSF convolution of disks

  • Can now generate docs directly from Jupyter notebooks using nbsphinx extension

  • Coronagraphic tutorials for docs

  • Create the source_spectrum class to fit spectra to observed photometry.

v0.6.0 (Dec 2017)

  • Support for Python 3 (mostly map, dict, and index fixes)

  • Updated code comments for sphinx and readthedocs documentation

  • Create setup.py install file

  • Modify grism PSF shapes due to aperture shape

  • Detector frames times based on ASIC microcode build 10

  • Headers for DMS data

  • Three major changes to PSF coefficients

    • coefficients based on module (SWA, SWB, LWA, LWB), rather than filter

    • WFE drift coefficient relations

    • field-dependent coefficient relation

v0.5.0 (Feb 2017)

  • Initial GitHub release

  • Match version numbering to WebbPSF equivalent

  • ND Acquisition mode

  • Ramp settings optimizer

  • Can now simulate ramps with detector noise

  • Query Euclid’s IPAC server for time/position-dependent Zodiacal emission

  • Added example Jupyter notebooks

v0.1.2 (Jan 2017)

  • Observations subclass for coronagraphs and direct imaging

v0.1.1 (Sep 2016)

  • Add support for LW slitless grism

  • Add support for extended sources

v0.1.0 (Aug 2016)

  • Rewrite of SimNRC and rename pynrc

  • Object oriented multiaccum, DetectorOps, and NIRCam classes

  • Create separate detector instances in NIRCam class

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pynrc-1.3.2.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

pynrc-1.3.2-py3-none-any.whl (403.5 kB view details)

Uploaded Python 3

File details

Details for the file pynrc-1.3.2.tar.gz.

File metadata

  • Download URL: pynrc-1.3.2.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pynrc-1.3.2.tar.gz
Algorithm Hash digest
SHA256 e32430bd47644909bac71e9bcd4a74be225297625ca8291d58d3435cc8c4d394
MD5 8d3f2de5272d8d915ff519fca2bdfcc3
BLAKE2b-256 da0a22d038a81589885822fd2e8459207d894c2584098ebff330f44893d0f9c6

See more details on using hashes here.

File details

Details for the file pynrc-1.3.2-py3-none-any.whl.

File metadata

  • Download URL: pynrc-1.3.2-py3-none-any.whl
  • Upload date:
  • Size: 403.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pynrc-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1816d22e67bcb48f5247f5a0afc6ee693bcf64fa0b00b408e0ef3ba0cf62d219
MD5 2da39fd93cb91cc7b46e85600318eaaa
BLAKE2b-256 74ec037f58d6a9eea71903dace117b9964e4d07876b9b8ac04ab8b18aa145a38

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page