How to stop Field type setting automatically changing while using python API in interactive mode?
Hello All,
Â
I am using python with the interactive session to run image simulations by varying lens position (to induce defocus and tilt). I have noticed that when the object distance is set to infinity, and when the API connects to the interactive session the field type remains as angles (my default setting). However, when the object distance is set to finite values the field type automatically changes to object height on connection and before the image simulation can run.
Is this a fail safe to prevent errors during image simulation? What would be the significance of such a setting?
Should I change all my image simulations (with finite object distance) to be done with object height type field setting?Â
Thanks for your answers in advance,
Amit
Page 1 / 1
Hi Amit,
Â
I don’t seem to be able to reproduce the issue. Assume the following system before interactive extension connection with Angle field type and a finite OBJECT Thickness:
Then, the system, upon connection, remains the same for me:
As a sanity check, I ran the following command, which is True:
Would you be able to share your code and tell us what version of OpticStudio you are using?
Take care,
Â
David
Hi David,
Â
thank you for your response.
Interactive connection (connected) with field setting definition showing object height as the Type
Â
Unfortunately I am not able to attach my code as a file so I am just pasting the script:
#here starts the standard boiler plate code for interactive mode
import itertools
import matplotlib.pyplot as plt
import clr, os, winreg
from itertools import islice
import shutil
import numpy as np
from icecream import ic
import csv…
…….
…….
#until here is the standard boilerplate code for interactive mode
if __name__ == '__main__':
Â
  # run the design lockdown tool to fix diameters, remove solves
  LockdownTool = TheSystem.Tools.OpenDesignLockdown()
  LockdownTool.UsePrecisionRounding = True
  LockdownTool.DecimalPrecision = 3
  LockdownTool.RunAndWaitForCompletion()
  LockdownTool.Close()
  # ! oe07s01_py]
  surf0 = TheSystem.LDE.GetSurfaceAt(0)
  surf2 = TheSystem.LDE.GetSurfaceAt(2)
  surf13 = TheSystem.LDE.GetSurfaceAt(13)
  #surf16 = TheSystem.LDE.GetSurfaceAt(16)
Â
object_distance = 67500] Â #2000,3000,4000,5000
img_pos = #0.550,0.555,0.560,0.565,0.570,0.575,0.580,0.585,0.590,0.600,0.610,0.615,0.620,0.625,0.630,0.635,0.640,0.645,0.650] # Â Â setting position of imager from last surface of filter
Â
# tilt_x = 0]
# tilt_y = 0]
#Loop to change decenter value and run image simulation and save file by moving to a new location
#here are the lines to run image analysis, move files to specified folder, run MTF over field analysis and defocus analysis and save them as txt files#
for first,second, in tolerance:
  imager = first
  #xtilt = second
  #ytilt = third
  object_dist = second
  #ic(imager)
  #ic(type(imager))
  surf0.GetCellAt(3).DoubleValue = object_dist
  # surf2.GetCellAt(14).FloatValue = xtilt #setting the x tilt value
  # surf2.GetCellAt(15).FloatValue = ytilt #setting the y tilt value
  # surf15.GetCellAt(14).FloatValue = xtilt*-1 #setting the x tilt value
  # surf15.GetCellAt(15).FloatValue = ytilt*-1 #setting the y tilt value
  surf13.GetCellAt(3).DoubleValue = imager #setting the imager position
Â
  #starting a new image analysis
  image_analysis = TheSystem.Analyses.New_ImageSimulation()
  image_analysis.ApplyAndWaitForCompletion()
  image_analysis.Close()
Â
  #file location and name specifications for image simulation files
  src_folder = r"C:\Users\thiii\Documents\Zemax\IMAFiles\\"
  #dst_folder = r"E:\ZEMAX automation\Img_sim\"
  dst_folder_images = r"D:\ZEMAX automation\Img_sim\Images\\"
  dst_folder_mtfheatmap = r"D:\ZEMAX automation\Img_sim\MTFmap"
  dst_folder_defocus = r"D:\ZEMAX automation\Img_sim\Defocusmap"
  file_name = 'Blur2.jpg'
  # Split name and extension
  data = os.path.splitext(file_name)
  only_name = data 0]
  extension = data 1]
  # Adding the new name
  new_base = only_name + str(object_dist) + str(imager) + extension
  # construct full file path
  new_name = os.path.join(dst_folder_images, new_base)
  # move file
  shutil.move(src_folder + file_name, new_name)
Â
  #starting a new geometric MTF heatmap analysis
  mtf_heatmap = TheSystem.Analyses.New_GeometricMtfMap()
  mtf_heatmap.ApplyAndWaitForCompletion()
  mtf_heatmap_results = mtf_heatmap.GetResults()
  heatmapfile = mtf_heatmap_results.GetTextFile(dst_folder_mtfheatmap + str(object_dist) + str(imager) + ".txt" )
  mtf_heatmap.Close()
Â
  #starting a new full field defocus analysis
  field_aberration = TheSystem.Analyses.New_FullFieldAberration ()
  field_aberration.ApplyAndWaitForCompletion()
  field_aberration_results = field_aberration.GetResults()
  defocusfile=field_aberration_results.GetTextFile(dst_folder_defocus +str(object_dist) + str(imager) + ".txt" )
  field_aberration.Close()
Â
Thanks and regards, Amit
Â
Hi Amit,
Â
I think the issue is that you are running a Design Lockdown. Please read this excerpt from the Help File about the Design Lockdown tool:
A number of steps are generally required to take a system designed in sequential mode into a production system. Â In particular all idealized inputs of the system must be converted into real manufacturing inputs. Â The Design Lockdown Tool automates this conversion by:
...
Switching from the use of image-based field point definitions (if they are being used) to object-based definitions. Â The primary wavelength is used for this conversion.Â
For finite conjugate systems, Object Height is used as the field definition.Â
For infinite conjugates, Angle is used as the field definition, unless the system is already using Theodolite Angles.Â
Systems with multiple configurations will not be converted to object-based field definitions; any analysis features or conversion to non-sequential should be manually verified if the sequential system is defined with image-based field definitions.Â