A Python package used to communicate with Zemax OpticStudio through the API
Project description
ZOSPy
About
Wrapper around the Zemax OpticStudio API. Provides a more pythonic and intuitive way to interact with the API through python using a .NET connection. Also takes care of initiating the connection.
When utilizing this package, please reference it using the following DOI:
Basic usage
Initiating connection
The connection as extension to running software OpticStudio is initiated as:
import zospy as zp
zos = zp.ZOS()
zos.wakeup()
zos.connect_as_extension(0)
oss = zos.get_primary_system()
Make sure that the OpticStudio software is setup to be connected to as extension through the API. Alternatively, a standalone OpticStudio application can be launched by changing the last two lines to:
zos.create_new_application()
oss = zos.get_primary_system()
Constants
After initiating the connection, all api constants are available through zp.constants
(e.g. zp.constants.Editors.LDE.SurfaceType
). Note that that are only available after `zos.wakeup() is called as defined under Initiating connection.
Performing analyses
Implementat analyses are are available though the OpticStudioSystem()
(referred to as oss
above). For instance:
oss.fft_through_focus_mtf(sampling='64x64', deltafocus=0.1, oncomplete='Close')
A full description of the available function parameters is provided in each function docstring.
Convenient functions
Some conventiant functions are available through zp.functions
, e.g. to change a surface to a standard stuface:
newsurf = oss.LDE.InsertNewSurfaceAt(0)
zp.functions.lde.surface_change_type(newsurf, 'Standard')
Logging
Some basic logging is implemented through the standard python logging module (but still under development). The following implementation examples assume that import logging
is executed.
- To enable logging output from all ZOSPy and other modules using logging.basicConfig:
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- To enable logging output from all ZOSPy and other modules using a root logger:
fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') sh = logging.StreamHandler() sh.setFormatter(fmt) sh.setLevel(logging.DEBUG) logger = logging.getLogger() logger.addHandler(sh)
- To enable logging output from ONLY ZOSPy
logging.getLogger('zospy').addHandler(logging.StreamHandler()) logging.getLogger('zospy').setLevel(logging.INFO)
Dependencies
Python packages
- Python for .NET (tested with version 2.4)
- pandas
- NumPy
Software
- Zemax OpticStudio (Tested with version 20.3.2)
Contact
Feel free to contact us for any inquiries:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.