pyoptics.litho.jones_pupil

Jones pupils: the polarization properties of a projection lens, their representations and decompositions.

A Jones pupil J(P) is a 2 x 2 complex matrix at every point P = (P_x, P_y) of the normalized pupil. It maps the Jones vector (E_x, E_y) of a plane wave entering the pupil to that leaving it. In LithoSimulation it acts on every diffraction order before the aplanatic rotation into the image space (Projector(jones_pupil=…)), on top of the scalar pupil (Zernike phase and apodization) of the Projector.

Representations from the literature

Eight real functions describe a Jones pupil. The literature uses these representations:

  • Jones-Zernike: each of the four complex elements J_jk expanded into Zernikes. Simple, but the elements mix physical effects and depend on the orientation of the coordinate system.

  • Pauli decomposition (McIntyre, Kye, Levinson and Neureuther, J. Micro/Nanolith. MEMS MOEMS 5(3), 033001 (2006)),

    J = a_0*s_0 + a_1*s_1 + a_2*s_2 + a_3*s_3,   a_k = tr(s_k J)/2,
    

    with the Pauli matrices s_0 = I, s_1 = diag(1, -1), s_2 = [[0, 1], [1, 0]] and s_3 = [[0, -i], [i, 0]]. a_0 is the scalar part (apodization and wavefront), a_1 and a_2 are linear retardance (imaginary parts) and diattenuation (real parts) along x/y and +-45 degrees, and a_3 is circular retardance (rotation) and circular diattenuation. McIntyre et al. found this the most useful format for lithographers. Expanding each a_k into Zernikes gives the Pauli-Zernike representation (PauliZernikePupil).

  • Physical decomposition (e.g. Totzeck, Graeupner, Heil et al., “Polarization influence on imaging”, J. Micro/Nanolith. MEMS MOEMS 4(3), 031108 (2005); Geh et al.): the polar decomposition J = U H into a retarder U (unitary) and a diattenuator H (Hermitian, positive). It gives scalar transmission and phase, the magnitude and orientation of the retardance and of the diattenuation, and the circular retardance (rotation). decompose() does this; PhysicalJonesPupil builds a Jones pupil from these parts.

  • Orientation Zernike polynomials (OZP; Ruoff and Totzeck, “Orientation Zernike polynomials: a useful way to describe the polarization effects of optical imaging systems”, J. Micro/Nanolith. MEMS MOEMS 8(3), 031404 (2009); US patent 8,126,669). Retardance and diattenuation are orientation fields: an orientation psi is defined modulo 180 degrees, so it is described by an orientator a*(cos(2*psi), sin(2*psi)). OZPs are a complete set of vector polynomials for orientator fields: the Zernike radial polynomials times angular orientators. Like scalar Zernikes they separate the symmetries (a rotationally symmetric radial or tangential retardance, typical for coatings and stress, is a single OZP), and they serve for tolerancing via linear and quadratic sensitivities of CD and placement. They are used for lens specification and matching (Zeiss and ASML).

Orientation Zernike convention used here

An orientator field is written as the complex function o = o_1 + i*o_2. The OZPs are R_n^abs(m)(rho)*exp(i*m*phi) and i*R_n^abs(m)(rho)*exp(i*m*phi) for all (n, m) with n - abs(m) even. They are labelled by +-j with the Fringe Zernike index j of (n, abs(m)) such that the first component o_1 of OZ +j is the Fringe Zernike Z_j (the patent’s convention: the J_11 element corresponds to the scalar Zernike abs(OZ)), and OZ -j differs in the sign of the second component:

  • Z_j = R*cos(m*phi), m >= 0: OZ +j = R*exp(+i*m*phi), OZ -j = R*exp(-i*m*phi),

  • Z_j = R*sin(m*phi), m > 0: OZ +j = i*R*exp(-i*m*phi), OZ -j = -i*R*exp(+i*m*phi),

  • m = 0: OZ +j = R (along x/y), OZ -j = i*R (along +-45 degrees).

A rotation of the lens by alpha multiplies exp(i*m*phi) by exp(i*(2 - m)*alpha): the rotationally symmetric ones are OZ +5 = rho**2*exp(2*i*phi) (radial orientation; a negative coefficient is tangential) and OZ -6 = -i*rho**2*exp(2*i*phi) (a spiral orientation at -45 degrees to the radius: i*o rotates an orientator by 45 degrees). The patent writes the angular parts with half angles, (cos(m*phi/2), -sin(m*phi/2)); that is the same set of functions with m relabelled.

Physical Jones pupil used here

PhysicalJonesPupil is J = U H with

U = exp(-i*pi*(g_1*s_1 + g_2*s_2 + g_3*s_3)),
H = exp(e_1*s_1 + e_2*s_2 + e_3*s_3)/sqrt(cosh(2*abs(e))),

the retardance orientator (g_1, g_2) in waves (the retardance between the eigenpolarizations is 2*pi*abs(g) radians at the orientation psi of the fast axis, with g_1 + i*g_2 = abs(g)*exp(2*i*psi)), the circular retardance g_3 in waves (a rotation of the polarization by pi*g_3), and the diattenuation orientator d = tanh(2*abs(e))*e/abs(e), whose magnitude is (T_max - T_min)/(T_max + T_min). H is normalized to a mean intensity transmission of 1, so that the scalar transmission and phase stay with the Projector (apodization, Zernikes).

Convention: fields vary as exp(i(k.r - omega*t)).

References

G. R. McIntyre, J. Kye, H. Levinson and A. R. Neureuther, “Polarization aberrations in hyper-numerical-aperture projection printing: a comparison of various representations”, J. Micro/Nanolith. MEMS MOEMS 5, 033001 (2006).

M. Totzeck, P. Gräupner, T. Heil et al., “Polarization influence on imaging”, J. Microlith. Microfab. Microsyst. 4, 031108 (2005).

J. Ruoff and M. Totzeck, “Orientation Zernike polynomials: a useful way to describe the polarization effects of optical imaging systems”, J. Micro/Nanolith. MEMS MOEMS 8, 031404 (2009).

S.-Y. Lu and R. A. Chipman, “Interpretation of Mueller matrices based on polar decomposition”, J. Opt. Soc. Am. A 13, 1106-1113 (1996).

Classes

JonesPupil

Base class: a callable J(P_x, P_y) returning Jones matrices of shape np.broadcast(P_x, P_y).shape + (2, 2).

PauliZernikePupil

J = sum_k a_k s_k with Zernike expansions of the Pauli coefficients.

PhysicalJonesPupil

Retarder times diattenuator, J = U H (see the module documentation).

ProductPupil

The Jones pupil first @ second (second acts first).

Functions

compose

Jones matrices from retardance, diattenuation, transmission and phase.

decompose

Polar decomposition J = sqrt(T)*exp(i*phase)*U H of Jones matrices (shape (..., 2, 2)) as in PhysicalJonesPupil.

fit_orientation_zernikes

Least squares fit of orientation Zernikes to an orientator field.

fit_zernikes

Least squares fit of Fringe Zernikes to pupil samples.

orientation_zernike

Orientation Zernike polynomial OZ_+-j as the complex orientator field.

orientation_zernike_sum

Orientator field of an orientation Zernike expansion.

oz_indices

OZ indices +-1 .

pauli_coefficients

Pauli coefficients a_k = tr(s_k J)/2 of Jones matrices J (shape (..., 2, 2)); returns shape (4, ...).

pauli_matrix

Jones matrices sum_k a[k]*s_k for Pauli coefficients a of shape (4,) + shape; returns shape + (2, 2).

scalar_free

Jones matrices divided by their scalar part sqrt(T)*exp(i*phase) (the polarization part that PhysicalJonesPupil describes).

zernike_sum

Sum of Fringe Zernikes with complex coefficients allowed.

pyoptics.litho.jones_pupil.pauli_matrix(a)[source]

Jones matrices sum_k a[k]*s_k for Pauli coefficients a of shape (4,) + shape; returns shape + (2, 2).

pyoptics.litho.jones_pupil.pauli_coefficients(J)[source]

Pauli coefficients a_k = tr(s_k J)/2 of Jones matrices J (shape (…, 2, 2)); returns shape (4, …).

pyoptics.litho.jones_pupil.zernike(j, x, y)

Fringe Zernike Z_j at the points (x, y) of the unit disk (no mask is applied, peak value 1 on the unit circle).

Parameters:
jint

Fringe index.

x, yarrays or numbers

Coordinates normalized to the radius of the disk.

Returns:
Z_jarray
pyoptics.litho.jones_pupil.zernike_sum(coefficients, P_x, P_y)[source]

Sum of Fringe Zernikes with complex coefficients allowed.

Parameters:
coefficientsdict

{j: c_j}.

P_x, P_ynumbers or arrays

Normalized pupil coordinates.

Returns:
valcomplex array

sum_j c_j Z_j.

pyoptics.litho.jones_pupil.orientation_zernike(oz, P_x, P_y)[source]

Orientation Zernike polynomial OZ_+-j as the complex orientator field.

Parameters:
ozint

Index +-1, +-2, … (see the module documentation).

P_x, P_ynumbers or arrays

Normalized pupil coordinates.

Returns:
ocomplex array

o_1 + i*o_2.

Raises:
ValueError

For oz = 0.

pyoptics.litho.jones_pupil.orientation_zernike_sum(coefficients, P_x, P_y)[source]

Orientator field of an orientation Zernike expansion.

Parameters:
coefficientsdict

{oz: c} with real coefficients.

P_x, P_ynumbers or arrays

Normalized pupil coordinates.

Returns:
ocomplex array

sum_oz c_oz OZ_oz as o_1 + i*o_2.

pyoptics.litho.jones_pupil.oz_indices(n_terms)[source]

OZ indices +-1 … +-n_terms in the order +1, -1, +2, -2, …

pyoptics.litho.jones_pupil.fit_zernikes(P_x, P_y, values, n_terms=36, start=1)[source]

Least squares fit of Fringe Zernikes to pupil samples.

Parameters:
P_x, P_y1d arrays

Pupil points inside the unit circle.

values1d array

Real or complex samples.

n_termsint, optional

Highest Fringe index.

startint, optional

Lowest Fringe index.

Returns:
coefficientsdict

{j: c}, complex for complex values.

pyoptics.litho.jones_pupil.fit_orientation_zernikes(P_x, P_y, orientator, n_terms=36)[source]

Least squares fit of orientation Zernikes to an orientator field.

Parameters:
P_x, P_y1d arrays

Pupil points inside the unit circle.

orientator1d complex array

o_1 + i*o_2 at the pupil points.

n_termsint, optional

Highest Fringe index of the orientation Zernikes.

Returns:
coefficientsdict

{+-j: c} with real coefficients.

class pyoptics.litho.jones_pupil.JonesPupil[source]

Bases: object

Base class: a callable J(P_x, P_y) returning Jones matrices of shape np.broadcast(P_x, P_y).shape + (2, 2). Any callable with this signature can serve as Projector(jones_pupil=…).

pauli(P_x, P_y)[source]

Pauli coefficients of the Jones pupil.

Parameters:
P_x, P_ynumbers or arrays

Normalized pupil coordinates.

Returns:
acomplex array

Shape (4,) + np.shape(P_x).

class pyoptics.litho.jones_pupil.ProductPupil(first, second)[source]

Bases: JonesPupil

The Jones pupil first @ second (second acts first).

class pyoptics.litho.jones_pupil.PauliZernikePupil(a0=None, a1=None, a2=None, a3=None)[source]

Bases: JonesPupil

J = sum_k a_k s_k with Zernike expansions of the Pauli coefficients.

Parameters:
a0, a1, a2, a3dict {j: complex}, optional

Fringe Zernike coefficients of the Pauli coefficients; a0 defaults to {1: 1} (identity), the others to 0.

classmethod fit(P_x, P_y, J, n_terms=36)[source]

Fit to Jones matrices sampled at pupil points.

Parameters:
P_x, P_y1d arrays

Pupil points inside the unit circle.

J(N, 2, 2) array

Jones matrices at the points.

n_termsint, optional

Fringe Zernikes per Pauli coefficient.

Returns:
PauliZernikePupil
class pyoptics.litho.jones_pupil.PhysicalJonesPupil(retardance=None, diattenuation=None, circular_retardance=None, circular_diattenuation=None)[source]

Bases: JonesPupil

Retarder times diattenuator, J = U H (see the module documentation).

Parameters:
retardancedict {+-j: c}, optional

OZP coefficients of the linear retardance orientator (waves).

diattenuationdict {+-j: c}, optional

OZP coefficients of the linear diattenuation orientator ((T_max - T_min)/(T_max + T_min)).

circular_retardancedict {j: c}, optional

Fringe Zernike coefficients of the circular retardance (waves; a rotation by pi*g_3).

circular_diattenuationdict {j: c}, optional

Fringe Zernike coefficients of the circular diattenuation.

fields(P_x, P_y)[source]

Retardance generator and diattenuation vector on pupil points.

Parameters:
P_x, P_ynumbers or arrays

Normalized pupil coordinates.

Returns:
garray

Retardance generator in waves, shape (3,) + np.shape(P_x).

darray

Diattenuation vector, magnitude (T_max - T_min)/(T_max + T_min).

classmethod fit(P_x, P_y, J, n_terms=36)[source]

Fit to Jones matrices sampled at pupil points.

The polar decomposition of each J, then OZP fits of the orientators and Zernike fits of the circular parts.

Parameters:
P_x, P_y1d arrays

Pupil points inside the unit circle.

J(N, 2, 2) array

Jones matrices at the points.

n_termsint, optional

Terms per fit.

Returns:
pupilPhysicalJonesPupil
scalardict

The scalar part of the decomposition: {“phase”: Zernikes in waves, “transmission”: Zernikes of the mean intensity transmission}.

pyoptics.litho.jones_pupil.compose(g, d, transmission=1.0, phase=0.0)[source]

Jones matrices from retardance, diattenuation, transmission and phase.

J = sqrt(T)*exp(i*phase)*U H.

Parameters:
garray

Retardance generator in waves, shape (3, …).

darray

Diattenuation vector, shape (3, …), magnitudes below 1.

transmissionnumber or array, optional

Mean intensity transmission T.

phasenumber or array, optional

Phase in radians.

Returns:
Jarray

Shape (…) + (2, 2).

Raises:
ValueError

For a diattenuation of 1 or more.

pyoptics.litho.jones_pupil.decompose(J)[source]

Polar decomposition J = sqrt(T)*exp(i*phase)*U H of Jones matrices (shape (…, 2, 2)) as in PhysicalJonesPupil.

Returns:
dict

“transmission” T (mean intensity transmission, (s_1**2 + s_2**2)/2 with the singular values s), “phase” (radians, of det(U)/2), “retardance” g (3, …) in waves (linear: g[0] + i*g[1] is the orientator, circular: g[2]), “diattenuation” d (3, …), and “U” (unitary, including exp(i*phase)) and “H” (normalized as in PhysicalJonesPupil), J = sqrt(T)*U H.

pyoptics.litho.jones_pupil.scalar_free(J)[source]

Jones matrices divided by their scalar part sqrt(T)*exp(i*phase) (the polarization part that PhysicalJonesPupil describes).