Discord Server: https://discord.gg/y8aqDe8RxN
- Laser - Extended Cavity Diode Laser (with optical isolator)
- Doublepass AOM Baseplate
- Singlepass AOM Baseplate
- Saturation Absorption Spectroscopy Baseplate
- Periscope
- CoverBox

PyOpticL is a Python library for optics layout which uses beam-path simulation and dynamic beam-path routing for quick and easy optical layout by placing optical elements along the beam path without a priori specification, enabling dynamic layouts with automatic routing and connectivity. The beam paths are automatically calculated as components are placed in the layout. Component placement can be defined "along beam" to remove the need for hard-coded coordinates. Beam calculations include reflection, transmission, refraction, and diffraction (limited). This library enables a new paradigm of optical engineering using modular sub-systems of modular baseplates with commerical optical elements (see abstraction layers below).
See our recent preprint for more details about our results using these laser sources and baseplates in our lab:
arXiv:2501.14957 - Qubit operations using a modular optical system engineered with PyOpticL: a code-to-CAD optical layout tool
-
Install FreeCAD, Python, and Git
-
Add PyOpticL as an custom addon repository in FreeCAD
Under Edit>Preferences>Addons>Custom Repositories, enter the following information:
Repository URL: https://github.com/UMassIonTrappers/PyOpticL.git
Branch: main -
Install the PyOpticL library In the Addon Manager (Tools>Addon Manager), search for "PyOpticL" and click install.
-
Check everything is setup correctly
You should now be able to re-launch FreeCAD and see the "PyOpticL" workbench in the dropdown -
Check out the wiki for guides on how to get started and examples
-
Read the docs library documentation
from PyOpticL import layout, optomech
from ECDL import ECDL
from Rb_SAS_V2 import Rb_SAS
from modular_doublepass import doublepass
from modular_singlepass import singlepass
def laser_cooling_subsystem():
layout.table_grid(dx=36, dy=22)
ECDL(x=27, y=20, angle=180)
Rb_SAS(x=20, y=1, angle=90)
singlepass(x=14, y=12, angle=90)
doublepass(x=1, y=21, angle=270)
Rb_SAS(0, 16, optic_type=one_inch_mounted)
Rb_SAS(0, 8, optic_type=half_inch_mounted)
Rb_SAS(0, 3, optic_type=half_inch_unmounted)
Rb_SAS(0, 0, optic_type=mini_optics)
Same code compiled with different optical elements at different scales:
from PyOpticL import layout, optomech
from SPAM_subsystem import subsystem_spam
from Laser_cooling_subsystem import laser_cooling_subsystem
from Raman_subsystem import Raman_subsystem
from Photoionization_subsystem import PI_subsystem_ECDL, PI_subsystem_commercial
layout.table_grid(dx=52, dy=92)
laser_cooling_subsystem(x=-1, y=0, thumbscrews=True)
Raman_subsystem(x=1 , y=26.5, thumbscrews=True)
PI_subsystem_commercial(x=29 , y=8, angle = 0, thumbscrews=True) #405 for sr88+
PI_subsystem_ECDL(x=38 , y=8, thumbscrews=True) # 461 for sr88+
subsystem_spam(x=32 , y=50, thumbscrews=True)
