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')
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)