Zernike

Overview

The Zernike class computes Zernike polynomial modes over a telescope pupil (including annular pupils with central obstruction). It is used primarily to build modal bases for wavefront representation and NCPA generation.

Modes are normalised to unit RMS over the pupil (piston-removed by default).

Quick start

from OOPAO.Zernike import Zernike

# Compute first 20 Zernike modes
Z = Zernike(tel, J=20)
Z.computeZernike(tel)

print(Z.modes.shape)        # (n_pupil_pixels, 20)
print(Z.modesFullRes.shape) # (resolution, resolution, 20)

# Get mode name
print(Z.modeName(2))  # 'Defocus'

API reference

class OOPAO.Zernike.Zernike(telObject, J=1)[source]

Zernike polynomial basis generator.

Parameters:
  • telObject (Telescope) – Telescope object providing pupil geometry and diameter.

  • J (int) – Number of Zernike modes to compute (starting from piston or tip, depending on remove_piston). Default 1.

Methods

computeZernike(telObject, remove_piston=1)[source]

Compute the Zernike modes and store results in modes and modesFullRes.

Parameters:
  • telObject (Telescope) – Telescope object.

  • remove_piston (int) – Number of leading modes to skip (default 1 skips piston).

modeName(index)[source]

Return the human-readable name of Zernike mode at the given index (0-based).

Parameters:

index (int) – Mode index.

Returns:

Name string, e.g. 'Tip', 'Defocus', 'Coma vertical'.

Return type:

str

zernikeRadialFunc(n, m, r)[source]

Compute the Zernike radial polynomial \(R_n^m(r)\).

Parameters:
  • n (int) – Radial order.

  • m (int) – Azimuthal order.

  • r (numpy.ndarray) – 2-D radial coordinate array (normalised 0–1).

Returns:

Radial polynomial values.

Return type:

numpy.ndarray

Key attributes

modes: numpy.ndarray

Mode matrix of shape (n_pupil_pixels, J). Each column is a Zernike mode over the valid pupil pixels.

modesFullRes: numpy.ndarray

Full-resolution mode cube of shape (resolution, resolution, J).

nModes: int

Number of modes (equals J).