Example #1
0
    def __init__(self, session_params, mp285=None, actuator=None):
        self.params = self.DEFAULT_PARAMS

        # incorporate kwargs
        self.params.update(session_params)
        self.__dict__.update(self.params)
        self.verify_params()

        # sync
        self.sync_flag = multiprocessing.Value('b', False)
        self.sync_to_save = multiprocessing.Queue()

        # saver
        self.saver = Saver(self.subj,
                           self.name,
                           self,
                           sync_flag=self.sync_flag)

        # hardware
        self.cam = PSEye(sync_flag=self.sync_flag, **self.cam_params)
        self.ar = AnalogReader(saver_obj_buffer=self.saver.buf,
                               sync_flag=self.sync_flag,
                               **self.ar_params)
        self.stimulator = Valve(saver=self.saver,
                                name='stimulator',
                                **self.stimulator_params)
        self.spout = Valve(saver=self.saver, name='spout', **self.spout_params)
        self.light = Light(saver=self.saver, **self.light_params)
        self.light.set(0)
        self.opto = Opto(saver=self.saver, **self.opto_params)
        self.speaker = Speaker(saver=self.saver)

        # mp285, actuator
        self.mp285 = mp285
        self.actuator = actuator
        self.actuator.saver = self.saver
        self.mp285_go(self.position_stim)
        if self.retract_ports:
            self.actuator.retract()
            #self.mp285_go(self.position_stim)
        else:
            self.actuator.extend()
            #self.mp285_go(self.position_lick)

        # communication
        self.sic = SICommunicator(self.imaging)

        # trials
        self.th = TrialHandler(saver=self.saver,
                               condition=self.condition,
                               **self.trial_params)

        # runtime variables
        self.stdinerr = None
        self.notes = {}
        self.session_on = 0
        self.session_complete = False
        self.session_kill = False
        self.session_runtime = -1
        self.trial_runtime = -1
        self.rewards_given = 0
        self.paused = 0
        self.holding = False
        self.current_phase = PHASE_INTRO
        self.live_figure = None

        # sync
        self.sync_flag.value = True  #trigger all processes to get time
        self.sync_val = now()  #get this process's time
        procs = dict(saver=self.saver, cam=self.cam.pseye, ar=self.ar)
        sync_vals = {o: procs[o].sync_val.value
                     for o in procs}  #collect all process times
        sync_vals['session'] = self.sync_val
        self.sync_to_save.put(sync_vals)