Tutorial 5 - An advanced cavity example ‘Bessel-Gauss’ cavity

Small introduction

In this tutorial we will design and calculate the eigenmodes of an advanced type of laser cavities called Bessel-Gauss cavities. This class of cavities support Bessel-Gauss beams which offer some interesting properties, for example an extended depth of field with high intensity sometimes called non-diffracting region and annular intensity distribution in the far field. These properties make this class of beams very interesting for several applications such as biomedical imaging, particle trapping, strong-field applications...etc. Well, I hope that this small introduction motivates you to learn more about these cavities. In the tutorial we will take the design studied in this open access paper [Schimpf2012] which is a good one (I find) to learn more about Bessel-Gauss beams and cavities and can be downloaded here ), this way we can compare the results obtained using OpenCavity with those of the paper. Lets start with the scheme of the cavity:

_images/Bessel_cavity_scheme.png

As we can see this cavity contains concave mirror with radius of curvature R2=250mm and a conical reflector with base angle \(\alpha=0.5°\). the cavity length Lc=78mm. This results in a ring-shaped mode with radius of 1.5mm at the first mirror. For more details about how to calculate the stability of such a cavity take a look at the paper. To define this cavity we use general definition using ABCD transfer matrix and a phase mask to introduce the conical phase function, using subsystems cascading as shown in Tutorial 3 - using apertures and phase masks as follows:

Cavity design using OpenCavity

Entering the cavity parameters and transfer matrices of the subsystems

In [1]: import opencavity.modesolver as ms

In [2]: from opencavity.propagators import FresnelProp

In [3]: import numpy as np #import numerical Python

In [4]: import matplotlib.pylab as plt # import matplotlib to plot figures

In [5]: R1=1e18; R2=250*1e3; Lc=78*1e3; npts=1000; a=2700; # cavity parameters

In [6]: M1=np.array([[1,0 ],[-2/R1, 1]]);   #plane mirror M1

In [7]: M2=np.array([[1, Lc],[0, 1]]);  #propagation distance Lc

In [8]: M3=np.array([[1, 0],[-2/R2, 1]]); #concave mirror M2

In [9]: M4=np.array([[1, Lc],[0, 1]]); #propagation distance Lc

In [10]: M11=M2.dot(M1); M22=M4.dot(M3); # sub-system 1 & sub-system 2

In [11]: A11=M11[0,0]; B11=M11[0,1]; C11=M11[1,0]; D11=M11[1,1] # getting the members of subsystem 1 matrix

In [12]: A22=M22[0,0]; B22=M22[0,1]; C22=M22[1,0]; D22=M22[1,1] # getting the members of subsystem 2 matrix

Creating the cavity-subsystems

In [13]: sys1=ms.CavEigenSys(wavelength=1.04); # working wavelength 1.04 micron

In [14]: sys2=ms.CavEigenSys(wavelength=1.04);

In [15]: sys1.build_1D_cav_ABCD(a,npts,A11,B11,C11,D11) #

In [16]: sys2.build_1D_cav_ABCD(a,npts,A22,B22,C22,D22) # to reinitialize the sub-system

Creating the axicon function with base angle =-0.5°, sys.k is the wave vector, and remember that all the fields are not spaced linearly see (Notes on vectors spacing in OpenCavity)

In [17]: theta=-0.5*3.14/180;# reflector is equivalent to refractive axicon with 2 x theta

In [18]: T_axicon=ms.np.exp((1j*sys1.k)*2*theta*(ms.np.sign(sys1.x1))*sys1.x1)

Applying the axicon function and solve and show the modes

In [19]: sys1.apply_mask1D(T_axicon)
Applying 1D Mask...
Mask applied.

In [20]: sys1.cascade_subsystem(sys2)
systems cascaded.

In [21]: sys1.solve_modes()
running the eigenvalues solver...

In [22]: sys1.show_mode(0,what='intensity')

In [23]: sys1.show_mode(0,what='phase')

In [24]: l,tem00=sys1.get_mode1D(0)

In [25]: print 1-np.abs(l)**2 #round trip losses
0.0754566450443
_images/tuto5_plot_tem00_I_1D.png _images/tuto5_plot_tem00_P_1D.png

The first thing we can notice is that the mode contains two lobes, this is because it has a ring-shaped intensity distribution. And the second thing is the conical component in the phase. The obtained mode is identical to the result of paper (Fig 6-a) and the lobe spacing is the one we expected :1.5mm (1500 micron in the figure). Lets see the high order modes to complete the results of the (Fig 6).

In [26]: sys1.show_mode(2,what='intensity')

In [27]: sys1.show_mode(4,what='intensity')
_images/tuto5_plot_tem02_I_1D.png _images/tuto5_plot_tem04_P_1D.png

To see the high intensity region of these beams we use the FresnelProp() module presented in Tutorial 4 - Calculating the output beam, but this time we use a new function propsys.yz_prop_chart(z_min,z_max,n_step,x) that calculates the propagated beam in n_step successive planes from z_min to z_max and x is the planes abscissa. However in this cavity arrangement the mode has already ring-shape at the first plane and is diverging, thus the high intensity region is behind the beam so to see it we enter negative propagation distance (to follow the paper), obviously this does not have physical meaning in real word but mathematically it means that we merely invert the time axis, or to consider a beam propagating from the right to the left.

In [28]: propsys=FresnelProp() # create a propagator object

In [29]: propsys.set_start_beam(tem00, sys1.x1)

In [30]: d=-172.0e3

In [31]: M=ms.np.array([[1,d ],[0, 1]]);

In [32]: propsys.set_ABCD(M)

In [33]: propsys.yz_prop_chart(-250e3,-100e3,100,sys1.x1/2) # z_min=-250, z_max=-100, n_planes=100

In [34]: plt.set_cmap('hot')

In [35]: propsys.show_prop_yz()

# propagate the second mode
In [36]: l,tem02=sys1.get_mode1D(2)

In [37]: propsys.set_start_beam(tem02, sys1.x1)

In [38]: propsys.yz_prop_chart(-250e3,-100e3,100,sys1.x1/2)

In [39]: propsys.show_prop_yz()

# propagate the third mode
In [40]: l,tem03=sys1.get_mode1D(4)

In [41]: propsys.set_start_beam(tem03, sys1.x1)

In [42]: propsys.yz_prop_chart(-250e3,-100e3,100,sys1.x1/2)

In [43]: propsys.show_prop_yz()
_images/tuto5_plot_tem01_yz_1D1.png _images/tuto5_plot_tem02_yz_1D.png _images/tuto5_plot_tem03_yz_1D1.png

NB: As we are using Fresnel propagation method we can not calculate the propagation over small distances because this will break the paraxial condition (small angles from the propagation axis) see (to add in the first part ‘before starting’). What we observe is that the high intensity region is behind the conical mirror, after that the beam takes an annular shape and diverges as it propagates. In the next tutorial we will change the cavity design to have the high intensity region after the concave mirror.

The cleaned code

# -*- coding: utf-8 -*-

import opencavity.modesolver as ms
from opencavity.propagators import FresnelProp
import numpy as np #import numerical Python 

R1=1e18; R2=250*1e3; Lc=78*1e3; npts=1000; a=2700; # cavity parameters
M1=np.array([[1,0 ],[-2/R1, 1]]);   #concave mirror M1 
M2=np.array([[1, Lc],[0, 1]]);  #propagation distance Lc
M3=np.array([[1, 0],[-2/R2, 1]]); #concave mirror M2
M4=np.array([[1, Lc],[0, 1]]); #propagation distance Lc
M=M4.dot(M3).dot(M2).dot(M1) # calculating the global matrix (note the inversed order)

M11=M2.dot(M1); M22=M4.dot(M3); # sub-system 2 
A11=M11[0,0]; B11=M11[0,1]; C11=M11[1,0]; D11=M11[1,1] # getting the members of subsystem 1 matrix
A22=M22[0,0]; B22=M22[0,1]; C22=M22[1,0]; D22=M22[1,1] # getting the members of subsystem 2 matrix

sys1=ms.CavEigenSys(wavelength=1.04);  
sys2=ms.CavEigenSys(wavelength=1.04);

sys1.build_1D_cav_ABCD(a,npts,A11,B11,C11,D11) #
sys2.build_1D_cav_ABCD(a,npts,A22,B22,C22,D22) # 

theta=-0.5*3.14/180;# reflector is quivalent to refractive axcicon with 2 x theta
T_axicon=ms.np.exp((+1j*sys1.k)*2*theta*(ms.np.sign(sys1.x1))*sys1.x1)

sys1.apply_mask1D(T_axicon)
sys1.cascade_subsystem(sys2)

sys1.solve_modes()

sys1.show_mode(0,what='intensity')
sys1.show_mode(0,what='phase')
l,tem00=sys1.get_mode1D(0)
print 1-np.abs(l)**2

propsys=FresnelProp() # create a propagator object 
propsys.set_start_beam(tem00, sys1.x1) 

d=-172.0e3
M=ms.np.array([[1,d ],[0, 1]]);
propsys.set_ABCD(M)
propsys.propagate1D_ABCD(x2=sys1.x1/2) # propagate the beam
propsys.show_result_beam() 

propsys.yz_prop_chart(-250e3,-100e3,100,sys1.x1/2)
propsys.show_prop_yz()
propsys.show_prop_yz(what='intensity')


ms.plt.show()

Bibliography

[Schimpf2012]Schimpf, D. N., Schulte, J., Putnam, W. P., & Franz, X. K. (2012). Generalizing higher-order Bessel-Gauss beams: analytical description and demonstration. Optics Express, 18(24), 24429–24443.