3. Usage

To use Python diffraction and interference in a project:

import diffractio

3.1. X fields

from diffractio import um, nm, mm, np
from diffractio.scalar_fields_X import Scalar_field_X
from diffractio.scalar_sources_X import Scalar_source_X
from diffractio.scalar_masks_X import Scalar_mask_X

x = np.linspace(-500 * um, 500 * um, 4096)
wavelength = .6328 * um

u0 = Scalar_source_X(x, wavelength)
u0.gauss_beam(x0=0, w0=300*um, z0=0)
u0.draw(filename='usage1.png')

t0=Scalar_mask_X(x, wavelength)
t0.slit(x0=0, size=250*um)
t0.draw(filename='usage2.png')

u1=t0*u0
u2 = u1.RS(z=5 * mm, new_field=True)
u2.draw(filename='usage3.png')
_images/usage1.png
_images/usage2.png
_images/usage3.png

3.2. XZ fields

from diffractio import um, nm, mm, np,degrees
from diffractio.scalar_sources_X import Scalar_source_X
from diffractio.scalar_fields_XZ import Scalar_field_XZ
from diffractio.scalar_masks_XZ import Scalar_mask_XZ

x0 = np.linspace(-100 * um, 100 * um, 512)
z0 = np.linspace(0 * um, 300 * um, 512)
wavelength = 5 * um
u0 = Scalar_source_X(x=x0, wavelength=wavelength)
u0.gauss_beam(A=1, x0=0 * um, z0=0 * um, w0=75 * um, theta=0 * degrees)
u0.draw(kind='field', filename='usage4.png')

u1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
u1.incident_field(u0)
u1.rectangle(r0=(0 * um, 100 * um),
  size=(100 * um, 100 * um),
  angle=45 * degrees,
  refraction_index=2)

u1.draw_refraction_index(filename='usage5.png', scale='scaled')
u1.WPM(verbose=False)
u1.draw(logarithm=True, normalize='maximum', draw_borders=True, filename='usage6.png', scale='scaled');
_images/usage4.png
_images/usage5.png
_images/usage6.png

3.3. XY fields

from diffractio import um, nm, mm, np, degrees
from diffractio.scalar_sources_XY import Scalar_source_XY
from diffractio.scalar_fields_XY import Scalar_field_XY
from diffractio.scalar_masks_XY import Scalar_mask_XY


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

focus=10*mm


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

u0.zernike_beam(A=1, r0=(0, 0), radius=length / 2, n=[ 0,4,], m=[0,3,], c_nm=[ 1,0.25,])
u0.draw(kind='phase', filename='usage7.png')

t0 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t0.fresnel_lens(
  r0=(0 * um, 0 * um),
  radius=(500 * um, 500 * um),
  focal=(focus,focus),
  angle=0 * degrees,
  kind='amplitude',
  phase=np.pi)
t0.draw(filename='usage8.png')

u1 = u0 * t0
u2 = u1.RS(z=focus, new_field=True)
u2.cut_resample(
  x_limits=(-100 * um, 100 * um),
  y_limits=(-100 * um, 100 * um),
  num_points=[1024, 1024],
  new_field=False)
u2.draw(kind='intensity', logarithm=True, filename='usage9.png')
_images/usage7.png
_images/usage8.png
_images/usage9.png

3.4. XYZ fields

from diffractio import degrees, eps, mm, no_date, np, um
from diffractio.scalar_fields_XYZ import Scalar_field_XYZ
from diffractio.scalar_masks_XY import Scalar_mask_XY
from diffractio.scalar_masks_XYZ import Scalar_mask_XYZ
from diffractio.scalar_sources_XY import Scalar_source_XY

x0 = np.linspace(-25 * um, 25 * um, 128)
y0 = np.linspace(-25 * um, 25 * um, 128)
z0 = np.linspace(100 * um, 500 * um, 256)
wavelength = .6328 * um

t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength)
t1.circle(
    r0=(0 * um, 0 * um), radius=(10 * um, 10 * um), angle=0 * degrees)
t1.draw(filename='usage10.png')

uxyz = Scalar_mask_XYZ(x=x0, y=y0, z=z0, wavelength=wavelength)
uxyz.incident_field(u0=t1)

uxyz.RS(verbose=True, num_processors=4)

uxyz.draw_XYZ(y0=0 * mm, logarithm=True, normalize='maximum',filename='xyz_RS.png')
_images/usage10.png
_images/xyz_RS.png

3.5. XY Vector fields

from diffractio import np, sp, plt

from diffractio import nm, um, mm, degrees

from diffractio.scalar_sources_XY import Scalar_source_XY from diffractio.scalar_masks_XY import Scalar_mask_XY from diffractio.scalar_fields_XY import Scalar_field_XY

from diffractio.vector_sources_XY import Vector_source_XY from diffractio.vector_masks_XY import Vector_mask_XY from diffractio.vector_fields_XY import Vector_field_XY

x0 = np.linspace(-125 * um, 125 * um, 256) y0 = np.linspace(-125 * um, 125 * um, 256)

wavelength = 0.6328 * um

u0 = Scalar_source_XY(x0, y0, wavelength) u0.gauss_beam(

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

EM0 = Vector_source_XY(x0, y0, wavelength) EM0.azimuthal_wave(u=u0, r0=(0, 0), radius=(200, 200)) EM0.draw(kind=’ellipses’) plt.title(‘Before mask’) plt.savefig(‘usage12.png’)

t0 = Scalar_mask_XY(x0, y0, wavelength) t0.two_levels(level1=0, level2=1, x_edge=0, angle=0)

M0 = Vector_mask_XY(x=x0, y=y0, wavelength=wavelength)

state_0 = np.array([[1, 0],[0, 0]]) state_1 = np.array([[0, 0],[0, 1]])

M0.complementary_masks(t0, state_0, state_1)

EM1 = EM0 * M0 EM1.draw(kind=’ellipses’) plt.title(‘After mask’) plt.savefig(‘usage13.png’)

EM2 = EM1.RS(z=10 * mm)

EM2.draw(kind=’ellipses’) plt.title(‘After propagation’) plt.savefig(‘usage14.png’)

_images/usage12.png
_images/usage13.png
_images/usage14.png