Esempio n. 1
0
 def test_ready4delay(self):
     sess_dates = ['2020-09-03', '2020-09-02', '2020-08-31']
     trials, task_protocol = self._get_trials(sess_dates=sess_dates)
     assert (np.all(np.array(task_protocol) == 'biased'))
     status, info = train.get_training_status(
         trials, task_protocol, ephys_sess_dates=['2020-09-03'], n_delay=0)
     assert (status == 'ready4delay')
Esempio n. 2
0
 def test_trained_1b(self):
     trials, task_protocol = self._get_trials(
         sess_dates=['2020-08-27', '2020-08-26', '2020-08-25'])
     assert (np.all(np.array(task_protocol) == 'training'))
     status, info = train.get_training_status(trials, task_protocol, ephys_sess_dates=[],
                                              n_delay=0)
     assert(status == 'trained 1b')
Esempio n. 3
0
 def test_ready4recording(self):
     sess_dates = ['2020-09-01', '2020-08-31', '2020-08-28']
     trials, task_protocol = self._get_trials(sess_dates=sess_dates)
     assert (np.all(np.array(task_protocol) == 'biased'))
     status, info = train.get_training_status(trials, task_protocol,
                                              ephys_sess_dates=sess_dates, n_delay=1)
     assert (status == 'ready4recording')
Esempio n. 4
0
 def test_training_to_bias(self):
     trials, task_protocol = self._get_trials(
         sess_dates=['2020-08-31', '2020-08-28', '2020-08-27'])
     assert (~np.all(np.array(task_protocol) == 'training') and
             np.any(np.array(task_protocol) == 'training'))
     status, info = train.get_training_status(trials, task_protocol, ephys_sess_dates=[],
                                              n_delay=0)
     assert (status == 'trained 1b')
Esempio n. 5
0
 def test_ready4delay(self):
     sess_dates = ['2020-09-03', '2020-09-02', '2020-08-31']
     trials_copy = copy.deepcopy(self.trial_data)
     trials = Bunch(zip(sess_dates, [trials_copy[k] for k in sess_dates]))
     task_protocol = [trials[k].pop('task_protocol') for k in trials.keys()]
     assert (np.all(np.array(task_protocol) == 'biased'))
     status, info = train.get_training_status(
         trials, task_protocol, ephys_sess_dates=['2020-09-03'], n_delay=0)
     assert (status == 'ready4delay')
Esempio n. 6
0
 def test_trained_1b(self):
     sess_dates = ['2020-08-27', '2020-08-26', '2020-08-25']
     trials_copy = copy.deepcopy(self.trial_data)
     trials = Bunch(zip(sess_dates, [trials_copy[k] for k in sess_dates]))
     task_protocol = [trials[k].pop('task_protocol') for k in trials.keys()]
     assert (np.all(np.array(task_protocol) == 'training'))
     status, info = train.get_training_status(trials,
                                              task_protocol,
                                              ephys_sess_dates=[],
                                              n_delay=0)
     assert (status == 'trained 1b')
Esempio n. 7
0
def compute_training_status(df, compute_date, one):
    """
    Compute the training status for compute date based on training from that session and two previous days
    :param df: training dataframe
    :param compute_date: date to compute training on
    :param one: ONE instance
    :return:
    """

    # compute_date = str(one.path2ref(session_path)['date'])
    df_temp = df[df['date'] <= compute_date]
    df_temp = df_temp.drop_duplicates('session_path')
    df_temp.sort_values('date')

    dates = df_temp.date.values

    n_dates = np.min([3, len(dates)]).astype(int)
    compute_dates = dates[(-1 * n_dates):]

    assert compute_dates[-1] == compute_date

    df_temp_group = df_temp.groupby('date')

    trials = {}
    n_delay = 0
    ephys_sessions = []
    protocol = []
    status = []
    for date in compute_dates:

        df_date = df_temp_group.get_group(date)

        # If habituation skip
        if df_date.iloc[-1]['task_protocol'] == 'habituation':
            continue
        trials[df_date.iloc[-1]['date']] = load_combined_trials(
            df_date.session_path.values, one)
        protocol.append(df_date.iloc[-1]['task_protocol'])
        status.append(df_date.iloc[-1]['training_status'])
        if df_date.iloc[-1]['combined_n_delay'] >= 900:  # delay of 15 mins
            n_delay += 1
        if df_date.iloc[-1]['location'] == 'ephys_rig':
            ephys_sessions.append(df_date.iloc[-1]['date'])

    n_status = np.max([-2, -1 * len(status)])
    training_status, _ = training.get_training_status(trials, protocol,
                                                      ephys_sessions, n_delay)
    training_status = pass_through_training_hierachy(training_status,
                                                     status[n_status])
    df.loc[df['date'] == compute_date, 'training_status'] = training_status

    return df
Esempio n. 8
0
    def test_in_training(self):
        sess_dates = ['2020-08-25', '2020-08-24', '2020-08-21']
        trials_copy = copy.deepcopy(self.trial_data)
        trials = Bunch(zip(sess_dates, [trials_copy[k] for k in sess_dates]))
        task_protocol = [trials[k].pop('task_protocol') for k in trials.keys()]
        assert (np.all(np.array(task_protocol) == 'training'))
        status, info = train.get_training_status(trials,
                                                 task_protocol,
                                                 ephys_sess_dates=[],
                                                 n_delay=0)
        assert (status == 'in training')

        # also test the computations in the first test
        np.testing.assert_allclose(info.perf_easy,
                                   [0.91489362, 0.9, 0.90853659])
        np.testing.assert_array_equal(info.n_trials, [617, 532, 719])
        np.testing.assert_allclose(
            info.psych,
            [4.04487042, 21.6293942, 1.91451396e-02, 1.72669957e-01],
            rtol=1e-5)
        assert (np.isclose(info.rt, 0.83655))