pyoptics.litho.lens

Aberrations of a ray traced projection lens in lithographic imaging: from the lens design to CD, placement and best focus across the slit, and the sensitivities of these to Zernike coefficients.

Lens to projector

lens_aberrations() traces a pyoptics.raytrace.System at an image field point and fits Fringe Zernikes to its OPD on the pupil coordinates of Projector, (P_x, P_y) = n’ (d - d_chief)_xy/NA with the image space ray directions d, so that the coefficients can be handed to Projector directly (projector_from_system()). Besides the wavefront it returns two properties of the chief ray that the pupil does not describe:

  • distortion: the chief ray image point minus the paraxial image point m*object (m: paraxial magnification); in a scanner the uniform part of it (magnification and shift) is corrected by the scanner, the rest is an overlay error,

  • telecentricity: the chief ray direction; an image in a defocused plane moves sideways by focus*tan(theta_chief).

The Zernike tilts Z_2, Z_3 are relative to the chief ray and shift the image on top of the distortion.

Scanner slit

A scanner exposes through a slit (e.g. 26 x 8 mm on the wafer, the long side along x) while mask and wafer move along y; every point of the wafer sees all scan positions y of the slit. through_slit() therefore computes the image at a slit position x as the average of the images at the scan positions y, each one with its own aberrations and placement. Aberrations that vary along y blur the image (image fading); along x they give the CD and placement variation across the slit.

Sensitivities

zernike_sensitivity() gives the first and second derivatives of CD, placement and best focus with respect to each Zernike coefficient (central differences), the classic way to compare imaging conditions and to set lens tolerances. predict() turns them into the changes expected for a set of coefficients (linear and diagonal quadratic terms, cross terms neglected).

Polarization

lens_jones_pupil() traces the polarization through the lens: Fresnel transmission of every surface, optional thin film coatings (quarter_wave_coating()) and birefringent elements such as CaF2 with its intrinsic birefringence (materials.CubicCrystal), with raytrace.System.trace_polarization(). The result is fitted with pyoptics.litho.jones_pupil and handed to Projector(jones_pupil=…).

Telecentricity

lens_telecentricity() compares the geometric telecentricity (the chief ray) with the energetic one: the centroid of the image side ray slopes weighted with the etendue of the rays, the illumination fill and the transmission from the polarization ray trace (coatings, absorption). lens_apodization() hands the real pupil (off axis not centred on the chief ray) and its transmission to Projector(apodization=…), so that the simulation shows the resulting pattern shift through focus.

Two ray traced projection lenses come with pyoptics.raytrace: Caldwell’s dry KrF design (caldwell_krf_lens(), NA 0.56, 4x) and a Zeiss water immersion ArF design from a patent (zeiss_arfi_lens(), NA 1.35, 8x, 11 aspheres, not telecentric in the image space).

Units: the system (e.g. caldwell_krf_lens()) is in mm, the lithography simulation in its own length unit; length_unit is that unit in mm (1e-6 for nm, the default). Field points are image (wafer) coordinates in the units of the system.

References

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).

H.-J. Rostalski, A. Dodoc, A. Epple and H. Beierl, “Refractive projection objective for immersion lithography”, US 7,187,503 B2 (2007).

Classes

LensAberrations

Aberrations of a lens at one image field point.

LensJonesPupil

Jones pupil of a ray traced lens.

LensTelecentricity

Image side telecentricity of a lens at one field point.

Response

Printed feature for the threshold model.

Sensitivity

Zernike sensitivities.

SlitResult

Feature across the slit.

Functions

feature_response

CD, placement and best focus of the first feature of a simulation.

lens_NA

Image space NA of the lens on axis.

lens_aberrations

Fringe Zernikes, distortion and telecentricity of a lens at an image field point.

lens_apodization

Scalar pupil of a ray traced lens for Projector(apodization=...): the real pupil and its power transmission at an image field point.

lens_jones_pupil

Polarization ray trace of a lens: its Jones pupil at an image field point.

lens_telecentricity

Geometric and energetic image side telecentricity of a lens.

linear_correction

The placement errors that a scanner corrects: translation, magnification and rotation fitted to the placements of a set of field points,

predict

Changes of CD, placement and best focus predicted from sensitivities.

projector_from_system

Projector with the NA, wavelength, reduction ratio and Zernikes of a ray traced lens at an image field point.

quarter_wave_coating

Single layer antireflection coating.

through_slit

CD, placement and best focus across the slit of a scanner.

zernike_sensitivity

Derivatives of CD, placement and best focus with respect to Zernike coefficients.

class pyoptics.litho.lens.LensAberrations(field, zernikes, rms_residual, distortion, telecentricity, placement, NA)

Bases: tuple

Aberrations of a lens at one image field point.

Attributes:
field(x, y) image field point (units of the system)
zernikesdict {j: c_j} of Fringe Zernike coefficients in waves (j >= 2)

on the pupil of Projector

rms_residualRMS of the OPD left by the fit, in waves
distortion(dx, dy) chief ray image point minus the paraxial image point,

in the length unit of the simulation

telecentricity(t_x, t_y) x and y components of the chief ray direction

(radians for small angles)

placement(dx, dy) placement of a small feature, distortion plus the

shift by the Zernike tilts, -(c_2, c_3)*lambda/NA (first order: the centroid of the PSF), in the length unit of the simulation

NAthe NA that normalizes the pupil coordinates
NA

Alias for field number 6

distortion

Alias for field number 3

field

Alias for field number 0

placement

Alias for field number 5

rms_residual

Alias for field number 2

telecentricity

Alias for field number 4

zernikes

Alias for field number 1

class pyoptics.litho.lens.Response(cd, placement, best_focus, foci, cd_focus, placement_focus, nils_focus)

Bases: tuple

Printed feature for the threshold model.

Attributes:
cd, placementCD and placement (center of the printed feature minus its

nominal center) at focus 0

best_focusfocus of the largest NILS at the printed edges (vertex of a

parabola through the five foci around the maximum); unlike the vertex of a Bossung curve it is well defined at the isofocal dose too

foci, cd_focus, placement_focus, nils_focusCD, placement and NILS

through focus

best_focus

Alias for field number 2

cd

Alias for field number 0

cd_focus

Alias for field number 4

foci

Alias for field number 3

nils_focus

Alias for field number 6

placement

Alias for field number 1

placement_focus

Alias for field number 5

class pyoptics.litho.lens.Sensitivity(terms, delta, nominal, linear, quadratic)

Bases: tuple

Zernike sensitivities.

Attributes:
termsarray of Fringe indices j
deltastep in waves of the central differences
nominalResponse without the steps
linear, quadraticdicts with the keys “cd”, “placement”, “best_focus” of

arrays (one entry per term): first derivatives d/dc_j (length unit per wave) and second derivatives d^2/dc_j^2 (length unit per wave^2)

delta

Alias for field number 1

linear

Alias for field number 3

nominal

Alias for field number 2

quadratic

Alias for field number 4

terms

Alias for field number 0

class pyoptics.litho.lens.SlitResult(x, y, cd, placement, best_focus, aberrations)

Bases: tuple

Feature across the slit.

Attributes:
x, yslit positions and scan positions (units of the system)
cd, placement, best_focusarrays over x, from the scan averaged images
aberrationsLensAberrations, list (over x) of lists (over y)
aberrations

Alias for field number 5

best_focus

Alias for field number 4

cd

Alias for field number 2

placement

Alias for field number 3

x

Alias for field number 0

y

Alias for field number 1

pyoptics.litho.lens.lens_NA(system, N=48)[source]

Image space NA of the lens on axis.

Parameters:
systemraytrace.System
Nint, optional

Rays across the pupil.

Returns:
NAfloat

The largest n'*|d_xy| of the traced rays.

pyoptics.litho.lens.lens_aberrations(system, field=(0.0, 0.0), n_terms=36, N=48, NA=None, length_unit=1e-06)[source]

Fringe Zernikes, distortion and telecentricity of a lens at an image field point.

Parameters:
systempyoptics.raytrace.System

Finite conjugate projection lens.

fieldpair, optional

Image (wafer) field point (x, y) in the units of the system.

n_termsint, optional

Fit Z_1 … Z_n_terms (Z_1 is dropped from the result).

Nint, optional

Rays across the pupil.

NAnumber, optional

Normalization of the pupil coordinates; rays outside it are not used, so a smaller NA than the lens’s describes the stopped down lens. Default: lens_NA(system).

length_unitnumber, optional

Length unit of the simulation in units of the system (1e-6: nm for a system in mm).

Returns:
LensAberrations
pyoptics.litho.lens.linear_correction(aberrations)[source]

The placement errors that a scanner corrects: translation, magnification and rotation fitted to the placements of a set of field points,

dx = a_0 + a_1*x + a_2*y, dy = b_0 + b_1*y + b_2*x

(magnification along x is set in the lens, along y by the scan speed; a_2 and b_2 are the rotations of mask and wafer).

Parameters:
aberrationssequence of LensAberrations

Field points spread over the slit (at least three not on a line).

Returns:
correctioncallable

correction(x, y) -> (dx, dy), the fitted placement in the length unit of the simulation; pass it to through_slit().

pyoptics.litho.lens.projector_from_system(system, field=(0.0, 0.0), n_terms=36, N=48, NA=None, length_unit=1e-06, **kwargs)[source]

Projector with the NA, wavelength, reduction ratio and Zernikes of a ray traced lens at an image field point.

Parameters:
system, field, n_terms, N, NA, length_unit

As for lens_aberrations().

kwargs

Further arguments of Projector (n, vectorial, apodization, …).

Returns:
Projector
class pyoptics.litho.lens.LensJonesPupil(P_x, P_y, J, transmission, field, NA)

Bases: tuple

Jones pupil of a ray traced lens.

Attributes:
P_x, P_y(N,) arrays

Normalized pupil coordinates of the rays (as in lens_aberrations()).

J(N, 2, 2) array

Jones matrices from the object space to the image space, both in the aplanatic bases of the ray directions (the identity for an ideal lens).

transmissionnumber

Mean intensity transmission of the chief ray (that J is normalized to if normalize was True).

field, NAimage field point and the NA of the pupil coordinates
J

Alias for field number 2

NA

Alias for field number 5

P_x

Alias for field number 0

P_y

Alias for field number 1

field

Alias for field number 4

transmission

Alias for field number 3

pyoptics.litho.lens.quarter_wave_coating(n_glass, wavelength, n_coating=None)[source]

Single layer antireflection coating.

A quarter wave layer at normal incidence of index n_coating (default sqrt(n_glass), zero reflection; MgF2 has about 1.40 at 248 nm and 1.43 at 193 nm).

Parameters:
n_glassnumber

Refractive index of the lens.

wavelengthnumber

Wavelength in the unit of the thickness.

n_coatingnumber, optional

Refractive index of the layer.

Returns:
list of (n, thickness)

The layers from the air side, for lens_jones_pupil(coating=…).

pyoptics.litho.lens.lens_jones_pupil(system, field=(0.0, 0.0), N=32, NA=None, coating=None, birefringent=None, normalize=True)[source]

Polarization ray trace of a lens: its Jones pupil at an image field point.

Every refraction contributes the Fresnel transmission of its s and p components (with an optional thin film coating), as a 3 x 3 polarization ray tracing matrix (Chipman); the product over the surfaces, between the aplanatic bases of the object and image space ray directions (see propagators.aplanatic_rotation), is the Jones matrix. The bases use the absolute ray directions, which for a lens telecentric on both sides differ little from those relative to the chief ray that the pupil coordinates use. An uncoated surface is a weak diattenuator (s is reflected more, so p is transmitted better) with radial orientation; coatings add retardance. The geometric optical path is not included (that is the wavefront of lens_aberrations()), and neither is the birefringence of the glass (stress, or the intrinsic birefringence of CaF2) unless given as birefringent media (CubicCrystal).

Parameters:
systempyoptics.raytrace.System

Finite conjugate projection lens without mirrors.

fieldpair, optional

Image field point (units of the system).

Nint, optional

Rays across the pupil.

NAnumber, optional

Normalization of the pupil coordinates; default lens_NA(system).

coatinglist of (n, thickness) or callable, optional

Thin film layers on every glass-air surface, from the air side (e.g. quarter_wave_coating()), thickness in the units of the system; or a function coating(i, n_glass) of the surface index returning such a list (or None). None: the coatings of the surfaces themselves (Surface(coating=…), uncoated without).

birefringentdict {i: medium}, optional

Birefringent media behind the surfaces i (index into system.surfaces), e.g. {38: CubicCrystal(-3.4e-7, “111”)}, any materials.Material; the refractive index is still that of the system.

normalizebool, optional

Divide by the square root of the transmission of the chief ray and by its scalar phase (see jones_pupil.decompose()), so that the Jones pupil leaves the overall dose unchanged.

Returns:
LensJonesPupil

Fit it with jones_pupil.PauliZernikePupil.fit() or PhysicalJonesPupil.fit() to use it in Projector(jones_pupil=…).

class pyoptics.litho.lens.LensTelecentricity(field, chief, geometric, energetic, transmission, P_x, P_y, T, weight, slope)

Bases: tuple

Image side telecentricity of a lens at one field point.

All directions are slopes (dx/dz, dy/dz) in the image space: a feature imaged into a plane defocused by z moves sideways by z times the slope.

Attributes:
field(x, y) image field point (units of the system)
chiefslope of the chief ray (through the centre of the stop), the

geometric telecentricity of the lens design

geometriccentroid of the slopes of the illuminated cone weighted with

the etendue of the rays (no losses): the chief ray plus the asymmetry of the cone (pupil aberrations, vignetting)

energeticcentroid weighted with the transmitted power (Fresnel losses,

coatings, absorption), the direction of the energy that arrives at the image point

transmissionmean transmission of the illuminated cone
P_x, P_y(N,) arrays, pupil coordinates of the rays relative to the

chief ray (as in lens_jones_pupil())

T(N,) array, power transmission of the rays
weight(N,) array, etendue times the illumination fill of the rays

(sums to one)

slope(N, 2) array, image space slopes of the rays
P_x

Alias for field number 5

P_y

Alias for field number 6

T

Alias for field number 7

chief

Alias for field number 1

energetic

Alias for field number 3

field

Alias for field number 0

geometric

Alias for field number 2

slope

Alias for field number 9

transmission

Alias for field number 4

weight

Alias for field number 8

pyoptics.litho.lens.lens_telecentricity(system, field=(0.0, 0.0), N=48, fill=None, coating=None, birefringent=None, E_in=None, NA=None, delta=0.0001)[source]

Geometric and energetic image side telecentricity of a lens.

The geometric telecentricity is the direction of the chief ray. The energetic telecentricity is the centroid of the directions of the light that arrives at the image point: the rays from the object point, each weighted with its etendue (the object side solid angle of its tube, from the Jacobian of the object side direction sines over the pupil grid), with the illumination fill and with its power transmission from the polarization ray trace (Fresnel losses, coatings, absorption in absorbing media). An apodization that is not symmetric about the chief ray, as off axis, where the rays meet the surfaces asymmetrically, moves the centroid away from the chief ray. The centroid of the slopes is what moves the image through focus: the intensity centroid of a field moves along z with the power weighted mean of k_xy/k_z of its plane waves.

Parameters:
systempyoptics.raytrace.System

Finite conjugate projection lens without mirrors.

fieldpair, optional

Image field point (units of the system).

Nint, optional

Rays across the pupil.

fillnumber or callable, optional

Illumination of the object side cone, on the pupil coordinates (u_x, u_y) = n (d - d_chief)_xy/NA_object of the object space ray directions d (NA_object = NA*|magnification|): a number sigma fills the disk |u| <= sigma uniformly, a function fill(u_x, u_y) gives the relative radiance (the edge of the disk is smoothed over one step of the pupil grid). None (default): the whole cone that the stop passes, as for the light diffracted by a small feature or for incoherent illumination.

coating, birefringentoptional

As for lens_jones_pupil(); an absorbing glass enters as birefringent={i: materials.Isotropic(n, k)} for the media behind the surfaces i.

E_inJones vector (2,), optional

Polarization in object space (on the aplanatic basis); None: unpolarized.

NAnumber, optional

Normalization of the pupil coordinates; default lens_NA(system).

deltanumber, optional

Step of the pupil coordinates for the Jacobian.

Returns:
LensTelecentricity
pyoptics.litho.lens.lens_apodization(system, field=(0.0, 0.0), N=48, coating=None, birefringent=None, E_in=None, NA=None, transmission=True, n_rim=180)[source]

Scalar pupil of a ray traced lens for Projector(apodization=…): the real pupil and its power transmission at an image field point.

The pupil of Projector is a disk about the chief ray. Off axis the image of the stop need not be centred on the chief ray (pupil coma of the lens): the cone that the stop passes is shifted against it, and the light near its rim is clipped asymmetrically. The returned amplitude is zero outside the real pupil (the convex hull of the traced rays and of rim rays through the edge of the stop) and inside it the square root of the power transmission of the rays relative to that of the chief ray (Fresnel losses, coatings, absorption), interpolated linearly. Give the Projector an NA somewhat larger than the lens’s (and use the same NA here and in lens_aberrations()) so that its disk contains the shifted pupil; sigma of the illumination is relative to the NA of the Projector.

Parameters:
systempyoptics.raytrace.System

Finite conjugate projection lens without mirrors.

fieldpair, optional

Image field point (units of the system).

Nint, optional

Rays across the pupil.

coating, birefringent, E_in

As for lens_telecentricity().

NAnumber, optional

Normalization of the pupil coordinates (that of the Projector); default lens_NA(system).

transmissionbool, optional

Include the transmission; False gives the real pupil only (1 inside).

n_rimint, optional

Rays through the edge of the stop.

Returns:
apodizationcallable

apodization(P_x, P_y), the amplitude transmission on the pupil coordinates of the Projector. Do not combine it with a normalized Jones pupil of the same lens, which contains the transmission too.

pyoptics.litho.lens.feature_response(sim, threshold=0.3, dose=1.0, foci=None, N=401, direction=None)[source]

CD, placement and best focus of the first feature of a simulation.

The feature is searched within a quarter period around its nominal center plus the shift by the projector’s Zernike tilt, so that large placement errors are followed; where no feature is found (e.g. behind a contrast reversal far out of focus) CD and placement are nan.

Parameters:
simLithoSimulation
threshold, dosenumbers, optional

Threshold model.

fociarray, optional

Foci for best focus and the through focus values (should contain 0). Default: 11 foci over +-lambda/(2 NA^2).

Nint, optional

Samples of the cut over one pitch (the cut covers two pitches).

direction{“x”, “y”}, optional

Cut direction, see LithoSimulation.cut_coordinates().

Returns:
Response
pyoptics.litho.lens.zernike_sensitivity(sim, terms=range(2, 26), delta=0.02, threshold=0.3, dose=1.0, foci=None, N=401, direction=None)[source]

Derivatives of CD, placement and best focus with respect to Zernike coefficients.

Each coefficient is changed by +-delta (waves) on top of the projector’s own Zernikes; first and second derivatives follow from central differences.

Parameters:
simLithoSimulation
termssequence of int, optional

Fringe indices.

deltanumber, optional

Step in waves; small enough for the quadratic terms to describe the response (default 0.02, i.e. 20 milliwaves).

threshold, dose, foci, N, direction

As for feature_response().

Returns:
Sensitivity
pyoptics.litho.lens.predict(sensitivity, zernikes)[source]

Changes of CD, placement and best focus predicted from sensitivities.

sum_j L_j c_j + Q_j c_j**2/2 with the first and second derivatives L_j, Q_j; mixed terms (e.g. defocus and spherical aberration together) are neglected.

Parameters:
sensitivitySensitivity
zernikesdict

Coefficients {j: c_j} in waves; terms without sensitivities are ignored.

Returns:
dict

Predicted changes for “cd”, “placement” and “best_focus”.

pyoptics.litho.lens.through_slit(sim, system, x, y=(0.0,), threshold=0.3, dose=1.0, foci=None, correction=None, n_terms=36, N_pupil=32, N=401, direction=None, length_unit=1e-06)[source]

CD, placement and best focus across the slit of a scanner.

At each slit position x, the cuts through focus for all scan positions y (with the Zernikes, distortion and telecentricity of the lens at (x, y)) are averaged, which is the image a scanned wafer point receives. The placement is relative to the nominal position of the feature at the paraxial image point (minus the correction).

Parameters:
simLithoSimulation

Mask, illumination and projector; the Zernikes of the projector are replaced by those of the lens, its NA normalizes the pupil.

systempyoptics.raytrace.System

The lens, at the wavelength of the projector.

xarray

Slit positions (image side, units of the system).

yarray, optional

Scan positions, e.g. np.linspace(-4, 4, 5) for an 8 mm slit; one position (default 0) gives the static image.

threshold, dose, foci, N, direction

As for feature_response().

correctioncallable, optional

correction(x, y) -> (dx, dy): placement removed by the scanner, e.g. from linear_correction().

n_terms, N_pupil, length_unit

As for lens_aberrations() (n_terms, N, length_unit).

Returns:
SlitResult