Simulating a Bessel Beam¶
A Pseudo-bessel beam can be created using an Axicon. Where the rays from opposing sides of the axicon interact, they create a region of high intensity along the axis of the axicon. The interested properties of this beam is that it does not diffract. Modelling this with Raypier is straightforward. We use a CollimatedGaussianBeamSource to create the input wavefront.
from raypier.api import GeneralLens, AxiconFace, PlanarFace, OpticalMaterial, CircleShape,\ RayTraceModel, CollimatedGaussletSource, EFieldPlane, GaussletCapturePlane, IntensitySurface from raypier.intensity_image import IntensityImageView shape = CircleShape(radius=2.0) face1 = PlanarFace(z_height=0.0) face2 = AxiconFace(z_height=1.0, gradient=0.1) mat = OpticalMaterial(glass_name="N-BK7") axicon = GeneralLens(name = "My Axicon", centre = (0,0,0), direction=(0,0,1), shape=shape, surfaces=[face1, face2], materials=[mat]) src = CollimatedGaussletSource(origin=(0.001,0,-5.0), direction=(0,0,1), wavelength=0.5, radius=1.0, beam_waist=10.0, resolution=10, max_ray_len=50.0, display='wires', opacity=0.2 ) ###Add some sensors capture = GaussletCapturePlane(centre=(0,0,13), direction=(0,0,1), width=5.0, height=5.0) field = EFieldPlane(centre=(0,0,13), direction=(0,0,1), detector=capture, align_detector=True, size=100, width=2, height=2) image = IntensityImageView(field_probe=field) surf = IntensitySurface(field_probe=field) model = RayTraceModel(optics=[axicon], sources=[src], probes=[capture,field], results=[image,surf]) model.configure_traits()
Here’s the model view.
To get accurate results, turn up the resolution of the source object to about 30-40. Reduce the width of the EFieldPanel to ~0.1 to see the centre of the beam more clearly.
In the XY-plane, the characteristic Bessel rings are clear.
Looking along the Z-axis (the optical axis), the constant width of the central beam is observed.