Circular Functions

Zernike Modes

aotools.functions.zernike.makegammas(nzrad)[source]

Make “Gamma” matrices which can be used to determine first derivative of Zernike matrices (Noll 1976).

Parameters:nzrad – Number of Zernike radial orders to calculate Gamma matrices for
Returns:Array with x, then y gamma matrices
Return type:ndarray
aotools.functions.zernike.phaseFromZernikes(zCoeffs, size, norm='noll')[source]

Creates an array of the sum of zernike polynomials with specified coefficeints

Parameters:
  • zCoeffs (list) – zernike Coefficients
  • size (int) – Diameter of returned array
  • norm (string, optional) – The normalisation of Zernike modes. Can be "noll", "p2v" (peak to valley), or "rms". default is "noll".
Returns:

a size x size array of summed Zernike polynomials

Return type:

ndarray

aotools.functions.zernike.zernIndex(j)[source]

Find the [n,m] list giving the radial order n and azimuthal order of the Zernike polynomial of Noll index j.

Parameters:j (int) – The Noll index for Zernike polynomials
Returns:n, m values
Return type:list
aotools.functions.zernike.zernikeArray(J, N, norm='noll')[source]

Creates an array of Zernike Polynomials

Parameters:
  • maxJ (int or list) – Max Zernike polynomial to create, or list of zernikes J indices to create
  • N (int) – size of created arrays
  • norm (string, optional) – The normalisation of Zernike modes. Can be "noll", "p2v" (peak to valley), or "rms". default is "noll".
Returns:

array of Zernike Polynomials

Return type:

ndarray

aotools.functions.zernike.zernikeRadialFunc(n, m, r)[source]

Fucntion to calculate the Zernike radial function

Parameters:
  • n (int) – Zernike radial order
  • m (int) – Zernike azimuthal order
  • r (ndarray) – 2-d array of radii from the centre the array
Returns:

The Zernike radial function

Return type:

ndarray

aotools.functions.zernike.zernike_nm(n, m, N)[source]

Creates the Zernike polynomial with radial index, n, and azimuthal index, m.

Parameters:
  • n (int) – The radial order of the zernike mode
  • m (int) – The azimuthal order of the zernike mode
  • N (int) – The diameter of the zernike more in pixels
Returns:

The Zernike mode

Return type:

ndarray

aotools.functions.zernike.zernike_noll(j, N)[source]

Creates the Zernike polynomial with mode index j, where j = 1 corresponds to piston.

Parameters:
  • j (int) – The noll j number of the zernike mode
  • N (int) – The diameter of the zernike more in pixels
Returns:

The Zernike mode

Return type:

ndarray

Karhunen Loeve Modes

Collection of routines related to Karhunen-Loeve modes.

The theory is based on the paper “Optimal bases for wave-front simulation and reconstruction on annular apertures”, Robert C. Cannon, 1996, JOSAA, 13, 4

The present implementation is based on the IDL package of R. Cannon (wavefront modelling and reconstruction). A closely similar implementation can also be find in Yorick in the YAO package.

Usage

Main routine is ‘make_kl’ to generate KL basis of dimension [dim, dim, nmax].

For Kolmogorov statistics, e.g.

kl, _, _, _ = make_kl(150, 128, ri = 0.2, stf='kolmogorov')

Warning

make_kl with von Karman stf fails. It has been implemented but KL generation failed in ‘while loop’ of gkl_fcom…

date:November 2017
aotools.functions.karhunenLoeve.gkl_azimuthal(nord, npp)[source]

Compute the azimuthal function of the KL basis.

Parameters:
  • nord (int) – number of azimuthal orders
  • npp (int) – grid of point sampling the azimuthal coordinate
Returns:

gklazi – azimuthal function of the KL basis.

Return type:

ndarray

aotools.functions.karhunenLoeve.gkl_basis(ri=0.25, nr=40, npp=None, nfunc=500, stf='kolstf', outerscale=None)[source]

Wrapper to create the radial and azimuthal K-L functions.

Parameters:
  • ri (float) – normalized internal radius
  • nr (int) – number of radial resolution elements
  • np (int) – number of azimuthal resolution elements
  • nfunc (int) – number of generated K-L function
  • stf (string) – structure function tag describing the atmospheric statistics
Returns:

gklbasis – dictionary containing the radial and azimuthal basis + other relevant information

Return type:

dic

aotools.functions.karhunenLoeve.gkl_fcom(ri, kernels, nfunc, verbose=False)[source]

Computation of the radial eigenvectors of the KL basis.

Obtained by taking the eigenvectors from the matrix L^p. The final function corresponds to the ‘nfunc’ largest eigenvalues. See eq. 16-18 in Cannon 1996.

Parameters:
  • ri (float) – radius of central obscuration radius (normalized by D/2; <1)
  • kernels (ndarray) – kernel L^p of dimension (nr, nr, nth), where nth is the azimuthal discretization (5 * nr)
  • nfunc (int) – number of final KL functions
Returns:

  • evals (1darray) – eigenvalues
  • nord (int) – resulting number of azimuthal orders
  • npo (int)
  • ord (1darray)
  • rabas (ndarray) – radial eigenvectors of the KL basis

aotools.functions.karhunenLoeve.gkl_kernel(ri, nr, rad, stfunc='kolmogorov', outerscale=None)[source]

Calculation of the kernel L^p

The kernel constructed here should be simply a discretization of the continuous kernel. It needs rescaling before it is treated as a matrix for finding the eigen-values

Parameters:
  • ri (float) – radius of central obscuration radius (normalized by D/2; <1)
  • nr (int) – number of resolution elements
  • rad (1d-array) – grid of points where the kernel is evaluated
  • stfunc (string) – string tag of the structure function on which the kernel are computed
  • outerscale (float) – in unit of telescope diameter. Outer-scale for von Karman structure function.
Returns:

L^p – kernel L^p of dimension (nr, nr, nth), where nth is the azimuthal discretization (5 * nr)

Return type:

ndarray

aotools.functions.karhunenLoeve.gkl_radii(ri, nr)[source]

Generate n points evenly spaced in r^2 between r_i^2 and 1

Parameters:
  • nr (int) – number of resolution elements
  • ri (float) – radius of central obscuration radius (normalized; <1)
Returns:

r – grid of point to calculate the appropriate kernels. correspond to ‘sqrt(s)’ wrt the paper.

Return type:

1d-array, float

aotools.functions.karhunenLoeve.gkl_sfi(kl_basis, i)[source]

return the i’th function from the generalized KL basis ‘bas’. ‘bas’ must be generated by ‘gkl_basis’

aotools.functions.karhunenLoeve.make_kl(nmax, dim, ri=0.0, nr=40, stf='kolmogorov', outerscale=None, mask=True)[source]

Main routine to generatre a KL basis of dimension [nmax, dim, dim].

For Kolmogorov statistics, e.g.

kl, _, _, _ = make_kl(150, 128, ri = 0.2, stf='kolmogorov')
As a rule of thumb
nr x npp = 50 x 250 is fine up to 500 functions
60 x 300 for a thousand
80 x 400 for three thousands.
Parameters:
  • nmax (int) – number of KL function to generate
  • dim (int) – size of the KL arrays
  • ri (float) – radial central obscuration normalized by D/2
  • nr (int) – number of point on radius. npp (number of azimuthal pts) is =2 pi * nr
  • stf (string) – structure function tag. Default is ‘kolmogorov’
  • outerscale (float) – outer scale in units of telescope diameter. Releveant if von vonKarman stf. (not implemented yet)
  • mask (bool) – pupil masking. Default is True
Returns:

  • kl (ndarray (nmax, dim, dim)) – KL basis in cartesian coordinates
  • varKL (1darray) – associated variance
  • pupil (2darray) – pupil
  • polar_base (dictionary) – polar base dictionary used for the KL basis computation. as returned by ‘gkl_basis’

aotools.functions.karhunenLoeve.pcgeom(nr, npp, ncp, ri, ncmar)[source]

This routine builds a geom dic.

Parameters:
  • py (px,) – the x, y coordinates of points in the polar arrays.
  • cp (cr,) – the r, phi coordinates of points in the cartesian grids.
  • ncmar – allows the possibility that there is a margin of ncmar points in the cartesian arrays outside the region of interest.
aotools.functions.karhunenLoeve.piston_orth(nr)[source]

Unitary matrix used to filter out piston term. Eq. 19 in Cannon 1996.

Parameters:nr (int) – number of resolution elements
Returns:U – Unitary matrix
Return type:2d array
aotools.functions.karhunenLoeve.pol2car(cpgeom, pol, mask=False)[source]

Polar to cartesian conversion.

(points not in the aperture are treated as though they were at the first or last radial polar value…)

aotools.functions.karhunenLoeve.polang(r)[source]

Generate an array with the same dimensions as r, but containing the azimuthal values for a polar coordinate system.

aotools.functions.karhunenLoeve.radii(nr, npp, ri)[source]

Use to generate a polar coordinate system.

Generate an nr x npp array with npp copies of the radial coordinate array. Radial coordinate span the range from r=ri to r=1 with successive annuli having equal areas.

ie, the area between ri and 1 is divided into nr equal rings, and the points are positioned at the half-area mark on each ring; there are no points on the border

See also

polang()

aotools.functions.karhunenLoeve.rebin(a, newshape)[source]

Rebin an array to a new shape. See scipy cookbook. It is intended to be similar to ‘rebin’ of IDL

aotools.functions.karhunenLoeve.set_pctr(bas, ncp=None, ncmar=None)[source]

call pcgeom to build the dic geom_struct with the right initializtions.

Parameters:bas (dic) – gkl_basis dic built with the gkl_bas routine
aotools.functions.karhunenLoeve.setpincs(ax, ay, px, py, ri)[source]

determine a set of squares for interpolating from cartesian to polar coordinates, using only those points with ri <= r <= 1

aotools.functions.karhunenLoeve.stf_kolmogorov(r)[source]

Kolmogorov structure function with r = (D/r0)

aotools.functions.karhunenLoeve.stf_vonKarman(r, L0)[source]

von Karman structure function with r = (D / r0) L0 is in unit of telescope diameter, typically a few (3; or 20m)

aotools.functions.karhunenLoeve.stf_vonKarman_yao(r, L)[source]