Soon, we will launch a new and updated customer portal, which is an important step toward providing our customers with one place to learn, interact, and get help.
Learn more.

How to Tolerance for Tilts and Decenters of a Double Pass System

This article explains:
  • How to setup a double pass system for the purposes of tolerancing the tilts/decenters of elements.
  • How to setup the Tolerance Data Editor with the user-defined operands (TU**) required for accurately modeling lens tilts and decenters in double pass.
  • How to verify that the double pass system has been adequately modeled to reflect reality.



Dan Hill
Frequently Asked Questions


Due to the way sequential ray tracing works (rays are traced from one surface to the next in a specific order), modeling a double pass system requires that the optical system be modeled twice; once for each pass.  Different solve types, such as position and pickup, are essential for making sure that the optics are mapped appropriately for the return path of the beam.  Great care should be taken to ensure the model has been setup correctly, especially for tolerancing. 

In a double pass system, the tolerance events are not totally independent.  In other words, if an element is tilted by some amount in the first pass, the element should have the same exact physical tilt in the return path, otherwise the ray tracing results from Zemax in the tolerance analysis will be an incorrect representation of reality. 

To model and tolerance such a configuration, careful placement of coordinate breaks, pickups, and user-defined tolerances are required.  This tutorial is designed to cover all of the fundamental aspects of this process, starting with a single lens relay in double pass.

Double Pass Design

To begin, open the Zemax lens file attached to this article:
 File Pointer  FILE Double Pass Tolerance Test File.ZMX

As is, this file consists of a singlet stock lens (32981) from Edmund Optics.  The lens is used at finite conjugates, and the “image” plane is placed 50mm from the vertex of the rear surface of the lens. 

Insert a surface before the IMA surface, and change its Glass type to MIRROR. 

Make a second copy of the lens by highlighting surfaces 1 and 2, and pasting them right before the IMA plane.

Pickup the radii and glass for the return path of the lens.  In addition, apply position solves on the thicknesses, so that the return path of the lens overlaps that of the first, and ensuring that the IMA plane is co-located with the OBJ point.

Radii Pickups

 Curvature Solve Dialog  Curvature Solve Dialog


Note that although surface 4 precedes surface 5, it is actually a representation of the back of the lens as we propagate in the return path.  Therefore, the curvature pickup solve on surface 4 should point to surface 2.  Surface 5 represents the front of the lens in the second pass.  Therefore its curvature should be picked up from that of surface 1.  The comment column may be useful to distinguish what each surface represents.  

Thickness Position Solves

The thickness position solvles for surfaces 3, 4, and 5 should be set as follows:


 Thickness Solve Dialog  Thickness Solve Dialog
 Thickness Solve Dialog  


Glass Pickup

The glass type of the lens should remain the same in both passes, thus a pickup on the glass type is required.

Glass Solve Dialog

After the solves have been added, the Lens Data Editor should appear as below:

Lens Data Editor

And, if the system has been setup correctly, the 3D Layout should appear to have only one lens; both lenses should perfectly overlap:

3D Layout

Setting Up the Design for Tolerancing

For tolerancing, we will consider the effects of tilting and decentering the lens.  Normally, the built in element tolerances, such as TEDX, TEDY, TETX, TETY, could be used to automate the perturbations of an element.  However, in a double pass system, tolerancing of these effects requires some additional modification to the LDE.  The reason for this is Zemax has no way of knowing that the lens defined in the second pass is supposed to be the same physical component as the lens defined in the first pass.  As a result, coordinate breaks describing the tilts/decenters need to be manually entered into the Lens Data Editor, and the tolerances on the parameters of the coordinate breaks may be performed via user-defined tolerance operands: TUDX, TUDY, TUTX, TUTY, and TUTZ.  These operands will be discussed and used in more detail later on in the article.

So why is this necessary?  Well, given the fact that Zemax has no way of knowing that the lenses in each pass define the same physical lens, each element would be treated individually with the built-in element decenter/tilt operands.  So for the purposes of a Sensitivity Analysis, the lens in the first pass may be perturbed, but not mirrored in the return path.  Therefore, the rays traced in the return will refract with an untilted lens. 

In the Monte Carlo simulation, both lens elements may be tilted by different amounts, or even by different signs.  Consequently, the criteria value reported for each Monte Carlo simulation will not be representative of the true, physical perturbation of that element.

To begin, each occurrence of the lens will need to be wrapped with coordinate breaks.  The front vertex of the lens will be assumed to be the pivot axis.  As such, any tilt must be restored at this location.  On the second pass, the pivot should be initialized in the same location. 

To setup the double pass system for tolerancing, we must first insert and arrange the coordinate breaks.  These may be setup manually, or the Tilt/Decenter tool may be utilized.  For the details in how to tilt and decenter elements, as well as a complete discussion of how coordinate breaks work, please refer to the article, “How to Tilt and Decenter a Sequential Optical Component.

  • Highlight surfaces 1 & 2 and choose the Tilt/Decenter Element Tool (Tools > Coordinates > Tilt/Decenter Elements).  The tilt values will remain zero for the time being, since we are just using the tool to setup the coordinate breaks for us.

Tilt/Decenter Element Tool Dialog

At this point, the Lens Data Editor should look as follows:

Lens Data Editor

Lens Data Editor

and the layout looks the same as before:

3D Layout

Setting Up the Return Path

The coordinate breaks for the first pass have been defined, but now we have to introduce the coordinate breaks to model the tilt/decenter of the lens in the return path. 

The concept is the same, but in the return path, the same exact tilts must be maintained, so some extra pickups are required.  The return path may be modeled by performing the following:

  • Add a dummy surface after the mirror.  Add a Position solve on the new dummy surface (surface 7) thickness to locate the following surface (which will eventually be a coordinate break) at the location of the very first coordinate break (change the “From Surf:” to 1 and the “Length” to 0).

Thickness Solve Dialog

  • Under the Draw tab of the Surface Properties dialog for surface 7 (the new dummy surface), check the box “Do Not Draw This Surface.”

Surface Properties Dialog Draw Tab

  • Highlight surfaces 8 and 9 and use the Tilt/Decenter tool with the following settings:

Tilt/Decenter Element Tool Dialog

  • Set positive pickups for the parameters of the first coordinate break (surface 8) to pickup from that of surface 1. 
  • Add a Position solve on the new coordinate break surface 8 so that the following surface is located at the physical back of the lens.

Thickness Solve Dialog


  • Delete surface 12 (the dummy surface) and change the Position solve on surface 11 to locate the IMA surface at the OBJ.

Thickness Solve Dialog

At this point, the Lens Data Editor should look like the one below.  Note all of the pickup and position solves required to model a simple double pass system!

Lens Data Editor

The layout, although we have added several surfaces, should appear to be identical to the layout on page 2. 

3D Layout

How do we know whether or not we have made a mistake in the setup?  One quick test is a qualitative measure of how the layout looks as we tilt/decenter the lens by modifying the parameters on the very first coordinate break.

First make sure that the OBJ surface is set as the Global Coordinate Reference:

Surface Properties Dialog Type tab

Now, adjust some of the parameters on the first coordinate break surface.  No matter what combination of values is entered, there should only appear to be 1 physical lens in the 3D Layout.  If not, then the return path is not properly mapping the initial beam path, and you need to double check your setup!

3D Layout

Note that in addition to the Layout, the Global Vertex option in the Prescription Data Report can also accurately confirm if the global positions of the front and back faces of the lens in both paths are identical.

Prescription Data Settings

Using The TU** Operands

The five tolerance operands, TUDX, TUDY, TUTX, TUTY, and TUTZ, are used for more general user defined tilts and decenters than that of TEDX, TEDY; etc.  The primary difference is that Zemax does not automatically insert the required coordinate break surfaces to achieve the specified decenters and tilts in the tolerances.  These user defined tolerances will only work on Coordinate Break surfaces.   So, as we have done over the last couple pages, the coordinate breaks must be entered into the Lens Data Editor by the designer.

Just like any other tolerance operand, the TU** operands may be inserted by typing the appropriate name in the Type column of the Tolerance Data Editor.  For the purposes of demonstrating the user defined tolerances simply type each of the TU** operands in the TDE.  Since we have confirmed that the coordinate breaks have already been properly constructed, we only have to perturb the parameters of the very first coordinate break; all of our pickups and position solves will adjust the rest of the system.  So, for each operand, change the “Surf” parameter to 1, the first coordinate break surface.  In addition, modify the Min and Max tolerances for each operand to -0.2 and 0.2 respectively.

Tolerance Data Editor

Tolerance Data Editor

For the purposes of keeping the current demonstration as simple as possible, and to focus on the operation of the user defined tolerance operands, no additional operands or compensators will be defined.  An RMS Spot Size tolerance analysis will be performed, and several Monte Carlo files will be saved so that we can insure the toleranced lens is positioned as we expected.

Run the tolerance analysis (Tools > Tolerancing > Tolerancing) using the following settings:

Tolerancing Dialog

Click OK.

Upon doing so, Zemax will issue a warning:

Zemax Error Message

This error message is issued to warn you that Zemax has detected one or more solves present in the Lens Data Editor.  Many solves, such as some curvature solves or ray height solves, are generally not appropriate for tolerancing.  For example, if an F Number solve was placed on the Radius of a particular surface, it would act as a compensator during the tolerance analysis, and adjust the radius of curvature for each perturbation so that a particular F Number constraint is met.

Solve like the pickup and position solves are sometimes valid, and in fact necessary for certain systems.  The designer should always carefully examine the solves in place and determine the consequence of having a particular solve in place. 

We may ignore this error message, as the solves that we have constructed are critical to an accurate tolerance analysis of the double pass system.

Take a moment to review some of the saved Monte Carlo files, and observe the values Zemax has chosen for the tilts and decenters of the lens.  No matter what combination of values has been chosen, the lens should not differ between passes:

Lens Data Editor

3D Layout

Summary and References

When modeling a system in double pass in sequential Zemax, certain solves are required to mimic the same physical lens in the second pass.  Furthermore, for tolerancing, the coordinate breaks describing the tilts and decenters must be setup by hand, and the TE** operands can no longer be used.  To ensure that any tilt performed in the first pass is picked up by the second pass of the beam, user defined operands (TUDX, TUDY, TUTX, TUTY, TUTZ) must be used to replaced the built in element tilt/decenter tolerance operands.

Both before and after tolerancing such systems, it is important to verify that your Zemax model is representing reality.  After all, you don't want the second pass decenter or tilt differently from that of the first pass, or your tolerance results won't be an accurate representation of the perturbation!


Zemax Optical Design Program User's Guide, Zemax Development Corporation