Gaussian beamlet
Lasers are common devices in modern optical laboratories. Modeling their propagation through an optical setup can be of interest when planning new experiments. Geometrical ray tracing struggles to capture the propagation of a laser beam correctly, since it can not inherently capture the wave nature of e.g. the Gaussian beam.
The electric field of the BeamletOptics.electric_field function:
BeamletOptics.electric_field Method
electric_field(r, z, E0, w0, w, k, ψ, R) -> ComplexF64Computes the analytical complex electric field distribution of a stigmatic TEM₀₀ Gaussian beam which is described by:
Arguments
r: radial distance from beam originz: axial distance from beam originE0: peak electric field amplitudew0: waist radiusw: local beam radiusk: wave number, equal to2π/λψ: Gouy phase shift (defined as!) R: wavefront curvature, i.e. 1/r (radius of curvature)
The evolution of this field through an optical system can be modeled e.g. by the ray transfer matrix formalism using the complex
Complex ray tracing
In 1968 an internal publication at Bell Labs by J. Arnaud introduced the concept of complex rays wherein three geometrical beams can be used to model the propagation of a Gaussian in fundamental mode through a symmetric optical system, i.e. without the Gaussian obtaining astigmatism and/or higher-order abberations. This method is analoguos to the ray transfer matrix based
Without extensions of the original method, the following key assumptions must be met such that this method can be applied
all (complex) beams of the Gaussian in question must intersect the same optical elements
the optical elements are large compared to the beam (waist)
the paraxial approximation must hold for each beam
the Gaussian may not be clipped by hard apertures
Lagrange invariant must be fulfilled
Various versions of this approach have been implemented under different names in commercial software, most notably FRED, Code V and QUADOA, as well as in open source software, e.g.
Raypier - based on Cython, maintenance status not known
Poke - based on Zemax API and Python, maintained by J. Ashcraft et al. [11]
IfoCAD - maintenance status not known, refer to Wanner et al. [12]
This package implements the above method via the stigmatic GaussianBeamlet and the AstigmaticGaussianBeamlet, the latter of which is presented in more detail in the Astigmatic polarized beamlets chapter.
Stigmatic beamlets
The GaussianBeamlet implements the BeamletOptics.AbstractBeam interface and can be used to model the propagation of a monochromatic Gaussian (chief (red), waist (blue) and divergence (green) beam. See below how these beams are placed in relation to the envelope of the Gaussian beam.

BeamletOptics.GaussianBeamlet Type
GaussianBeamlet{T} <: AbstractBeam{T, Ray{T}}Ray representation of the stigmatic Gaussian beam as per J. Arnaud (1985). The beam quality M2 is fully considered via the divergence angle. The formalism for the beam parameter calculation is based on the following publications:
Jacques Arnaud, "Representation of Gaussian beams by complex rays." Appl. Opt. 24, 538-543 (1985)
and
Donald DeJager and Mark Noethen, "Gaussian beam parameters that use Coddington-based Y-NU paraprincipal ray tracing," Appl. Opt. 31, 2199-2205 (1992)
Fields
λ: beam wavelength in [m]w0: local beam waist radius in [m]E0: complex reference amplitude in [V/m] of the field, normalized to the power of the beamlet:P = |E0|² π w0² / (4 Z₀)for any medium. The physical field of a segment in a medium of refractive indexnisE0 / √n(times the profile), so that the irradiancen |E|² / (2 Z₀)of a beam of fixed power does not depend on the medium, seeelectric_fieldparent: reference to the parent beam, if any (Nullableto account for the root beam which has no parent)children: vector of child beams, each child beam represents a branching or bifurcation of the original beam, i.e. beam-splitting
Additional information
Beam parameters
Parameters of the beam, e.g. gauss_parameters function.
Astigmatism and abberations
It is assumed, but not forbidden, that the optical system contains non-flat or non-parabolic beam-surface-interactions that cause the beam to obtain astigmatism or higher-order abberations. These can not be represented by the GaussianBeamlet.
Optical invariant check
When using the solve_system! function, the Lagrange invariant is checked for each interaction. If it deviates by more than get_lagrange_tolerance() from its start value, the beamlet has left the range of its model and tracing is stopped with a warning, as for an AstigmaticGaussianBeamlet.
A GaussianBeamlet can be constructed via:
BeamletOptics.GaussianBeamlet Method
GaussianBeamlet(position, direction, λ, w0; kwargs...)Constructs a Gaussian beamlet at its waist with the specified beam parameters.
Arguments
The following inputs and arguments can be used to configure the beamlet:
Inputs
position: origin of the beamletdirection: direction of the beamletλ: wavelength of the beamlet in [m]. Default value is 1000 nm.w0: beam waist (radius) in [m]. Default value is 1 mm.
Keyword Arguments
M2: beam quality factor. Default is 1P0: beam total power in [W]. Default is 1 mWz0: beam waist offset in [m]. Default is 0 msupport:Nullablesupport vector for the construction of the waist and div rays. Must be orthogonal todirection, has any non-zero length and is normalized internally. Default isnothing, i.e. a vector orthogonal todirectionis chosen.
Additional information
Waist offset
The z0 keyword arg. can be used in order to spawn a beam where the waist is not located at the specified position, but rather at an offset z0 in [m] along the chief ray axis.
Support vector
In order to calculate the basis vectors required for the beamlet construction, an orthogonal vector is chosen deterministically from direction via normal3d. Specify a support vector to choose it yourself. The waist and divergence rays start from the chief ray along this vector. A support that is not orthogonal to the direction (the dot product of the unit vectors exceeds get_orthogonality_threshold(), default 1e-10) throws an ArgumentError, since it would give a beamlet with a smaller waist radius and a shifted waist.
Obtaining the beam parameters
Once a GaussianBeamlet has been traced through an optical system, several parameters might be of interest for further analysis. In order to relate the traced geometrical beams/rays to the Gaussian parameters, the publications of Arnaud, Herloski et al. and DeJager et al. are used [10, 13, 14]. Consider the following system where a Gaussian beam with arbitrary parameters has been traced through a lens using the approach outlined in the Complex ray tracing section.

The user can obtain parameters such as the beam waist radius, the radius of curvature and more using the gauss_parameters and/or waist_parameters functions. Below the local waist radius and curvature

BeamletOptics.gauss_parameters Method
gauss_parameters(gauss::GaussianBeamlet, z; hint = point_on_beam(gauss, z))Calculate the local waist radius and Gouy phase of an unastigmatic Gaussian beamlet at a specific cartesian distance z based on the method of J. Arnaud (1985) and D. DeJager (1992).
Arguments
gauss: the GaussianBeamlet object for which parameters are to be calculated.z: the position along the beam at which to calculate the parameters.hint: optional tuple(point, index)of the point on the beam and the index of its segment, as returned bypoint_on_beam. Default ispoint_on_beam(gauss, z).
Returns
w: local radiusR: curvature, i.e. 1/r where r is the radius of curvatureψ: Gouy phase (note that -atan definition is used), collected along the beam from the start of the root beam: continuous at every surface and from a parent beam to its children, i.e. the Gouy phase thatelectric_fieldcontains. The same holds for anAstigmaticGaussianBeamlet.w0: local beam waist radius
BeamletOptics.waist_parameters Method
waist_parameters(gb, z)Compute the position and cross-section axes at distance z along the beam. For a stigmatic GaussianBeamlet, the cross-section is circular, and the axes are determined by the orientation of the auxiliary waist ray. Returns the vectors (p0, w1, w2) and scalar waist radii (w0, w0).
BeamletOptics.rayleigh_range Method
rayleigh_range(g::GaussianBeamlet; M2=1)Returns the Rayleigh range for the first beam section of the GaussianBeamlet g. Note: M2 is not stored in g during construction and must be specified by the user.
BeamletOptics.electric_field Method
electric_field(gauss::GaussianBeamlet, r, z)Calculates the electric field phasor [V/m] of the GaussianBeamlet at the radial and longitudinal positions r and z. It is the physical field, like that of an AstigmaticGaussianBeamlet: with the irradiance n |E|² / (2 Z₀) of a medium of refractive index n, a beam of fixed power has the amplitude ∝ 1/√n, hence the field of a segment in a medium is the reference amplitude E0 of the beamlet divided by √n. The phase contains the optical_path_length from the start of the beam (parents included) up to z: within a medium of refractive index n it advances with the wavenumber n k₀, along the beam and across it. The Gouy phase is collected along the beam as well, i.e. it is continuous at every surface and from a parent beam to its children, and equals the ψ of gauss_parameters.
Warning
Note that z and r must be specified as cartesian distances. Using the optical path length for z can lead to false results.
BeamletOptics.optical_power Method
optical_power(gauss::GaussianBeamlet)Power of the beamlet in [W] at its start. The reference amplitude E0 is normalized to the power, hence the power does not depend on the medium of the beamlet.
The Gouy phase ψ collected along the beam is continuous at a surface, whereas the Gouy phase relative to the local waist of a segment jumps there, e.g. at a lens. The field of a segment therefore adds an offset to the local phase. The offset is zero on the first segment of a root beam and collects the steps of the local phase at every surface on the way. A child beam continues the last segment of its parent.
The offsets and slopes of the waist and divergence rays on a plane give the beam parameters of a segment. The offset get_lagrange_tolerance(), by default 50 %, from its start value, as for an AstigmaticGaussianBeamlet; this happens in a strong focus, where the rays leave the parabolic part of a surface.
The field amplitude follows from