m, c, l = mot[rec.absname], con[rec.absname], lum[rec.absname] tm = tmovie[rec.absname] ms = motspars[rec.absname] psthis0d = t.searchsorted(tm) # PSTH indices closest to movie frame times, no delay dt = rec.e0.d.sweepSec # frame duration in seconds corrdelaysec = corrdelay / 1000 # convert from ms to s ntdelay = intround(corrdelaysec / dt) # ntimepoints to delay movie-PSTH correlation by if ntdelay >= 0: psthis = psthis0d[ntdelay:] movieis = np.arange(0, len(tm)-ntdelay) else: # ntdelay is -ve psthis = psthis0d[:ntdelay] movieis = np.arange(abs(ntdelay), len(tm)) for nid in sorted(rpsths[rec.absname][statei]): psth = rpsths[rec.absname][statei][nid] motrho = core.corrcoef(m[movieis], psth[psthis]) conrho = core.corrcoef(c[movieis], psth[psthis]) lumrho = core.corrcoef(l[movieis], psth[psthis]) motrhos[state].append(motrho) conrhos[state].append(conrho) lumrhos[state].append(lumrho) motscatspars[state].append([ms, core.sparseness(psth)]) if nid not in recsecscatmotrhos[rec.absname]: recsecscatmotrhos[rec.absname][nid] = [NULLRHO, NULLRHO] # init list for this nid recsecscatconrhos[rec.absname][nid] = [NULLRHO, NULLRHO] recsecscatlumrhos[rec.absname][nid] = [NULLRHO, NULLRHO] recsecscatmotrhos[rec.absname][nid][statei] = motrho recsecscatconrhos[rec.absname][nid][statei] = conrho recsecscatlumrhos[rec.absname][nid][statei] = lumrho if rec.absname == EXAMPLERECNAME and nid == EXAMPLENID:
stranges = REC2STATETRANGES[rec.absname] for statei, strange in enumerate(stranges): # desynched, then synched lfpt, lfps = rec.tlfps(trange=strange, blank=BLANK, plot=False) muat, muas = rec.tmuas(trange=strange, blank=BLANK, plot=False) # Hz/unit TLFPs[rec.absname].append((lfpt, lfps)) TMUAs[rec.absname].append((muat, muas)) MAXMUA[rec.absname] = max(MAXMUA[rec.absname], muas.max()) ntrials = len(lfps) assert ntrials == len(muas) for triali in range(ntrials): # measure reliability as correlation of each trial with mean of all others. # To exclude last sec of blankscreen in each trial, set BLANK=False: lfptrial, muatrial = lfps[triali], muas[triali] otheris = np.ones(ntrials, dtype=bool) otheris[triali] = False # exclude current trial LFPCORRS[statei].append(corrcoef(lfptrial, lfps[otheris].mean(axis=0))) MUACORRS[statei].append(corrcoef(muatrial, muas[otheris].mean(axis=0))) LFPSPARS[statei].append(sparseness(abs(lfptrial))) MUASPARS[statei].append(sparseness(muatrial)) for statei in range(2): # desynched, then synched LFPCORRS[statei] = np.asarray(LFPCORRS[statei]) # convert from list to array MUACORRS[statei] = np.asarray(MUACORRS[statei]) LFPSPARS[statei] = np.asarray(LFPSPARS[statei]) MUASPARS[statei] = np.asarray(MUASPARS[statei]) # plot LFP and MUA time series, plus mean and stdevs, and SNR time series: for rec in urecs: print(rec.absname) # subplotting trickery from # http://stackoverflow.com/questions/22511550/gridspec-with-shared-axes-in-python
cs = n2count[nid] # 2D array of spike counts over trial time, one row per trial rhos, weights = core.pairwisecorr(cs, weight=WEIGHT, invalid='ignore') # set rho to 0 for trial pairs with undefined rho (one or both trials # with 0 spikes): nanis = np.isnan(rhos) rhos[nanis] = 0.0 # for log plotting convenience, replace any mean rhos < NULLREL with NULLREL rel = np.mean(rhos) if rel < NULLREL: rel = NULLREL nreplacedbynullrel += 1 rels[statei].append(rel) # calculate sparseness of this PSTH: spars[statei].append(sparseness(psth)) # calculate coupling of this PSTH with tMUA: coup = core.corrcoef(psth, tmua) coups[statei].append(coup) print() for statei in stateis: rels[statei] = np.asarray(rels[statei]) spars[statei] = np.asarray(spars[statei]) coups[statei] = np.asarray(coups[statei]) # plot MUA coupling histogram: dmean = coups[0].mean() smean = coups[1].mean() u, p = mannwhitneyu(coups[0], coups[1]) # 1-sided if p < ALPHA: pstring = 'p < %g' % ceilsigfig(p) else:
weight=WEIGHT, invalid='ignore') # set rho to 0 for trial pairs with undefined rho (one or both trials # with 0 spikes): nanis = np.isnan(rhos) rhos[nanis] = 0.0 # for log plotting convenience, replace any mean rhos < NULLREL with NULLREL rel = np.mean(rhos) if rel < NULLREL: rel = NULLREL nreplacedbynullrel += 1 rels[statei].append(rel) # calculate sparseness of this PSTH: spars[statei].append(sparseness(psth)) # calculate coupling of this PSTH with tMUA: coup = core.corrcoef(psth, tmua) coups[statei].append(coup) print() for statei in stateis: rels[statei] = np.asarray(rels[statei]) spars[statei] = np.asarray(spars[statei]) coups[statei] = np.asarray(coups[statei]) # plot MUA coupling histogram: dmean = coups[0].mean() smean = coups[1].mean() u, p = mannwhitneyu(coups[0], coups[1]) # 1-sided if p < ALPHA: pstring = 'p < %g' % ceilsigfig(p) else:
psthis0d = t.searchsorted( tm) # PSTH indices closest to movie frame times, no delay dt = rec.e0.d.sweepSec # frame duration in seconds corrdelaysec = corrdelay / 1000 # convert from ms to s ntdelay = intround( corrdelaysec / dt) # ntimepoints to delay movie-PSTH correlation by if ntdelay >= 0: psthis = psthis0d[ntdelay:] movieis = np.arange(0, len(tm) - ntdelay) else: # ntdelay is -ve psthis = psthis0d[:ntdelay] movieis = np.arange(abs(ntdelay), len(tm)) for nid in sorted(rpsths[rec.absname][statei]): psth = rpsths[rec.absname][statei][nid] motrho = core.corrcoef(m[movieis], psth[psthis]) conrho = core.corrcoef(c[movieis], psth[psthis]) lumrho = core.corrcoef(l[movieis], psth[psthis]) motrhos[state].append(motrho) conrhos[state].append(conrho) lumrhos[state].append(lumrho) motscatspars[state].append([ms, core.sparseness(psth)]) if nid not in recsecscatmotrhos[rec.absname]: recsecscatmotrhos[rec.absname][nid] = [ NULLRHO, NULLRHO ] # init list for this nid recsecscatconrhos[rec.absname][nid] = [NULLRHO, NULLRHO] recsecscatlumrhos[rec.absname][nid] = [NULLRHO, NULLRHO] recsecscatmotrhos[rec.absname][nid][statei] = motrho recsecscatconrhos[rec.absname][nid][statei] = conrho recsecscatlumrhos[rec.absname][nid][statei] = lumrho
lfpt, lfps = rec.tlfps(trange=strange, blank=BLANK, plot=False) muat, muas = rec.tmuas(trange=strange, blank=BLANK, plot=False) # Hz/unit TLFPs[rec.absname].append((lfpt, lfps)) TMUAs[rec.absname].append((muat, muas)) MAXMUA[rec.absname] = max(MAXMUA[rec.absname], muas.max()) ntrials = len(lfps) assert ntrials == len(muas) for triali in range(ntrials): # measure reliability as correlation of each trial with mean of all others. # To exclude last sec of blankscreen in each trial, set BLANK=False: lfptrial, muatrial = lfps[triali], muas[triali] otheris = np.ones(ntrials, dtype=bool) otheris[triali] = False # exclude current trial LFPCORRS[statei].append( corrcoef(lfptrial, lfps[otheris].mean(axis=0))) MUACORRS[statei].append( corrcoef(muatrial, muas[otheris].mean(axis=0))) LFPSPARS[statei].append(sparseness(abs(lfptrial))) MUASPARS[statei].append(sparseness(muatrial)) for statei in range(2): # desynched, then synched LFPCORRS[statei] = np.asarray( LFPCORRS[statei]) # convert from list to array MUACORRS[statei] = np.asarray(MUACORRS[statei]) LFPSPARS[statei] = np.asarray(LFPSPARS[statei]) MUASPARS[statei] = np.asarray(MUASPARS[statei]) # plot LFP and MUA time series, plus mean and stdevs, and SNR time series: for rec in urecs: print(rec.absname)