12. Example of masks
12.1. Creating an instance
[1]:
%load_ext autoreload
%autoreload 2
[2]:
from diffractio import np
from diffractio import degrees, mm, um
from diffractio.scalar_masks_X import Scalar_mask_X
from diffractio.scalar_masks_XZ import Scalar_mask_XZ
13. Definite masks
13.1. semi plane
[3]:
x0 = np.linspace(-400 * um, 400 * um, 256)
z0 = np.linspace(-100 * um, 100 * um, 512)
wavelength = 0.5 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.semi_plane(
r0=(0 * um, 0 * um), refractive_index=2, angle=0 * degrees, rotation_point=None
)
t1.draw_refractive_index()
13.2. layer
[4]:
x0 = np.linspace(-200 * um, 200 * um, 256)
z0 = np.linspace(-100 * um, 100 * um, 512)
wavelength = 0.5 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.layer(
r0=(50 * um, 0 * um),
depth=75 * um,
refractive_index=2,
angle=0 * degrees,
rotation_point=None,
)
t1.draw_refractive_index()
13.3. square
[5]:
x0 = np.linspace(-100 * um, 100 * um, 256)
z0 = np.linspace(0 * um, 200 * um, 512)
wavelength = 0.6238 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.square(
r0=(0 * um, 100 * um),
size=(150 * um, 50 * um),
angle=0 * degrees,
refractive_index=1.5,
)
t1.draw_refractive_index()
13.4. slit
[6]:
x0 = np.linspace(-100 * um, 100 * um, 256)
z0 = np.linspace(0 * um, 250 * um, 512)
wavelength = 0.6238 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.slit(
r0=(0 * um, 50 * um),
aperture=50 * um,
depth=20 * um,
refractive_index=1.5 + 1j,
refractive_index_center="",
angle=0 * degrees,
)
t1.draw_refractive_index()
13.5. sphere or ellipsoid
[7]:
x0 = np.linspace(-100 * um, 100 * um, 256)
z0 = np.linspace(0 * um, 200 * um, 512)
wavelength = 0.6238 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.cylinder(
r0=(0, 100 * um), radius=(75 * um, 75 * um), refractive_index=1.5, angle=0 * degrees
)
t1.draw_refractive_index(scale="scaled")
13.6. semi sphere
[8]:
x0 = np.linspace(-120 * um, 120 * um, 256)
z0 = np.linspace(-20 * um, 200 * um, 512)
wavelength = 0.5 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.semi_cylinder(
r0=(0 * um, 0 * um), radius=100 * um, refractive_index=2, angle=0 * degrees
)
t1.draw_refractive_index(draw_borders=True, min_incr=0.01, scale="scaled")
13.7. wedge
[9]:
x0 = np.linspace(-20 * um, 60 * um, 256)
z0 = np.linspace(0 * um, 125 * um, 512)
wavelength = 0.6238 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.wedge(
r0=(0 * um, 0 * um),
length=100 * um,
refractive_index=1.5,
angle_wedge=22.5 * degrees,
angle=0 * degrees,
rotation_point=None,
)
t1.draw_refractive_index(scale="scaled")
13.8. prism
[10]:
x0 = np.linspace(-150 * um, 150 * um, 256)
z0 = np.linspace(0 * um, 500 * um, 512)
wavelength = 2 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.prism(
r0=(100 * um, 150 * um),
length=200 * um,
refractive_index=2,
angle_prism=60 * degrees,
angle=90 * degrees,
)
t1.draw_refractive_index(scale="scaled")
13.9. biprism
[11]:
x0 = np.linspace(-120 * um, 120 * um, 256)
z0 = np.linspace(-25 * um, 400 * um, 512)
wavelength = 0.5 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.biprism(
r0=(0, 20 * um), length=200 * um, height=50 * um, refractive_index=1.5, angle=0
)
t1.draw_refractive_index(draw_borders=True, scale="scaled")
13.10. Ronchi grating
[12]:
x0 = np.linspace(-500 * um, 500 * um, 256)
z0 = np.linspace(0 * um, 1400 * um, 512)
wavelength = 0.5 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.ronchi_grating(
period=50 * um,
fill_factor=0.5,
length=500 * um,
height=20 * um,
r0=(0 * um, 100 * um),
Dx=2 * um,
refractive_index=1.5 + 0.5j,
heigth_substrate=25 * um,
refractive_index_substrate=1.5,
angle=0 * degrees,
)
t1.draw_refractive_index(scale="scaled")
13.11. grating with substrate
[13]:
x0 = np.linspace(-500 * um, 500 * um, 256)
z0 = np.linspace(0 * um, 400 * um, 512)
wavelength = 0.55 * um
t0 = Scalar_mask_X(x=x0, wavelength=wavelength)
t0.slit(x0=0, size=0 * um)
t1 = Scalar_mask_X(x=x0, wavelength=wavelength)
t1.ronchi_grating(period=20 * um, x0=0 * um, fill_factor=0.5)
t2 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength, n_background=1)
t2.extrude_mask(t=t0, z0=10 * um, z1=50 * um, refractive_index=1.5)
t2.extrude_mask(t=t1, z0=50 * um, z1=55.5 * um, refractive_index=1.5)
t2.draw_refractive_index(draw_borders=False)
13.12. sine grating
[14]:
x0 = np.linspace(-250 * um, 250 * um, 256)
z0 = np.linspace(0 * um, 1000 * um, 512)
wavelength = 0.6238 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.sine_grating(
period=20 * um,
heigth_sine=10 * um,
heigth_substrate=100 * um,
r0=(0 * um, 100 * um),
length=500 * um,
Dx=2 * um,
refractive_index=1.5,
angle=0 * degrees,
)
t1.draw_refractive_index()
13.13. probe
[15]:
x0 = np.linspace(-12 * um, 12 * um, 256)
z0 = np.linspace(0 * um, 500 * um, 512)
wavelength = 0.6 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.probe(
r0=(0, 50 * um),
base=5 * um,
length=300 * um,
refractive_index=1.5,
angle=0 * degrees,
)
t1.draw_refractive_index()
13.14. Aspheric lens
[16]:
x0 = np.linspace(-500 * um, 500 * um, 512)
z0 = np.linspace(-0.1 * mm, 1.25 * mm, 512)
wavelength = 5 * um
lens = Scalar_mask_XZ(x0, z0, wavelength, n_background=1, info="")
focal, ipasa = lens.aspheric_lens(
r0=(0 * um, 0 * um),
angle=(0 * degrees, (0 * um, 0 * um)),
refractive_index=1.5,
cx=(1 / (1 * mm), -1 / (0.5 * mm)),
Qx=(0, 0),
a2=(0, 1e-11),
a3=(0, 0),
a4=(0, 0),
thickness=0.4 * mm,
size=0.8 * mm,
)
lens.slit(r0=(0, 100 * um), aperture=800 * um, depth=75 * um, refractive_index=1 + 2j)
print("Theoretical image focal distance f' = {:2.2f} mm".format(focal/mm))
lens.draw_refractive_index(
draw_borders=True, min_incr=0.01, colorbar_kind="vertical", scale='scaled'
)
Theoretical image focal distance f' = 0.73 mm
13.15. Lenses with different curvatures
[17]:
x0 = np.linspace(-500 * um, 500 * um, 512)
z0 = np.linspace(-0.1 * mm, 1.25 * mm, 512)
wavelength = 5 * um
lens = Scalar_mask_XZ(x0, z0, wavelength, n_background=1, info="")
focal, ipasa = lens.aspheric_lens(
r0=(0 * um, 0 * um),
angle=(0 * degrees, (0 * um, 0 * um)),
refractive_index=1.5,
cx=(1 / (1 * mm), -1 / (1 * mm)),
thickness=0.2 * mm,
size=0.8 * mm,
)
lens.slit(r0=(0, 100 * um -25*um/2), aperture=800 * um, depth=25 * um, refractive_index=1 + 2j)
print("Theoretical image focal distance f' = {:2.2f} mm".format(focal/mm))
lens.draw_refractive_index(
draw_borders=True, min_incr=0.01, colorbar_kind="vertical", scale='scaled'
)
Theoretical image focal distance f' = 1.03 mm
[18]:
x0 = np.linspace(-500 * um, 500 * um, 512)
z0 = np.linspace(-0.1 * mm, 1.25 * mm, 512)
wavelength = 5 * um
lens = Scalar_mask_XZ(x0, z0, wavelength, n_background=1, info="")
focal, ipasa = lens.aspheric_lens(
r0=(0 * um, 100 * um),
angle=(0 * degrees, (0 * um, 0 * um)),
refractive_index=1.5,
cx=(1 / (1 * mm), 1 / (1 * mm)),
thickness=0.1 * mm,
size=0.8 * mm,
)
lens.slit(r0=(0, 100 * um), aperture=800 * um, depth=25 * um, refractive_index=1 + 2j)
print("Theoretical image focal distance f' = {:2.2f} mm".format(focal/mm))
lens.draw_refractive_index(
draw_borders=True, min_incr=0.01, colorbar_kind="vertical", scale='scaled'
)
Theoretical image focal distance f' = 60.00 mm
[19]:
x0 = np.linspace(-500 * um, 500 * um, 512)
z0 = np.linspace(-0.1 * mm, 1.25 * mm, 512)
wavelength = 5 * um
lens = Scalar_mask_XZ(x0, z0, wavelength, n_background=1, info="")
focal, ipasa = lens.aspheric_lens(
r0=(0 * um, 0 * um),
angle=(0 * degrees, (0 * um, 0 * um)),
refractive_index=1.5,
cx=(1 / (1 * mm), 0),
thickness=0.1 * mm,
size=0.8 * mm,
)
lens.slit(r0=(0, 100 * um), aperture=800 * um, depth=25 * um, refractive_index=1 + 2j)
print("Theoretical image focal distance f' = {:2.2f} mm".format(focal/mm))
lens.draw_refractive_index(
draw_borders=True, min_incr=0.01, colorbar_kind="vertical", scale='scaled'
)
Theoretical image focal distance f' = 2.00 mm
[20]:
x0 = np.linspace(-500 * um, 500 * um, 512)
z0 = np.linspace(-0.1 * mm, 1.25 * mm, 512)
wavelength = 5 * um
radius = 400*um
lens = Scalar_mask_XZ(x0, z0, wavelength, n_background=1, info="")
focal, ipasa = lens.aspheric_lens(
r0=(0 * um, 0 * um),
angle=(0 * degrees, (0 * um, 0 * um)),
refractive_index=1.5,
cx=(1 / (radius), -1 / (radius)),
thickness=2*radius,
size=2*radius,
)
lens.slit(r0=(0, radius-25*um), aperture=800 * um, depth=50 * um, refractive_index=1 + 2j)
print("Theoretical image focal distance f' = {:2.2f} mm".format(focal/mm))
lens.draw_refractive_index(
draw_borders=True, min_incr=0.01, colorbar_kind="vertical", scale='scaled'
)
<string>:1: RuntimeWarning: invalid value encountered in sqrt
Theoretical image focal distance f' = 0.60 mm
[21]:
x0 = np.linspace(-500 * um, 500 * um, 512)
z0 = np.linspace(-0.1 * mm, 1.25 * mm, 512)
wavelength = 5 * um
lens = Scalar_mask_XZ(x0, z0, wavelength, n_background=1, info="")
focal, ipasa = lens.aspheric_lens(
r0=(0 * um, 100 * um),
angle=(0 * degrees, (0 * um, 0 * um)),
refractive_index=1.5,
cx=(-1 / (1 * mm), 1 / (1. * mm)),
thickness=0.1 * mm,
size=0.8 * mm,
)
lens.slit(r0=(0, 125 * um), aperture=800 * um, depth=25 * um, refractive_index=1 + 2j)
print("Theoretical image focal distance f' = {:2.2f} mm".format(focal/mm))
lens.draw_refractive_index(
draw_borders=True, min_incr=0.01, colorbar_kind="vertical"
)
Theoretical image focal distance f' = -0.98 mm
13.16. Simplified lenses, with no aberrations
[22]:
x0 = np.linspace(-2 * mm, 2 * mm, 512)
z0 = np.linspace(-200 * um, 1 * mm, 512)
wavelength = 0.6238 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
focal, _ = t1.lens(
r0=(0 * um, 0 * um),
size=3 * mm,
radii=(10* mm, -8 * mm),
thickness=.25* mm,
refractive_index=1.5,
angle=0 * degrees,
mask=(100 * um, 1 + 2.05j),
)
print("Theoretical image focal distance f' = {:2.2f} mm".format(focal/mm))
t1.draw_refractive_index()
Theoretical image focal distance f' = 8.93 mm
[23]:
x0 = np.linspace(-500 * um, 500 * um, 512)
z0 = np.linspace(-0.1 * mm, 1.25 * mm, 512)
wavelength = 5 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
focal, _ = t1.lens(
r0=(0 * um, 0 * um),
size=1 * mm,
radii=(1* mm, -1 * mm),
thickness=.25* mm,
refractive_index=1.5,
angle=15 * degrees,
mask=(100 * um, 1 + 2.05j),
)
print("Theoretical image focal distance f' = {:2.2f} mm".format(focal/mm))
t1.draw_refractive_index()
Theoretical image focal distance f' = 1.04 mm
13.17. rough surface
[24]:
x0 = np.linspace(-150 * um, 150 * um, 256)
z0 = np.linspace(-20 * um, 300 * um, 512)
wavelength = 0.6238 * um
t1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
t1.rough_sheet(
r0=(0 * um, 0 * um),
size=(250 * um, 25 * um),
t=10 * um,
s=10 * um,
refractive_index=1.5,
angle=0,
rotation_point=None,
)
t1.draw_refractive_index(scale="scaled")