Source code for mesoSPIM.src.devices.lasers.mesoSPIM_LaserEnabler

"""
mesoSPIM Module for enabling single laser lines via NI-DAQmx

Authors: Fabian Voigt, Nikita Vladimirov
"""

import nidaqmx
from nidaqmx.constants import LineGrouping

[docs] class mesoSPIM_LaserEnabler: ''' Class for interacting with the laser enable DO lines via NI-DAQmx 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. This means that the NI tasks are closed after calls to "enable", "disable", etc which in turn means that this class is not intended for fast switching in complicated waveforms. Needs a dictionary which combines laser wavelengths and device outputs in the form: {'488 nm': 'PXI1Slot4/port0/line2', '515 nm': 'PXI1Slot4/port0/line3'} ''' def __init__(self, laserdict): self.laserenablestate = 'None' self.laserdict = laserdict # get a value in the laserdict to get the general device string self.laserenable_device = '' self.laser_keys_sorted = sorted(laserdict.keys()) for key in self.laser_keys_sorted: self.laserenable_device += laserdict[key] + ',' self.disable_all() # Make sure that all the Lasers are off upon initialization: def _check_if_laser_in_laserdict(self, laser): '''Checks if the laser designation (string) given as argument exists in the laserdict''' if laser in self.laserdict: return True else: raise ValueError('Laser not in the configuration')
[docs] def enable(self, laser): '''Enables a single laser line. All other lines are switched off.''' if self._check_if_laser_in_laserdict(laser): command_list = [False]*len(self.laserdict) ind_line_on = list(self.laser_keys_sorted).index(laser) command_list[ind_line_on] = True with nidaqmx.Task() as task: task.do_channels.add_do_chan(self.laserenable_device, line_grouping=LineGrouping.CHAN_PER_LINE) task.write(command_list, auto_start=True) self.laserenablestate = laser else: pass
[docs] def disable_all(self): '''Disables all laser lines.''' with nidaqmx.Task() as task: task.do_channels.add_do_chan(self.laserenable_device, line_grouping=LineGrouping.CHAN_PER_LINE) task.write([False]*len(self.laserdict), auto_start=True) self.laserenablestate = 'off'
[docs] def state(self): """ Returns laserline if a laser is on, otherwise "False" """ return self.laserenablestate