Skip to content

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 spatial Gaussian mode can be calculated analytically using the BeamletOptics.electric_field function:

BeamletOptics.electric_field Method
julia
electric_field(r, z, E0, w0, w, k, ψ, R) -> ComplexF64

Computes the analytical complex electric field distribution of a stigmatic TEM₀₀ Gaussian beam which is described by:

Arguments

  • r: radial distance from beam origin

  • z: axial distance from beam origin

  • E0: peak electric field amplitude

  • w0: waist radius

  • w: local beam radius

  • k: wave number, equal to 2π/λ

  • ψ: Gouy phase shift (defined as !)

  • R: wavefront curvature, i.e. 1/r (radius of curvature)

source

The evolution of this field through an optical system can be modeled e.g. by the ray transfer matrix formalism using the complex -factor [9, pp. 27]. A Julia-based implementation of this approach can be found in ABCDMatrixOptics.jl. However, in the case of this package another approach will be used.

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 -method [10].

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 (-mode) through optical system where all optics lie on the optical axis, e.g. no tip and/or tilt dealignment, and abberations can be neglected. It is represented by a 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
julia
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

  • chief: a Beam of Rays to store the chief ray

  • waist: a Beam of Rays to store the waist ray

  • divergence: a Beam of Rays to store the divergence ray

  • λ: 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 index n is E0 / √n (times the profile), so that the irradiance n |E|² / (2 Z₀) of a beam of fixed power does not depend on the medium, see electric_field

  • parent: reference to the parent beam, if any (Nullable to 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. or , can be obtained through the 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.

source

A GaussianBeamlet can be constructed via:

BeamletOptics.GaussianBeamlet Method
julia
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 beamlet

  • direction: 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 1

  • P0: beam total power in [W]. Default is 1 mW

  • z0: beam waist offset in [m]. Default is 0 m

  • support: Nullable support vector for the construction of the waist and div rays. Must be orthogonal to direction, has any non-zero length and is normalized internally. Default is nothing, i.e. a vector orthogonal to direction is 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.

source

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   have been calculated for the example above.

BeamletOptics.gauss_parameters Method
julia
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 by point_on_beam. Default is point_on_beam(gauss, z).

Returns

  • w: local radius

  • R: 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 that electric_field contains. The same holds for an AstigmaticGaussianBeamlet.

  • w0: local beam waist radius

source
BeamletOptics.waist_parameters Method
julia
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).

source
BeamletOptics.rayleigh_range Method

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.

source
BeamletOptics.electric_field Method
julia
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.

source
BeamletOptics.optical_power Method

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.

source

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 is the vector from the chief ray to the crossing point of the ray, and the slope   is its change along the chief ray. Both are vectors in the transverse plane, so no direction has to be taken from an offset of zero, e.g. that of the divergence ray at the waist. The Lagrange invariant      is constant along a segment, and at the start of the beam it is . Tracing stops with a warning if deviates by more than 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  . The reference amplitude is normalized to the power, so the physical field in a medium is smaller by . The optical path up to a point includes the curvature term, which is a geometric length like and enters with the wavenumber of the medium as well.