Physical Apertures#

This section provides an overview of the physical apertures available in the Optiland package. Physical apertures are used to define boundaries of the individual optical surface, i.e., where rays may interact on the surface. For example, a primary telescope mirror that has a central hole may be defined by a physical aperture that is circular with a hole in the center (i.e., RadialAperture).

physical_apertures.base

Physical Apertures Base Module

physical_apertures.radial

Radial Aperture Module

physical_apertures.rectangular

Rectangular Aperture Module

physical_apertures.elliptical

Elliptical Aperture Module

physical_apertures.offset_radial

Offset Radial Aperture Module

physical_apertures.polygon

Polygon Aperture Module

physical_apertures.rotated

Rotation of an existing physical aperture around a specified pivot.

physical_apertures.unclipped

A drawing boundary whose shape does not clip traced rays.

Transforms and drawing boundaries#

RotatedAperture wraps any physical aperture and rotates its membership test and enclosing drawing bounds. Its angle is in radians, counterclockwise about the surface’s positive z-axis; the optional pivot is in surface coordinates. Scaling changes the child shape and pivot together, while retaining the angle. The OSLO reader uses this wrapper for rotated ellipses and rectangles, with the shape’s centroid as pivot.

UnclippedAperture retains a child shape for drawing while leaving ray intensities unchanged when the surface calls clip. Its contains method still describes the drawing shape; it does not mean that rays outside that shape are blocked. Use it around the complete aperture assigned to a surface, after composing any Boolean shapes. The OSLO reader uses it for unchecked ordinary apertures and disabled aperture checking. The OSLO writer preserves this distinction for supported circular boundaries.

Both wrappers use the existing BaseAperture serialization dispatch and survive native Optic save/reload. Surface tracing calls clip; layout renderers use extent and contains. Neither wrapper changes refraction, reflection, material selection or polarization interactions.

For example, this rectangle is rotated around its displaced centroid:

import math
from optiland.physical_apertures import RectangularAperture, RotatedAperture

aperture = RotatedAperture(
    RectangularAperture(2, 6, 1, 3), math.pi / 2, center_x=4, center_y=2
)
# aperture.extent is approximately (3, 5, 0, 4).