Source code for lasy.optical_elements.intensity_mask
from lasy.optical_elements.optical_element import OpticalElement
[docs]
class IntensityMask(OpticalElement):
"""
Class for a radially symmetric intensity mask.
This creates an optical element which acts to mask out the intensity of a laser pulse.
The mask is radially symmetric and can either mask intensity beyond a user defined radius, thus acting as
an aperture. Alternatively, the optica can mask intensity within a user defined radius, acting in this case as
an optic with a hole.
Parameters
----------
R : float (in meter)
The radius of the mask
center: tuple (floats)
Center of the mask. Default is (0,0)
mask_type: string
Should be 'aperture' (default, allows light inside) or 'hole' (allows light outside).
"""
def __init__(self, R, center=(0, 0), mask_type="aperture"):
assert mask_type in ["aperture", "hole"], (
"mask_type must be 'aperture' or 'hole'"
)
self.R = R
self.center = center
self.mask_type = mask_type
[docs]
def amplitude_multiplier(self, x, y, omega):
"""
Return the amplitude multiplier.
Parameters
----------
x, y, omega : ndarrays of floats
Define points on which to evaluate the multiplier.
These arrays need to all have the same shape.
Returns
-------
multiplier : ndarray of complex numbers
Contains the value of the multiplier at the specified points.
This array has the same shape as the array omega.
"""
r_squared = (x - self.center[0]) ** 2 + (y - self.center[1]) ** 2
mask = r_squared <= self.R**2 # True inside, False outside
if self.mask_type == "aperture":
return mask.astype(float) # 1 inside, 0 outside
else: # "hole"
return (~mask).astype(float) # 0 inside, 1 outside