Wavefront
- class poppy.Wavefront(wavelength=<Quantity 1.e-06 m>, npix=1024, dtype=None, diam=<Quantity 8. m>, oversample=2, pixelscale=None)[source]
Bases:
BaseWavefront
Wavefront in the Fraunhofer approximation: a monochromatic wavefront that can be transformed between pupil and image planes only, not to intermediate planes
In a pupil plane, a wavefront object
wf
haswf.diam
, a diameter in meterswf.pixelscale
, a scale in meters/pixel
In an image plane, it has
wf.fov
, a field of view in arcsecondswf.pixelscale
, a scale in arcsec/pixel
Use the
wf.propagate_to()
method to transform a wavefront between conjugate planes. This will update those properties as appropriate.By default,
Wavefronts
are created in a pupil plane. Setpixelscale=#
to make an image plane instead.- Parameters:
- wavelengthfloat
Wavelength of light in meters
- npixint
Size parameter for wavefront array to create, per side.
- diamfloat, optional
For _PUPIL wavefronts, sets physical size corresponding to npix. Units are meters. At most one of diam or pixelscale should be set when creating a wavefront.
- pixelscalefloat, optional
For PlaneType.image PLANE wavefronts, use this pixel scale.
- oversampleint, optional
how much to oversample by in FFTs. Default is 2. Note that final propagations to Detectors use a different algorithm and, optionally, a separate oversampling factor.
- dtypenumpy.dtype, optional
default is double complex.
Methods Summary
Return Y, X coordinates for this wavefront, in the manner of numpy.indices()
from_fresnel_wavefront
(fresnel_wavefront[, ...])Convert a Fresnel type wavefront object to a Fraunhofer one
image_coordinates
(shape, pixelscale, ...)Utility function to generate coordinates arrays for an image plane wavefront
propagate_to
(optic)Propagates a wavefront object to the next optic in the list.
pupil_coordinates
(shape, pixelscale)Utility function to generate coordinates arrays for a pupil plane wavefront
rotate
([angle])Rotate a wavefront by some amount, using spline interpolation
Methods Documentation
- coordinates()[source]
Return Y, X coordinates for this wavefront, in the manner of numpy.indices()
This function knows about the offset resulting from FFTs. Use it whenever computing anything measured in wavefront coordinates.
- Returns:
- Y, Xarray_like
Wavefront coordinates in either meters or arcseconds for pupil and image, respectively
- classmethod from_fresnel_wavefront(fresnel_wavefront, verbose=False)[source]
Convert a Fresnel type wavefront object to a Fraunhofer one
Note, this function implicitly assumes this wavefront is at a pupil plane, so the resulting Fraunhofer wavefront will have pixelscale in meters/pix rather than arcsec/pix.
- Parameters:
- fresnel_wavefrontWavefront
The (Fresnel-type) wavefront to be converted.
- static image_coordinates(shape, pixelscale, last_transform_type, image_centered)[source]
Utility function to generate coordinates arrays for an image plane wavefront
- Parameters:
- shapetuple of ints
Shape of the wavefront array
- pixelscalefloat or 2-tuple of floats
the pixelscale in meters/pixel, optionally different in X and Y
- last_transform_typestring
Was the last transformation on the Wavefront an FFT or an MFT?
- image_centeredstring
Was POPPY trying to keeping the center of the image on a pixel, crosshairs (‘array_center’), or corner?
- propagate_to(optic)[source]
Propagates a wavefront object to the next optic in the list. Modifies this wavefront object itself.
Transformations between pupil and detector planes use MFT or inverse MFT. Transformations between pupil and other (non-detector) image planes use FFT or inverse FFT, unless explicitly tagged to use MFT via a propagation hint. Transformations from any frame through a rotation or coordinate transform plane simply transform the wavefront accordingly.
- Parameters:
- opticOpticalElement
The optic to propagate to. Used for determining the appropriate optical plane.
- static pupil_coordinates(shape, pixelscale)[source]
Utility function to generate coordinates arrays for a pupil plane wavefront
- Parameters:
- shapetuple of ints
Shape of the wavefront array
- pixelscalefloat or 2-tuple of floats
the pixel scale in meters/pixel, optionally different in X and Y
- rotate(angle=0.0)[source]
- Rotate a wavefront by some amount, using spline interpolation
(or exact rotation, for multiples of 90 degrees)
Note, if the wavefront is zero-padded this step will unpad it, as an efficiency to avoid rotating large arrays of zeros unnecessarily.
- Parameters:
- anglefloat
Angle to rotate, in degrees counterclockwise.