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

Illumination

Partially coherent, polarized illumination.

class pyoptics.litho.illumination.Illumination(s_x, s_y, weights=None, polarization='unpolarized', dop=1.0, name=None)[source]

Bases: object

Partially 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() and Illumination.

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.

points()[source]

Return s_x, s_y, weights (as vectorial_imaging.source_points()).