optiland.analysis.irradiance
Irradiance Analysis
This module implements the necessary logic for the irradiance analysis in a given optical system. note: for now we consider incoherent irradiance. note: for now we consider incoherent irradiance.
The analysis is analogous to the SpotDiagram except that instead of plotting the landing position of individual rays, we accumulate their power on a detector and express the result in W/mm^2.
Manuel Fragata Mendes, 2025
Classes
|
Compute and visualise incoherent irradiance on the detector surface. |
- class IncoherentIrradiance(optic, num_rays: int = 5, res=(128, 128), px_size: float | None = None, detector_surface: int = -1, *, fields='all', wavelengths='all', distribution: str = 'random', user_initial_rays=None, source=None, skip_trace: bool = False)[source]
Compute and visualise incoherent irradiance on the detector surface. For simplification, we assume that the detector surface = image surface.
Attributes: — optic : optiland.optic.Optic
Reference to the optical system - must already define fields, wavelengths and, critically, a physical aperture on the chosen detector surface.
- restuple[int, int]
Requested pixel count along (x,y) of the irradiance grid.
- px_sizetuple[float, float] | None
Physical pixel pitch (dx,dy) in mm. If
Nonethe pitch is derived from the surface aperture and res.- num_raysint
Number of real rays launched for every (field,wavelength) pair.
- fields, wavelengthstuple | “all”
Convenience selectors that work exactly like those in SpotDiagram - default is to analyse all of them.
- detector_surfaceint
Index into optic.surfaces that designates the detector plane to analyse (default=`-1`->image surface).
- datalist[list[be.ndarray]]
2-D irradiance arrays for every (field,wvl) - outer index is field, inner index is wavelength. Each array has shape (res[0],res[1]) with X as the row index so that
irr_data[f][w][i,j]refers to X=i, Y=j.- user_initial_raysRealRays | None
Optional user-provided initial rays (at the source/object plane) to be traced through the whole optical system.
- sourceBaseSource | None
Optional extended source object (e.g., GaussianSource) to generate initial rays automatically. Cannot be used with user_initial_rays. When provided, num_rays determines how many rays to generate.
Methods — view(figsize=(6,5), cmap=”inferno”) → None
Display false-colour irradiance maps three fields per row, sharing a common colour bar.
- peak_irradiance() → list[list[float]]
Return the maximum pixel value for every (field,wvl) pair.
- view(fig_to_plot_on: Figure | None = None, figsize: tuple = (6, 5), cmap: str | Colormap = 'inferno', cross_section: tuple[str, int] | None = None, *, normalize: bool = True, show: bool = True) tuple[Figure, NDArray[_np.object_]] | None[source]
Display a false-colour irradiance map or cross-section plots for the current irradiance data.
- Parameters:
fig_to_plot_on – plt.Figure, optional Existing matplotlib Figure to plot on. If None, a new figure is created. Default is None.
figsize – tuple, optional Size of each subplot as (width, height) in inches. Default is (6, 5).
cmap – str or Colormap, optional Colormap to use for the irradiance map. Default is “inferno”.
cross_section – tuple[str, int], optional If provided, plot a cross-section instead of a 2D map. Should be a tuple of (‘cross-x’ or ‘cross-y’, index), where index is the slice index along the specified axis. If None, a 2D irradiance map is plotted. Default is None.
normalize – bool, optional If True, normalize irradiance maps to their peak value. If False, use absolute values. Default is True.
- Returns :
- figmatplotlib.figure.Figure
The matplotlib Figure object containing the plot(s).
- axsnumpy.ndarray
Array of Axes objects for the subplots, or None if plotting on an existing figure.
Notes
If no valid irradiance data is available, the method prints a warning
and returns None. - If cross_section is invalid or not provided, a 2D irradiance map is shown. - The method supports plotting multiple fields and wavelengths as a grid of subplots. - Colorbars and axis labels are automatically added to each subplot.