Last active
May 1, 2024 13:29
-
-
Save positron96/42107b3a8d5d1aa4a92514665cc46dbb to your computer and use it in GitHub Desktop.
QE PRO software trigger demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
needs seabreeze, pyusb, matplotlib. | |
make sure pyusb can find libusb correctly. | |
""" | |
import matplotlib.pyplot as plt | |
import seabreeze | |
import seabreeze.pyseabreeze as sb | |
seabreeze.use('pyseabreeze') | |
from seabreeze.spectrometers import Spectrometer | |
OBP_ABORT_ACQUISITION = 0x00100000 | |
OBP_START_BUFFERING = 0x00100902 | |
OBP_CLEAR_BUFFER_ALL = 0x00100830 | |
sb.protocol.OBPProtocol.msgs[OBP_ABORT_ACQUISITION] = lambda *_: b'' | |
sb.protocol.OBPProtocol.msgs[OBP_START_BUFFERING] = lambda *_: b'' | |
sb.protocol.OBPProtocol.msgs[OBP_CLEAR_BUFFER_ALL] = lambda *_: b'' | |
def abort_acquisition(dev: Spectrometer): | |
dev._dev._transport.protocol.send(OBP_ABORT_ACQUISITION) | |
def start_acquisition(dev: Spectrometer): | |
dev._dev._transport.protocol.send(OBP_START_BUFFERING) | |
def clear_buffers(dev): | |
dev._dev._transport.protocol.send(OBP_CLEAR_BUFFER_ALL) | |
def stop_capturing(dev: Spectrometer): | |
abort_acquisition(dev) | |
clear_buffers(dev) | |
def capture_once(dev: Spectrometer): | |
""" | |
Start capturing a spectrum, make a capture and stop capturing. | |
""" | |
start_acquisition(dev) | |
ret = dev.intensities() | |
stop_capturing(dev) | |
return ret | |
def main(): | |
"""Sample code that shows spectra using Matplotlib.""" | |
dev = Spectrometer.from_first_available() | |
dev.integration_time_micros(100000) | |
plt.ion() | |
fig = plt.gcf() | |
ax = fig.subplots() | |
ax.set_xlabel('Wavelength') | |
ax.set_ylabel('Intensity') | |
closed = False | |
def on_close(_event): | |
nonlocal closed | |
closed = True | |
fig.canvas.mpl_connect('close_event', on_close) | |
plot, = ax.plot(dev.wavelengths(), [0]*len(dev.wavelengths())) | |
while not closed: | |
ydata = capture_once(dev) | |
plot.set_ydata(ydata) | |
ax.relim() | |
plt.show(block=False) | |
plt.pause(0.1) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment