def route_session_next_trial(): try: experiment.next_trial() return flask.Response("ok") except Exception as e: log.exception("Exception while moving to next trial:") flask.abort(500, e)
def end_logic_trial(self): params = exp.get_merged_params() self.stim_cancel() # canceling stimulus, if active. if params["stimulus"] == "monitor": monitor.chnage_color("black") timestap = time.time() # logging trial data if self.in_trial and not self.got_detection: self.log.info("Logic trial ended, failure") exp.event_logger.log( "learn_exp/logical_trial_ended", { "type": self.ex_type, "success": False }, ) elif self.in_trial and self.got_detection: self.log.info("Logic trial ended, success") exp.event_logger.log("learn_exp/logical_trial_ended", { "type": self.ex_type, "success": True }) else: self.log.info("Logic trial ended") # continuous trial: schedule the next. self.in_trial = False self.got_detection = False if params.get("continuous", False): if params["record_exp"] and not params["record_all"]: video_system.stop_record() self.cancel_trials() self.cancel_trials = schedule.repeat(self.period_call, interval, self.cur_trial - 1) elif self.consecutive: if params["record_exp"] and not params["record_all"]: schedule.once(lambda: video_system.stop_record(), params.get("record_overhead", 0)) if self.cur_trial > 0: exp.next_trial() else: if params["record_exp"] and not params["record_all"]: schedule.once(lambda: video_system.stop_record(), params.get("record_overhead", 0))
def dispense_reward(self): if random.random() <= exp.get_params()["reward"]["dispense_prob"]: self.log.info("Trial ended. Dispensing reward.") else: self.log.info( "Trial ended. NOT dispensing reward (stochastic reward).") exp.next_trial() return rewards_count = session_state["rewards_count"] + 1 session_state["reward_scheduled"] = False feeders = exp.get_params()["reward"]["feeders"] max_reward = sum(feeders.values()) rewards_sum = 0 for interface, rewards in feeders.items(): rewards_sum += rewards if rewards_count <= rewards_sum: exp.event_logger.log( "dispensing_reward", { "num": rewards_count, "stochastic_delay": self.using_stochastic_delay, }, ) self.log.info( f"Dispensing reward #{rewards_count} from feeder {interface} (stochastic_delay={self.using_stochastic_delay})" ) arena.run_command("dispense", interface, None, False) break if rewards_count >= max_reward: session_state["out_of_rewards"] = True self.log.info("Out of rewards!") session_state["rewards_count"] = rewards_count exp.next_trial()
def timer_fn(self): exp.next_trial()
def next_trial(log): log.info("Starting the next trial") exp.next_trial()
def period_call(self): exp.next_trial()