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)