Laser Beam Laguerre-Gaussian TEM modes¶
Author: Calvin Z He
The electric field plotted is of the form ($z$ and phase offsets ignored)$^1$: $$E_{pl}(r,\phi,z=0) = E_0\left(\frac{2r^2}{w_0^2}\right)^{|l|/2} L_p^{|l|}\left(\frac{2r^2}{w_0^2}\right)\exp\left(-\frac{r^2}{w_0^2}\right)\cos(l\phi)$$
The generalized Laguerre Polynomial in sum notation$^2$: $$L_p^l(\rho) = \sum_{m=0}^p (-1)^m \frac{(p+l)!}{(p-m)!(l+m)!m!}\rho^m$$
References:
In [4]:
import numpy as np
from scipy.special import factorial
from matplotlib import pyplot as plt
x = np.linspace(-100,100,101)
y = np.linspace(-100,100,101)
X,Y = np.meshgrid(x,y)
R = np.sqrt(X**2+Y**2)
Phi = np.atan2(Y,X)
pmax = 6
lmax = 3
w0 = 10
for p in range(pmax):
for l in range(lmax):
Clp = np.sqrt(2*factorial(p)/(np.pi*factorial(p+np.abs(l))))
Lpl = 0
for m in range(p+1):
Lpl += (-1)**m*factorial(p+l)/(factorial(p-m)*factorial(l+m)*factorial(m))*(2*R**2/w0**2)**m
Epl = np.cos(Phi*l)*np.exp(-R**2/w0**2)*(np.sqrt(2)*R/w0)**np.abs(l)*Clp/w0*Lpl
if l==0:
Epl_row = [Epl]
else:
Epl_row = np.append(Epl_row, [Epl],axis=0)
if p==0:
Epl_dat = [Epl_row]
else:
Epl_dat = np.append(Epl_dat, [Epl_row],axis=0)
print(np.shape(Epl_dat))
(6, 3, 101, 101)
In [5]:
%matplotlib inline
fig, ax = plt.subplots(figsize=(12,18),ncols=lmax,nrows=pmax)
for p in range(pmax):
for l in range(lmax):
axc = ax[p,l]
dat = Epl_dat[p,l]
im = axc.imshow(dat,cmap='seismic',vmax = 0.1,vmin=-0.1)
plt.colorbar(im, ax=axc)
axc.set_xlabel('x')
axc.set_ylabel('y')
axc.set_title(f'(p,l)=({p},{l})')
plt.tight_layout()
plt.show()
In [ ]: