Skip to main content

A Python package used to communicate with Zemax OpticStudio through the API

Project description

ZOSPy

PyPI - Version Python Version from PEP 621 TOML Conda Version GitHub Actions Workflow Status Documentation Status JOSS Zenodo

About

Wrapper around the Ansys OpticStudio API that provides a more intuitive way to interact with the ZOS-API through Python using a .NET connection, as described in this Journal of Open Source Software paper. It thereby allows you to do more optics modelling with less coding.

In addition to full access to all the OpticStudio functions through the ZOS-API, ZOSPy provides the following features:

  • Wrapper functions for several OpticStudio analyses in zospy.analyses;
  • Easy access to solvers in zospy.solvers;
  • Easy access to all API constants in zospy.constants;
  • Autocomplete for all ZOS-API endpoints and constants;
  • Solves common problems related to Python.NET 3 and interaction with the ZOS-API.

Installing

ZOSPy is available on PyPi

pip install zospy

And through conda:

conda install conda-forge::zospy

Example

Create and draw a simple optical system consisting of a single lens:

import matplotlib.pyplot as plt
import zospy as zp

zos = zp.ZOS()
oss = zos.connect()

# Create a new, empty system
oss.new()

# Set aperture and wavelength
oss.SystemData.Aperture.ApertureType = zp.constants.SystemData.ZemaxApertureType.FloatByStopSize
oss.SystemData.Wavelengths.GetWavelength(1).Wavelength = 0.543  # in μm

# Set the object at infinity
surface_object = oss.LDE.GetSurfaceAt(0)
surface_object.Thickness = float("inf")

# Add a dummy surface for visualization purposes
input_beam = oss.LDE.InsertNewSurfaceAt(1)
input_beam.Comment = "input beam"
input_beam.Thickness = 10

# Use a stop diameter of 4 mm
surface_stop = oss.LDE.GetSurfaceAt(2)
surface_stop.SemiDiameter = 2

# Add a lens with n = 1.5
lens_front = oss.LDE.InsertNewSurfaceAt(3)
lens_front.Comment = "lens front"
lens_front.Radius = 20
lens_front.Thickness = 1
zp.solvers.material_model(lens_front.MaterialCell, refractive_index=1.5)

lens_back = oss.LDE.InsertNewSurfaceAt(4)
lens_back.Comment = "lens back"
lens_back.Radius = -20
lens_back.Thickness = 19.792  # System is in focus

# Show the system in the 3D viewer
draw_3d = zp.analyses.systemviewers.Viewer3D(surface_line_thickness="Thick", rays_line_thickness="Thick").run(oss)

plt.imshow(draw_3d.Data)
plt.axis("off")
plt.show()

Full example system

Please refer to the documentation for more information on how to use ZOSPy. More elaborate examples can be found in the example gallery.

Warranty and liability

The code is provided as is, without any warranty. It is solely intended for research purposes. No warranty is given and no rights can be derived from it, as is also stated in the MIT license.

Dependencies

ZOSPy officially supports Python 3.10 - 3.13. It may work with older Python versions, but support is not provided for these versions. Furthermore, a working installation of Ansys Zemax OpticStudio is required.

Compatibility

See the documentation for the most up-to-date compatibility information.

Referencing

When publishing results obtained with this package, please cite our paper in the Journal of Open Source Software:

Vught, L. van, Haasjes, C. & Beenakker, J.W.M. (2024). ZOSPy: Optical ray tracing in Python through OpticStudio. Journal of Open Source Software, 9(96), 5756. https://doi.org/10.21105/joss.05756

Contributing

Please read our contribution guidelines prior to opening a Pull Request.

Contact

Feel free to contact us via e-mail at zospy@mreye.nl for any inquiries, or visit mreye.nl to discover our research.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zospy-2.1.5.tar.gz (46.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zospy-2.1.5-py3-none-any.whl (301.9 kB view details)

Uploaded Python 3

File details

Details for the file zospy-2.1.5.tar.gz.

File metadata

  • Download URL: zospy-2.1.5.tar.gz
  • Upload date:
  • Size: 46.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zospy-2.1.5.tar.gz
Algorithm Hash digest
SHA256 81d25028244740dcea0fd307c9928afe04640e536694cf83e0fcd812323e3928
MD5 fdaf9f151b6b4b24a464808fdecb5f1e
BLAKE2b-256 edf3b0e8a5bfe09b804b80faebdbc6680ce6582caac1e53e98f20d202a1979c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for zospy-2.1.5.tar.gz:

Publisher: python-publish.yml on MREYE-LUMC/ZOSPy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zospy-2.1.5-py3-none-any.whl.

File metadata

  • Download URL: zospy-2.1.5-py3-none-any.whl
  • Upload date:
  • Size: 301.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zospy-2.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 95ffdce19ae92b8f0c84776056eba0943db80fd1802371f87f6be293dd0f2dfa
MD5 3b316165e2b74f52b72ed757413be884
BLAKE2b-256 aff9d38f802d496ade0e4722436de057831932a97f478996f769eb145e68aa44

See more details on using hashes here.

Provenance

The following attestation bundles were made for zospy-2.1.5-py3-none-any.whl:

Publisher: python-publish.yml on MREYE-LUMC/ZOSPy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page