pyoptics.sketch

Schematic drawings of optical layouts with matplotlib: thin lenses, stops, prisms, mirrors, detectors and paraxial rays, and ready-made sketches of microscopes, interferometers, wavefront sensors and other setups of the example notebooks.

The drawings are 2D meridional sections with the optical axis along the horizontal coordinate z and the height y vertical, in arbitrary layout units. Rays are traced paraxially through thin lenses (paraxial_ray()), so conjugate planes, foci and parallel beams in the sketches are where they belong; the proportions are chosen for clarity, not taken from real instruments.

Primitives (all draw onto a given matplotlib Axes):

  • lens(), stop(), plane(), prism(), mirror(), detector(), point_source(), polarizer(), label(): optical elements and annotations.

  • paraxial_ray(), draw_ray(): trace a ray through a sequence of thin lenses (in either direction along z) and draw it.

Microscope sketches used by the example notebooks 52 to 55:

  • koehler_microscope(): a transmitted light microscope with Köhler illumination, the illumination and image forming ray paths and the two sets of conjugate planes.

  • abbe_4f(): Abbe’s picture of image formation, diffraction orders of a grating focused in the back focal plane, optionally filtered.

  • phase_contrast_microscope(): condenser annulus and phase ring, direct and diffracted light.

  • dic_microscope(): polarizer, Nomarski prisms, sheared beams, analyzer.

  • confocal_microscope(): laser scanning confocal microscope with dichroic mirror and pinhole, in-focus and out-of-focus emission.

  • fpm_microscope(): LED array microscope for Fourier ptychography with a bright field and a dark field LED.

Primitives for folded layouts: rotated_lens(), rotated_detector(), beam_splitter(), laser(), sphere(), lenslet_array(), band() (a beam between two edge rays), arrow(), wavefront().

Setup sketches for the other example notebooks:

  • fold_mirror(): coated 45° fold mirror with s and p (notebook 14).

  • twyman_green(): Twyman-Green interferometer with a PZT phase shifter (notebook 23).

  • fizeau_interferometer(): Fizeau interferometer with a transmission sphere, confocal and cat’s eye positions (notebook 24).

  • shack_hartmann_sensor(), phase_diversity_setup(): two ways to measure a lens (notebook 25).

  • holography_setup(): off-axis digital holography, lensless or with a microscope (notebooks 26 and 27).

  • krf_illuminator(): the KrF illuminator with its pupil and field planes (notebook 42).

  • spatial_filter(): beam expander with a pinhole that removes a ghost (notebook 56).

Importing this module does not change matplotlib’s settings; matplotlib is imported when a function is called.

References

A. Köhler, “Ein neues Beleuchtungsverfahren für mikrophotographische Zwecke”, Z. wiss. Mikrosk. 10, 433-440 (1893).

M. Born and E. Wolf, “Principles of Optics”, 7th ed., Cambridge University Press (1999), section 8.6 (phase contrast).

D. Malacara (ed.), “Optical Shop Testing”, 3rd ed., Wiley (2007), chapters 2 (Fizeau) and 14 (phase shifting).

J. Mertz, “Introduction to Optical Microscopy”, 2nd ed., Cambridge University Press (2019).

D. B. Murphy and M. W. Davidson, “Fundamentals of Light Microscopy and Electronic Imaging”, 2nd ed., Wiley-Blackwell (2012).

Functions

abbe_4f

Abbe's picture: a grating diffracts a plane wave into orders that the objective focuses into points of its back focal plane; the image is the interference of the orders that pass.

arrow

Draw an arrow from (z0, y0) to (z1, y1) with an optional label at text_pos (default: the middle).

band

Fill a beam between two edge rays (polylines).

beam_splitter

Draw a 50/50 beam splitter at (z, y), a plate or a cube, at 45°.

confocal_microscope

Sketch of a laser scanning confocal fluorescence microscope.

detector

Draw a detector (camera or photomultiplier) face at z.

dic_microscope

Sketch of a Nomarski DIC microscope.

draw_ray

Trace a paraxial ray with paraxial_ray() and draw it.

fizeau_interferometer

Sketch of a Fizeau interferometer with a transmission sphere measuring the radius of a lens surface.

fold_mirror

Sketch of a coated 45° fold mirror in a laser head, with the s and p directions.

fpm_microscope

Sketch of an LED array microscope for Fourier ptychography.

holography_setup

Sketch of an off-axis digital holography setup (Mach-Zehnder).

koehler_microscope

Sketch of a transmitted light microscope with Köhler illumination.

krf_illuminator

Sketch of the KrF illuminator of notebook 42, unfolded and not to scale.

label

Write a label at (z, y).

laser

Draw a laser head as a box whose output end is at (z, y).

lens

Draw a thin biconvex lens of half height h at the position z.

lenslet_array

Draw a lenslet array of n lenslets between -h and h at z.

mirror

Draw a flat (or dichroic) mirror centred at (z, y), tilted by angle (radians against the y axis).

paraxial_ray

Trace a paraxial ray through thin lenses.

phase_contrast_microscope

Sketch of a Zernike phase contrast microscope.

phase_diversity_setup

Sketch of a phase diversity measurement of a lens: the same lens and beam as in shack_hartmann_sensor(), with a camera on a focus stage that records the PSF in a few planes around the focus.

plane

Draw a plane (e.g. a focal or conjugate plane) as a dotted line.

point_source

Draw a point source (lamp filament, LED, fluorophore) at (z, y).

polarizer

Draw a linear polarizer (a thin plate with its transmission direction).

prism

Draw a Wollaston/Nomarski prism: a rectangle split along its diagonal.

rotated_detector

Draw a detector face centred at (z, y), rotated by rotate degrees (90: facing a beam that travels along -y or +y).

rotated_lens

Draw a thin biconvex lens centred at (z, y) with its axis rotated by rotate degrees against z (90: the lens sits across a vertical beam).

shack_hartmann_sensor

Sketch of a Shack-Hartmann measurement of a lens.

spatial_filter

Sketch of a spatial filter: a 3x beam expander with a pinhole in the common focus (the setup of notebook 56).

sphere

Draw a spherical surface (a mirror or a lens surface) in section.

stop

Draw an aperture stop (diaphragm) at z between -h and h.

twyman_green

Sketch of a Twyman-Green interferometer for phase shifting and Fourier fringe analysis.

wavefront

Draw a wavefront across a beam: a straight line (amplitude 0) or a wavy one.

pyoptics.sketch.lens(ax, z, h, thickness=None, color='#cfe3f3', edgecolor='#4a6f8a', text=None, text_y=None, fontsize=9, zorder=3)[source]

Draw a thin biconvex lens of half height h at the position z.

Parameters:
axmatplotlib Axes
znumber

Axial position.

hnumber

Half height (semi diameter).

thicknessnumber, optional

Centre thickness of the drawn shape. Defaults to 0.18*h.

color, edgecolorcolors, optional
textstr, optional

Label below the lens.

text_ynumber, optional

Height of the label. Defaults to -1.15*h.

fontsizenumber, optional
zordernumber, optional
Returns:
patchmatplotlib Polygon
pyoptics.sketch.stop(ax, z, h, openings=((0.0, 0.5),), width=None, color='0.25', text=None, text_y=None, fontsize=9, zorder=4)[source]

Draw an aperture stop (diaphragm) at z between -h and h.

Parameters:
axmatplotlib Axes
znumber

Axial position.

hnumber

Half height of the stop.

openingssequence of (r_inner, r_outer), optional

Transparent zones as radii (abs(y) between r_inner and r_outer, on both sides of the axis). ((0, r),) is an iris of radius r, ((r1, r2),) an annulus. Defaults to ((0, 0.5),).

widthnumber, optional

Drawn thickness. Defaults to 0.04*h.

colorcolor, optional
textstr, optional

Label below the stop.

text_ynumber, optional
fontsizenumber, optional
zordernumber, optional
pyoptics.sketch.plane(ax, z, h, text=None, color='0.55', ls=':', text_y=None, fontsize=9, **kwargs)[source]

Draw a plane (e.g. a focal or conjugate plane) as a dotted line.

Parameters:
axmatplotlib Axes
znumber
hnumber

Half height.

textstr, optional

Label above the line.

color, lsoptional
text_ynumber, optional

Label height. Defaults to 1.08*h.

fontsizenumber, optional
**kwargs

Passed to ax.plot().

pyoptics.sketch.prism(ax, z, h, width=None, text=None, text_y=None, fontsize=9, zorder=3)[source]

Draw a Wollaston/Nomarski prism: a rectangle split along its diagonal.

Parameters:
axmatplotlib Axes
znumber
hnumber

Half height.

widthnumber, optional

Defaults to 0.3*h.

textstr, optional
text_ynumber, optional
fontsizenumber, optional
zordernumber, optional
pyoptics.sketch.mirror(ax, z, y, length, angle, color='0.3', lw=3, text=None, text_dy=None, fontsize=9, dichroic=False)[source]

Draw a flat (or dichroic) mirror centred at (z, y), tilted by angle (radians against the y axis).

Parameters:
axmatplotlib Axes
z, ynumbers

Centre.

lengthnumber
anglenumber

Tilt against the vertical, radians (pi/4: a 45° fold).

colorcolor, optional
lwnumber, optional
textstr, optional
text_dynumber, optional

Vertical offset of the label. Defaults to -0.7*length.

fontsizenumber, optional
dichroicbool, optional

Draw a coated beam splitter (light blue) instead of a mirror.

pyoptics.sketch.detector(ax, z, h, text=None, width=None, color='0.35', text_y=None, fontsize=9)[source]

Draw a detector (camera or photomultiplier) face at z.

Parameters:
axmatplotlib Axes
znumber
hnumber

Half height of the sensitive area.

textstr, optional
widthnumber, optional

Defaults to 0.12*h.

colorcolor, optional
text_ynumber, optional
fontsizenumber, optional
pyoptics.sketch.point_source(ax, z, y, color='#e0a000', size=60, text=None, text_dy=-0.25, fontsize=9, marker='*')[source]

Draw a point source (lamp filament, LED, fluorophore) at (z, y).

Parameters:
axmatplotlib Axes
z, ynumbers
colorcolor, optional
sizenumber, optional

Marker size.

textstr, optional
text_dynumber, optional
fontsizenumber, optional
markerstr, optional
pyoptics.sketch.polarizer(ax, z, h, direction='vertical', text=None, text_y=None, fontsize=9)[source]

Draw a linear polarizer (a thin plate with its transmission direction).

Parameters:
axmatplotlib Axes
znumber
hnumber

Half height.

direction{“vertical”, “out of plane”, “45”}, optional

Transmission direction symbol: a double arrow in the plane of the drawing, a dot (normal to it) or a cross for 45°.

textstr, optional
text_ynumber, optional
fontsizenumber, optional
pyoptics.sketch.label(ax, z, y, text, fontsize=9, ha='center', va='center', color='0.15', **kwargs)[source]

Write a label at (z, y).

pyoptics.sketch.paraxial_ray(lenses, z0, y0, u0, z_end)[source]

Trace a paraxial ray through thin lenses.

The ray starts at (z0, y0) with the slope u0 = dy/dz and runs towards z_end (in +z or -z direction); it is refracted by every lens (z_L, f) between z0 and z_end, in the order met. A converging lens (f > 0) bends the ray towards the axis in either direction of travel.

Parameters:
lensessequence of (z_L, f)

Positions and focal lengths of thin lenses.

z0, y0numbers

Start point.

u0number

Start slope dy/dz.

z_endnumber

End position.

Returns:
z, y1d arrays

Vertices of the ray (start, lenses, end).

pyoptics.sketch.draw_ray(ax, lenses, z0, y0, u0, z_end, color='#2a7ab9', lw=1.2, ls='-', alpha=0.9, arrow=True, zorder=2)[source]

Trace a paraxial ray with paraxial_ray() and draw it.

Parameters:
axmatplotlib Axes
lenses, z0, y0, u0, z_end

See paraxial_ray().

color, lw, ls, alphaoptional

Line style.

arrowbool, optional

Draw a small arrow head on the first segment to show the direction.

zordernumber, optional
Returns:
z, y1d arrays

Vertices of the ray.

pyoptics.sketch.koehler_microscope(ax, rays='both', title=None)[source]

Sketch of a transmitted light microscope with Köhler illumination.

Lamp, collector, field diaphragm, condenser aperture diaphragm (in the front focal plane of the condenser), condenser, specimen, objective with its back focal plane (pupil), tube lens and camera. The illumination rays (from a point of the lamp filament) are focused in the aperture diaphragm and the back focal plane and pass the specimen as a plane wave; the image forming rays (from a point of the specimen) are focused on the camera. Aperture planes (filament, condenser aperture, back focal plane) and field planes (field diaphragm, specimen, camera) are labelled.

Parameters:
axmatplotlib Axes
rays{“both”, “illumination”, “imaging”}, optional

Which ray sets to draw. Defaults to “both”.

titlestr, optional
pyoptics.sketch.abbe_4f(ax, period_orders=2, blocked=(), title=None, show_mask=True)[source]

Abbe’s picture: a grating diffracts a plane wave into orders that the objective focuses into points of its back focal plane; the image is the interference of the orders that pass.

Parameters:
axmatplotlib Axes
period_ordersint, optional

Highest order m drawn (orders -m to m). Defaults to 2.

blockedsequence of int, optional

Orders blocked by a mask in the back focal plane (drawn dashed after the mask). Defaults to none.

titlestr, optional
show_maskbool, optional

Draw the mask pieces for the blocked orders. Defaults to True.

pyoptics.sketch.phase_contrast_microscope(ax, title=None)[source]

Sketch of a Zernike phase contrast microscope.

An annulus in the front focal plane of the condenser illuminates the specimen with a cone of plane waves. The direct light (solid) is focused by the objective onto the phase ring in its back focal plane, an image of the annulus; light diffracted by the specimen (dashed) spreads over the pupil and mostly misses the ring.

Parameters:
axmatplotlib Axes
titlestr, optional
pyoptics.sketch.dic_microscope(ax, shear=0.25, title=None)[source]

Sketch of a Nomarski DIC microscope.

Polarizer, Nomarski prism in the front focal plane of the condenser (splits each ray into two orthogonal polarizations with a small angle), condenser (turns the angle into a lateral shear in the specimen), objective, second Nomarski prism in its back focal plane (recombines the beams; its lateral position sets the bias), analyzer and camera. The shear is exaggerated.

Parameters:
axmatplotlib Axes
shearnumber, optional

Drawn shear in layout units. Defaults to 0.25.

titlestr, optional
pyoptics.sketch.confocal_microscope(ax, out_of_focus=0.45, title=None)[source]

Sketch of a laser scanning confocal fluorescence microscope.

The laser beam is expanded, reflected by a dichroic mirror and focused by the objective into the specimen (the scan mirrors that move the focus are omitted). Fluorescence from the focus (green) returns through the objective, passes the dichroic mirror and is focused by the tube lens onto the pinhole in front of the detector. Fluorescence from a plane deeper in the specimen (red, dashed) is focused before the pinhole and mostly blocked by it.

Parameters:
axmatplotlib Axes
out_of_focusnumber, optional

Depth of the out-of-focus emitter below the focus (layout units). Defaults to 0.45.

titlestr, optional
pyoptics.sketch.fpm_microscope(ax, title=None)[source]

Sketch of an LED array microscope for Fourier ptychography.

A matrix of LEDs below the specimen replaces the condenser; one LED at a time illuminates the specimen with a plane wave from its direction. The low NA objective accepts the direct light of the central LEDs (bright field, orange) but not that of outer LEDs (dark field, red), whose direct light misses the pupil; only the light diffracted by the specimen to large angles reaches the camera then.

Parameters:
axmatplotlib Axes
titlestr, optional
pyoptics.sketch.rotated_lens(ax, z, y, h, rotate=90, thickness=None, text=None, text_offset=None, fontsize=9, color='#cfe3f3', edgecolor='#4a6f8a', zorder=3)[source]

Draw a thin biconvex lens centred at (z, y) with its axis rotated by rotate degrees against z (90: the lens sits across a vertical beam).

Parameters:
axmatplotlib Axes
z, ynumbers

Centre.

hnumber

Half height.

rotatenumber, optional

Rotation of the lens axis in degrees. Defaults to 90.

thicknessnumber, optional

Defaults to 0.18*h.

textstr, optional

Label beside the lens.

text_offsetnumber, optional

Distance of the label from the centre. Defaults to 1.15*h.

fontsizenumber, optional
color, edgecolorcolors, optional
zordernumber, optional
pyoptics.sketch.rotated_detector(ax, z, y, h, rotate=90, width=None, text=None, text_offset=None, fontsize=9, color='0.35')[source]

Draw a detector face centred at (z, y), rotated by rotate degrees (90: facing a beam that travels along -y or +y).

Parameters:
axmatplotlib Axes
z, ynumbers
hnumber

Half size of the sensitive area.

rotatenumber, optional

Defaults to 90.

widthnumber, optional

Drawn thickness. Defaults to 0.12*h.

textstr, optional
text_offsetnumber, optional
fontsizenumber, optional
colorcolor, optional
pyoptics.sketch.beam_splitter(ax, z, y, size, orientation='/', cube=False, color='#9fc5e0', text=None, text_dy=None, fontsize=9)[source]

Draw a 50/50 beam splitter at (z, y), a plate or a cube, at 45°.

Parameters:
axmatplotlib Axes
z, ynumbers

Centre.

sizenumber

Length of the splitting face (plate) or edge length (cube).

orientation{“/”, “\”}, optional

Direction of the splitting face. “/” reflects light travelling along +z into +y, “\” reflects it into -y.

cubebool, optional

Draw a cube instead of a plate.

colorcolor, optional
textstr, optional
text_dynumber, optional

Vertical offset of the label. Defaults to -0.75*size.

fontsizenumber, optional
pyoptics.sketch.laser(ax, z, y, length=1.0, height=0.3, rotate=0, text='laser', fontsize=9, color='0.3')[source]

Draw a laser head as a box whose output end is at (z, y).

Parameters:
axmatplotlib Axes
z, ynumbers

Position of the output aperture.

length, heightnumbers, optional

Size of the box.

rotatenumber, optional

Direction of the emitted beam in degrees against +z. Defaults to 0.

textstr, optional

Label inside the box.

fontsizenumber, optional
colorcolor, optional
pyoptics.sketch.sphere(ax, z_vertex, y, R, h, color='0.25', lw=2.0, ls='-', glass=None, text=None, text_y=None, fontsize=9, zorder=4)[source]

Draw a spherical surface (a mirror or a lens surface) in section.

Parameters:
axmatplotlib Axes
z_vertex, ynumbers

Vertex position; y is the height of the axis.

Rnumber

Radius of curvature, positive for a centre at z_vertex + R (a convex surface facing -z).

hnumber

Half height (semi diameter), smaller than abs(R).

color, lw, lsoptional

Line style of the surface.

glassnumber, optional

If given, the thickness of a glass body behind the surface (towards +z), drawn with a flat back.

textstr, optional
text_ynumber, optional
fontsizenumber, optional
zordernumber, optional
Returns:
z, yy1d arrays

The drawn surface.

pyoptics.sketch.lenslet_array(ax, z, h, n, focal_length=None, text=None, text_y=None, fontsize=9)[source]

Draw a lenslet array of n lenslets between -h and h at z.

Parameters:
axmatplotlib Axes
znumber
hnumber

Half height of the array.

nint

Number of lenslets.

focal_lengthnumber, optional

Not drawn; accepted for symmetry with the sketches that use it.

textstr, optional
text_ynumber, optional
fontsizenumber, optional
Returns:
centres1d array

Heights of the lenslet centres.

pyoptics.sketch.band(ax, z_top, y_top, z_bottom, y_bottom, color='#d6604d', alpha=0.22, edges=True, lw=0.8, zorder=1)[source]

Fill a beam between two edge rays (polylines).

Parameters:
axmatplotlib Axes
z_top, y_top, z_bottom, y_bottom1d arrays

Vertices of the two edge rays, in the same direction of travel.

colorcolor, optional
alphanumber, optional

Opacity of the fill.

edgesbool, optional

Draw the edge rays as lines too.

lwnumber, optional
zordernumber, optional
pyoptics.sketch.arrow(ax, z0, y0, z1, y1, color='0.2', lw=1.0, style='-|>', text=None, text_pos=None, fontsize=8, ha='center', va='center', mutation_scale=9)[source]

Draw an arrow from (z0, y0) to (z1, y1) with an optional label at text_pos (default: the middle).

pyoptics.sketch.wavefront(ax, z, y, h, amplitude=0.0, vertical=True, color='0.2', lw=1.3, n_waves=1.5, zorder=5)[source]

Draw a wavefront across a beam: a straight line (amplitude 0) or a wavy one.

Parameters:
axmatplotlib Axes
z, ynumbers

Centre.

hnumber

Half width of the beam.

amplitudenumber, optional

Deviation from a plane wavefront.

verticalbool, optional

True for a beam along z (the wavefront is vertical), False for a beam along y.

color, lwoptional
n_wavesnumber, optional

Number of undulations over the beam.

zordernumber, optional
pyoptics.sketch.twyman_green(ax, title=None)[source]

Sketch of a Twyman-Green interferometer for phase shifting and Fourier fringe analysis.

A HeNe laser beam is expanded (with a pinhole as spatial filter) and split by a beam splitter. The reference arm ends on a flat mirror that a piezo actuator (PZT) moves by fractions of a wavelength: the phase shift delta of phase shifting interferometry. Tilting the same mirror instead gives the carrier fringes of the single frame Fourier method. The test arm carries the wavefront error W of the surface under test (drawn exaggerated). Both returning beams are recombined by the splitter, and a telescope images the test surface onto the camera.

Parameters:
axmatplotlib Axes
titlestr, optional
pyoptics.sketch.fizeau_interferometer(ax, cat_eye=True, title=None)[source]

Sketch of a Fizeau interferometer with a transmission sphere measuring the radius of a lens surface.

The laser light, focused into a pinhole, diverges through a beam splitter and is collimated. The transmission sphere (TS) turns the plane wave into a spherical wave; its last surface, concentric with the focus, reflects part of the light back as the reference wave. The test surface on a length measuring stage reflects the test wave. In the confocal position (solid) the centre of curvature of the test surface lies in the focus, in the cat’s eye position (dashed) its vertex; the stage travel between the two nulls is the radius R. The returning waves are focused through the beam splitter into a small stop and imaged onto the camera.

Parameters:
axmatplotlib Axes
cat_eyebool, optional

Draw the cat’s eye position of the test surface as well. Defaults to True.

titlestr, optional
pyoptics.sketch.shack_hartmann_sensor(ax, title=None)[source]

Sketch of a Shack-Hartmann measurement of a lens.

A collimated beam passes the lens under test (a plano-convex singlet, plane side first, with spherical aberration: the rim rays focus short). An aplanatic collimator re-collimates the light behind the focus; the lenslet array cuts the beam into patches and focuses each onto the camera. A spot moves from its reference position (the lenslet axis) by the lenslet focal length times the local wavefront slope (exaggerated).

Parameters:
axmatplotlib Axes
titlestr, optional
pyoptics.sketch.phase_diversity_setup(ax, planes=(-1.0, 0.0, 1.0), title=None)[source]

Sketch of a phase diversity measurement of a lens: the same lens and beam as in shack_hartmann_sensor(), with a camera on a focus stage that records the PSF in a few planes around the focus.

Parameters:
axmatplotlib Axes
planessequence of numbers, optional

Camera positions relative to the best focus, in units of the drawn stage travel. Defaults to (-1, 0, 1).

titlestr, optional
pyoptics.sketch.holography_setup(ax, microscope=False, title=None)[source]

Sketch of an off-axis digital holography setup (Mach-Zehnder).

The expanded laser beam is split into an object arm, which passes the sample, and a reference arm. A second beam splitter recombines them on the camera, the reference tilted by the angle theta that puts the carrier fringes into the hologram. Without a microscope (notebook 26) the camera records the object wave a distance d behind the sample, with a microscope (notebook 27) objective and tube lens image the sample onto the camera (with an optional defocus).

Parameters:
axmatplotlib Axes
microscopebool, optional

Draw an objective and a tube lens in the object arm. Defaults to False.

titlestr, optional
pyoptics.sketch.fold_mirror(ax, title=None)[source]

Sketch of a coated 45° fold mirror in a laser head, with the s and p directions.

A collimated, circularly polarized beam meets the mirror at 45° and is folded towards the focusing objective. The plane of incidence is the plane of the drawing: p lies in it (arrows), s is normal to it (dots). The coating, a stack of high and low index layers, reflects s and p with different phases (retardance), which turns circular polarization elliptical.

Parameters:
axmatplotlib Axes
titlestr, optional
pyoptics.sketch.krf_illuminator(ax, title=None)[source]

Sketch of the KrF illuminator of notebook 42, unfolded and not to scale.

Secondary source (laser, beam shaper and diffuser), zoom-axicon objective (its directions become positions in the pupil plane 30, where the size of the illuminated disk is sigma and the axicons make it a ring), coupling lens (pupil plane 30 to the rod entrance), the glass rod (a kaleidoscope that makes the field uniform) with the masking blades at its exit, and the REMA objective that images the rod exit onto the reticle with its diaphragm in a pupil plane. Pupil planes (P) and field planes (F) are marked. The rays are paraxial, every group drawn as one thin lens.

Parameters:
axmatplotlib Axes
titlestr, optional
pyoptics.sketch.spatial_filter(ax, pinhole=True, title=None)[source]

Sketch of a spatial filter: a 3x beam expander with a pinhole in the common focus (the setup of notebook 56).

The clean part of the input beam (orange) is focused onto the axis and passes the pinhole. Light that travels in other directions, from a ghost reflection or from phase ripple (red), is focused beside the axis and blocked. The second lens collimates the filtered beam.

Parameters:
axmatplotlib Axes
pinholebool, optional

Draw the pinhole (otherwise the ghost passes and crosses the output beam). Defaults to True.

titlestr, optional