def plot_latency_by_stim(rast, stimparams): rf = calc_rf(rast, stimparams) stim_peak_times = calc_latency_by_stim(rast, stimparams) x = stim_peak_times.copy() x[x>80] = 80 x[x<50] = 50 fig = plt.figure() ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) RF.plot_rf(rf, ax = ax1) RF.plot_rf(x.T, ax = ax2, cmap = 'jet')
def plot_fake_strf(rast, stimparams): fig = plt.figure(figsize = (15, 10)) ax1 = fig.add_axes([0.05, 0.2, 0.9, 0.75]) ax2 = fig.add_axes([0.05, 0.05, 0.9, 0.15]) fake_strf = calc_fake_strf(rast, stimparams) RF.plot_rf(fake_strf, ax = ax1, axes_on = False) psth = fake_strf.mean(0) psth_smoo = Spikes.hamming_smoo(psth, windlen = 5) ax2.plot(psth_smoo) ax2.set_xlim([0, rast.shape[1]]) plt.draw(); plt.show(); return fig
def add_bf_man(experiment): ''' Runs through all of the units and allows you to click on the CF. Clicking a negative x-coordinate results in the unit being discarded (renamed to _RR###.h5) For valid units, the CF and threshold are saved in a text file called cfs.txt ''' rf_blocks = glob.glob(os.path.join(studydir, 'Sessions', experiment, 'fileconversion', '*RF*.h5')) cfs = [] badunits = [] for rf_block in rf_blocks: fig = plt.figure(); ax = fig.add_subplot(111); print rf_block f = h5py.File(rf_block, 'r') blockname = os.path.splitext(os.path.split(rf_block)[1])[0] pennum = np.int32(blockname.split('RF')[1]) rf = f['rf'].value f.close() RF.plot_rf(rf, ax = ax) xlim = ax.get_xlim() ylim = ax.get_ylim() ax.set_xlim([xlim[0]-2, xlim[1]]) ax.set_ylim([ylim[0], ylim[1]-1]) ax.set_title(pennum) plt.show() xy = plt.ginput(1, timeout = -1)[0] xy = np.array(xy) if np.prod(xy)>0: xy = np.array(xy) cfs.append(np.hstack((pennum, xy))) else: badunits.append(pennum) plt.close(fig) savepath = os.path.join(studydir, 'Sessions', experiment, 'cfs.txt') np.savetxt(savepath, cfs) # print badunits plt.close(fig)
def rr_make_contactsheets(): ''' loop through all the sessions and plot the rrtfs ''' fig = plt.figure(figsize = (30, 18)); txt_suptitle = fig.suptitle('') ax_cfrrtf = fig.add_axes((0.76, 0.76, 0.24, 0.23)); ax_cfvs = ax_cfrrtf.twinx(); ax_cfcircpsthall = fig.add_axes((0.62, (11/14.)-0.02, 0.1, (1/7.)+0.04), polar = True) ax_cfcircpsthall.set_xticklabels(''); ax_cfcircpsthall.set_yticklabels(''); ax_rf = fig.add_axes((0.67, 0.51, 0.33, 0.23)); ax_rfrast = fig.add_axes((0.67, 0.25, 0.33, 0.24)); ax_rfrast.set_xticklabels(''); ax_rfpsth = fig.add_axes((0.67, 0.01, 0.33, 0.24)); ax_cfrr = [fig.add_axes((0.03, 1-((i+1)/7.), 0.35, 1/7.)) for i in np.arange(nrrs)] ax_cfalignedpsth = [fig.add_axes((0.38, 1-((i+1)/7.), 0.17, 1/7.)) for i in np.arange(nrrs)] ax_cfcircpsth = [fig.add_axes((0.53, 1-((i+1)/7.), 0.1, 1/7.), polar = True) for i in np.arange(nrrs)] # ax_noiserr = [fig.add_subplot(nrrs, 3, i) for i in np.arange(1, 3*nrrs, 3)] for sessionpath in sessionpaths: session = os.path.split(sessionpath)[1] unitinfos = fileconversion.get_session_unitinfo(sessionpath, onlycomplete = ('RF', 'RR', 'VOC')) for unitkey in unitinfos.keys(): txt_suptitle.set_text('%s %s' % (session, unitkey)) unitinfo = unitinfos[unitkey] rf_ix = unitinfo['stimtype'].index('RF') f_rf = h5py.File(unitinfo['fpath'][rf_ix], 'r') rf_rast = f_rf['rast'].value rf_stimparams = f_rf['stimID'].value cf_ix = f_rf['cf'].value f_rf.close() cf = ix2freq[20:][int(cf_ix)] ''' calculate and plot RF, psth, and sorted raster''' rf = RF.calc_rf(rf_rast, rf_stimparams) rf_psth = Spikes.calc_psth(rf_rast) RF.plot_rf(rf, cf = cf_ix, axes_on = False, ax = ax_rf) # plot RF ax_rf.axvline(cf_ix, color = 'r', lw = 1.5) Spikes.plot_sorted_raster(rf_rast, rf_stimparams, ax = ax_rfrast) # plot raster ax_rfpsth.plot(t_rf, Spikes.exp_smoo(rf_psth, tau = 0.005)) # plot PSTH ''' calcualte and plot RRTFs for CF and noise stimuli ''' rr_ix = unitinfo['stimtype'].index('RR') f_rr = h5py.File(unitinfo['fpath'][rr_ix], 'r') rr_rast = f_rr['rast'].value rr_stimparams = f_rr['stimID'].value f_rr.close() # find the played CF rr_ufreqs = np.unique(rr_stimparams[:, 0]) urrs = np.unique(rr_stimparams[:, 1]) npips = (urrs*4).astype(int) rr_freq, rr_ufreq_ix, _ = misc.closest(rr_ufreqs, cf, log = True) ax_rf.axvline(RF.calc_freq2ix(rr_freq), color = 'g', lw = 1.5) # calculate the PSTHs for each repetition rate tmp = Spikes.calc_psth_by_stim(rr_rast, rr_stimparams) rr_cfpth = tmp[0][rr_ufreq_ix, :, :] # rrtf_noisepsth = tmp[0][0, :, :] # plot the aligned psths RR.aligned_psth_separate_all(rr_rast, rr_stimparams, rr_freq, npips, axs = ax_cfalignedpsth) [a.set_yticklabels('') for a in ax_cfalignedpsth] [a.set_xticklabels('') for a in ax_cfalignedpsth[:-1]] # plot circular psths r, V, theta = RR.circ_psth_all(rr_rast, rr_stimparams, rr_freq, npips, axs = ax_cfcircpsth) [a.set_yticklabels('') for a in ax_cfcircpsth] [a.set_xticklabels('') for a in ax_cfcircpsth] # plot all circular summed vector strengths ax_cfcircpsthall.plot(theta, V, '.-') [ax_cfcircpsthall.plot([0, th], [0, v], color = 'b', alpha = 1-(i/10.)) for i, (th, v) in enumerate(zip(theta, V))] # plot RRTF rrtf = RR.calc_rrtf_all(rr_rast, rr_stimparams, rr_freq, urrs, npips) ax_cfrrtf.plot(rrtf, '.-', ms = 10) ax_cfvs.plot(V*np.cos(theta), 'g.-', ms = 10) for tick in ax_cfvs.yaxis.get_major_ticks(): tick.set_pad(-5) tick.label2.set_horizontalalignment('right') # plot repetition rate PSTHs for i in xrange(nrrs): # RR.plot_rrtf(t_rrtf, rrtf_noisepsth[i, :], urrs[i], int(4*urrs[i]), onset = 0.05, duration = 0.025, ax = ax_noiserr[i]) RR.plot_rrtf(t_rrtf, rr_cfpth[i, :], urrs[i], int(4*urrs[i]), onset = 0.05, duration = 0.025, ax = ax_cfrr[i]) # ax_noiserr[0].set_title('Noise RRTFs') ax_cfrr[0].set_title('CF RRTFs (%.0f kHz)' % (cf/1000)) # [a.set_xlim(0, 4.5) for a in ax_noiserr] [a.set_xlim(0, 4.5) for a in ax_cfrr] misc.sameyaxis(ax_cfrr+ax_cfalignedpsth) figsavepath = os.path.join(studydir, 'Sheets', 'RRTFs', '%s_%s_RRTF.png' % (session, unitkey)) print figsavepath fig.savefig(figsavepath) [a.cla() for a in fig.get_axes()] # clear all axes