The key classes for POPPY are OpticalSystem and the various OpticalElement classes (of which there are many). There is also a Wavefront class that is used internally, but users will rarely need to instantiate that directly. Results are returned as FITS files, specifically astropy.io.fits.HDUList objects.
OpticalSystem is in essence a container for OpticalElement instances, which handles creating input wavefronts, propagating them through the individual optics, and then combining the results into a broadband output point spread function.
The Instrument class provides a framework for developing high-level models of astronomical instruments. An OpticalSystem does not include any information about spectral bandpasses, filters, or light source properties, it just propagates whatever specified list of wavelengths and weights it’s provided with. The Instrument class provides the machinery for handling filters and sources to generate weighted source spectra, as well as support for configurable instruments with selectable mechanisms, and system-level impacts on PSFs such as pointing jitter.
Note that the Instrument class should not be used directly but rather is subclassed to implement the details of your particular instrument. See its class documentation for more details.
OpticalElement is the fundamental building block
FITSOpticalElement implements optics defined numerically on discrete grids read in from FITS files
AnalyticOpticalElement implements optics defined analytically on any arbitrary sampling. There are many of these.
- ScalarTransmission is a simple floating-point throughput factor.
- CompoundAnalyticOptic allows multiple analytic optics to be merged into one container object
Pupil plane analytic optics include:
- Image plane analytic optics include:
InverseTransmission allows any optic, whether analytic or discrete, to be flipped in sign, a la the Babinet principle.
Rotation represents a rotation of the axes of the wavefront, for instance to change coordinate systems between two optics that are rotated with respect to one another. The axis of rotation must be the axis of optical propagation.
Detector represents a detector with some fixed sampling and pixel scale.
Physical Optics Propagation in PYthon (POPPY)
POPPY is a Python package that simulates physical optical propagation including diffraction. It implements a flexible framework for modeling Fraunhofer (far-field) diffraction and point spread function formation, particularly in the context of astronomical telescopes. POPPY was developed as part of a simulation package for JWST, but is more broadly applicable to many kinds of imaging simulations.
Developed by Marshall Perrin at STScI, 2010-2014, for use simulating the James Webb Space Telescope.
Documentation can be found online at http://www.stsci.edu/~mperrin/software/poppy/
This is an Astropy affiliated package.
|display_PSF([HDUlist_or_filename, ext, ...])||Display nicely a PSF from a given HDUlist or filename This is extensively configurable.|
|display_PSF_difference([...])||Display nicely the difference of two PSFs from given files The two files may be FITS files on disk or FITS HDUList objects in memory.|
|display_EE([HDUlist_or_filename, ext, ...])||Display Encircled Energy curve for a PSF The azimuthally averaged encircled energy is plotted as a function of radius.|
|display_profiles([HDUlist_or_filename, ext, ...])||Produce two plots of PSF radial profile and encircled energy See also the display_EE function.|
|radial_profile([HDUlist_or_filename, ext, ...])||Compute a radial profile of the image.|
|measure_EE([HDUlist_or_filename, ext, ...])||measure encircled energy vs radius and return as an interpolator|
|measure_radial([HDUlist_or_filename, ext, ...])||measure azimuthally averaged radial profile of a PSF.|
|measure_fwhm([HDUlist_or_filename, ext, ...])||Measure FWHM by interpolation of the radial profile This measures the full width at half maximum for the supplied PSF, or optionally the full width at some other fraction of max.|
|measure_sharpness([HDUlist_or_filename, ext])||Compute image sharpness, the sum of pixel squares.|
|measure_centroid([HDUlist_or_filename, ext, ...])||Measure the center of an image via center-of-mass The centroid method used is the floating-box center of mass algorithm by Jeff Valenti et al., which has been adopted for JWST target acquisition measurements on orbit.|
|measure_strehl([HDUlist_or_filename, ext, ...])||Estimate the Strehl ratio for a PSF.|
|specFromSpectralType(sptype[, return_list, ...])||Get Pysynphot Spectrum object from a user-friendly spectral type string.|
|Instrument([name])||A generic astronomical instrument, composed of (1) an optical system implemented using POPPY, optionally with several configurations such as selectable image plane or pupil plane stops, and (2) some defined spectral bandpass(es) such as selectable filters, implemented using pysynphot.|
|Wavefront([wavelength, npix, dtype, diam, ...])||A class representing a monochromatic wavefront that can be transformed between pupil and image planes (but not to intermediate planes, yet).|
|OpticalSystem([name, verbose, oversample])||A class representing a series of optical elements, either Pupil, Image, or Detector planes, through which light can be propagated.|
|SemiAnalyticCoronagraph(ExistingOpticalSystem)||A subclass of OpticalSystem that implements a specialized propagation algorithm for coronagraphs whose occulting mask has limited and small support in the image plane.|
|OpticalElement([name, verbose, planetype, ...])||Base class for all optical elements, whether from FITS files or analytic functions.|
|FITSOpticalElement([name, transmission, ...])||Defines an arbitrary optic, based on amplitude transmission and/or OPD FITS files.|
|Rotation([angle, units])||Performs a rotation of the axes in the optical train.|
|InverseTransmission([optic])||Given any arbitrary OpticalElement with transmission T(x,y) return the inverse transmission 1 - T(x,y) This is a useful ingredient in the SemiAnalyticCoronagraph algorithm.|
|Detector(pixelscale[, fov_pixels, ...])||A Detector is a specialized type of OpticalElement that forces a wavefront onto a specific fixed pixelization.|
Documentation last updated on August 14, 2014