Exemplo n.º 1
0
def blocks_per_trial(experiment, neutral_blocks = False, clf = True, fig_no = 1, last_n = 6):
    days = set([s.day for s in experiment.get_sessions('all', 'all')])  
    residual_trials = np.zeros(len(experiment.subject_IDs)) # Number of trials in last (uncompleted) block of session.
    mean_bpt, sd_bpt = ([],[]) # Lists to hold mean and standard deviation of blocks per trial for each day.
    for day in days:
        day_blocks_per_trial = []
        sessions = experiment.get_sessions('all', day)
        for session in sessions:
            assert hasattr(session,'blocks'), 'Session does not have block info.'
            ax = experiment.subject_IDs.index(session.subject_ID) # Index used for residual trials array.
            blocks_per_trial, residual_trials[ax] = _session_blocks_per_trial(session, residual_trials[ax], neutral_blocks)
            day_blocks_per_trial.append(blocks_per_trial)
        mean_bpt.append(ut.nanmean(day_blocks_per_trial))
        sd_bpt.append  (np.sqrt(ut.nanvar(np.array(day_blocks_per_trial))))
    days = np.array(list(days))-min(days) + 1
    p.figure(fig_no)
    if clf: p.clf()
    p.subplot(2,1,1)
    p.errorbar(days, mean_bpt, sd_bpt/np.sqrt(len(experiment.subject_IDs)))
    p.xlim(0.5, max(days) + 0.5)
    p.ylim(ymin = 0)
    p.ylabel('Blocks per trial')
    p.subplot(2,1,2)
    p.plot(days,1 / np.array(mean_bpt))
    p.xlabel('Day')
    p.ylabel('Trials per block')
Exemplo n.º 2
0
def trials_per_block(experiment, use_blocks = 'non_neutral', clf = True, fig_no = 1, last_n = 6):
    ' Number of trials taken to finish each block.'
    days = set([s.day for s in experiment.get_sessions('all', 'all')])   
    mean_tpb, sd_tpb = ([],[])
    residual_trials = np.zeros(len(experiment.subject_IDs)) # Number of trials in last (uncompleted) block of session.
    days_trials_per_block = []
    for day in days:
        day_trials_per_block = []
        sessions = experiment.get_sessions('all', day)
        for session in sessions:
            assert hasattr(session,'blocks'), 'Session do not have block info.'
            ax = experiment.subject_IDs.index(session.subject_ID) # Animal index used for residual trials array.
            block_lengths = np.subtract(session.blocks['end_trials'],
                                        session.blocks['start_trials'])
            block_lengths[0] += residual_trials[ax]
            residual_trials[ax] = block_lengths[-1]
            block_types = {'all': block_lengths[:-1],
                       'neutral': block_lengths[:-1][    np.equal(session.blocks['reward_states'],1)[:-1]],
                   'non_neutral': block_lengths[:-1][np.not_equal(session.blocks['reward_states'],1)[:-1]]}
            day_trials_per_block.append(np.mean(block_types[use_blocks]))
        mean_tpb.append(ut.nanmean(day_trials_per_block))
        sd_tpb.append(np.sqrt(ut.nanvar(np.array(day_trials_per_block))))
        days_trials_per_block.append(day_trials_per_block)
    days = np.array(list(days))-min(days) + 1
    p.figure(fig_no)
    if clf: p.clf()
    p.subplot(2,1,1)
    p.errorbar(days, mean_tpb, sd_tpb)
    p.xlim(0.5, max(days) + 0.5)
    p.xlabel('Day')
    p.ylabel('Trials per block')
    print 'Mean   trails per block for last {} sessions: {:.1f}'.format(last_n, np.mean  (mean_tpb[-last_n:]))
    print 'Median trails per block for last {} sessions: {:.1f}'.format(last_n, np.median(mean_tpb[-last_n:]))
    last_n_day_block_lengths = np.array(days_trials_per_block[-last_n:]).reshape([1,-1])[0]
    last_n_day_block_lengths = last_n_day_block_lengths[~np.isnan(last_n_day_block_lengths)]
    p.subplot(2,1,2)
    p.hist(last_n_day_block_lengths)