How to model an adaptive optical system

This advanced-level article demonstrates how to create a segmented mirror-based adaptive optical system using the Multi-Configuration capability of OpticStudio. It uses a comprehensive example to illustrate how to model an array of mirrors using the STOP surface decenter, how to use the tolerancing capability to create random wavefront error to model atmospheric aberrations, and how to optimize for minimum geometrical and diffraction point spread function to compensate for these aberrations. The use of solves to simplify system setup and parameter changes is also explained.


Authored By Nam-Hyong Kim


Article Attachments


A segmented mirror adaptive optical system can adjust the positions of its segments to minimize aberrations. This is useful in astronomical telescopes which need a means to reduce aberrations caused by the Earth's atmosphere. 

OpticStudio can model these systems in any mode, but for this tutorial we will use Sequential Mode. We will use multiple configurations to model a simple segmented mirror and will analyze it by introducing random aberrations to the input wavefront. These aberrations should represent atmospheric effects and will be optimized around by focusing on the tilt and Z position of the mirror segments. 

Design goals and assumptions

The animations below show both the un-tilted segments and the tilt of each segment about the center of the reflective surface, respectively. 




Below, we see a Report Graphics window featuring various Monte Carlo iterations of the system in which random aberrations are added to the wavefront which then passes to the segments. These aberrations are shown in the Surface Sag plot in the top left corner. The animation below also shows the geometrical and diffraction point spread function (PSF) before and after optimization. All input wavefronts are displayed. 



To generate the above, we will adhere to the following design goals and assumptions:

  • We will only model the segmented parabolic primary mirror. No other elements of a complete telescope, such as the secondary mirror, will be modeled. This is done to reduce complexity. The additional components and can be easily added if required.
  • The mirror segments are not deformable. Again, this is done just to make the article less complex: this can be easily added if required.
  • The mirror has 19 segments and each of them will be entered manually in the editors. Mirrors with much larger number of segments can be created by using a ZPL macro to modify the editors.
  • The radial position of each segment relative to the vertex of the center segment should be picked-up (linked) from the decenter parameters of a particular segment. The animation below shows how the radial position of all segments change when the position of the single controlling segment is changed in the editor.
  • Random aberrations, representing atmospheric effects, will be generated automatically by OpticStudio.



Here are some of the specifications:


 Segment Parameter  Specification
 Sag shape (Conic constant)  -1
 Radius of Curvature  -4000 mm
 Focal Length  -2000 mm
 Shape  Hexagon
 Semi-Diameter  150 mm



3d layout


This exercise will require understanding of the Multi-Configuration and Ray Aiming tools. It will also require knowledge of the various System Aperture settings. If you are not familiar with these terms please refer to following articles and/or the OpticStudio Help System.


Initial system layout

Set the following in the System Explorer window:


 System Explorer Setting  Value
 Aperture Type  Float by Stop Size
 Fields  One on-axis field (X = Y = 0)
 Wavelengths  550 um
 Ray Aiming  Paraxial
 Units  Millimeters


By using multiple configurations, we will model one segment per configuration. The mirror surface will be the stop, having a hexagonal user-defined surface aperture (UDA). The stop XY decenter will be zoomed and the rays will be aimed at the decentered stop surface through Paraxial Ray Aiming. The animation below shows the effect of the zooming the stop position (the orange circle around the hexagonal segment).



3d layout


To aberrate the input wavefront, we will place a glass window before the mirror and deform the sag using the TEZI tolerance operand.

shaded model


The diagrams below show the center and one off-axis (Y = +540, X = 0) segments. Notice how the X, Y, and Z positions of the off-center segment must change from that of the center segment. The segment pivot point is always at the center of its surface.

A dummy glass window of constant index 2 will be placed along the segments' local Z axis, 90mm in front of the local XY plane. This ensures that the sag error (to be introduced before analysis) correlates directly to the wavefront error.


3d layout


3d layout


Set up the Lens Data Editor

Before entering the surfaces in the editors, we need to create the hexagonal User Defined Aperture (UDA) named "HEXAGON.UDA" and place it under the {Zemax}\Objects\Apertures directory.

Open any ASCII text editor. Use the POL keyword to create the hexagon. The syntax is:


POL   centerX   centerY   radius   n_edges   angle


Note, that the radius is measured from vertex to corner.

For our system, n_edges is 6 for a hexagon, and zero rotation (angle) applied.




Save the file as HEXAGON.UDA in the {Zemax}\Objects\Apertures directory.

For more information about the UDA entities, please refer to the OpticStudio Help System discussion on User Defined Apertures and Obscurations, found at: The Setup Tab...Editors Group (Setup Tab)...Lens Data Editor...Surface Properties...Apertures (surface properties)...User Defined Apertures and Obscurations

To model the center segment first, insert the following surfaces in the Lens Data Editor:


lens data


Make surface 6 the STOP with type Irregular and set the Clear Semi-Diameter to 150mm.

We will be using the Irregular surface instead of the Standard surface because the amount of decenter can be specified as one of the surface parameters in the Lens Data Editor. For the Irregular surface, the decenters are in lens units, and any tilts are in degrees. For the center segment, both of these values are zero. The tilt and decenter parameters of the Irregular surface work exactly like the Coordinate Break surface; however, the tilts and decenters are undone internally after the ray is traced to the surface.

Ray tracing is done according to this algorithm: The Irregular surface is decentered, tilted about X, then about Y. Then, the ray is traced to the surface. The surface is untilted about Y, untilted about X, then un-decentered.

Now, navigate the Surface 6 Properties...Aperture and select a User Aperture for the Aperture Type. Choose the HEXAGON.UDA for the Aperture File. 


lens data


Place a position solve on surface 5 to make the total distance between surface 3 and 5 always 2100 mm. This will ensure that when we add multiple copies of the mirror at various (X, Y) shifts they will be at the correct Z location automatically.


thickness solve on surface 5


Set a model solve for surface 2's material. In this model glass solve, choose an index of 2, zero dispersion (dPgF), and zero Abbe (Vd) number. This is because we want to model a pure phase profile.


pure phase


Specify 50 mm substrate thickness for the mirror in the surface property window under Surface 6 Properties...Draw. This only affects how the mirror is drawn in the layout plots and has no other effect.


lens data


Apply Pickup solves in the Lens Data Editor

The decenter X and Y parameters of the Coordinate Break (CB) surface 4 will be zoomed by the Multi-Configuration Editor to move the STOP surface. The decenters will be automatically restored by the CB surface 8 via Pickup solves. The tilt of the mirror segment will be controlled by the X and Y tilt parameters of the Coordinate Break at surface 4 and the tilt will restored by surface 7's Coordinate Break. Also, the Irregular surface needs to be decentered by an equal but opposite amount of surface 4's decenters to correctly model the off-axis section of the parabola.


lens data editor


The Pickup solves will have the following settings:


 Solve Type:   Pickup
 From Surface:  4
 Scale Factor:  -1
 Offset:  0
 From Column:  Current


The pickups should be placed on the following parameters:

  • Parameter 1 on surface 6
  • Parameter 2 on surface 6
  • Parameter 1 on surface 8
  • Parameter 2 on surface 8
  • Parameter 3 on surface 7


Set up the Multi-Configuration Editor

Set up the Multi-Configuration Editor (MCE) to control the XY tilt and decenters of CB surface 4. We can achieve this by using the PRAM operand four times - once for each parameter. Also, insert THIC operand to control the thickness of surface 3, ensuring placement the off-axis segments at the correct Z locations.


multi config editor


With all the tilt and decenter values set to zero, Configuration #1 (above) models the center segment. The thickness on surface 3 is set to 2100 mm since that is the center segment distance from the rear of the dummy glass window. 

Now, add another configuration to model the first off-axis segment.


multi config editor


Configuration #2 models the segments positioned at Y = 270 mm and X = 0. The Z distance from the dummy window to the center of the segments can be calculated by subtracting the sag of the unsegmented mirror at a radial distance 270 mm from the vertex from 2100 mm. The sag can be calculated using the equation for the Standard Surface, by entering Conic of -1, Radius of Curvature of -4000 mm, and radial coordinate of 270 mm. However, it is much easier to let OpticStudio calculate this using the SSAG operand in the Merit Function Editor (MFE).


merit function editor


Note that the configuration (CONF) is 2 for the calculation. The X and Y parameter values for the SSAG operand are zero since the surface already has a decenter of -270mm in Configuration #2. Using the SUMM operand we find the value of 2100mm - 9.1125mm = 2090.8857 mm needs to be entered for the THIC operand of Configuration #2 in the MCE.

Let's take a look at the Lens Data Editor (LDE) for Configuration #2.

The dummy surface 5 is co-located with CB at surface 4. To make sure this is the case, the vertex of the mirror (not the center of the off-axis segment) should be set to 9.1125 mm away in +Z from the Coordinate Break vertex with an additional THIC operand in the Multi-Configuration Editor.


lens data


Since surfaces 1 and 5 are dummy surfaces, we will opt to not draw them in the layout by choosing the following options in the surface property window.


lens data


lens data


Add multiple configurations

Now we will add a third configuration. We are trying to achieve the following geometry:


3d layout


Based on the above geometry, the Y coordinate of the new segment should be 270mm*sin(30°) = 270*0.5 and the X coordinate should be  270mm*cos(30°) = 270*0.866. So, for operands PRAM 4/1 and 4/2, we will pick up the values from the Y decenter parameter of Configuration #2 by multiplying by these factors using Pickup solves.


pick up solves


multi config editor


Repeat this process, adjusting the PRAM 4/1 and PRAM 4/2 values accordingly based on the location of the next configuration. To add the first surrounding layer, we will use 7 configurations. 




Open the 3D layout with the following settings to verify the set-up:


3d layout


3d layout


Next, insert Configuration #8. Because it is the second layer of the array it should be located at Y = (270 mm*2) and X = 0 - twice the distance of Configuration #2, found in the first layer.

The THIC operand on surface 3 for this configuration should be 2063.55 mm. We know this because the SSAG value (the THIC operand value for surface 5) for this configuration came back as -36.45. So we can update our two THIC operands accordingly.




Insert Configuration #9. The THIC operand value is 62.094 mm and the Y coordinate = 270 mm*1.5 and X = 270 mm*0.866.




3d layout


Repeat the process until you reach 19 configurations.




For a mirror with much larger number of segments, a ZPL macro can be written to insert the configurations and set appropriate Pickup solves on each.

Open the 3D layout with the following settings:


3d layout


3d layout


Verify the setup and build your Merit Function

Before we look at the Merit Function, let's verify that the Multi-Configuration Editor is set up properly. Open the Slider under Optimize...Slider and vary parameter 1 of Configuration #2 from 270 mm to 350 mm. When you click the "Animate" button you should see the following animation.




This shows that all segments are picking up the inter-segment distance correctly. Click Exit when done.

Now, let's think about how the Merit Function Editor (MFE) should be constructed to minimize atmospheric aberrations, thus decreasing the size of the geometrical and diffraction point spread functions (PSFs). One possible option is to force the geometrical centroid position to be at the vertex of the image surface for all segments. Since the geometrical and the diffraction spot centroid are co-located, this method would yield the smallest diffraction PSF and geometrical RMS spot size. In addition, we would need to constrain the path length of the Chief Ray for each segment to be as close to one another as possible.

Open the Merit Function Editor and set the CENX and CENY (centroid positions) target at the image surface to zero for all configurations. To target path length, we will use a PLEN operand for the chief ray (Px = Py = 0) and constrain these to be equal for all configurations. For a mirror with much larger number of segments, a ZPL macro can be written to automatically insert the appropriate operands in the MFE. For each configuration define a CENX, CENY, and PLEN operand with arguments as shown below:


merit function editor


Note that we have not placed any weighting on the PLEN operands. We don't intend to target the absolute values of Chief Ray path length, but rather the difference between these values. To target the difference, we will use the EQUA operand to compute the RMS to the average of a sequence of operands in the MFE. However, because the PLEN operands are broken up, we will need to use several OPVA operands to sequentially report the path length for each configuration and use these as the arguments for EQUA.

Define 19 OPVA operands at the end of the current Merit Function and use the PLEN operands as the row arguments; leave the target and weightings at zero on these operands. Define a single EQUA operand that uses this range of OPVA operands as arguments; target should be zero and weighting should be one.


merit function editor


Tolerance setup

We will use the tolerancing feature in OpticStudio to introduce random wavefront error and compensate this error by adjusting the tilts and Z positions of the mirrors in the segmented array. We will specify the TEZI operand on the dummy glass window (surface 3) in the Tolerance Data Editor (TDE) to introduce random sag error. We also need to specify the X and Y tilt of CB surface 4 (operands 4 and 5 in the MCE) and the position of the mirror segments as compensators (variables) for optimization.

Remember that we used a thickness solve to control the locations of the mirrors. If we want to allow the mirror positions to act as compensators, we must remove this solve and define the nominal mirror positions in the MCE. Remove the thickness solve from surface 5 (change from "position" to "fixed"). Insert a line at row 7 in the MCE and define a THIC operand for surface 5. Set the value for each config such that the overall glass plate to mirror thickness is nominally 2100.


multi config editor


Open the TDE (Editors...Tolerence Data) and insert the compensator operands. We will need to define 3 CMCO operands for each config: X Tilt (MCE operand 4), Y Tilt (MCE operand 5), and Z position (MCE operand 7). When defining compensators, you must preferentially group those for each operand in the MCE (i.e. all compensators on operand 4, then all compensators on operand 5, etc.). At the end of the TDE, insert a TEZI operand and specify the following parameter values. We will use Zernike terms 2 to 9 to control the number of peaks and valleys of the sag over the semi-diameter. The RMS error is set at 0.5 um.


tolerance data editor     


tolerance data editor


Run the tolerance (Tools...Tolerancing...Tolerancing) using the following options. Click OK to the warning message.






At the end of tolerancing, OpticStudio will open the tolerance report window. The five Monte Carlo files are saved in the same directory as the current lens file. By default, they are titled "MC_TXXXX.zmx" where "XXXX" stands for the Monte Carlo run number.


text viewer


Analyze the results

Save the current lens file and open any one of the Monte Carlo files. Notice how the surface 3 type in the LDE is now a Zernike Standard Surface. This is due to the TEZI operand in the TDE in the original lens file.


lens data


Operands #4, #5, and #7 in the MCE are set as variable for all configurations, due to the CMCO tolerance operands. The variables have non-zero values because during tolerancing the compensators ware changed to minimize the Merit Function.


multi config editor


Back in the Lens Data Editor of the generated Monte Carlo file, scroll to the right to view the additional data parameters added for the Zernike Standard Sag surface. The Norm Radius is set to 800 mm which corresponds to the surface 3 Semi-Diameter in the LDE.

lens data


To observe the input wavefront, we will take a look at the shape of surface 3. Open the Surface Sag plot under Analyze...Surface...Sag and change the settings to observe surface 3 as False Color. Below is one example of the Surface Sag plot produced by the Monte Carlo files. Because the sag error is randomly generated, each file's plot will probably look different.


surface sag


Additional analysis

Open the Huygens PSF analysis under Analysis...PSF...Huygens PSF, and the Spot Diagram under Analysis...Spot Diagram...Standard Spot Diagram.


huygens psf     huygens psf


spot diagram settings     spot diagram


To see the geometric and diffraction PSF before optimization, set all the tilt values to zero and reset the mirror positions.


multi config editor


Update the analysis windows.


huygens psf


spot diagram


You can see that the tilt of the segments reduces the abberations dramatically.

You can also use the report graphics feature under Analyse...Reports...2x2 Report Graphic...New to plot four analyses in a single window.

The Report Graphics below show the optimized and un-optimized PSFs for each of the 5 Monte Carlo files.


report graphic



Was this article helpful?
4 out of 4 found this helpful



Article is closed for comments.