7.5. Diffraction by different objects: xy frame

[1]:
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np

from diffractio import degrees, mm, plt, sp, um, np
from diffractio.scalar_fields_XY import Scalar_field_XY
from diffractio.utils_drawing import draw_several_fields
from diffractio.scalar_masks_XY import Scalar_mask_XY
from diffractio.scalar_sources_XY import Scalar_source_XY

7.5.1. Slit

[2]:
num_pixels = 512

length = 100 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.slit(x0=0, size=10 * um, angle=0 * degrees)

u2 = u1 * t1

u3 = u2.RS(z=25 * um, new_field=True)

u4 = u2.RS(z=100 * um, new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '25 um', '100 um'))

../../_images/source_examples_diffraction_objects_3_0.png

7.5.2. double slit

[3]:
num_pixels = 512

length = 100 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)
# u1.laguerre_beam(p=2, l=1, r0=(0 * um, 0 * um), w0=7 * um, z=0.01 * um)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.double_slit(x0=0, size=2 * um, separation=10 * um, angle=0 * degrees)

u2 = u1 * t1
u3 = u2.RS(z=100 * um, new_field=True)

u4 = u2.RS(z=200 * um, new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '100 um', '200 um'))

../../_images/source_examples_diffraction_objects_5_0.png

7.5.3. square

[4]:
num_pixels = 512

length = 100 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)
# u1.laguerre_beam(p=2, l=1, r0=(0 * um, 0 * um), w0=7 * um, z=0.01 * um)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.square(r0=(0 * um, 0 * um), size=(50 * um, 50 * um), angle=0 * degrees)

u2 = u1 * t1

u3 = u2.RS(z=100 * um, new_field=True)

u4 = u2.RS(z=500 * um, new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '100 um', '200 um'), logarithm=True)

../../_images/source_examples_diffraction_objects_7_0.png

7.5.4. circle

[5]:
num_pixels = 512

length = 100 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.circle(
    r0=(0 * um, 0 * um), radius=(25 * um, 25 * um), angle=0 * degrees)

u2 = u1 * t1

u3 = u2.RS(z=100 * um, new_field=True)

u4 = u2.RS(z=500 * um, new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '100 um', '500 um'), logarithm=True)

../../_images/source_examples_diffraction_objects_9_0.png

7.5.5. ring

[6]:
num_pixels = 512

length = 500 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.ring(
    r0=(0 * um, 0 * um),
    radius1=(25 * um, 50 * um),
    radius2=(100 * um, 150 * um),
    angle=45)

u2 = u1 * t1

u3 = u2.RS(z=2.5*mm, new_field=True)

u4 = u2.RS(z=10*mm, new_field=True)

u5 = u2.RS(z=100*mm, new_field=True)

draw_several_fields((u2, u3, u4, u5), titles=('mask', '25 um', '100 um', '500 um'), logarithm=True)
plt.tight_layout()

../../_images/source_examples_diffraction_objects_11_0.png

7.5.6. cross

[7]:
num_pixels = 512

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

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.cross(r0=(0 * um, 0 * um), size=(150 * um, 50 * um), angle=45 * degrees)

u2 = u1 * t1

u3 = u2.RS(z=150 * um, new_field=True)

u4 = u2.RS(z=5000 * um, amplification=(2, 2), new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '150 um', '5000 um'), logarithm=True)

../../_images/source_examples_diffraction_objects_13_0.png

7.5.7. edge

[8]:
num_pixels = 512

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

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.two_levels(level1=0, level2=.5, x_edge=0, angle=0)

u2 = u1 * t1

u3 = u2.RS(z=100 * um, new_field=True)

u4 = u2.RS(z=1000 * um, new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '100 um', '1000 um'), logarithm=True)

../../_images/source_examples_diffraction_objects_15_0.png
[9]:
u3.draw_profile(point1=(-50, 0), point2=(50, 0), kind='intensity', order=2)
h, profile, p1, p2 = t1.profile(
    point1=(-50, 0), point2=(50, 0), kind='intensity', order=1)
plt.plot(h, profile, 'r', lw=2)

../../_images/source_examples_diffraction_objects_16_0.png

7.5.8. image

[10]:
num_pixels = 512

length = 100 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)

t1.image(filename="lenaColor.png", invert=False)
u2 = u1 * t1

u3 = u2.RS(z=50 * um, new_field=True)

u4 = u2.RS(z=250 * um, new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '100 um', '1000 um'), logarithm=True)

../../_images/source_examples_diffraction_objects_18_0.png

7.5.9. mask_from_function

[11]:
num_pixels = 512

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

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

f1 = "R1-h1+np.sqrt(R1**4-(self.X-x0)**4-(self.Y-y0)**4)"
f2 = "R2-h2+np.sqrt(R2**2-(self.X)**2-(self.Y)**2)"
v_globals = {
    'R1': 6 * mm,
    'R2': 2 * mm,
    'x0': 0 * um,
    'y0': 25 * um,
    'h1': 4 * mm,
    'h2': -1 * mm,
    'np': np,
}
index = 1.5
print(v_globals)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.mask_from_function(
    r0=(0 * um, 0 * um),
    index=index,
    f1=f1,
    f2=f2,
    v_globals=v_globals,
    radius=(100 * um, 100 * um))
t1.pupil()

u2 = u1 * t1

u3 = u2.RS(z=2000 * um, new_field=True)

u4 = u2.RS(z=5000 * um, new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '100 um', '1000 um'), logarithm=False,
                    kinds=['phase', 'intensity', 'intensity'])

{'R1': 6000.0, 'R2': 2000.0, 'x0': 0.0, 'y0': 25.0, 'h1': 4000.0, 'h2': -1000.0, 'np': <module 'numpy' from '/usr/lib/python3/dist-packages/numpy/__init__.py'>}
../../_images/source_examples_diffraction_objects_20_1.png

7.5.10. astigmatism

[12]:
num_pixels = 512

length = 500 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.lens(
    r0=(0 * um, 0 * um),
    radius=(250 * um, 250 * um),
    focal=(5 * mm, 10 * mm),
    angle=0 * degrees)

u2 = u1 * t1

u3 = u2.RS(z=5 * mm, new_field=True)

u4 = u2.RS(z=6.5 * mm, new_field=True)

u5 = u2.RS(z=10 * mm, new_field=True)

draw_several_fields((u2, u3, u4, u5), titles=('mask', '5 mm', '7 mm', '10 mm'), logarithm=True,
                    kinds=['phase', 'intensity', 'intensity', 'intensity'])

../../_images/source_examples_diffraction_objects_22_0.png

7.5.11. Fresnel lens

[13]:
num_pixels = 512

length = 250 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.fresnel_lens(
    r0=(0 * um, 0 * um),
    radius=(125 * um, 125 * um),
    focal=(1 * mm, 1 * mm),
    angle=45 * degrees,
    kind='amplitude',
    phase=np.pi)

t1.pupil()

u2 = u1 * t1
u3 = u2.RS(z=1 * mm, new_field=True)

draw_several_fields((u2, u3), titles=('', ''), kinds=['intensity', 'intensity'], logarithm=True)

../../_images/source_examples_diffraction_objects_24_0.png
[14]:
t1.fresnel_lens(
    r0=(0 * um, 0 * um),
    radius=(125 * um, 125 * um),
    focal=(1 * mm, 1 * mm),
    angle=0 * degrees,
    kind='phase',
    phase=np.pi)
t1.pupil()
u2 = u1 * t1
u3 = u2.RS(z=1 * mm, new_field=True)

draw_several_fields((t1, u3), kinds=['phase', 'intensity'], logarithm=1e1)

../../_images/source_examples_diffraction_objects_25_0.png

7.5.12. biprism

[15]:
num_pixels = 512

length = 250 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)

t1.biprism_fresnel(
    r0=(0 * um, 0 * um), width=125 * um, height=5 * um, n=1.5)
u2 = u1 * t1

u3 = u2.RS(z=1.25 * mm, new_field=True)

u4 = u2.RS(z=2.5 * mm, new_field=True)

draw_several_fields((u2, u3, u4), titles=('mask', '1.25 mm', '2.5 mm'), logarithm=True,
                    kinds=['phase', 'intensity', 'intensity'])

../../_images/source_examples_diffraction_objects_27_0.png

7.5.13. axicon

[16]:
num_pixels = 512

length = 250 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.axicon(r0=(0 * um, 0 * um), radius=125 * um, angle=4*degrees, refractive_index=1.5)

u2 = u1 * t1
u3 = u2.RS(z=2.5 * mm, new_field=True)

u4 = u2.RS(z=5 * mm, new_field=True)

u5 = u2.RS(z=7.5 * mm, new_field=True)

draw_several_fields((u2, u3, u4, u5), titles=('mask', '2.5 mm', '5 mm', '7.5 mm'), logarithm=True,
                    kinds=['phase', 'intensity', 'intensity', 'intensity'])

../../_images/source_examples_diffraction_objects_29_0.png

7.5.14. Laguerre spiral

[17]:
num_pixels = 512

length = 250 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.laguerre_gauss_spiral(
    kind='intensity', n=0, l=12, r0=(0 * um, 0 * um), w0=20 * um, z=1000 * um)

u2 = u1 * t1
u3 = u2.RS(z=5 * mm, new_field=True)

u4 = u2.RS(z=20 * mm, new_field=True)


draw_several_fields((u2, u3, u4), titles=('mask', '2.5 mm', '20 mm'), logarithm=True)

../../_images/source_examples_diffraction_objects_31_0.png

7.5.15. forked grating

[18]:
period = 20*um
num_pixels = 1024

length = 250 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.forked_grating(kind='amplitude',
                  r0=(0 * um, 0 * um), period=period, l=3, alpha=2, angle=0 * degrees)

zt = 2 * period**2 / wavelength

u2 = u1 * t1

u4 = u2.RS(z=.5 * zt, new_field=True)

u5 = u2.RS(z=2 * zt, new_field=True)


draw_several_fields((u2, u4, u5), titles=('mask', '.5 zt', '2 zt'), logarithm=True)

../../_images/source_examples_diffraction_objects_33_0.png

7.5.16. Roughness and speckle

[19]:
num_pixels = 512

length = 250 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1, theta=0 * degrees, phi=0 * degrees)

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.roughness(t=(20 * um, 20 * um), s=1 * um)

u2 = u1 * t1

u3 = u2.RS(z=1 * mm, new_field=True)

u4 = u2.RS(z=5 * mm, new_field=True)

u5 = u2.RS(z=10 * mm, new_field=True)

draw_several_fields((u2, u3, u4, u5), titles=('mask', '1 mm', '5 mm', '10 mm'), logarithm=True,
                    kinds=['phase', 'intensity', 'intensity', 'intensity'])

../../_images/source_examples_diffraction_objects_35_0.png

7.5.17. Blazed grating

Right phase: 2pi

[20]:
num_pixels = 512

length = 500 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

focal = 5 * mm

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1)
u1.pupil()

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.blazed_grating(period=20 * um,
                  phase_max=2 * np.pi,
                  x0=0 * um,
                  angle=0 * degrees)

t2 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t2.lens(r0=(0, 0), focal=focal)

u2 = u1 * t1 * t2

u3 = u2.RS(z=focal, new_field=True, amplification=(3, 1))

u3.draw(logarithm=1e1)

../../_images/source_examples_diffraction_objects_38_0.png

Wrong phase: 1.5pi

[21]:
num_pixels = 512

length = 500 * um
x0 = np.linspace(-length / 2, length / 2, num_pixels)
y0 = np.linspace(-length / 2, length / 2, num_pixels)
wavelength = 0.6238 * um

focal = 5 * mm

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u1.plane_wave(A=1)
u1.pupil()

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.blazed_grating(period=20 * um,
                  phase_max=1.5 * np.pi,
                  x0=0 * um,
                  angle=0 * degrees)

t2 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t2.lens(r0=(0, 0), focal=focal)

u2 = u1 * t1 * t2

u3 = u2.RS(z=focal, new_field=True, amplification=(3, 1))

u3.draw(logarithm=1e1)

../../_images/source_examples_diffraction_objects_40_0.png