3. Example of light sources

3.1. Creating an instance

An instance must be created before starting to operate with light sources. The initialization accepts several arguments.

3.1.1. Creating an instance

[1]:
from diffractio import degrees, mm, nm, um
from diffractio import np, plt, sp
from diffractio.scalar_sources_XY import Scalar_source_XY

3.2. plane wave

[2]:
x0 = np.linspace(-250 * um, 250 * um, 512)
y0 = np.linspace(-250 * um, 250 * um, 512)

wavelength = 0.6328 * um

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u.plane_wave(theta=1 * degrees)

u.draw(kind='phase', has_colorbar='vertical')

../../../_images/source_tutorial_scalar_XY_sources_xy_5_0.png

3.3. Gauss beam

[3]:
x0 = np.linspace(-500 * um, 500 * um, 512)
y0 = np.linspace(-500 * um, 500 * um, 512)
wavelength = 0.6238 * um

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

u.gauss_beam(A=1,
             r0=(0 * um, 0 * um),
             z0=0,
             w0=(200 * um, 200 * um),
             phi=0 * degrees,
             theta=0 * degrees)

u.draw(kind='intensity', has_colorbar='vertical')

../../../_images/source_tutorial_scalar_XY_sources_xy_7_0.png

3.4. spherical wave

[4]:
x0 = np.linspace(-500 * um, 500 * um, 512)
y0 = np.linspace(-500 * um, 500 * um, 512)
wavelength = 0.6238 * um

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

u.spherical_wave(A=1,
                 r0=(0 * um, 0 * um),
                 z0=-15 * mm,
                 radius=500 * um)
u.pupil()

u.draw(kind='field', normalize='maximum')

../../../_images/source_tutorial_scalar_XY_sources_xy_9_0.png

3.5. vortex beam

[5]:
x0 = np.linspace(-1 * mm, 1 * mm, 512)
y0 = np.linspace(-1 * mm, 1 * mm, 512)
wavelength = 0.6238 * um

m = 3
u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u.vortex_beam(A=1, r0=(0, 0), w0=250 * um, m=m)

title = '$m_{vortice}= %d$' % (m)
u.draw(kind='field', title=title)

../../../_images/source_tutorial_scalar_XY_sources_xy_11_0.png

3.6. Vortex beams

[6]:
M = 5

x0 = np.linspace(-1 * mm, 1 * mm, 512)
y0 = np.linspace(-1 * mm, 1 * mm, 512)
wavelength = 0.6238 * um

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

ID1 = plt.figure(figsize=(12, 6))
plt.suptitle("$Vortices$", fontsize=20)

for m in range(M):
    u.vortex_beam(A=1, r0=(0 * um, 0 * um), w0=400 * um, m=m)
    intensity = np.abs(u.u)**2
    phase = np.angle(u.u) / degrees
    phase[intensity < 0.005] = 0

    # drawings
    title = "(%d)" % (m)
    plt.subplot(2, M, m + 1)
    plt.axis('off')
    plt.title(title)
    h1 = plt.imshow(intensity)
    h1.set_cmap("gist_heat")

    plt.subplot(2, M, m + M + 1)
    plt.axis('off')
    h2 = plt.imshow(phase)
    h2.set_cmap("twilight")

../../../_images/source_tutorial_scalar_XY_sources_xy_13_0.png

3.7. Laguerre beam

[7]:
N = 2
K = 2

x0 = np.linspace(-1 * mm, 1 * mm, 512)
y0 = np.linspace(-1 * mm, 1 * mm, 512)
wavelength = 0.6238 * um

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

u.laguerre_beam(A=1,
                n=N,
                l=K,
                r0=(0 * um, 0 * um),
                w0=250 * um,
                z0=0,
                z=0.01 * um)

title = r'$n=%d, k=%d$' % (N, K)
u.draw(kind='field', title=title)

../../../_images/source_tutorial_scalar_XY_sources_xy_15_0.png

3.8. Laguerre beams

[8]:
N = 3
K = 3

x0 = np.linspace(-1 * mm, 1 * mm, 512)
y0 = np.linspace(-1 * mm, 1 * mm, 512)
wavelength = 0.6238 * um

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

ID1 = plt.figure(figsize=(8, 8))
plt.suptitle("amplitude", fontsize=20)
ID2 = plt.figure(figsize=(8, 8))
plt.suptitle("phase", fontsize=20)

for n in range(N + 1):
    for k in range(K + 1):

        u.laguerre_beam(A=1,
                        n=n,
                        l=k,
                        r0=(0 * um, 0 * um),
                        w0=250 * um,
                        z0=0,
                        z=0.01 * um)

        title = "(%d,%d)" % (n, k)
        plt.figure(ID1.number)
        plt.subplot(N + 1, K + 1, (N + 1) * (k) + n + 1)
        plt.axis('off')
        plt.title(title, fontsize=14)
        h1 = plt.imshow(np.abs(u.u)**2)
        h1.set_cmap("gist_heat")

        plt.figure(ID2.number)
        plt.subplot(N + 1, K + 1, (N + 1) * (k) + n + 1)
        plt.axis('off')
        plt.title(title, fontsize=14)
        h2 = plt.imshow(np.angle(u.u))
        h2.set_cmap("twilight")

plt.figure(ID1.number)
plt.figure(ID2.number)

../../../_images/source_tutorial_scalar_XY_sources_xy_17_0.png
../../../_images/source_tutorial_scalar_XY_sources_xy_17_1.png

3.9. Hermite_Gauss

[9]:
x0 = np.linspace(-1 * mm, 1 * mm, 512)
y0 = np.linspace(-1 * mm, 1 * mm, 512)
wavelength = 0.6238 * um

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

u.hermite_gauss_beam(A=1,
                     r0=(0, 0),
                     w0=[.3 * mm, .3 * mm],
                     z0=(0, 0 * mm),
                     z=0,
                     n=2,
                     m=2)

u.draw(kind='intensity')

../../../_images/source_tutorial_scalar_XY_sources_xy_19_0.png

3.10. Zernike beam

[10]:
N = np.array([0, 2])
M = np.array([0, 2])
c_nm = np.array([2, 2])

x0 = np.linspace(-1 * mm, 1 * mm, 512)
y0 = np.linspace(-1 * mm, 1 * mm, 512)
wavelength = 0.6238 * um

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

u.zernike_beam(A=1, r0=(0, 0), radius=750 * um, n=N, m=M, c_nm=c_nm)
u.draw(kind='phase')

../../../_images/source_tutorial_scalar_XY_sources_xy_21_0.png

3.11. Zernike beams

[11]:
N = 4

x0 = np.linspace(-1 * mm, 1 * mm, 512)
y0 = np.linspace(-1 * mm, 1 * mm, 512)
wavelength = 0.6238 * um

plt.figure(figsize=(8, 10))
plt.suptitle(u"polinomios de Zernike (n,m)", fontsize=20)

u = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

for n in range(0, N + 1):
    pos = 0
    for m in range(-n, n + 1, 2):
        pos = pos + 1

        u.zernike_beam(A=1,
                       r0=(0, 0),
                       radius=1 * mm,
                       n=np.array([n]),
                       m=np.array([m]),
                       c_nm=np.array([1]))
        u.pupil()

        title = "(%d,%d)" % (n, m)
        plt.subplot(N + 1, N + 1, n * (N + 1) + pos)
        plt.axis('off')
        plt.title(title, fontsize=14)
        h2 = plt.imshow(np.angle(u.u))
        plt.clim(vmin=-np.pi, vmax=np.pi)
        h2.set_cmap("twilight")
../../../_images/source_tutorial_scalar_XY_sources_xy_23_0.png

3.12. Several plane waves inclined

[12]:
x0 = np.linspace(-500 * um, 500 * um, 256)
y0 = np.linspace(-500 * um, 500 * um, 256)
wavelength = 0.6328 * um

u0 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u0.plane_waves_several_inclined(A=1,
                                num_beams=(5, 5),
                                max_angle=(5 * degrees, 45 * degrees))
u0.draw(kind='field')

../../../_images/source_tutorial_scalar_XY_sources_xy_25_0.png

3.13. plane waves with parameters from dictionary

[13]:
x0 = np.linspace(-500 * um, 500 * um, 256)
y0 = np.linspace(-500 * um, 500 * um, 256)
wavelength = 0.6328 * um

params = []
p1 = dict(A=1, theta=5 * degrees, phi=5 * degrees, z0=0)
p2 = dict(A=1, theta=-5 * degrees, phi=5 * degrees, z0=0)
p3 = dict(A=1, theta=5 * degrees, phi=-5 * degrees, z0=0)
p4 = dict(A=1, theta=-5 * degrees, phi=-5 * degrees, z0=0)

params.append(p1)
params.append(p2)
params.append(p3)
params.append(p4)

u0 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u0.plane_waves_dict(params)
u0.draw()

../../../_images/source_tutorial_scalar_XY_sources_xy_27_0.png

3.14. several parallel Gauss beams

[14]:
x0 = np.linspace(-500 * um, 500 * um, 256)
y0 = np.linspace(-500 * um, 500 * um, 256)
wavelength = 0.6328 * um

u0 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u0.gauss_beams_several_parallel(A=1,
                                num_beams=(5, 5),
                                w0=75 * um,
                                z0=0 * um,
                                r0=(0 * um, 0 * um),
                                r_range=(750 * um, 750 * um),
                                theta=0 * degrees,
                                phi=0 * degrees)
u0.draw(kind='intensity')

../../../_images/source_tutorial_scalar_XY_sources_xy_29_0.png

3.15. several inclined Gauss beams

[15]:
x0 = np.linspace(-500 * um, 500 * um, 256)
y0 = np.linspace(-500 * um, 500 * um, 256)
wavelength = 0.6328 * um

u0 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u0.gauss_beams_several_inclined(A=1,
                                num_beams=(5, 5),
                                w0=250 * um,
                                r0=(0 * um, 0 * um),
                                z0=0 * um,
                                max_angle=(10 * degrees, 180 * degrees))
u0.draw(kind='field')

../../../_images/source_tutorial_scalar_XY_sources_xy_31_0.png

3.16. Interference

[16]:
x0 = np.linspace(-1 * mm, 1 * mm, 512)
y0 = np.linspace(-1 * mm, 1 * mm, 512)
wavelength = 0.6238 * um

u1 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)
u2 = Scalar_source_XY(x=x0, y=y0, wavelength=wavelength)

u1.gauss_beam(A=1,
              r0=(0 * um, 0 * um),
              w0=(500 * um, 500 * um),
              z0=0 * um,
              theta=.2 * degrees)
u2.gauss_beam(A=1,
              r0=(0 * um, 0 * um),
              w0=(500 * um, 500 * um),
              z0=0 * um,
              theta=-.2 * degrees)

u3 = u1 + u2
u3.draw(kind='intensity')

../../../_images/source_tutorial_scalar_XY_sources_xy_33_0.png
[ ]: