Skip to main content

The summary is in the text file. The way to save text files from the API is to use the “Output to File” entry that lives in the Classic tab of the Tolerancing tool in the OS GUI. This will save the tolerancing output by the name specified in the same folder that the system is in (be sure to include .TXT to the end). The corresponding API code for this is below:

tol.OutputFile = "OutputName.TXT"

To store the MonteCarlo and sensitivity data, we need to use the tolerance data viewer to open the saved ztd file and then store the dataset.

In order to save the .ZTD files from the ZOS-API, you will need to use the SaveTolDataFile property, and you may set the filename via TolDataFile under ZOSAPI.Tools.Tolerancing.ITolerancing Interface Reference:

tol.SaveTolDataFile = True

tol.TolDataFile = "myFile.ztd"

Then, once the tolerancing is done, from the Tolerance Data Viewer, you may read the created .ZTD files, by defining the file name and then running the tool. The corresponding python code is as follows:

TolReader=TheSystem.Tools.OpenToleranceDataViewer()

TolReader.FileName= "\Documents\Zemax\Samples\Non-sequential\Miscellaneous\Digital_projector_flys_eye_homogenizer.ZTD"

TolReader.RunAndWaitForCompletion()

To pull the Monte Carlo data for example, you may use the following lines:

mcData = TolReader.MonteCarloData()

mcDataVals = mcData.Values

mcDataTable = mcDataVals.Data

mcDataTable_reshape = reshape(mcDataTable, mcDataVals.Cols, mcDataVals.Rows)

(You can read the first row by typing: mcDataTable_reshapeh0])

 

Be careful:

Regarding the file name definitions for the saved .TXT and .ZTD files, the files are only saved if a valid file name is provided. The filename should include the specified name together with the file extension, however, it should not include the path. The path is always the same as the current lens file. So you should only provide a file name without a path, both for the TolDataFile and for the OutputFile, such as below:

tol.TolDataFile = "myFile.ztd"

tol.OutputFile = "OutputName.TXT"

The Sensitivity Data contains different types data structures than the Monte Carlo Data.

If we take a look at the Monte Carlo data structure under the ZOSAPI.Tools.Tolerancing.IMonteCarloData Interface Reference, we can see that there is a Values property, which returns the results in a matrix format. However, for the Sensitivity Data, there is no Values property in the OSAPI.Tools.Tolerancing.ISensitivityData Interface Reference, so we cannot call it.

The sample code to read sensitivity data:

TolReader = TheSystem.Tools.OpenToleranceDataViewer()

# Choose the file we are viewing in the TDV

TolReader.FileName = 'C:\Users\...\Simple_singlet_Tol.ZTD'

TolReader.RunAndWaitForCompletion()

# Sensitivity data

sdata = TolReader.SensitivityData

# Access criterion, compensator, operand data

criterion = sdata.GetCriterion(0)

criterionName = str(criterion.Name)

nomVal = criterion.NominalValue

# Compensator data – access the first compensator in the list

compData = sdata.GetCompensator(0)

compType = str(compData.OperandType)

compMin = compData.Minimum

compMax = compData.Maximum

compMean = compData.Mean

# Operand data – access the first operand in the list

sdOp = sdata.GetOperand(0)

sdOpType = str(sdOp.OperandType)

sdOpMin = sdOp.Minimum

sdOpMax = sdOp.Maximum

sdOpComment = str(sdOp.Comment)

sdEffect = sdOp.GetEffectOnCriterion(0)

sdEffectMax = sdEffect.EstimatedChangeMaximum

sdEffectMin = sdEffect.EstimatedChangeMinimum

# Grab some worst offender data as it applies to the first (and only) criterion

numCriteria = sdOp.NumberOfCriteria

effect = sdOp.GetEffectOnCriterion(0)

estChangeMin = effect.EstimatedChangeMinimum

estChangeMax = effect.EstimatedChangeMaximum

# Access the summary

summary = str(tdv.Summary)

 

Bonus:

If you want to load the tolerance script via ZOSAPI:

tool= TheSystem.Tools.OpenTolerancing

tool.CriterionScript=0

By using the GetCriterionScriptAt() member function, you may double-check the name of the file, however, it will not set the script.

tool.GetCriterionScriptAt(0)

Be the first to reply!

Reply