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()
Exemplo n.º 6
0
 def period_call(self):
     exp.next_trial()