def flashgrating (datapath, logpath, modality, numbins, showflag): '''analysis for grating stimuli including: orientation, spatial frequency or temporal frequency''' print "loading data from:",datapath numberofshanks = 8 '''get data''' #sweeptiming = loadsweeptimes(datapath) (spiketimes, cellnumber) = loadclu(datapath, numberofshanks) nc = size(spiketimes,1) '''get log''' #(sweeporder, sweeptable, bgdimnames) = getSweepTimesEP(logpath) (stimc, duration, constring) = getSweepTimesEP(logpath, datapath, modality) tfreq = stimc[0,3] if (modality.find("sf")+1): tlabel = "Spatial frequency (Cyc/Deg)" ticks = np.arange(0, 0.62, 0.1) print tlabel print constring orivals = np.unique(stimc[:,1]) orivals = np.delete(orivals, 3, 0) for i in range(len(orivals)): stimuluscondition = stimc[np.where(stimc[:,1] == orivals[i])] ostr = str(orivals[i])+"Deg" constring = constring + " at " + ostr print ostr (tuning, f0mean, f0sem, f1mean, f1sem, f2mean, f2sem) = dotuning(stimuluscondition, spiketimes, cellnumber, 2, duration, tlabel, ticks, constring, ostr, numbins, showflag) elif (modality.find("tf")+1): tlabel = "Temporal frequency (Cyc/Sec)" ticks = range(0,15,3) print tlabel print constring orivals = np.unique(stimc[:,1]) orivals = np.delete(orivals, 3, 0) for i in range(len(orivals)): ostr = str(orivals[i])+"Deg" constring = constring + " at " + ostr stimuluscondition = stimc[np.where(stimc[:,1] == orivals[i])] print ostr (tuning, f0mean, f0sem, f1mean, f1sem, f2mean, f2sem) = dotuning(stimuluscondition, spiketimes, cellnumber, 3, duration, tlabel, ticks, constring, ostr, numbins, showflag) elif (modality.find("ori")+1): tlabel = "Orientation (Deg)" ticks = range(0,361,90) print tlabel print constring stimuluscondition = stimc ostr = "allori" (tuning, f0mean, f0sem, f1mean, f1sem, f2mean, f2sem) = dotuning(stimuluscondition, spiketimes, cellnumber, 1, duration, tlabel, ticks, constring, ostr, numbins, showflag) else: print "No modality specified" fileout = datapath+'_cellnumber.dat' np.savetxt(fileout, cellnumber,'%f') return (cellnumber, tuning, f0mean, f0sem, f1mean, f1sem, f2mean, f2sem)
def sftf(datapath, logpath, numbins, showflag): '''analysis for spatial frequency X temporal frequency X orientation stimulus''' print "loading data from:",datapath numberofshanks = 8 '''get data''' (spiketimes, cellnumber) = loadclu(datapath, numberofshanks) nc = size(spiketimes,1) '''get log''' (stimc, duration, constring) = getSweepTimesEP(logpath, datapath, 'sftf') orivals = np.unique(stimc[:,1]) orivals = np.delete(orivals, 3, 0) for i in range(len(orivals)): stimuluscondition = stimc[np.where(stimc[:,1] == orivals[i])] ostr = str(orivals[i])+"Deg" constring = constring + " at " + ostr (f0mean, f0sem, f1mean, f1sem, f2mean, f2sem) = sftftuning(stimuluscondition, spiketimes, cellnumber, 3, duration, constring, ostr, numbins, showflag) return (cellnumber, f0mean, f0sem, f1mean, f1sem, f2mean, f2sem)
def conrevEP(datapath, logpath, numbins, showflag): '''analysis for contrast reversing e-phys data''' print "loading data from:",datapath numberofshanks = 8 '''get data''' (spiketimes, cellnumber) = loadclu(datapath, numberofshanks) nc = size(spiketimes,1) '''get log''' modality = 'conrev' (stimc, duration, tfreq, constring) = getSweepTimesEPcr(logpath, datapath) tlabel = "Phase (Deg)" ticks = range(0,151,30) print tlabel print constring orivals = np.unique(stimc[:,1]) orivals = np.delete(orivals, 3, 0) for i in range(len(orivals)): ostr = str(orivals[i])+"Deg" print ostr constring = constring + " at " + ostr stimuluscondition = stimc[np.where(stimc[:,1] == orivals[i])] (tuning, f0m, f0s, f1m, f1s, f2m, f2s) = dotuning(stimuluscondition, spiketimes, cellnumber, 2, duration, tlabel, ticks, constring, ostr, numbins, showflag) plotconrev(tuning, f1m, f1s, f2m, f2s, ostr, constring) if i == 0: f0mean = np.empty((size(f0m,0), size(f0m,1), len(orivals))) f0sem = np.empty((size(f0m,0), size(f0m,1), len(orivals))) f1mean = np.empty((size(f2m,0), size(f1m,1), len(orivals))) f1sem = np.empty((size(f2m,0), size(f1m,1), len(orivals))) f2mean = np.empty((size(f2m,0), size(f2m,1), len(orivals))) f2sem = np.empty((size(f2m,0), size(f2m,1), len(orivals))) f0mean[:,:,i] = f0m[:,:] f0sem[:,:,i] = f0s[:,:] f1mean[:,:,i] = f1m[:,:] f1sem[:,:,i] = f1s[:,:] f2mean[:,:,i] = f2m[:,:] f2sem[:,:,i] = f2s[:,:] return (tuning, f0mean, f1mean, f2mean, f0sem, f1sem, f2sem) '''plot data'''
def flashgrating (datapath, logpath, modality, numbins, showflag): '''analysis for EPhys grating experiments including: orientation, spatial frequency or temporal frequency''' print "loading data from:",datapath numberofshanks = 8 '''get data''' #sweeptiming = loadsweeptimes(datapath) (spiketimes, cellnumber) = loadclu(datapath, numberofshanks) nc = size(spiketimes,1) '''get log''' #(sweeporder, sweeptable, bgdimnames) = getSweepTimesEP(logpath) (stimc, duration, constring) = getSweepTimesEP(logpath, datapath, modality) tfreq = stimc[0,3] if (modality.find("sf")+1): tlabel = "Spatial frequency (Cyc/Deg)" ticks = np.arange(0, 0.62, 0.1) print tlabel print constring orivals = np.unique(stimc[:,1]) orivals = np.delete(orivals, 3, 0) for i in range(len(orivals)): stimuluscondition = stimc[np.where(stimc[:,1] == orivals[i])] ostr = str(orivals[i])+"Deg" constring = constring + " at " + ostr print ostr (tuning, f0m, f0s, f1m, f1s, f2m, f2s) = dotuning(stimuluscondition, spiketimes, cellnumber, 2, duration, tlabel, ticks, constring, ostr, numbins, showflag) if i == 0: f0mean = np.empty((size(f0m,0), size(f0m,1), len(orivals))) f0sem = np.empty((size(f0m,0), size(f0m,1), len(orivals))) f1mean = np.empty((size(f2m,0), size(f1m,1), len(orivals))) f1sem = np.empty((size(f2m,0), size(f1m,1), len(orivals))) f2mean = np.empty((size(f2m,0), size(f2m,1), len(orivals))) f2sem = np.empty((size(f2m,0), size(f2m,1), len(orivals))) f0mean[:,:,i] = f0m[:,:] f0sem[:,:,i] = f0s[:,:] f1mean[:,:,i] = f1m[:,:] f1sem[:,:,i] = f1s[:,:] f2mean[:,:,i] = f2m[:,:] f2sem[:,:,i] = f2s[:,:] elif (modality.find("tf")+1): tlabel = "Temporal frequency (Cyc/Sec)" ticks = range(0,16,3) print tlabel print constring orivals = np.unique(stimc[:,1]) orivals = np.delete(orivals, 3, 0) for i in range(len(orivals)): ostr = str(orivals[i])+"Deg" constring = constring + " at " + ostr stimuluscondition = stimc[np.where(stimc[:,1] == orivals[i])] print ostr (tuning, f0m, f0s, f1m, f1s, f2m, f2s) = dotuning(stimuluscondition, spiketimes, cellnumber, 3, duration, tlabel, ticks, constring, ostr, numbins, showflag) if i == 0: f0mean = np.empty((size(f0m,0), size(f0m,1), len(orivals))) f0sem = np.empty((size(f0m,0), size(f0m,1), len(orivals))) f1mean = np.empty((size(f2m,0), size(f1m,1), len(orivals))) f1sem = np.empty((size(f2m,0), size(f1m,1), len(orivals))) f2mean = np.empty((size(f2m,0), size(f2m,1), len(orivals))) f2sem = np.empty((size(f2m,0), size(f2m,1), len(orivals))) f0mean[:,:,i] = f0m[:,:] f0sem[:,:,i] = f0s[:,:] f1mean[:,:,i] = f1m[:,:] f1sem[:,:,i] = f1s[:,:] f2mean[:,:,i] = f2m[:,:] f2sem[:,:,i] = f2s[:,:] elif (modality.find("ori")+1): tlabel = "Orientation (Deg)" ticks = range(0,361,90) print tlabel print constring stimuluscondition = stimc ostr = "allori" (tuning, f0mean, f0sem, f1mean, f1sem, f2mean, f2sem) = dotuning(stimuluscondition, spiketimes, cellnumber, 1, duration, tlabel, ticks, constring, ostr, numbins, showflag) else: print "No modality specified" '''plot data''' for s in range(1,9): firstcell = findlevelbuffer(cellnumber, s, 100) lastcell = findlevelbuffer(cellnumber, (s+1), 100) if lastcell > firstcell: sn = lastcell - firstcell print "shank #"+str(s)+" has "+str(sn)+" cells" figure(s) for c in range(sn): sp = c + firstcell ax1 = subplot(ceil(sqrt(sn)), round(sqrt(sn)), c+1) if (modality.find("sf")+1) or (modality.find("tf")+1): ax1.set_xscale("log", nonposx='clip') ax1.errorbar(tuning, f1mean[:,sp,0], yerr=f1sem[:,sp,0], fmt = 'ro', capsize=2, linestyle='-') ax1.errorbar(tuning, f1mean[:,sp,1], yerr=f1sem[:,sp,1], fmt = 'bo', capsize=2, linestyle='-') ax1.errorbar(tuning, f1mean[:,sp,2], yerr=f1sem[:,sp,2], fmt = 'go', capsize=2, linestyle='-') else: ax1.errorbar(tuning, f1mean[:,sp], yerr=f1sem[:,sp], fmt = 'ro', capsize=2, linestyle='-') ax1.set_ylabel('F1', fontsize=10) ax1.set_ylim(bottom=0) xticks(ticks) xlabel(tlabel, fontsize=10) text(0,0, str(c+1), fontsize=10) tick_params(axis='both', which='major', labelsize=7) tight_layout() subplots_adjust(top=0.9) suptitle("Shank #"+str(s)+':'+constring, fontsize=14) if (modality.find("sf")+1) or (modality.find("tf")+1): figtext(0.1, 0.92, '0 Deg', color='red') figtext(0.2, 0.92, '120 Deg', color = 'blue') figtext(0.3, 0.92, '240 Deg', color = 'green') fname = datapath+'_'+modality+'_tuning'+str(s)+'.png' savefig(fname) show(False) '''save data''' fullfilename = datapath + "_" + modality + "Data.h5" f = h5py.File(fullfilename, 'w') dset = f.create_dataset("f0mean", f0mean.shape, 'f') dset[...] = f0mean if (modality.find("sf")+1) or (modality.find("tf")+1): dset.attrs["orivalues"] = orivals dset.attrs["datapath"] = datapath dset.attrs["logpath"] = logpath dset2 = f.create_dataset("f0sem", f0sem.shape, 'f') dset2[...] = f0sem dset3 = f.create_dataset("f1mean", f1mean.shape, 'f') dset3[...] = f1mean dset4 = f.create_dataset("f1sem", f1sem.shape, 'f') dset4[...] = f1sem dset5 = f.create_dataset("tuning", tuning.shape, 'f') dset5[...] = tuning dset6 = f.create_dataset("cellnumber", cellnumber.shape, 'f') dset6[...] = cellnumber f.close() return (cellnumber, tuning, f0mean, f0sem, f1mean, f1sem, f2mean, f2sem)