opd_expand
- poppy.zernike.opd_expand(opd, aperture=None, nterms=15, basis=<function zernike_basis>, **kwargs)
Given a wavefront OPD map, return the list of coefficients in a given basis set (by default, Zernikes) that best fit the OPD map.
Note that this implementation of the function treats the Zernikes as an orthonormal basis, which is only true on the unobscured unit circle. See also
decompose_opd_nonorthonormal
for an alternative approach for basis vectors that are not orthonormal, ordecompose_opd_segments
for basis vectors defined over physically disjoint segments.- Parameters:
- opd2D numpy.ndarray
The wavefront OPD map to expand in terms of the requested basis. Must be square.
- aperture2D numpy.ndarray, optional
Aperture mask for which pixels are included within the aperture. NOTE - this is handed through to the basis function (see basis parameter) which is responsible for implementing this masking, if appropriate. All positive nonzero values are considered within the aperture; any pixels with zero, negative, or NaN values will be considered outside the aperture, and set equal to the ‘outside’ parameter value. If this parameter is not set, the aperture will be inferred from the finite (i.e. non-NaN) pixels in the OPD array.
- ntermsint
Number of terms to use. (Default: 15)
- basiscallable, optional
Callable (e.g. a function) that generates a sequence of basis arrays given arguments
nterms
,npix
, andoutside
. Default ispoppy.zernike.zernike_basis
.
- Returns:
- coeffslist
List of coefficients (of length
nterms
) from which the input OPD map can be constructed in the given basis. (No additional unit conversions are performed. If the input wavefront is in waves, coeffs will be in waves.) Note that the first coefficient (element 0 in Python indexing) corresponds to the Z=1 Zernike piston term, and so on.
- Other Parameters:
- Additional keyword arguments to this function are passed through to the `basis` callable.
Notes
Recovering coefficients used to generate synthetic/test data depends greatly on the sampling (as one might expect). Generating test data using zernike_basis with npix=256 and passing the result through decompose_opd reproduces the input coefficients within <0.1%.