pyoptics.litho.illumination¶
Illumination sources for lithographic imaging.
A source is a set of mutually incoherent points (s_x, s_y) in the sigma plane (the pupil of the illuminator, normalized to the NA of the projection lens: the illuminating plane wave of a point has the image-side transverse wave vector k_0*NA*(s_x, s_y)) with weights that add up to 1, plus a polarization.
Common shapes are sampled on a square grid of n_samples points across the unit circle:
coherent: one point,
conventional: disk of radius sigma,
annular: sigma_in <=
|s|<= sigma_out,dipole: two poles on the x (or y) axis,
quadrupole: four poles on the x and y axes (also called C-quad or cross quadrupole),
quasar: four poles on the diagonals (45°, 135°, …),
multipole: any number of poles at given azimuths,
from_map: any (pixelated, freeform) intensity map.
Poles are annular sectors between sigma_in and sigma_out with an opening angle (“sector”, the default), or disks that fill the ring between sigma_in and sigma_out (“circle”).
Polarization is one of
“x”, “y”, “unpolarized”,
“TE” (= “azimuthal”, “tangential”: perpendicular to the radius vector of each source point) or “TM” (= “radial”); on the axis they fall back to y and x, see polarization.TE_TM_basis(),
a Jones vector [E_x, E_y] or a Stokes vector [S_0, S_1, S_2, S_3],
a callable pol(s_x, s_y) returning one of the above for each point.
A degree of polarization dop < 1 mixes the polarization with unpolarized light: the fraction dop of the intensity is in the given state, the rest is unpolarized. For “TE” the intensity in the preferred state (IPS) is then (1 + dop)/2.
References¶
C. Mack, “Fundamental Principles of Optical Lithography: The Science of Microfabrication”, Wiley (2007).
A. K.-K. Wong, “Resolution Enhancement Techniques in Optical Lithography”, SPIE Press (2001).
B. J. Lin, “Immersion lithography and its impact on semiconductor manufacturing”, J. Microlith. Microfab. Microsyst. 3, 377-395 (2004).
Classes
Partially coherent, polarized illumination. |
- class pyoptics.litho.illumination.Illumination(s_x, s_y, weights=None, polarization='unpolarized', dop=1.0, name=None)[source]¶
Bases:
objectPartially coherent, polarized illumination.
- Parameters:
- s_x, s_yarrays
Source points in the sigma plane.
- weightsarray, optional
Relative intensities; normalized to a sum of 1. Default: equal.
- polarizationsee module docstring
- dopnumber, optional
Degree of polarization in [0, 1].
- namestr, optional
Label, e.g. for plots.
- classmethod coherent(s_x=0.0, s_y=0.0, **kwargs)[source]¶
Coherent illumination: one source point.
- Parameters:
- s_x, s_ynumbers, optional
Position of the source point in the sigma plane.
- **kwargs
Further arguments of
Illumination(polarization, dop, name).
- Returns:
- Illumination
- classmethod conventional(sigma, n_samples=31, **kwargs)[source]¶
Conventional illumination: a disk of radius sigma.
- Parameters:
- sigmanumber
Partial coherence factor (radius in the sigma plane).
- n_samplesint, optional
Grid points across the unit circle.
- **kwargs
Further arguments of
Illumination.
- Returns:
- Illumination
- classmethod annular(sigma_out, sigma_in, n_samples=31, **kwargs)[source]¶
Annular illumination: the ring sigma_in <=
|s|<= sigma_out.- Parameters:
- sigma_out, sigma_innumbers
Outer and inner radius.
- n_samplesint, optional
Grid points across the unit circle.
- **kwargs
Further arguments of
Illumination.
- Returns:
- Illumination
- classmethod multipole(angles, sigma_out, sigma_in, opening_angle=35.0, pole='sector', n_samples=31, **kwargs)[source]¶
Poles at the azimuths angles (degrees, counterclockwise from the x axis).
- Parameters:
- anglessequence of numbers
Azimuths of the pole centers in degrees.
- sigma_out, sigma_innumbers
Outer and inner radius of the poles.
- opening_anglenumber, optional
Opening angle of “sector” poles in degrees.
- pole“sector” or “circle”, optional
Annular sectors, or disks of radius (sigma_out - sigma_in)/2 centered at the radius (sigma_out + sigma_in)/2.
- n_samplesint, optional
Grid points across the unit circle.
- classmethod dipole(sigma_out, sigma_in, opening_angle=35.0, axis='x', pole='sector', n_samples=31, **kwargs)[source]¶
Dipole illumination: two opposite poles.
- Parameters:
- sigma_out, sigma_innumbers
Outer and inner radius of the poles.
- opening_anglenumber, optional
Opening angle of sector poles in degrees.
- axis{“x”, “y”} or number, optional
Poles on the x axis, on the y axis or at this azimuth in degrees (and opposite).
- pole{“sector”, “circle”}, optional
Pole shape, see
multipole().- n_samplesint, optional
Grid points across the unit circle.
- **kwargs
Further arguments of
Illumination.
- Returns:
- Illumination
- classmethod dipole_for_pitch(pitch, wavelength, NA, width=0.2, opening_angle=35.0, axis='x', **kwargs)[source]¶
Dipole adapted to the pitch for two-beam imaging.
The poles of the given radial width are centered at s_c = wavelength/(2*pitch*NA), where orders 0 and -1 pass the pupil symmetrically; s_c is limited to 1 - width/2.
- Parameters:
- pitchnumber
Pitch of the lines (image side).
- wavelengthnumber
Vacuum wavelength.
- NAnumber
Numerical aperture.
- widthnumber, optional
Radial width of the poles in sigma.
- opening_anglenumber, optional
Opening angle of the poles in degrees.
- axis{“x”, “y”} or number, optional
See
dipole().- **kwargs
Further arguments of
dipole()andIllumination.
- Returns:
- Illumination
- classmethod quadrupole(sigma_out, sigma_in, opening_angle=30.0, rotation=0.0, pole='sector', n_samples=31, **kwargs)[source]¶
Quadrupole illumination: four poles on the x and y axes.
- Parameters:
- sigma_out, sigma_innumbers
Outer and inner radius of the poles.
- opening_anglenumber, optional
Opening angle of sector poles in degrees.
- rotationnumber, optional
Rotation of the poles in degrees (45 gives a quasar).
- pole{“sector”, “circle”}, optional
Pole shape, see
multipole().- n_samplesint, optional
Grid points across the unit circle.
- **kwargs
Further arguments of
Illumination.
- Returns:
- Illumination
- classmethod quasar(sigma_out, sigma_in, opening_angle=30.0, pole='sector', n_samples=31, **kwargs)[source]¶
Quasar illumination: four poles on the diagonals.
- Parameters:
- sigma_out, sigma_innumbers
Outer and inner radius of the poles.
- opening_anglenumber, optional
Opening angle of sector poles in degrees.
- pole{“sector”, “circle”}, optional
Pole shape, see
multipole().- n_samplesint, optional
Grid points across the unit circle.
- **kwargs
Further arguments of
Illumination.
- Returns:
- Illumination
- classmethod from_map(S_x, S_y, intensity, threshold=0.0, **kwargs)[source]¶
Freeform (pixelated) source from an intensity map.
Points with intensity <= threshold or outside the unit circle are dropped.
- Parameters:
- S_x, S_yarrays
Source points in the sigma plane (e.g. a meshgrid).
- intensityarray
Intensity at each point.
- thresholdnumber, optional
Points at or below this intensity are dropped.
- **kwargs
Further arguments of
Illumination.
- Returns:
- Illumination
- with_polarization(polarization, dop=1.0)[source]¶
Copy of this source with another polarization.
- Parameters:
- polarizationsee the module docstring
New polarization.
- dopnumber, optional
Degree of polarization in [0, 1].
- Returns:
- Illumination
- polarization_states(s_x, s_y)[source]¶
Mutually incoherent polarization states of a source point.
- Parameters:
- s_x, s_ynumbers
Position of the source point (TE/TM states depend on it).
- Returns:
- stateslist of (weight, Jones vector)
Weights adding up to 1; a degree of polarization below 1 adds equal parts of x and y.
- property sigma_max¶
Largest
|s|of the source.