6.4.2. Development of video using Matplotlib

[2]:
from diffractio import degrees, mm, plt, sp, um, np
from diffractio.scalar_sources_X import Scalar_source_X
from diffractio.scalar_masks_X import Scalar_mask_X
from diffractio.scalar_masks_XZ import Scalar_mask_XZ
from numpy.fft import fft, ifft
from scipy.signal import convolve2d

6.4.2.1. Generates a XZ field and show plots for each z

[3]:
# Initial parameters
x0 = np.linspace(-300 * um, 300 * um, 512)
z0 = np.linspace(-0.125 * um, 800 * um, 1024)
wavelength = 0.6238 * um * 10

# Definition of source
u0 = Scalar_source_X(x=x0, wavelength=wavelength)
u0.plane_wave(A=1)
[4]:
u1 = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength, n_background=1)
u1.incident_field(u0)
[5]:
# insert sphere
u1.sphere(r0=(0, 250 * um),
          radius=(225 * um, 225 * um),
          refractive_index=1.33,
          angle=0)
u1.draw_refractive_index(scale='scaled', colorbar_kind='horizontal')

../../../_images/source_tutorial_drawing_creating_video_5_0.png
[6]:
# propagation
u1.WPM(verbose=False, has_edges=True)
[7]:
u1.draw(logarithm=True, scale='scaled', draw_borders=True)

../../../_images/source_tutorial_drawing_creating_video_7_0.png
[8]:
seconds = 1.
u1.video(kind='intensity',
         logarithm=True,
         normalize=False,
         time_video=10 * seconds,
         frames_reduction=5,
         filename='creating_video.mp4',
         dpi=100)

[9]:
%%HTML
<div align="middle">
<video width="100%" controls>
      <source src="creating_video.mp4" type="video/mp4">
</video></div>

6.4.2.2. Generates a XYZ field and show plots XY for each z

[10]:
from diffractio.scalar_fields_XYZ import Scalar_field_XYZ
from diffractio.scalar_masks_XY import Scalar_mask_XY

[16]:
wavelength0 = 0.6238 * um

size = 250 * um
num_data = 256
x0 = np.linspace(-size / 2, size / 2, num_data)
y0 = np.linspace(-size / 2, size / 2, num_data)
z0 = np.linspace(500*um, 1.5*mm, 64)

[17]:
radius = 100 * um
t1 = Scalar_mask_XY(x=x0, y=y0, wavelength=wavelength0)
t1.circle(r0=(0 * um, 0 * um),radius=radius, angle=0 * degrees)
t1.draw()
../../../_images/source_tutorial_drawing_creating_video_13_0.png
[21]:
u2=t1.RS(z=500*um, verbose=True)
u2.draw()
Good result: factor 1.34
../../../_images/source_tutorial_drawing_creating_video_14_1.png
[19]:
u_xyz = Scalar_field_XYZ(x0, y0, z0, wavelength0)
u_xyz.incident_field(t1)
u_xyz.RS(num_processors=4)
time in RS= 14.639429330825806. num proc= 4
[20]:
u_xyz.video('video_circle.mp4', axis='auto', fps=10)