6.3.4. Examples of masks

[1]:
from diffractio import np, plt
from diffractio import mm, degrees, um
from diffractio.scalar_masks_XY import Scalar_mask_XY

6.3.4.1. Standard masks

6.3.4.1.1. One_level

[2]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.one_level(level=0.5)
t1.draw(kind="intensity")
plt.clim(0, 1)
plt.set_cmap("gray")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_4_0.png

6.3.4.1.2. Two_levels

[3]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.two_levels(level1=1, level2=0, x_edge=0)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_6_0.png

6.3.4.1.3. Edge Series

[4]:
num_pixels = 512
length = 1000 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.06238 * um

a_coef = np.array([[0, 1, 2], [0, 100, 25]])
b_coef = np.array([[0, 3], [0, 25]])

t2 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t2.edge_series(
    r0=(0 * um, 0 * um),
    period=100,
    a_coef=a_coef,
    b_coef=b_coef,
    angle=0 * degrees,
    invert=False,
)
t2.draw()
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_8_0.png

6.3.4.1.4. slit

[5]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.slit(x0=0, size=25 * um, angle=0 * degrees)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_10_0.png

6.3.4.1.5. sinusoidal slit

[6]:
x = np.linspace(-125 * um, 125 * um, 512)
y = np.linspace(-125 * um, 125 * um, 512)
wavelength = 1 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.sinusoidal_slit(
    x0=0 * um,
    size=50 * um,
    amplitude=10 * um,
    phase=0 * degrees,
    angle=0 * degrees,
    period=20 * um,
)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_12_0.png

6.3.4.1.6. slit_series

[7]:
num_data = 256
length = 1000 * um
x0 = np.linspace(-length / 2, length / 2, num_data)
y0 = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

a_coef1 = np.array([[0, 1, 2], [0, 25, 25]])
a_coef2 = np.array([[0, 1, 2], [0, 25, 25]])

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.slit_series(
    x0=0,
    width=200,
    period1=100,
    period2=100,
    Dy=(0 * um, 0 * um),
    a_coef1=a_coef1,
    a_coef2=a_coef2,
    angle=0 * degrees,
)

t1.draw()
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_14_0.png

6.3.4.1.7. double_slit

[8]:
num_data = 512
length = 50 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.double_slit(x0=0, size=5 * um, separation=15 * um, angle=0 * degrees)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_16_0.png

6.3.4.1.8. triangle

[9]:
x = np.linspace(-100 * um, 100 * um, 512)
y = np.linspace(-100 * um, 100 * um, 512)
wavelength = 1 * um
t1 = Scalar_mask_XY(x, y, wavelength)

t1.triangle(r0=(0, 50 * um), slope=2, height=100 * um, angle=0 * degrees)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_18_0.png

6.3.4.1.9. square

[10]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.square(r0=(0 * um, 0 * um), size=100 * um, angle=0 * degrees)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_20_0.png

With this function we can also generate rectangles

[11]:
length = 250 * um
x = np.linspace(-length / 2, length / 2, 512)
y = np.linspace(-length / 2, length / 2, 512)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.square(r0=(0 * um, 0 * um), size=(200 * um, 100 * um), angle=45 * degrees)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_22_0.png

6.3.4.1.10. polygon

[20]:
length = 4*mm
x0 = np.linspace(-length / 2, length / 2, 512)
y0 = np.linspace(-length / 2, length / 2, 512)
wavelength = 0.6328 * um

t = Scalar_mask_XY(x0, y0, wavelength)

vertices = np.array([(-1* mm , -1 * mm),
                     (1 * mm, -1 * mm),
                     (1 * mm, 1 * mm),
                     (0 * mm, 1.5 * mm),
                     (-1 * mm, 1 * mm)])
t.polygon(vertices)
t.draw()
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_24_0.png

6.3.4.1.11. regular polygon

[23]:
length = 4*mm
x0 = np.linspace(-length / 2, length / 2, 512)
y0 = np.linspace(-length / 2, length / 2, 512)
wavelength = 0.6328 * um

t = Scalar_mask_XY(x0, y0, wavelength)
vertices = t.regular_polygon(5, 1.5*mm, 0 * degrees)
t.draw()
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_26_0.png

6.3.4.1.12. star

[25]:
t2 = Scalar_mask_XY(x0, y0, wavelength)
vertices = t2.star(8, (2*mm,1*mm), 0*degrees)
t2.draw()
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_28_0.png

6.3.4.1.13. circle

[12]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.circle(r0=(0 * um, 0 * um), radius=100 * um)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_30_0.png

With this function we can also generate ellipses

[13]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.circle(r0=(0 * um, 0 * um), radius=(50 * um, 100 * um), angle=45 * degrees)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_32_0.png

6.3.4.1.14. super_gauss

[14]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.super_gauss(r0=(0 * um, 0 * um), radius=100 * um, power=22)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_34_0.png

6.3.4.1.15. square_circle

[15]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.circle(r0=(0 * um, 0 * um), radius=(100 * um, 50 * um), angle=45 * degrees)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_36_0.png

6.3.4.1.16. angular_aperture

[16]:
num_pixels = 256
length = 200 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

t2 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
a_coef = np.array([[0, 4, 8], [50, 25, 25]])
t2.angular_aperture(a_coef=a_coef, angle=0 * degrees)
t2.draw()
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_38_0.png

6.3.4.1.17. ring

[17]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.ring(
    r0=(0 * um, 0 * um),
    radius1=(50 * um, 50 * um),
    radius2=(75 * um, 105 * um),
    angle=90 * degrees,
)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_40_0.png

6.3.4.1.18. rings

[18]:
num_data = 512
length = 60 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

inner_radius = np.array([5.0, 10, 15, 20, 25])

outer_radius = np.array([6.0, 12, 17, 23, 29])

t1 = Scalar_mask_XY(x, y, wavelength)
t1.rings(r0=(0 * um, 0 * um), inner_radius=inner_radius, outer_radius=outer_radius)
t1.pupil()
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_42_0.png

6.3.4.1.19. cross

[19]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.cross(r0=(0 * um, 0 * um), size=(200 * um, 75 * um), angle=0 * degrees)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_44_0.png

6.3.4.1.20. image

[20]:
num_data = 1204
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.image(
    filename="spain.png", normalize=True, channel=0, lengthImage=True, angle=0 * degrees
)

t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_46_0.png

6.3.4.1.21. gray_scale

[21]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.gray_scale(num_levels=16, level_min=0, level_max=1)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_48_0.png

6.3.4.1.22. hiperellipse

[22]:
x = np.linspace(-100 * um, 100 * um, 512)
y = np.linspace(-100 * um, 100 * um, 512)
wavelength = 1 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.super_ellipse(
    r0=(0 * um, 0 * um), radius=(100 * um, 100 * um), angle=0 * degrees, n=[0.75, 0.75]
)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_50_0.png

6.3.4.1.23. lens

[ ]:
num_data = 512
length = 400 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t0 = Scalar_mask_XY(x, y, wavelength)
t0.lens(
    r0=(0 * um, 0 * um),
    radius=(150 * um, 150 * um),
    focal=(2.5 * mm, 2.5 * mm),
    angle=0 * degrees,
)
t0.draw(kind="phase", percentage_intensity=0.01)
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_52_0.png

6.3.4.1.24. Fresnel lens

[24]:
# Amplitude lens
num_data = 512
length = 500 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.fresnel_lens(
    r0=(0 * um, 0 * um),
    radius=(250 * um, 250 * um),
    focal=(5 * mm, 5 * mm),
    angle=45 * degrees,
    kind="amplitude",
    phase=np.pi,
)
t1.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_54_0.png
[25]:
# Phase lens
num_data = 512
length = 500 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1.fresnel_lens(
    r0=(0 * um, 0 * um),
    radius=(250 * um, 250 * um),
    focal=(5 * mm, 5 * mm),
    angle=0 * degrees,
    kind="phase",
    phase=np.pi,
)
t1.draw(kind="phase")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_55_0.png

6.3.4.1.25. biprism_fresnel

[26]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.biprism_fresnel(r0=(0 * um, 0 * um), width=100 * um, height=5 * um, n=1.5)
t1.draw(kind="phase", percentage_intensity=0.01)
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_57_0.png

6.3.4.1.26. axicon

[38]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.axicon(
    r0=(0 * um, 0 * um),
    radius=100 * um,
    angle=2 * degrees,
    refractive_index=1.5,
    off_axis_angle=0,
    reflective=True,
)
t1.draw(kind="phase", percentage_intensity=0.01)
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_59_0.png

6.3.4.1.27. photon sieve

[37]:
range = 500*um

num_pixels = 512

x0 = np.linspace(-range/2, range/2, num_pixels)
y0 = np.linspace(-range / 2, range / 2, num_pixels)
wavelength=0.6328


[42]:
num_holes = 200
radius_hole = 8*um
pos_holes = -range / 2 + range * np.random.rand(num_holes,2)

[43]:
hole =Scalar_mask_XY(x0,y0,wavelength)
hole.circle(r0=(0, 0), radius=radius_hole)
hole.draw()
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_63_0.png
[48]:
t1 = Scalar_mask_XY(x0, y0, wavelength)
t1.photon_sieve(hole, pos_holes, top_one=True)
t1.draw()
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_64_0.png

6.3.4.1.28. grating_forked

[28]:
num_data = 1024
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t = Scalar_mask_XY(x, y, wavelength)
t.forked_grating(
    r0=(0 * um, 0 * um),
    period=10 * um,
    l=3,
    alpha=2,
    kind="amplitude",
    angle=0 * degrees,
)
t.draw(has_colorbar="vertical")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_66_0.png

6.3.4.1.29. roughness

[29]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6328 * um

t1 = Scalar_mask_XY(x, y, wavelength)
t1.roughness(t=(25 * um, 25 * um), s=1 * um)
t1.draw(kind="phase")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_68_0.png

6.3.4.1.30. Sine grating

[30]:
x = np.linspace(-250 * um, 250 * um, 512)
y = np.linspace(-250 * um, 250 * um, 512)
wavelength = 0.6238 * um
period = 50 * um
red = Scalar_mask_XY(x, y, wavelength)
red.sine_grating(period=period, amp_min=0, amp_max=1, x0=0 * um, angle=0 * degrees)
red.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_70_0.png

6.3.4.1.31. Ronchi grating

[31]:
x = np.linspace(-250 * um, 250 * um, 512)
y = np.linspace(-250 * um, 250 * um, 512)
wavelength = 0.6238 * um
red = Scalar_mask_XY(x, y, wavelength)
red.ronchi_grating(period=50 * um, x0=0 * um, angle=0 * degrees, fill_factor=0.5)
red.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_72_0.png

6.3.4.1.32. Binary grating (amplitude + phase)

[32]:
x = np.linspace(-250 * um, 250 * um, 512)
y = np.linspace(-250 * um, 250 * um, 512)
wavelength = 0.6238 * um
red = Scalar_mask_XY(x, y, wavelength)
red.binary_grating(
    period=50 * um,
    a_min=0.25,
    a_max=0.75,
    phase=np.pi,
    x0=0,
    fill_factor=0.5,
    angle=0 * degrees,
)
red.draw(kind="field")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_74_0.png

6.3.4.1.33. Blazed grating

[33]:
x = np.linspace(-250 * um, 250 * um, 512)
y = np.linspace(-250 * um, 250 * um, 512)
wavelength = 0.6238 * um
period = 100 * um
red = Scalar_mask_XY(x, y, wavelength)
red.blazed_grating(period=period, phase_max=2 * np.pi, x0=0, angle=0 * degrees)
red.draw(kind="phase")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_76_0.png

6.3.4.1.34. 2D grating

[34]:
x = np.linspace(-200 * um, 200 * um, 512)
y = np.linspace(-200 * um, 200 * um, 512)
wavelength = 0.6238 * um
period = 50 * um
red = Scalar_mask_XY(x, y, wavelength)
red.grating_2D(
    r0=(0 * um, 0 * um),
    period=period,
    a_min=0,
    a_max=1.0,
    phase=0 * np.pi / 2,
    fill_factor=0.5,
    angle=0 * degrees,
)
red.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_78_0.png

6.3.4.1.35. Chess grating

[35]:
x = np.linspace(-200 * um, 200 * um, 512)
y = np.linspace(-200 * um, 200 * um, 512)
wavelength = 0.6238 * um
period = 100 * um
red = Scalar_mask_XY(x, y, wavelength)
red.grating_2D_chess(
    r0=(period / 8, period / 4),
    period=period,
    a_min=0,
    a_max=1.0,
    phase=0 * np.pi / 2,
    fill_factor=0.5,
    angle=(0 * degrees),
)
red.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_80_0.png
[41]:
x = np.linspace(-1*mm, 1*mm, 512)
y = np.linspace(-1*mm, 1*mm, 512)
wavelength = 0.6238*um

t_4x4 = Scalar_mask_XY(x=x, y=y, wavelength=wavelength)
t_4x4.squares_nxm(num_levels=(4,4))
t_4x4.draw('intensity', has_colorbar='vertical')
plt.set_cmap('gray')

../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_81_0.png

6.3.4.1.36. random circle edge

[42]:
num_data = 512
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)
wavelength = 0.6238 * um

t = Scalar_mask_XY(x, y, wavelength)
t.circle_rough(r0=(0 * um, 0 * um), radius=100 * um, angle=0 * degrees, sigma=4 * um)
t.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_83_0.png

6.3.4.1.37. Random ring edge

[43]:
length = 250 * um
x = np.linspace(-length / 2, length / 2, num_data)
y = np.linspace(-length / 2, length / 2, num_data)

wavelength = 0.6238 * um

t = Scalar_mask_XY(x, y, wavelength)
t.ring_rough(
    r0=(0 * um, 0 * um),
    radius1=50 * um,
    radius2=100 * um,
    angle=0 * degrees,
    sigma=4 * um,
)
t.draw(kind="intensity")
../../../_images/source_tutorial_scalar_scalar_XY_masks_xy_85_0.png