Skip to main content

ALL:                                         Feb 27, 2024

 

I am trying to find a good way to achromatize a lens group, in a larger more complex system, such as within a zoom lens assy.

The AXCL and LACL seem to look at the whole system, and all surfaces, 1-20.    If i am trying to provide optimization target/control (to achromatize) , of say surfaces 1-6 for a 3 lens group, what is the best way to go about this ?    I can see the seidel coefficients in the table-report.   How can i access/use them as inputs to constraints for color correction.  ??

 

Thank you in advance, for any ideas. 

@James

 

I’m probably not understanding what you are trying to do, but if you only put variables on Surfaces 1-6, then only this lens group will be optimized and the rest of the surfaces will remain untouched. The AXCL and LACL will indeed consider the whole system, but if you only have variables on Surfaces 1-6 then only this lens group will be adjusted (in the context of the whole system).

I’m also not sure what table-report you are referring to. If you are talking about Analyze..Aberrations..Seidel Coefficients and you want to extract the CLA (CL) and CTR (CT) columns at a specific surfaces, then I also didn’t find an operand that would do that straight away. Perhaps it is possible to calculate those values based on other operands, but my knowledge of aberration theory is the limiting factor here. An alternative is to make a User-Defined operand, which I did for the sake of the example.

If you open the sample file /Documents/Zemax/Samples/Sequential/Zoom systems/Zoom lens.zos and run the Seidel Coefficients you should get for wavelength 1 and configuration 1:

My user-operand (UDOC11) returns CLA if Data is zero and CTR if Data is one. Hx is the wave number, and if left at zero it is using wavelength 1. Hy is the surface number from 1 to the number of surfaces, if zero it will return the sum of all surfaces (TOT). In the screenshot below, you see that I’m showing the TOT as well as surfaces 5 and 8 for wavelength 1:

You can find my code on my GitHub at this link:

https://github.com/Omnistic/Seidel_UDOC_OpticStudio-

I have also uploaded a ZAR to the repository. If you download the ZAR, it will show you my modified Zoom lens.zos and also install the UDOC11.exe. Note that there’s very little error trapping so you have to set it up carefully, and I didn’t test anything else other than Zoom lens.zos :)

Also, if you want to read more about user operands:

https://support.zemax.com/hc/en-us/articles/1500005490081-How-to-create-a-User-Operand-using-ZOS-API

I hope this helps and take care,

 

David


Hi David: 

-- First off thank you for all your time and effort to put together such a detailed example.   It will take me awhile to digest it, as i am not very familiar ZOS-API. 

 But from what you’ve outlined i think that if one wants to say drive axial color to zero across a limited range of surfaces (1-6), all I need to do is set the data field of UDOC11 to zero,  and sum across the range of surfaces (1-6) to define a new operator,  then use that constraint, with a target value of zero..  (I THINK ??)   I will test it out.   Once again,  thanks for your explanation and support on this. 

 

-- James..   


Maybe it will be simpler just to make a configuration where you ignore some surface. But you should create a realystic rays to avoid errors.

 

In my expirience I’ve tried to do color correction for several groups in a zoom. But later go away from this option to optimization of full system at once.


@James

 

As I mentioned, I’m not familiar with what it means to “achromatize” a single lens group in an assembly, so I’m not exactly sure what you want to get. I’ve just made the UDOC because I thought it would help you do what you want. You can even modify my code to have parameters for a start and stop surface, and have the code return the sum directly (I can help you with that if needed). Those UDOCs add quite a bit of overhead to the computation of the Merit Function, you kinda want to use as few as possible. If you give me more explanation about the “achromatization” process and what it means, perhaps I can come up with a better idea.

Take care,

 

David


If I correct the idea is: to have good chromatic correction in each group and expect that the total performance will be also good. Maybe to use this design as a starting point for additional investigations.


@Andrey.Pravdivtsev 

 

Thanks for clarifying. So if I understand correctly, you want to optimize each group separately, and this should lead to a comparatively good overall design, is that right? What concerns me is: how do you know that the best lens assembly is a combination of all the best lens groups individually? Why can’t it be that the best overall zoom lens has one suboptimal lens group, for example? In other words, I don’t get why the lens group would be independant from one another. Does that make sense?

Take care,

 

David


@David.Nguyen 

The questions are reasonable and I agree with it.

I just have such experience about 20 years ago when I tried to use some synthesis theory to design zoom lenses. The results were not so good so I go away to another approach. 


If EFLY has a wavelength input, then you can use it to get the focal length of a range of surfaces at a given wavelength.  Use a few of those to build a constraint on the axial color of different lens groups.  


@PhotonHerder

 

What is the advantage or the reason behind constraining the lens group individually as opposed to the whole assembly?

Thanks for your help and take care,

 

David


A couple reasons. First, you don’t want huge CA in one group that has to be canceled by another group. That will lead to tight tolerances on element power and Abbe.  Kind of like how you don’t want an element with large positive power that’s cancelled by one with large negative power. 
 

Second, I think it will optimize better.  The Zemax optimizer, especially the DLS, is weak and needs all the help it can get. 
 

Yes it will be tricky to figure out how low the CA in each group needs to be, without over constraining the overall design.  It will take some thought and maybe trial and error.  


Several good references discuss the need to achromatize the individual groups in a zoom lens.

From Field Guide to Lens Design, by Bentley & Olson, p. 48:

 

From Introduction to Lens Design, by Sasian, p. 205:

 

From Handbook of Optical Systems Vol. 4, by Gross, p. 505:


Jeff, yes, and the optimizer won’t find those solutions on its own, so it needs constraints to pull it in the right direction.  


Thank you so much @PhotonHerder and @Jeff.Wilde. This is exactly what I wanted to know and you gave me ample resources to further research on that topic!

Take care,

 

David


Several good references discuss the need to achromatize the individual groups in a zoom lens.

From Field Guide to Lens Design, by Bentley & Olson, p. 48:

 

From Introduction to Lens Design, by Sasian, p. 205:

 

From Handbook of Optical Systems Vol. 4, by Gross, p. 505:

 

It is interesting that the Seidel coefficients are calculated for the quite specific rays so if rays in your groups doesn’t satisfy these ray parameters these calculations looks quite useless.  Also the raypath will be different for different zoom positions.


Small update, I had not originally compiled the operand as a Windows Application. As a result you would see the command windows between computations of the Merit function. I believe it slows the whole process down quite a bit. This has been modified in the repository, so please re-download it if you need to.

Take care,

 

David


HI ALL: 

-- I am still digesting all the great responses we got from this question that sparked a dialogue.   A big thank you to @Jeff.Wilde  and @PhotonHerder ,  who answered @David.Nguyen  more clearly than i probably could have.   So, yes i am trying to achromatize a  lens group/section, within a larger optical system,  as our veterans laid out.   
 

--  @Andrey.Pravdivtsev ,   I also liked your idea of  adding more zoom positions and “ignoring” surfaces outside the area of concern.   I am aware that ignore in available in the Non-sequential mode.   Is there also a way to achieve that in Sequential mode, when optimizing ? (EDIT-1:  I may have found MCE operands IGNR and IGNM for this ) 

(EDIT-2)

--  Another alternative, to evaluate a sub-group, while still using the the AXCL, LACL operands, is to create extra configurations, and using the GLSS (MCE-operand) and switch from the actual glasses in-use to air.  Thus, in-activating the surfaces not being evaluated.    

Again,  thanks to all who responded to my inquiry


Reply