Laguerre Gaussian Transverse Profile#

Used to define a Laguerre-Gaussian transverse laser profile. Laguerre-Gaussian modes are a family of solutions to the paraxial wave equation written in cylindrical coordinates. The modes are characterised by a radial index \(p\) and an azimuthal index \(m\).


class lasy.profiles.transverse.LaguerreGaussianTransverseProfile(w_0, p, m, wavelength, z_foc=0)[source]#

A high-order Gaussian laser pulse expressed in the Laguerre-Gaussian formalism.

Definition is according to Siegman “Lasers” pg. 646 eq. 64.

More precisely, the transverse envelope (to be used in the CombinedLongitudinalTransverseLaser class) corresponds to:

\[\mathcal{T}(x, y) = \, \mathcal{L}_{p,m} (x) \, \exp(i \Phi)\]

with

\[ \begin{align}\begin{aligned}\mathcal{L}_{p,m}(x) = A \left ( \frac{\sqrt{2}r}{w(z)} \right)^m l_{p,m} \left ( \frac{2 r^2}{w^2(z)} \right) \exp{\left( -\frac{r^2}{w^2(z)}\right)} \exp{ \left ( -i k_0 \frac{r^2}{2 R(z)} \right )}\\w(z) = w_{0} \sqrt{1 + \left( \frac{z}{Z_R}\right)^2}\\A = \frac{1}{w(z)} \sqrt{\frac{2 p!}{\pi (p + m)!}}\\R(z) = z + \frac{Z_R^2}{z}\\\Phi(z) = \left(2 p + m + 1\right) \arctan\left({\frac{z}{Z_R}}\right)\\Z_R = \frac{\pi w_0^2}{\lambda_0}\end{aligned}\end{align} \]

where \(l_{p,m}\) is the Laguerre polynomial of radial order \(p\) and azimuthal order \(m\).

The z-depedence shown in the above equations is required to correctly define the electric field of the transverse profile relative to that of the pulse at the focus. The absolute z position will be overwritten when creating a laser object.

Parameters:
w_0float (in meter)

The waist of the laser pulse, i.e. \(w_{0}\) in the above formula.

pint (dimensionless)

The order of Laguerre polynomial in the x direction i.e. \(m\) in the above formula.

mint (dimensionless)

The order of Laguerre polynomial in the y direction i.e. \(n\) in the above formula.

wavelengthfloat (in meter)

The main laser wavelength \(\lambda_0\) of the laser.

z_focfloat (in meter), optional

Position of the focal plane. (The laser pulse is initialized at z=0.)

Warning

In order to initialize the pulse out of focus, you can either:

  • Use a non-zero z_foc

  • Use z_foc=0 (i.e. initialize the pulse at focus) and then call laser.propagate(-z_foc)

Both methods are in principle equivalent, but note that the first method uses the paraxial approximation, while the second method does not make this approximation.

Examples

>>> import matplotlib.pyplot as plt
>>> from lasy.backend import xp, to_cpu
>>> from lasy.profiles.transverse.laguerre_gaussian_profile import (
...     LaguerreGaussianTransverseProfile,
... )
>>> # Create evaluation grid
>>> xy = xp.linspace(-30e-6, 30e-6, 200)
>>> X, Y = xp.meshgrid(xy, xy)
>>> # Create an array of plots
>>> fig, ax = plt.subplots(3, 6, figsize=(10, 5), tight_layout=True)
>>> extent = (1e6 * xy[0], 1e6 * xy[-1], 1e6 * xy[0], 1e6 * xy[-1])
>>> for p in range(3):
>>>     for m in range(3):
>>>         transverse_profile = LaguerreGaussianTransverseProfile(
...             w_0 = 10e-6, # m
...             p = p, #
...             m = m, #
...             wavelength = 0.8e-6, # m
...         )
...         intensity = xp.abs(transverse_profile.evaluate(X,Y))**2
...         vmax_intensity = xp.max(intensity)
>>>         ax[p,m].imshow(to_cpu(intensity),extent=extent,cmap='bone_r',vmin=0,vmax=vmax_intensity)
>>>         ax[p,m].set_title('Inten: p,m = %i,%i' %(p,m))
>>>         phase = xp.angle(transverse_profile.evaluate(X,Y))
...         vmax_phase = xp.max(xp.abs(phase))
>>>         ax[p,m+3].imshow(to_cpu(phase),extent=extent,cmap='seismic',vmin=-vmax_phase,vmax=vmax_phase)
>>>         ax[p,m+3].set_title('Phase: p,m = %i,%i' %(p,m))
>>>         if p==2:
>>>             ax[p,m].set_xlabel("x (µm)")
>>>             ax[p,m+3].set_xlabel("x (µm)")
>>>         else:
>>>             ax[p,m].set_xticks([])
>>>             ax[p,m+3].set_xticks([])
>>>         if m==0:
>>>             ax[p,m].set_ylabel("y (µm)")
>>>             ax[p,m+3].set_yticks([])
>>>         else:
>>>             ax[p,m].set_yticks([])
>>>             ax[p,m+3].set_yticks([])
../../../_images/laguerre_gaussian_profile-1.png