Spaces:
Runtime error
Runtime error
""" | |
DeepLabCut Toolbox (deeplabcut.org) | |
© A. & M. Mathis Labs | |
Licensed under GNU Lesser General Public License v3.0 | |
""" | |
from dlclive.processor.processor import Processor | |
import serial | |
import struct | |
import pickle | |
import time | |
class TeensyLaser(Processor): | |
def __init__( | |
self, com, baudrate=115200, pulse_freq=50, pulse_width=5, max_stim_dur=0 | |
): | |
super().__init__() | |
self.ser = serial.Serial(com, baudrate) | |
self.pulse_freq = pulse_freq | |
self.pulse_width = pulse_width | |
self.max_stim_dur = ( | |
max_stim_dur if (max_stim_dur >= 0) and (max_stim_dur < 65356) else 0 | |
) | |
self.stim_on = False | |
self.stim_on_time = [] | |
self.stim_off_time = [] | |
def close_serial(self): | |
self.ser.close() | |
def turn_stim_on(self): | |
# command to activate PWM signal to laser is the letter 'O' followed by three 16 bit integers -- pulse frequency, pulse width, and max stim duration | |
if not self.stim_on: | |
self.ser.write( | |
b"O" | |
+ struct.pack( | |
"HHH", self.pulse_freq, self.pulse_width, self.max_stim_dur | |
) | |
) | |
self.stim_on = True | |
self.stim_on_time.append(time.time()) | |
def turn_stim_off(self): | |
# command to turn off PWM signal to laser is the letter 'X' | |
if self.stim_on: | |
self.ser.write(b"X") | |
self.stim_on = False | |
self.stim_off_time.append(time.time()) | |
def process(self, pose, **kwargs): | |
# define criteria to stimulate (e.g. if first point is in a corner of the video) | |
box = [[0, 100], [0, 100]] | |
if ( | |
(pose[0][0] > box[0][0]) | |
and (pose[0][0] < box[0][1]) | |
and (pose[0][1] > box[1][0]) | |
and (pose[0][1] < box[1][1]) | |
): | |
self.turn_stim_on() | |
else: | |
self.turn_stim_off() | |
return pose | |
def save(self, file=None): | |
### save stim on and stim off times | |
save_code = 0 | |
if file: | |
try: | |
pickle.dump( | |
{"stim_on": self.stim_on_time, "stim_off": self.stim_off_time}, | |
open(file, "wb"), | |
) | |
save_code = 1 | |
except Exception: | |
save_code = -1 | |
return save_code | |