prysm v0.18

This release brings several enhancements related to processing interferoemter data, and completes the update of the Zernike module. Perhaps as a breath of fresh air, you are likely to experience zero breaking changes. Users are encouraged to upgrade, and remove any error correction logic from their own processing pipelines.

New Features

The Zernike module has completed its overhaul. This brings the following changes:

  • both Fringe and Noll zernike classes now allow expansion up to arbitrary order

  • the performance of Zernike calculations is improved by 2-3x vs 0.17 when numba was installed. More than 10x compared to 0.17 without numba. Numba is now never used, which results in faster imports when it is installed.

  • New functions:

    • fringe_to_n_m() for converting (arbitrary) Fringe index -> (n,m). One based.

  • New capability:

    • zernikefit() can fit from (n,m) indices, and fit isolated terms without fitting all of the lower order ones

Breaking: - the list prysm.zernike.zernikes no longer exists - the explicit functions such as primary_spherical() now only include up to primary trefoil. You must use another method (such as the caches) to access higher order polynomials. - all explicit zernike functions no longer have name or norm attributes. Use the enumerated new functions above to get the name or norm of a term from its index - prysm.zernike.zcache no longer exists. ZCacheMN replaces ZCache. In 0.19, ZCache will become an alias for ZCacheMN. - prysm.zernike.zernikename() is deleted, use n_m_to_name() and the various xxxx_to_n_m functions in its place. - the “base” kwarg to Zernike classes is deprecated and will be removed in 0.19

Bug fixes

The Zygo datx importer was rewritten. It now never results in improperly scaled phase. The meta attribute on interferograms from from_zygo_dat() may differ in its keys due to these changes.

Under-the-hood

For OpticalPhase, the phase attribute is now a property that points to .data. This makes all prysm classes have a common location holding their primary data array, improving cohesion. If you access the phase attribute directly, there is no change in your code or its behavior.

New Documentation