Source code for mesoSPIM.src.devices.shutters.NI_Shutter

"""
mesoSPIM Module for controlling a shutter via NI-DAQmx
Author: Fabian Voigt
#TODO
"""

import nidaqmx
from nidaqmx.constants import LineGrouping

[docs] class NI_Shutter: """ Slow shutter, intended more as a gating device than a fast open/close because the NI task is recreated and deleted every time a shutter is actuated. Thus, the shutter has more a "gating" function to protect the sample than fast control of the laser, this is done via the laser intensity anyway. This uses the property of NI-DAQmx-outputs to keep their last digital state or analog voltage for as long the device is not powered down. """ def __init__(self, shutterline): self.shutterline = shutterline # Make sure that the Shutter is closed upon initialization with nidaqmx.Task() as task: task.do_channels.add_do_chan(self.shutterline, line_grouping=LineGrouping.CHAN_PER_LINE) task.write([False], auto_start=True) self.shutterstate = False # Open and close shutter take an optional argument to deal with the on_click method of Jupyter Widgets
[docs] def open(self, *args): with nidaqmx.Task() as task: task.do_channels.add_do_chan(self.shutterline, line_grouping=LineGrouping.CHAN_PER_LINE) task.write([True], auto_start=True) self.shutterstate = True
[docs] def close(self, *args): with nidaqmx.Task() as task: task.do_channels.add_do_chan(self.shutterline, line_grouping=LineGrouping.CHAN_PER_LINE) task.write([False], auto_start=True) self.shutterstate = False
[docs] def state(self, *args): """ Returns "True" if the shutter is open, otherwise "False" """ return self.shutterstate