stds.append(std) # keeping all 10 chans for each LFP for all tracks gives MemoryError: del data del rec.lfp.data #print('.', end='') #print() sis = np.hstack(sis) Vpps = np.hstack(Vpps) / 1e3 # convert from uV to mV stds = np.hstack(stds) figure(figsize=figsize) #plot(Vpps, sis, 'k.', ms=4, alpha=ALPHA) Vppedges = np.arange(0.25, VPPMAX + 0.25, 0.25) # mV Vppmeans, sismeans, sisstds = scatterbin(Vpps, sis, Vppedges, xaverage=None, yaverage=np.mean) errorbar(Vppmeans, sismeans, yerr=sisstds, fmt='k.-', ms=6, lw=1, zorder=9999) xlim(xmin=0, xmax=VPPMAX) ylim(0.2, 1) yticks([0.2, 0.4, 0.6, 0.8, 1]) xlabel('LFP $V_{pp}$ (mV)') ylabel('SI (L/(L+H))') gcfm().window.setWindowTitle('SI vs Vpp lfpwidth=%g lfptres=%g' % (lfpwidth, lfptres)) tight_layout(pad=0.3) figure(figsize=figsize) #plot(stds, sis, 'k.', ms=4, alpha=ALPHA) stdedges = np.arange(25, STDMAX + 25, 25) # uV
std = [ data[tirange[0]:tirange[1]].std() for tirange in tiranges ] Vpps.append(Vpp) stds.append(std) # keeping all 10 chans for each LFP for all tracks gives MemoryError: del data del rec.lfp.data #print('.', end='') #print() sis = np.hstack(sis) Vpps = np.hstack(Vpps) / 1e3 # convert from uV to mV stds = np.hstack(stds) figure(figsize=figsize) #plot(Vpps, sis, 'k.', ms=4, alpha=ALPHA) Vppedges = np.arange(0.25, VPPMAX+0.25, 0.25) # mV Vppmeans, sismeans, sisstds = scatterbin(Vpps, sis, Vppedges, xaverage=None, yaverage=np.mean) errorbar(Vppmeans, sismeans, yerr=sisstds, fmt='k.-', ms=6, lw=1, zorder=9999) xlim(xmin=0, xmax=VPPMAX) ylim(0.2, 1) yticks([0.2, 0.4, 0.6, 0.8, 1]) xlabel('LFP $V_{pp}$ (mV)') ylabel('SI (L/(L+H))') gcfm().window.setWindowTitle('SI vs Vpp lfpwidth=%g lfptres=%g' % (lfpwidth, lfptres)) tight_layout(pad=0.3) figure(figsize=figsize) #plot(stds, sis, 'k.', ms=4, alpha=ALPHA) stdedges = np.arange(25, STDMAX+25, 25) # uV stdmeans, sismeans, sisstds = scatterbin(stds, sis, stdedges, xaverage=None, yaverage=np.mean) errorbar(stdmeans, sismeans, yerr=sisstds, fmt='k.-', ms=6, lw=1, zorder=9999)
def psthcorr(rec, nids=None, ssnids=None, ssseps=None, natexps=False, strange=None, plot=True): if nids == None: nids = sorted(rec.n) # use active neurons if ssnids == None: ssnids = nids # use nids as the superset nn = len(nids) nnss = len(ssnids) # note that using norm=True or norm='ntrials' doesn't seem to make a difference to the # results, probably doesn't matter for calculating corrs: midbins, psths, spikets = rec.psth(nids=nids, natexps=natexps, strange=strange, plot=False, binw=0.02, tres=0.005, norm=True) rho = np.corrcoef(psths) # defaults to bias=1 rho[np.diag_indices(nn)] = np.nan # nan the diagonal, which imshow plots as white ssrho = np.zeros((nnss, nnss)) # superset rho matrix ssrho.fill(np.nan) # init with nans # load up values into appropriate spots in superset rho matrix: for i in range(nn): for j in range(nn): ssi, ssj = ssnids.searchsorted([nids[i], nids[j]]) ssrho[ssi, ssj] = rho[i, j] if plot == False: return ssrho # plot superset rho matrix: figure(figsize=FIGSIZE) imshow(ssrho, vmin=-1, vmax=1, cmap='jet') # cmap='gray' is too bland ssnidticks = np.arange(0, nnss, 10) xticks(ssnidticks) yticks(ssnidticks) if SHOWCOLORBAR: colorbar() basetitle = rec.absname if strange != None: strange_sec = tuple(np.array(strange)/1e6) # convert to sec for display basetitle += '_strange=(%.f, %.f)' % strange_sec gcfm().window.setWindowTitle(basetitle + '_rho_mat') tight_layout(pad=0.3) # plot rho histogram: lti = np.tril_indices(nnss, -1) # lower triangle (below diagonal) indices of ssrho ssrhol = ssrho[lti] notnanis = np.logical_not(np.isnan(ssrhol)) # indices of non-nan values fssrhol = ssrhol[notnanis] # ssrhol filtered out for nans fssrholmean = fssrhol.mean() t, p = ttest_1samp(fssrhol, 0) # 2-sided ttest relative to 0 print('mean=%g, t=%g, p=%g' % (fssrholmean, t, p)) if p < ALPHA0: pstring = '$p<%g$' % ceilsigfig(p) else: pstring = '$p>%g$' % floorsigfig(p) figure(figsize=FIGSIZE) rhobins = np.arange(RHOMIN, RHOMAX+0.0333, 0.0333) # left edges + rightmost edge n = hist(fssrhol, bins=rhobins, color='k')[0] axvline(x=fssrholmean, c='r', ls='--') # draw vertical red line at mean fssrhol axvline(x=0, c='e', ls='--') # draw vertical grey line at x=0 xlim(xmin=RHOMIN, xmax=RHOMAX) ylim(ymax=n.max()) # effectively normalizes the histogram rhoticks = np.arange(-0.2, 1+0.2, 0.2) # excluding the final 1 xticks(rhoticks) yticks([n.max()]) # turn off y ticks to save space #yticks([0, n.max()]) text(0.98, 0.98, '$\mu$=%.2g\n%s' % (fssrholmean, pstring), color='k', transform=gca().transAxes, horizontalalignment='right', verticalalignment='top') gcfm().window.setWindowTitle(basetitle + '_rho_hist') tight_layout(pad=0.3) # plot rho vs separation: fssseps = ssseps[notnanis] # ssseps filtered out for nans figure(figsize=FIGSIZE) # scatter plot: pl.plot(fssseps, fssrhol, 'k.') # bin seps and plot mean rho in each bin: sepbins = np.arange(0, fssseps.max()+SEPBINW, SEPBINW) # left edges sepmeans, rhomeans, rhostds = scatterbin(fssseps, fssrhol, sepbins) #pl.plot(sepmeans, rhomeans, 'r.-', ms=10, lw=2) errorbar(sepmeans, rhomeans, yerr=rhostds, fmt='r.-', ms=10, lw=2, zorder=9999) xlim(xmin=0, xmax=SEPMAX) ylim(ymin=RHOMIN, ymax=RHOMAX) septicks = np.arange(0, fssseps.max()+100, 500) xticks(septicks) yticks(rhoticks) gcfm().window.setWindowTitle(basetitle + '_rho_sep') tight_layout(pad=0.3) return ssrho
def psthcorr(rec, nids=None, ssnids=None, ssseps=None, natexps=False, strange=None, plot=True): if nids == None: nids = sorted(rec.n) # use active neurons if ssnids == None: ssnids = nids # use nids as the superset nn = len(nids) nnss = len(ssnids) # note that using norm=True or norm='ntrials' doesn't seem to make a difference to the # results, probably doesn't matter for calculating corrs: midbins, psths, spikets = rec.psth(nids=nids, natexps=natexps, strange=strange, plot=False, binw=0.02, tres=0.005, norm=True) rho = np.corrcoef(psths) # defaults to bias=1 rho[np.diag_indices( nn)] = np.nan # nan the diagonal, which imshow plots as white ssrho = np.zeros((nnss, nnss)) # superset rho matrix ssrho.fill(np.nan) # init with nans # load up values into appropriate spots in superset rho matrix: for i in range(nn): for j in range(nn): ssi, ssj = ssnids.searchsorted([nids[i], nids[j]]) ssrho[ssi, ssj] = rho[i, j] if plot == False: return ssrho # plot superset rho matrix: figure(figsize=FIGSIZE) imshow(ssrho, vmin=-1, vmax=1, cmap='jet') # cmap='gray' is too bland ssnidticks = np.arange(0, nnss, 10) xticks(ssnidticks) yticks(ssnidticks) if SHOWCOLORBAR: colorbar() basetitle = rec.absname if strange != None: strange_sec = tuple(np.array(strange) / 1e6) # convert to sec for display basetitle += '_strange=(%.f, %.f)' % strange_sec gcfm().window.setWindowTitle(basetitle + '_rho_mat') tight_layout(pad=0.3) # plot rho histogram: lti = np.tril_indices( nnss, -1) # lower triangle (below diagonal) indices of ssrho ssrhol = ssrho[lti] notnanis = np.logical_not(np.isnan(ssrhol)) # indices of non-nan values fssrhol = ssrhol[notnanis] # ssrhol filtered out for nans fssrholmean = fssrhol.mean() t, p = ttest_1samp(fssrhol, 0) # 2-sided ttest relative to 0 print('mean=%g, t=%g, p=%g' % (fssrholmean, t, p)) if p < ALPHA0: pstring = '$p<%g$' % ceilsigfig(p) else: pstring = '$p>%g$' % floorsigfig(p) figure(figsize=FIGSIZE) rhobins = np.arange(RHOMIN, RHOMAX + 0.0333, 0.0333) # left edges + rightmost edge n = hist(fssrhol, bins=rhobins, color='k')[0] axvline(x=fssrholmean, c='r', ls='--') # draw vertical red line at mean fssrhol axvline(x=0, c='e', ls='--') # draw vertical grey line at x=0 xlim(xmin=RHOMIN, xmax=RHOMAX) ylim(ymax=n.max()) # effectively normalizes the histogram rhoticks = np.arange(-0.2, 1 + 0.2, 0.2) # excluding the final 1 xticks(rhoticks) yticks([n.max()]) # turn off y ticks to save space #yticks([0, n.max()]) text(0.98, 0.98, '$\mu$=%.2g\n%s' % (fssrholmean, pstring), color='k', transform=gca().transAxes, horizontalalignment='right', verticalalignment='top') gcfm().window.setWindowTitle(basetitle + '_rho_hist') tight_layout(pad=0.3) # plot rho vs separation: fssseps = ssseps[notnanis] # ssseps filtered out for nans figure(figsize=FIGSIZE) # scatter plot: pl.plot(fssseps, fssrhol, 'k.') # bin seps and plot mean rho in each bin: sepbins = np.arange(0, fssseps.max() + SEPBINW, SEPBINW) # left edges sepmeans, rhomeans, rhostds = scatterbin(fssseps, fssrhol, sepbins) #pl.plot(sepmeans, rhomeans, 'r.-', ms=10, lw=2) errorbar(sepmeans, rhomeans, yerr=rhostds, fmt='r.-', ms=10, lw=2, zorder=9999) xlim(xmin=0, xmax=SEPMAX) ylim(ymin=RHOMIN, ymax=RHOMAX) septicks = np.arange(0, fssseps.max() + 100, 500) xticks(septicks) yticks(rhoticks) gcfm().window.setWindowTitle(basetitle + '_rho_sep') tight_layout(pad=0.3) return ssrho