Skip to content
/ poke Public

Poke (pronounced poh-keh) is a Polarization Ray Tracing and Gaussian Beamlet module for Python

License

Notifications You must be signed in to change notification settings

Jashcraf/poke

Repository files navigation

Poke: Integrating Ray and Diffraction Models

image

DOI Documentation Status codecov Code style: black

Poke (pronounced /poʊˈkeɪ/ or po-kay) is a ray-based physical optics module for Python. It's named this because the name encodes the k-vector (which we are raytracing!) and the E-vector (which we are propagating!). Also I came up with the name before lunchtime, when I was craving fish from Suisan.

Poke is a package to interface with industry-standard raytracing engines to do physical optics calculations based on ray data. The goal is to open-source the ray-based propagation physics and only rely on the raytracers (Zemax OpticStudio, CODE V, etc.) to do raytracing. The development was inspired by the need to add more propagation physics modules for Coronagraphs to expand the design space, but Poke has been used to characterize existing observatories as well.

Presently Poke supports:

  • Polarization Ray Tracing
  • Gaussian Beamlet Decomposition
  • Zemax OpticStudio Optical Systems
  • CODE V Optical Systems
  • Multilayer Thin Film Design

Disclaimer: Poke is currently in very early stages of development. Documentation, unit tests, and more features are being developed and added daily. If you'd like to contribute to Poke, please open an issue to start a discussion.

If you are interested in contributing / using Poke, feel free to open an issue or contact me at [email protected].

Installation

Poke is actively developing so we reccomend installation by cloning the repository and running setup.py

git clone https://github.com/Jashcraf/poke/
cd poke
pip install .

Raytracer Specifics

If you wish to use Poke with a commercial ray tracer, we require optional additional dependencies to run the raytrace via the API

  • Zemax OpticStudio: we require the zosapi package that is up on PyPi by Michael Humphreys
  • SYNOPSYS CODE V: be sure that you have pywin32 installed

Papers Published using Poke

  • [1] Anche, Ashcraft, and Haffert et al. "Polarization aberrations in next-generation Giant Segmented MirrorTelescopes (GSMTs) I.Effect on the coronagraphic performance," submitted to Astronomy & Astrophysics (Accepted Jan 2022).
  • [2] Ashcraft, Douglas, Kim, and Riggs. "Hybrid Propagation Physics for The Design and Modeling of Astronomical Observatories: a Coronagraphic Example," submitted to Journal of Astronomical Telescopes, Instruments, and Systems (Accepted October 23 2023)
  • [3] Ashcraft and Douglas et al. "A Generalized Expression for Accelerating Beamlet Decomposition Simulations," submitted to Optics Express (Accepted April 15 2024)

Contributors:

  • Jaren Ashcraft
  • Quinn Jarecki
  • Trent Brendel
  • Brandon Dube
  • Emory Jenkins
  • Kenji Mulhall

Acknowledgements:

Thanks to Dr. Max Millar-Blanchaer for inspiring the Raybundle class, and Dr. Ramya Anchce for overall helpful discussions on polarization ray tracing. Thanks to Trent Brendel, Kevin Z. Derby, and Henry Quach for helpful discussions and testing during the initial development phase. Thanks to Brandon Dube for the sage Python advice. Thanks to Kian Milani for helping test poke on supercomputer GPUs. This work was supported by a NASA Space Technology Graduate Research Opportunity.

References

  • [1] Polarized Light and Optical Systems, by Chipman, Lam, and Young (2019)
  • [2] Thin-Film Optical Filters, by Macleod (1969)
  • [3] Development of a new method for the wave optical propagation of ultrashort pulses through linear optical systems, by Worku (2020)

Other Acknowledgements

  • Suisan fish market

About

Poke (pronounced poh-keh) is a Polarization Ray Tracing and Gaussian Beamlet module for Python

Resources

License

Stars

Watchers

Forks

Packages

No packages published