Source code for pyoperant.local_vogel

from pyoperant import hwio, components, panels, utils
from pyoperant.interfaces import comedi_, pyaudio_

_VOGEL_MAP = {
    1: ('/dev/comedi0', 2, 0, 2, 8), # box_id:(subdevice,in_dev,in_chan,out_dev,out_chan)
    2: ('/dev/comedi0', 2, 4, 2, 16),
    3: ('/dev/comedi0', 2, 24, 2, 32),
    4: ('/dev/comedi0', 2, 28, 2, 40),
    5: ('/dev/comedi0', 2, 48, 2, 56),
    6: ('/dev/comedi0', 2, 52, 2, 64),
    7: ('/dev/comedi0', 2, 72, 2, 80),
    8: ('/dev/comedi0', 2, 76, 2, 88),
    }

[docs]class VogelPanel(panels.BasePanel): """class for vogel boxes """ def __init__(self,id=None, *args, **kwargs): super(VogelPanel, self).__init__(*args, **kwargs) self.id = id # define interfaces self.interfaces['comedi'] = comedi_.ComediInterface(device_name=_VOGEL_MAP[self.id][0]) self.interfaces['pyaudio'] = pyaudio_.PyAudioInterface(device_name='dac%i'%self.id) # define inputs for in_chan in [ii+_VOGEL_MAP[self.id][2] for ii in range(4)]: self.inputs.append(hwio.BooleanInput(interface=self.interfaces['comedi'], params = {'subdevice': _VOGEL_MAP[self.id][1], 'channel': in_chan }, ) ) for out_chan in [ii+_VOGEL_MAP[self.id][4] for ii in range(8)]: self.outputs.append(hwio.BooleanOutput(interface=self.interfaces['comedi'], params = {'subdevice': _VOGEL_MAP[self.id][3], 'channel': out_chan }, ) ) self.speaker = hwio.AudioOutput(interface=self.interfaces['pyaudio']) # assemble inputs into components self.left = components.PeckPort(IR=self.inputs[0],LED=self.outputs[0]) self.center = components.PeckPort(IR=self.inputs[1],LED=self.outputs[1]) self.right = components.PeckPort(IR=self.inputs[2],LED=self.outputs[2]) self.house_light = components.HouseLight(light=self.outputs[3]) self.hopper = components.Hopper(IR=self.inputs[3],solenoid=self.outputs[4]) # define reward & punishment methods self.reward = self.hopper.reward self.punish = self.house_light.punish
[docs] def reset(self): for output in self.outputs: output.write(False) self.house_light.on() self.hopper.down()
[docs] def test(self): print ('reset') self.reset() dur = 2.0 for output in self.outputs: print ('output %s on' % output) output.write(True) utils.wait(dur) print ('output %s off' % output) output.write(False) print ('reset') self.reset() print ('feed') self.reward(value=dur) print ('timeout') self.punish(value=dur) print ('queue file') self.speaker.queue('/usr/local/stimuli/A1.wav') print ('play file') self.speaker.play() return True
[docs]class Vogel1(VogelPanel): """Vogel1 panel""" def __init__(self): super(Vogel1, self).__init__(id=1)
[docs]class Vogel2(VogelPanel): """Vogel2 panel""" def __init__(self): super(Vogel2, self).__init__(id=2)
[docs]class Vogel3(VogelPanel): """Vogel3 panel""" def __init__(self): super(Vogel3, self).__init__(id=3)
[docs]class Vogel4(VogelPanel): """Vogel4 panel""" def __init__(self): super(Vogel4, self).__init__(id=4)
[docs]class Vogel6(VogelPanel): """Vogel6 panel""" def __init__(self): super(Vogel6, self).__init__(id=6)
[docs]class Vogel7(VogelPanel): """Vogel7 panel""" def __init__(self): super(Vogel7, self).__init__(id=7)
[docs]class Vogel8(VogelPanel): """Vogel8 panel""" def __init__(self): super(Vogel8, self).__init__(id=8)
# in the end, 'PANELS' should contain each operant panel available for use PANELS = {"1": Vogel1, "2": Vogel2, "3": Vogel3, "4": Vogel4, "6": Vogel6, "7": Vogel7, "8": Vogel8, } BEHAVIORS = ['pyoperant.behavior', 'glab_behaviors', ] DATA_PATH = '/home/bird/opdat/' # SMTP_CONFIG DEFAULT_EMAIL = 'justin.kiggins@gmail.com' SMTP_CONFIG = {'mailhost': 'localhost', 'toaddrs': [DEFAULT_EMAIL], 'fromaddr': 'Vogel <bird@vogel.ucsd.edu>', 'subject': '[pyoperant notice] on vogel', 'credentials': None, 'secure': None, }