geometries.even_asphere

Even Asphere Geometry

The Even Asphere geometry represents a surface defined by an even asphere in two dimensions. The surface is defined as:

z = r^2 / (R * (1 + sqrt(1 - (1 + k) * r^2 / R^2))) + sum(Ci * r^(2i))

where - r^2 = x^2 + y^2 - R is the radius of curvature - k is the conic constant - Ci are the aspheric coefficients

Even-order aspheric surfaces are commonly used to correct specific aberrations while maintaining rotational symmetry. These surfaces are defined by polynomial terms with even exponents, ensuring symmetry about the optical axis.

Kramer Harrison, 2024

Classes

EvenAsphere(coordinate_system, radius[, ...])

Represents an even asphere geometry defined as:

class EvenAsphere(coordinate_system, radius, conic=0.0, tol=1e-10, max_iter=100, coefficients=None)[source]

Represents an even asphere geometry defined as:

z = r^2 / (R * (1 + sqrt(1 - (1 + k) * r^2 / R^2))) + sum(Ci * r^(2i))

where - r^2 = x^2 + y^2 - R is the radius of curvature - k is the conic constant - Ci are the aspheric coefficients

Even-order aspheric surfaces are commonly used to correct specific aberrations while maintaining rotational symmetry. These surfaces are defined by polynomial terms with even exponents, ensuring symmetry about the optical axis.

Parameters:
  • coordinate_system (CoordinateSystem) – The coordinate system of the geometry.

  • radius (float) – The radius of curvature of the base sphere.

  • conic (float, optional) – The conic constant of the base sphere. Defaults to 0.0.

  • tol (float, optional) – Tolerance for Newton-Raphson iteration. Defaults to 1e-10.

  • max_iter (int, optional) – Maximum iterations for Newton-Raphson. Defaults to 100.

  • coefficients (list[float], optional) – A list of even aspheric coefficients C_i, where the term is C_i * r^(2i). The list index corresponds to i-1 (e.g., coefficients[0] is C_1 for r^2). Defaults to an empty list (no aspheric contribution).

c

List of aspheric coefficients.

Type:

list[float]

distance(rays)

Calculates the distance from the ray origin to the surface intersection using a robust Newton-Raphson method. This version uses the base conic intersection as a strong initial guess.

Parameters:

rays (RealRays) – The rays used for calculating distance.

Returns:

An array of propagation distances ‘t’ from each ray’s current position to its intersection point with the geometry.

Return type:

be.ndarray

flip()

Flip the geometry.

Changes the sign of the radius of curvature. The conic constant remains unchanged.

classmethod from_dict(data)[source]

Creates an asphere from a dictionary representation.

Parameters:

data (dict) – The dictionary representation of the asphere.

Returns:

An instance of EvenAsphere.

Return type:

EvenAsphere

globalize(rays)

Convert rays from the local coordinate system to the global coordinate system.

Parameters:

rays (RealRays) – The rays to convert.

localize(rays)

Convert rays from the global coordinate system to the local coordinate system.

Parameters:

rays (RealRays) – The rays to convert.

sag(x=0, y=0)[source]

Calculates the sag of the asphere at the given coordinates.

Parameters:
  • x (float or be.ndarray, optional) – The x-coordinate(s). Defaults to 0.

  • y (float or be.ndarray, optional) – The y-coordinate(s). Defaults to 0.

Returns:

The sag value(s) at the given coordinates.

Return type:

be.ndarray or float

scale(scale_factor: float)[source]

Scale the geometry parameters.

Parameters:

scale_factor (float) – The factor by which to scale the geometry.

set_radius(value: float) None

Set the radius of curvature.

Parameters:

value (float) – The new radius of curvature.

surface_normal(rays)

Calculates the surface normal of the geometry at the given rays.

Parameters:

rays (RealRays) – The rays, positioned at the surface, for which to calculate the surface normal.

Returns:

The surface normal components (nx, ny, nz).

Return type:

tuple[be.ndarray, be.ndarray, be.ndarray]

to_dict()[source]

Converts the geometry to a dictionary.

Returns:

The dictionary representation of the geometry.

Return type:

dict

update_normalization(semi_aperture: float) None

Update the normalization attributes of the geometry based on its defined normalization_mode (‘auto’ or ‘manual’). Base geometry generally does not maintain a normalization radius.

Parameters:

semi_aperture (float) – The current semi-aperture of the surface.