prysm 0.15
New Features
-
Surface/Wavefront error synthesis:
prysm.interferogram
now contains thesynthesize_surface_from_psd
core method andrender_synthetic_surface
andInterferogram.render_from_psd
convenience wrappers for synthesizing surface or wavefront data from PSD curves. Examples of this technique can be seen in e.g. E. Sidick Power Spectral Density Specification and Analysis of Large Optical Surfaces. -
convenience wrapper
Interferogram.fit_zernikes
replacingzernikefit(i.phase, ...)
invocation. -
write_zygo_ascii
function inprysm.io
to write Zygo ASCII files. -
Interferogram.save_zygo_ascii
to write an interferogram to Zygo ASCII format. -
zorder
parameter in line-based plotting functions --OpticalPhase.plot_slice_xy
,Convolvable.plot_slice_xy
,Interferogram.plot_psd_xy_avg
-
mode
argument onInterferogram.plot_psd_xy_avg
to switch between x axis units of spatial frequency (mode='freq'
) or spatial period (mode='period'
). -
Interferogram.psd_slices
andInterferogram.plot_psd_slices
methods replacingpsd_xy_avg
method. Two new inquiries areazmin
andazmax
for the azimuthal minimum and azimuthal maximum. -
PSF.polychromatic
staticmethod to create polychromatic PSFs from ensembles of monochromatic ones. This essentially reintroduces theMultispectralPSF
class's functionality from earlier versions of prysm. -
more configuration options.
prysm.config
now has parameters forQ
,phase_colormap
,image_colormap
,lw
,zorder
for controlling the default values of these parameters throughout the library. -
new constants in
prysm.psf
--FIRST_AIRY_ZERO
,SECOND_AIRY_ZERO
, ANDTHIRD_AIRY_ZERO
as well asSECOND_AIRY_ENCIRCLED
ANDTHIRD_AIRY_ENCIRCLED
. These concern the zeros of the airy disk and how much of the total energy is contained within. They are all wrapped inAIRYDATA
, a dictionary with keys of 1,2,3 and values that are length-2 tuples of (radius, encircled energy).
Beta features
prysm.otf.long_exposure_otf
andprysm.otf.estimate_Cn
for calculating the OTF (MTF) associated with a 'long' exposure through atmospheric turbulence. Note that while the equations have been implemented, the results have not been checked against published values. Please provide feedback.
Improved packaging
- prysm now uses
setup.cfg
and some setuptools tricks. It now has theprysm.__version__
attribute and can be more easily scanned by crawlers without executing setup.py.
Improved documentation
-
The User's guide and Examples sections of the documentation are now jupyter notebooks and have embedded graphics and output.
-
There are several new examples.
Improved test coverage
- Test coverage is now > 80%
breaking API changes
-
Interferogram.psd_xy_avg
has been removed, its functionality is now the same as the default forInterferogram.psd_slices
-
Interferogram.plot_psd_xy_avg
faces the same change forInterferogram.plot_psd_slices
. Note that two calls are now needed to replicate the default behavior:
fig, ax = i.plot_psd_slices(x=True, y=True, alpha=0.4, lw=3)
fig, ax = i.plot_psd_slices(x=False, y=False, azavg=True, lw=4.5, fig=fig, ax=ax)
-
prysm.psf._airydisk
has been renamed toprysm.psf.airydisk
. -
the
lens
submodule has been removed. This eliminates theLens
class. -
the
seidel
submodule has been removed. This eliminates theSeidel
class. -
the
shackhartmann
submodule has been removed. This eliminates theShackhartmann
class. -
the
macros
submodule has been removed. This eliminates theSystemConfig
namedtuple, thethrufocus_mtf_from_wavefront
andthrufocus_mtf_from_wavefront_array
functions. -
prysm.detector.generate_mtf
has been removed. This function is redundant withprysm.detector.pixelaperture_analytic_otf
. -
prysm.detector.OLPF.__init__
now defaults tosamples_x=0
, using the analytical representation in the numerical case. -
The great Zernike refactor of 2019:
-
prysm.fringezernike
has been folded intoprysm.zernike
. Several functions have been renamed:
-
-
fit
is nowzernikefit
called aszernikefit(... map_='fringe')
(or `map_='noll')
-
-
-
- magnitude/angle and name functions are now part of the
zernikefuncs
dictionary of dictionaries. Keys are, in order, function type and zernike order.fzname
is now accessed most easily aszernikefuncs['name']['fringe']
.fzset_to_magnitude_angle
aszernikefuncs['magnitude_angle']['fringe'].
noll` is a valid key for the nested dictionary.
- magnitude/angle and name functions are now part of the
-
-
-
FZCache
andfzcache
are nwo made redundant byZCache
andzcache
. The cache takes an index into theprysm.zernikes.zernikes
list, not a Fringe or Noll index. Useprysm.zernikes.maps
to convert Fringe or Noll indices into prysm's zernike catalog.
-
-
- the
StandardZernike
class fromprysm.standardzernike
has been replaced withNollZernike
fromprysm.zernike,
or as imported from the top-level namespace.
- the
-
-
NollZernike
allows coefficients from 0 to 36 or 1 to 37 and has all features present inFringeZernike
, unlike the priorStandardZernike
class.
-
-
prysm._zernike
is nowprysm.zernike
under-the-hood changes
-
Angles of rotationally invariant terms in Fringe Zernike magnitude sets are now zero.
-
use of
isfinite
andisnan
optimized for internal routines.
bugfixes
-
wavelength
is properly captured inPupil.from_interferogram.
-
Convolvable.from_file
no longer mangles x and y units. -
PSF.encircled_energy
has been reworked, improving accuracy by about 2.3%. -
BasicData.center_x
andcenter_y
are now properly computed. Fixes #2 .