focusedBeam

Description

The focusedBeam class extends the Multipoles class to model cylindrically symmetric Laguerre-Gaussian beams focused by an aplanatic lens (see e.g. Novotny & Hecht (Novotny and Hecht 2012)). It computes beam coefficients \(C_{j m_z p}\) for a multipolar expansion, evaluates the electric field of the beam, and supports visualization of intensity separated in the circular polarization components or total intensity. The implementation accounts for lens properties (numerical aperture, focal length) and beam parameters (AM, helicity). It is largely based on the PhD Thesis by Xavier Zambrana-Puyalto(Zambrana-Puyalto 2014).

Initialization

Creating an instance of the focusedBeam class initializes the beam parameters, spherical coordinate grids, and multipolar coefficients. It inherits from the Multipoles class, using its parameters (l_max, m_max, wl, domain, nr, radius) and sets up the Laguerre-Gaussian beam properties.

focusedBeam(maxJ, wavelength, domain, p=1, l=0, q=0, NA=0.9, f=1000, n_lens=1)

int — maximum total angular momentum quantum number.

float — wavelength of the incident beam (in microns).

domain_class object — spatial domain for field evaluation.

int — helicity of the beam before focusing (-1 or 1, default is 1).

int — azimuthal number of the beam (default is 0).

int — radial index of the beam (default is 0).

float — numerical aperture of the focusing lens (default is 0.9). Allowed values are \(0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8 \& 0.9\).

float — focal length of the lens (in microns, default is 1000).

float — refractive index of the lens medium (default is 1).

Methods


Computes the Wigner small-d function \(d_{m p}^j(\Theta)\) for given quantum numbers \(j\), \(m\), and \(p\) at angle \(\Theta\). The function is defined as: \[\begin{aligned} d_{m p}^j(\Theta) = (-1)^{\frac{p - m - |m - p|}{2}} &\exp\left( \frac{1}{2} \left[ \ln \Gamma(j - M + 1) + \ln \Gamma(j + M + 1) \right.\right. \\ &\left.\left.- \ln \Gamma(j + N + 1) - \ln \Gamma(j - N + 1) \right] \right) \\ &\cdot \cos\left(\frac{\Theta}{2}\right)^{|m + p|} \sin\left(\frac{\Theta}{2}\right)^{|m - p|} P_{j - M}^{|m - p|, |m + p|}(\cos \Theta), \end{aligned}\] where \(M = \max(|m|, |p|)\), \(N = \min(|m|, |p|)\), and \(P_n^{\alpha, \beta}\) is the Jacobi polynomial evaluated using scipy.special.eval_jacobi.


Computes the beam coefficients \(C_{j m_z p}\) for the Laguerre-Gaussian beam with quantum numbers \(l\), \(p\), and \(q\). The coefficient is calculated via numerical integration over the lens aperture: \[\label{eq:Cjmz} C_{j m_z p} = \int_0^{\theta_{\text{max}}} \sin\theta \, f e^{-i k f} \sqrt{2\pi} \sqrt{n_{\text{lens}} \cos\theta} \, \text{LG}(q, l,\theta) \, d_{m_z p}^j(\theta) \, d\theta,\] where \(m_z = l + p\), \(\theta_{\text{max}} = \arcsin(\text{NA} / n_{\text{lens}})\), \(f\) is the focal length, \(k = 2\pi / \lambda\), and \(\text{LG}(q,l,\theta)\) is the Laguerre-Gaussian beam amplitude defined with another method. Returns the coefficients \(C\), the lens integral (which should be as close to unity as possible), and the normalization sum \(\sum_j (2j + 1) |C_j|^2\), ideally close to 2(Zambrana-Puyalto 2014).


Visualizes the squared magnitude of beam coefficients \(|C_{j m_z p}|^2\) as a bar plot for specified \(l\), \(p\), and \(q\). The plot displays contributions for \(j\) from \(\max(|m_z|, 1)\) to maxJ, with optional multiple parameter combinations.


Computes the Laguerre-Gaussian beam amplitude at radial distance \(\rho\) and axial position \(z\). The amplitude is given by: \[\begin{aligned} \text{LG} = \exp\bigg( \ln N(l, q) &- \frac{\rho^2}{w^2} + l \ln \rho + (l + 1) \left( \frac{1}{2} \ln 2 - \ln w \right) \bigg) L_q^l\left( \frac{2 \rho^2}{w^2} \right), \end{aligned}\] where \(N(l, q) = \sqrt{\frac{q!}{\pi (q + l)!}}\) is the normalization factor, \(w\) is the beam waist, \(k = 2\pi / \lambda\), and \(L_q^l\) is the generalized Laguerre polynomial.


Returns the beam waist \(w\) (in microns) for a given numerical aperture NA and orbital quantum number \(l\), based on precomputed values for NA = 0.25, 0.3, 0.5, or 0.9. Beam waist values are computed such that they fill the lens completely and the sum is truncated appropriately(Zambrana-Puyalto 2014).


Computes the total electric field for the focused beam by summing electric and magnetic contributions: \[E = \sum_{j=j_0}^{j_{\text{max}}} i^j \sqrt{2j + 1} C_j \left[ A_{j m}^{(m)} + i p A_{j m}^{(e)} \right],\] where \(j_0 = \max(|m|, 1)\), \(m = l + p\), \(C_j\) are beam coefficients, and \(A_{j m}^{(m/e)}\) are multipole fields computed via get_multipoles.


Visualizes the computed multipolar field sum. When called, the beam object is displayed.
Plots either individual polarization components (plot="components", showing \(\xi_1, \xi_0, \xi_{-1}\)) or total intensity (plot="total") across defined planes. The field intensity is computed as \(|E|^2\).

str — plot type: "components" or "total".

bool — if True, normalizes all plots to the global maximum; otherwise, each plot is normalized individually.

Comments

The beam waist values in get_w are limited to specific NA values; interpolating for arbitrary NA could improve flexibility.

Novotny, L., and B. Hecht. 2012. Principles of Nano-Optics. 2nd ed. Cambridge University Press.
Zambrana-Puyalto, Xavier. 2014. “Control and Characterization of Nano-Structures with the Symmetries of Light.” PhD thesis, Macquarie University.