Skip to main content

access the surface Sag using Matlab ZOS-API

  • March 2, 2021
  • 6 replies
  • 390 views

Hello,

Im trying to access to the surface sag data from the analysis menu using Matlab ZOS-API.

I was able to generate a new analysis window using 'TheSystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM.SurfaceSag)”

However I don’t know how to select a surface and save the surface sag matrix. Could please provide an example on how to do that?

6 replies

Berta.Bernad
Zemax Staff
Forum|alt.badge.img+2
  • Zemax Staff
  • 112 replies
  • March 2, 2021

Hello Daniel,

Here is a code snippet you could use to to change the surface number (in this case to surface 3) and get the surface sag data:

    Sag = TheSystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM.SurfaceSag);
    Sag_Settings = Sag.GetSettings();   
    Sag_Settings.Surface.SetSurfaceNumber(3);
    Sag.ApplyAndWaitForCompletion();
    SagResults = Sag.GetResults();
    SagResults.GetTextFile(System.String.Concat(TheApplication.SamplesDir, '\API\Matlab\Sag example.txt')); 

Note this will save a text file in samples directory, but it can be  changed as needed.

Best,

Berta

 


  • Author
  • Single Emitter
  • 3 replies
  • March 2, 2021

Hi Berta,thanks or sharing.

Is there a way tp save it as a matrix to my Matlab workspace?


  • Author
  • Single Emitter
  • 3 replies
  • March 2, 2021

Also, how do I extarct the X,Y grid?. so eventually I would like to save a point cloud [X Y Z] data

 

Thanks


Csilla Timar-Fulep
Zemax Staff
Forum|alt.badge.img+2

Hi Daniel,

Thanks for getting back to us!

You may retrieve the matrix results by using the following line:

matrixData = SagResults.DataGrids(1).Values.double;

In general, analysis window data is split into multiple categories within the IAR_ Interface. A matrix of data (as in case of the Sag analysis) will typically be provided as a DataGrid while a 2 column list of data (such as that given by a Cross Section plot) will be provided by a DataSeries.

You may find more information about pulling the data and plotting it directly in MATLAB in this forum thread:

How do I output the image of an analysis in ZOS-API? · MyZemax

Further details about all the different analysis types and their available output formats are given in this knowledgebase article:

Generating a list of output data types for each analysis in the ZOS-API

I hope this helps, but if you have any further questions, please do not hesitate to ask!

Best,

Csilla


  • Author
  • Single Emitter
  • 3 replies
  • March 3, 2021

HI Csilla,

How do I retrieve the the text file info directly to Matlab workspace

an example

Surface Sag Map
Surface 7: S1
Units are Millimeters.
Pupil grid size: 257 by 257
Center point is: 129, 129
Width = 46.97, Decenter x = 0, y = 0 Millimeters.
Point spacing = 0.1834733 Millimeters.


Csilla Timar-Fulep
Zemax Staff
Forum|alt.badge.img+2

Hi Daniel,

These extra information are stored in the MetaData and HeaderData properties. You may read more about how to pull these lines to MATLAB in this forum thread:

How can I pull Peak Irradiance or Total Hits from the Detector Viewer analysis in the API? · MyZemax

 

If you would like to read back the results from the saved text file to MATLAB, then you can use fscan or a similar MATLAB command to pull the data into native variables in MATLAB. You can use the following forum post to get you started:

Extract Data from text File - MATLAB Answers - MATLAB Central (mathworks.com)

 

If your end goal is to use the measured surface sag info to create a new Grid Sag surface, then these knowledgebase articles will show you the steps how to do it:

How to use the Grid Sag surface type · MyZemax

How to write a Grid Sag DAT file programmatically · MyZemax

How to convert any sequential surface to a Grid Sag Surface using the ZOS-API · MyZemax

If you have any further questions, please let us know and we will be happy to help!

Best,

Csilla