mtf.geometric

Geometric Modulation Transfer Function (MTF) Module.

This module provides the GeometricMTF class for computing the MTF of an optical system based on spot diagram data.

Kramer Harrison, 2025

Classes

GeometricMTF(optic[, fields, wavelength, ...])

Smith, Modern Optical Engineering 3rd edition, Section 11.9

class GeometricMTF(optic: Optic, fields: str | list = 'all', wavelength: str | float = 'primary', num_rays=100, distribution: DistributionType = 'uniform', num_points=256, max_freq='cutoff', scale=True)[source]

Smith, Modern Optical Engineering 3rd edition, Section 11.9

This class represents the Geometric MTF (Modulation Transfer Function) of an optical system. It inherits from the SpotDiagram class.

Parameters:
  • optic (Optic) – The optical system for which to calculate the MTF.

  • fields (str or list, optional) – The field points at which to calculate the MTF. Defaults to ‘all’.

  • wavelength (str or float, optional) – The wavelength at which to calculate the MTF. Defaults to ‘primary’.

  • num_rays (int, optional) – The number of rays to trace for each field point. Defaults to 100.

  • distribution (str, optional) – The distribution of rays within each field point. Defaults to ‘uniform’.

  • num_points (int, optional) – The number of points to sample in the MTF curve. Defaults to 256.

  • max_freq (str or float, optional) – The maximum frequency to consider in the MTF curve. Defaults to ‘cutoff’.

  • scale (bool, optional) – Whether to scale the MTF curve using the diffraction-limited curve. Defaults to True.

num_points

The number of points to sample in the MTF curve.

Type:

int

scale

Whether to scale the MTF curve.

Type:

bool

max_freq

The maximum frequency to consider in the MTF curve.

Type:

float

freq

The frequency values for the MTF curve.

Type:

be.ndarray

mtf

The MTF data for each field point. Each element is a list containing tangential and sagittal MTF data (be.ndarray) for a field.

Type:

list

diff_limited_mtf

The diffraction-limited MTF curve.

Type:

be.ndarray

view(figsize=(12, 4), add_reference=False)[source]

Plots the MTF curve.

_generate_mtf_data()[source]

Generates the MTF data for each field point.

_compute_field_data(xi, v, scale_factor)[source]

Computes the MTF data for a given field point.

_plot_field(ax, mtf_data, field, color)[source]

Plots the MTF data for a given field point.

airy_disc_x_y(wavelength: float) tuple[list[float], list[float]]

Generates the Airy disk radii for the x and y axes for each field.

Parameters:

wavelength – The wavelength for the calculation.

Returns:

x-axis radii and y-axis radii per field.

Return type:

A tuple of two lists

airy_radius(n_w: float, wavelength: float) float

Calculates the Airy disk radius.

Parameters:
  • n_w – The physical F-number.

  • wavelength – The wavelength of light in micrometers.

Returns:

The Airy disk radius.

angle_from_cosine(a: BEArray, b: BEArray) float

Calculates the angle in radians between two direction cosine vectors.

Parameters:
  • a – The first direction cosine vector.

  • b – The second direction cosine vector.

Returns:

The angle between the vectors in radians.

centroid() list[tuple[BEArray, BEArray]]

Calculates the geometric centroid of each spot for the reference wavelength.

Returns:

A list of (x, y) centroid coordinates for each field.

f_number(n: float, theta: float) float

Calculates the physical F-number.

Parameters:
  • n – The refractive index of the medium.

  • theta – The half-angle of the cone of light in radians.

Returns:

The calculated physical F-number.

generate_chief_rays_centers(wavelength: float) BEArray

Generates the (x, y) intersection points for the chief ray of each field.

Parameters:

wavelength – The wavelength for the rays.

Returns:

An array of shape (num_fields, 2) with (x, y) coordinates.

generate_chief_rays_cosines(wavelength: float) BEArray

Generates direction cosines for the chief ray of each field.

Parameters:

wavelength – The wavelength for the rays.

Returns:

An array of shape (num_fields, 3) containing the direction cosines.

generate_marginal_rays(H_x: float, H_y: float, wavelength: float) tuple

Generates marginal rays at the four cardinal points of the pupil.

Parameters:
  • H_x – The x-field coordinate.

  • H_y – The y-field coordinate.

  • wavelength – The wavelength for the rays.

Returns:

A tuple containing the traced rays for north, south, east, and west pupil points.

generate_marginal_rays_cosines(H_x: float, H_y: float, wavelength: float) tuple

Generates direction cosines for each marginal ray of a given field.

Parameters:
  • H_x – The x-field coordinate.

  • H_y – The y-field coordinate.

  • wavelength – The wavelength for the rays.

Returns:

A tuple of direction cosine vectors for north, south, east, and west rays.

geometric_spot_radius() list[list[BEArray]]

Calculates the maximum geometric spot radius for each spot.

Returns:

A nested list of maximum radii for each field and wavelength.

rms_spot_radius() list[list[BEArray]]

Calculates the root-mean-square (RMS) spot radius for each spot.

Returns:

A nested list of RMS radii for each field and wavelength.

view(fig_to_plot_on: Figure | None = None, figsize: tuple[float, float] = (12, 4), add_reference: bool = False) tuple[Figure, Axes][source]

Plots the MTF curve.

Parameters:
  • fig_to_plot_on (plt.Figure, optional) – The figure to plot on. If provided, the existing figure is cleared and reused. Defaults to None, which creates a new figure.

  • figsize (tuple, optional) – The size of the figure. Defaults to (12, 4).

  • add_reference (bool, optional) – Whether to add the diffraction limit reference curve. Defaults to False.

Returns:

A tuple containing the matplotlib figure and axes objects.

If fig_to_plot_on is provided, the existing figure is cleared and reused; otherwise, a new figure is created.

Return type:

tuple