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.
![]() | 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


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:
![]() | ![]() |
![]() |
Glass Pickup
The glass type of the lens should remain the same in both passes, thus a pickup on the glass type is required.
After the solves have been added, the Lens Data Editor should appear as below:
And, if the system has been setup correctly, the 3D Layout should appear to have only one lens; both lenses should perfectly overlap:
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.”

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

and the layout looks the same as before:
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:





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!
The layout, although we have added several surfaces, should appear to be identical to the layout on page 2. 
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:
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!
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.
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.

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:
Click OK.
Upon doing so, ZEMAX will issue a warning:
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:
