pyoptics.litho.plot

Plots for lithography simulations (needs matplotlib).

  • plot_source(): source points in the sigma plane with their polarization,

  • plot_mask(): mask transmission (one or more periods),

  • plot_pupil_fill(): diffraction orders of the mask in the pupil for the whole source (the classic “pupil fill” diagram),

  • plot_image(): 1D cut with the mask and the threshold, or 2D image with feature outlines and the printed contour,

  • plot_bossung(): CD vs. focus for several doses,

  • plot_process_window(): focus-dose plane with the CD spec contours and exposure latitude vs. depth of focus,

  • plot_orientation(): orientation fields on the pupil (retardance, diattenuation, orientation Zernikes of a Jones pupil).

Functions

plot_bossung

Plot Bossung curves: CD vs. focus, one curve per dose.

plot_image

Plot a 1D or 2D image.

plot_mask

Plot the transmission amplitude of a layout.

plot_orientation

Orientation field on the pupil, such as a retardance or diattenuation (see jones_pupil): color = magnitude, ticks along the orientation psi (o = |o|*exp(2*i*psi)) with lengths ~ magnitude.

plot_process_window

Plot the process window and exposure latitude vs. depth of focus.

plot_pupil_fill

Plot the diffraction orders in the pupil for all source points.

plot_source

Plot source points (marker area ~ weight) and polarization ticks.

pyoptics.litho.plot.plot_source(illumination, ax=None, show_polarization=True, every=1, color='C0', title=None)[source]

Plot source points (marker area ~ weight) and polarization ticks.

Polarization ticks show the Jones vector of the dominant state of each point (real part of the components); unpolarized points get none.

Parameters:
illuminationIllumination
axmatplotlib axis, optional
show_polarizationbool, optional
everyint, optional

Draw a tick for every n-th point only.

colorcolor, optional
titlestr, optional

Default: the name of the source.

Returns:
axmatplotlib axis
pyoptics.litho.plot.plot_mask(layout, ax=None, periods=2, N=400, t_absorber=0.0, cmap='gray', title=None)[source]

Plot the transmission amplitude of a layout.

Parameters:
layoutMaskLayout
axmatplotlib axis, optional
periodsnumber, optional

Periods shown in each direction.

Nint, optional

Samples per direction.

t_absorbercomplex, optional

Transmission of the absorber.

cmapstr, optional
titlestr, optional
Returns:
axmatplotlib axis
pyoptics.litho.plot.plot_pupil_fill(sim, ax=None, max_points=2000, title=None)[source]

Plot the diffraction orders in the pupil for all source points.

Orders that pass the pupil are shown in normalized pupil coordinates, colored by order, with marker area ~ |c|**2*source weight.

Parameters:
simLithoSimulation
axmatplotlib axis, optional
max_pointsint, optional

Largest number of source points shown (thinned out above).

titlestr, optional
Returns:
axmatplotlib axis
pyoptics.litho.plot.plot_image(sim, x, I, y=None, ax=None, threshold=None, dose=1.0, show_mask=True, label=None, cmap='inferno', colorbar=True, **kwargs)[source]

Plot a 1D or 2D image.

A 1D image gets shaded features and the threshold, a 2D image the feature outlines and the printed contour at threshold/dose.

Parameters:
simLithoSimulation

For the layout.

xarray

x coordinates.

Iarray

Intensity, 1D (cut) or 2D.

yarray, optional

y coordinates of a 2D image.

axmatplotlib axis, optional
thresholdnumber, optional

Printing threshold.

dosenumber, optional

Relative dose.

show_maskbool, optional
labelstr, optional
cmapstr, optional
colorbarbool, optional
**kwargs

Passed to plot() (1D) or imshow() (2D).

Returns:
artistmatplotlib Line2D or AxesImage
pyoptics.litho.plot.plot_bossung(foci, doses, cd, ax=None, cd_target=None, tolerance=0.1, cmap='viridis', every=1, colorbar=True)[source]

Plot Bossung curves: CD vs. focus, one curve per dose.

Parameters:
foci, dosesarrays

Axes of the focus-exposure matrix.

cdarray

Shape (len(doses), len(foci)).

axmatplotlib axis, optional
cd_targetnumber, optional

Target CD, drawn with its tolerance band.

tolerancenumber, optional

Relative CD tolerance.

cmapstr, optional

Color map for the doses.

everyint, optional

Plot every n-th dose only.

colorbarbool, optional
Returns:
axmatplotlib axis
pyoptics.litho.plot.plot_process_window(foci, doses, cd, cd_target, tolerance=0.1, axes=None, el_min=None, color='C0', label=None)[source]

Plot the process window and exposure latitude vs. depth of focus.

The left axis shows the CD spec contours and the in-spec doses in the focus-dose plane, the right one EL vs. DOF.

Parameters:
foci, dosesarrays

Axes of the focus-exposure matrix.

cdarray

Shape (len(doses), len(foci)).

cd_targetnumber

Target CD.

tolerancenumber, optional

Relative CD tolerance.

axespair of matplotlib axes, optional
el_minnumber, optional

Exposure latitude to mark.

colorcolor, optional
labelstr, optional
Returns:
dof, elarrays

See metrics.el_dof().

pyoptics.litho.plot.plot_orientation(orientator, ax=None, N=41, n_ticks=13, scale=None, cmap='viridis', title=None, colorbar=True, label=None)[source]

Orientation field on the pupil, such as a retardance or diattenuation (see jones_pupil): color = magnitude, ticks along the orientation psi (o = |o|*exp(2*i*psi)) with lengths ~ magnitude.

Parameters:
orientatorcallable or tuple

orientator(P_x, P_y) returning o_1 + i*o_2, e.g. lambda P_x, P_y: jp.orientation_zernike(5, P_x, P_y); or samples (P_x, P_y, o) on scattered pupil points.

N, n_ticksint, optional

Grid for the color map and the number of ticks across the pupil.

scalenumber, optional

Magnitude of a full length tick; default: the maximum.