pyoptics.vectorial_imaging¶
Vectorial, partially coherent imaging (Abbe’s method), e.g. for lithography.
A thin mask is illuminated by a partially coherent source. Each source point
is a plane wave that is mutually incoherent with all other source points; its
direction is given by the partial coherence coordinates (s_x, s_y) (sigma in
lithography): the transverse wave vector of the illuminating plane wave in
image space is k_0*NA*(s_x, s_y). The mask diffracts it into plane waves
(diffraction orders) with the transverse wave vectors k_0*NA*s + k_mask, which
the projection lens passes if |k_perp| <= k_0*NA. All quantities refer to the
image side: pitches and NA are image-side values (for a reduction lens the
mask dimensions divided by the reduction ratio).
Polarization: the illumination has a Jones vector [E_x, E_y] at the mask, which a thin (Kirchhoff) mask keeps. In the vectorial model each diffraction order is then turned into a plane wave in the image space medium (refractive index n) by the aplanatic lens (propagators.aplanatic_rotation()): its TE (s) component stays perpendicular to the plane of incidence, its TM (p) component tilts with the wave and gets a z component. Interfering TM waves are not parallel, which reduces the image contrast at high NA. An optional obliquity (radiometric) factor 1/sqrt(cos(theta)) conserves the energy flowing through the lens, as in propagators.vectorial_mansuripur(). In the scalar model the Jones vector is kept as it is.
The image is the energy density |E_x|**2 + |E_y|**2 + |E_z|**2, summed over
the source points (weighted) and over the mutually incoherent polarization
states of each source point.
Polarization of the illumination can be given as
a Jones vector, e.g. polarization.jones.J_V,
a Stokes vector (shape (4,)), e.g. polarization.mueller.S_unpol (it is decomposed into two incoherent Jones vectors, see polarization.jones_from_stokes()),
one of the strings “x”, “y”, “unpolarized”, “TE” (= “azimuthal”, or tangential: perpendicular to the radius vector of the source point) and “TM” (= “radial”); “TE”/”TM” refer to the plane of incidence of the illumination, on the axis they fall back to y and x,
a callable pol(s_x, s_y) returning one of the above for each source point.
For lines along y (pitch along x) and illumination in the x-z plane (e.g. an x dipole), “y” is TE (s) polarization for all diffraction orders, and “x” is TM (p).
Convention: fields vary as exp(i(k.r - omega*t)), a defocus z > 0 (image plane behind the focal plane) multiplies each plane wave by exp(+i*k_z*z).
References¶
B. Richards and E. Wolf, “Electromagnetic diffraction in optical systems II. Structure of the image field in an aplanatic system”, Proc. R. Soc. Lond. A 253, 358-379 (1959).
D. G. Flagello, T. Milster and A. E. Rosenbluth, “Theory of high-NA imaging in homogeneous thin films”, J. Opt. Soc. Am. A 13, 53-64 (1996).
C. Mack, “Fundamental Principles of Optical Lithography: The Science of Microfabrication”, Wiley (2007).
A. Erdmann, “Optical and EUV Lithography: A Modeling Perspective”, SPIE Press (2021).
Functions
Michelson contrast (I_max - I_min)/(I_max + I_min) of an image. |
|
Aerial image of a periodic one-dimensional mask (lines along y). |
|
Aerial image of a two-dimensional mask with Abbe's method. |
|
Fourier coefficients of a lines and spaces mask. |
|
Normalized image log slope NILS = |
|
Sample an illumination source on a square grid in the sigma plane. |
|
Contrast of the interference of two plane waves of equal amplitude that travel at the angles +theta and -theta to the z axis. |
- pyoptics.vectorial_imaging.lines_spaces_orders(pitch, linewidth, max_order, line=0.0, space=1.0)[source]¶
Fourier coefficients of a lines and spaces mask.
One period consists of a line of width linewidth (centered at x = 0) with the complex amplitude transmission line and a space with the transmission space: t(x) = sum_m c_m exp(2*pi*i*m*x/pitch).
- Parameters:
- pitch, linewidthnumbers
- max_orderint
Orders -max_order … max_order are returned.
- line, spacecomplex numbers, optional
Amplitude transmissions; the defaults describe a binary (chrome on glass) mask. An attenuated phase shift mask with 6 % intensity transmission has line = -sqrt(0.06).
- Returns:
- marray of ints
- c_marray
- pyoptics.vectorial_imaging.source_points(shape='conventional', sigma=0.5, sigma_in=0.0, opening_angle=None, n_samples=21, axis='x')[source]¶
Sample an illumination source on a square grid in the sigma plane.
- Parameters:
- shapestr
“coherent” (one point at sigma), “conventional” (disk of radius sigma), “annular” (sigma_in <=
|s|<= sigma), “dipole” (two poles on the axis, annular sector with the opening angle) or “quasar” (four poles on the diagonals).- sigmanumber or tuple
Outer radius of the source; for “coherent” the source point (s_x, s_y) or a number s_x.
- sigma_innumber, optional
Inner radius for “annular”, “dipole”, “quasar”.
- opening_anglenumber, optional
Opening angle of the poles of “dipole” and “quasar” in degrees (default 35°).
- n_samplesint, optional
Number of grid points across the diameter of the unit circle.
- axis“x” or “y”, optional
Orientation of the dipole.
- Returns:
- s_x, s_y, weightsarrays
Source points and their weights (summing to 1).
- pyoptics.vectorial_imaging.image_1d(x, pitch, orders, NA, wavelength, source=None, polarization='unpolarized', n=1.0, defocus=0.0, vectorial=True, obliquity=True, phase=None, return_components=False)[source]¶
Aerial image of a periodic one-dimensional mask (lines along y).
The diffraction orders of the mask are summed up directly, so the pitch is arbitrary and no FFT grid is involved.
- Parameters:
- xarray
Positions (image side) at which the image is computed.
- pitchnumber
Image-side pitch.
- orderstuple (m, c_m)
Diffraction orders and their amplitudes, e.g. from lines_spaces_orders().
- NAnumber
Image-side numerical aperture (NA <= n).
- wavelengthnumber
Vacuum wavelength.
- sourcetuple (s_x, s_y, weights), optional
Source points from source_points(); defaults to coherent, normal illumination.
- polarizationsee module docstring
- nnumber, optional
Refractive index of the image space (immersion liquid).
- defocusnumber, optional
Distance of the image plane from the focal plane.
- vectorialbool, optional
If False, use the scalar model (no rotation of the polarization).
- obliquitybool, optional
Use the radiometric factor 1/sqrt(cos(theta)) (vectorial model only).
- phasecallable, optional
Pupil phase phase(P_x, P_y) in radians on normalized pupil coordinates (unit disk), e.g. a Zernike aberration as in imaging.
- return_componentsbool, optional
Also return the intensities of the three field components.
- Returns:
- Iarray
Image intensity
|E|**2at x.- I_xyzarray, optional
Shape (3,) + x.shape:
|E_x|**2,|E_y|**2,|E_z|**2.
- pyoptics.vectorial_imaging.image_2d(mask, x, y, NA, wavelength, source=None, polarization='unpolarized', n=1.0, defocus=0.0, vectorial=True, obliquity=True, phase=None, return_components=False)[source]¶
Aerial image of a two-dimensional mask with Abbe’s method.
The mask (complex amplitude transmission, image-side coordinates) is taken as periodic in the computational window. For each source point the mask spectrum is filtered by the pupil, shifted by the illumination direction; the three field components are transformed back separately.
- Parameters:
- maskarray
Amplitude transmission sampled on x, y.
- x, yarrays
Linear, centered coordinates (see pyoptics.fft).
- NA, wavelength, source, polarization, n, defocus, vectorial, obliquity,
- phase, return_components
As for image_1d().
- Returns:
- Iarray
Image intensity, shape (Ny, Nx).
- I_xyzarray, optional
Shape (3, Ny, Nx).
- pyoptics.vectorial_imaging.contrast(I)[source]¶
Michelson contrast (I_max - I_min)/(I_max + I_min) of an image.
- pyoptics.vectorial_imaging.nils(x, I, x_edge, linewidth)[source]¶
Normalized image log slope NILS =
linewidth*|d ln(I)/dx|at x_edge.- Parameters:
- x, Iarrays
Sampled image (x increasing, finely sampled).
- x_edgenumber
Position of the nominal edge of the feature.
- linewidthnumber
Nominal width of the feature.
- Returns:
- NILSnumber
- pyoptics.vectorial_imaging.two_beam_contrast(theta, polarization)[source]¶
Contrast of the interference of two plane waves of equal amplitude that travel at the angles +theta and -theta to the z axis.
TE (s) polarized waves are parallel and give contrast 1, TM (p) polarized waves enclose the angle 2*theta and give
|cos(2*theta)|. Unpolarized light is the incoherent mean of both, I = 2 + (1 + cos(2*theta))*cos(Delta), with the contrast (1 + cos(2*theta))/2 = cos(theta)**2.- Parameters:
- thetanumber or array
Half the angle between the waves, in the medium [rad].
- polarization“TE”, “TM” or “unpolarized”
- Returns:
- contrastnumber or array