Skip to content

Targeting real ray based EFL in optimization

Question

I have a situation where my lens has a 2nd order aspheric term on an optical surface. The paraxial PU curvature solves and the paraxial EFL that OSLO calculates (by default) does not include this aspheric term. How can I target a real-ray based EFL for my lens in optimization so that 2nd order aspheric terms are taken into account?

Synopsis

Targeting real ray based EFL in optimization

Symptoms

NOTE: The default EFL calculation in OSLO is paraxial-ray based. This paraxial EFL is shown in the upper right corner of the surface data spreadsheet and is "greyed out" when the paraxial EFL no longer applies (i.e. when a 2nd order aspheric is applied to a lens surface, when there are tilts and decentered surfaces, ...etc.). The paraxial EFL is also calculated in the results of the PXC command and can be targeted using the EFL() operand in an optimization error function. For a more detailed discussion of paraxial-ray versus real-ray based EFL calculations, please refer to the Knowledge Base entry: Paraxial constants - for a system with tilts and decenters.

Solution

Lambda Research will consider integrating a real-ray based EFL calculation more seamlessly into the OSLO user interface in the future. In the interim, we suggest using one of the following workarounds to target a real-ray based EFL in OSLO: Workaround #1 Suitable for EDU, Light, Standard and Premium Create a CCL that incorporates the *PXC real-ray based calculation and tie it to the optimization sequence.
  1. In the CCL you will write, place the real-ray based value of EFL in an element of the OCM variable array. The kernel of the code you want to should be similar to the following: ... SAVE_DISPLAY_PREFS; set_preference outp off; //Turn off printing to text window k = sbrow; //Save the current location of the Spreadsheet Buffer ssbuf_reset k 1; //Reset the Spreadsheet Buffer *pxc; //Perform real-ray based calculation OCM[1] = SSB(1,1);//Place the real-ray EFL value into OCM[1] ssbuf_reset -k 0; //Reset Spreadsheet Buffer back to original position RESTORE_DISPLAY_PREFS; //Restore printing to text window ...
  2. Attach the name of the CCL command that you write to the optimization sequence by specifying the name in the "Optimize>>Optimization Conditions" dialog under "Command for CCL/SCP operands".
  3. Create an operand that contains the OCM variable you set in your CCL (which contains the value of the real-ray based EFL) and forces the OCM variable to EFL you desire (assume EFL=50 for this example): Definition = ocm1-50
  4. Optimize
Workaround #2 Suitable for Standard and Premium ONLY Only works for systems with objects at infinity Use built-in OLSO operands to calculate an EFL based on a real ray:
  1. Create a new ordinary ray at the top of the array in the "Optimize>Error Function Tables>>Ray Data" dialog. This ray should have a very small FY value (i.e. +1e-6). Note that since the ray is at the top of the table, the ray number of this ray is "1".
  2. Add two operands at the top of your OSLO error function. The first operand (o1) defines a real-ray based EFL using the ray you just defined and should have a weight of zero: Definition = -y(1,1,1,1)/ya(1,1) The next operand (o2) will target o1 to be the value of EFL that you want (for this example, assume that the EFl you want is 50): Definition = o1-50 Make the weight of o2 as large as you want (1000 would not be unreasonable).
  3. Optimize