Skip to content

Instantly share code, notes, and snippets.

@positron96
Last active May 1, 2024 13:29
Show Gist options
  • Save positron96/42107b3a8d5d1aa4a92514665cc46dbb to your computer and use it in GitHub Desktop.
Save positron96/42107b3a8d5d1aa4a92514665cc46dbb to your computer and use it in GitHub Desktop.
QE PRO software trigger demo
"""
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