def calc_corr_mouse(dataDB, mc, mousename, nDropPCA=1, dropChannels=None, strategy='mean', estimator='corr', **kwargs): # NOTE: zscore channels for each session to avoid session-wise effects dataRSPLst = dataDB.get_neuro_data({'mousename': mousename}, zscoreDim='rs', **kwargs) dataRSP = np.concatenate(dataRSPLst, axis=0) channelLabels = np.array(dataDB.get_channel_labels()) if strategy == 'mean': dataRP = np.mean(dataRSP, axis=1) if nDropPCA is not None: dataRP = drop_PCA(dataRP, nDropPCA) if dropChannels is not None: nChannels = dataRP.shape[1] channelMask = np.ones(nChannels).astype(bool) channelMask[dropChannels] = 0 dataRP = dataRP[:, channelMask] channelLabels = channelLabels[channelMask] mc.set_data(dataRP, 'rp') metricSettings = {'havePVal': False, 'estimator': estimator} rez2D = mc.metric3D('corr', '', metricSettings=metricSettings) return channelLabels, rez2D elif strategy == 'sweep': if nDropPCA is not None: dataRSP = drop_PCA_3D(dataRSP, nDropPCA) if dropChannels is not None: nChannels = dataRSP.shape[2] channelMask = np.ones(nChannels).astype(bool) channelMask[dropChannels] = 0 dataRSP = dataRSP[:, :, channelMask] channelLabels = channelLabels[channelMask] mc.set_data(dataRSP, 'rsp') metricSettings = {'havePVal': False, 'estimator': estimator} rezS2D = mc.metric3D('corr', 's', metricSettings=metricSettings) rez2D = np.mean(rezS2D, axis=0) return channelLabels, rez2D else: raise ValueError('Unexpected strategy', strategy)
def preprocess_data(dataRSPLst, nDropPCA=None, nBin=None, timeAvg=False): dataRSP = np.concatenate(dataRSPLst, axis=0) # Concatenate trials and sessions if timeAvg: dataRP = np.mean(dataRSP, axis=1) # Average out time else: dataRP = numpy_merge_dimensions(dataRSP, 0, 2) if nDropPCA is not None: dataRP = drop_PCA(dataRP, nDropPCA) if nBin is not None: dataRP = bin_data(dataRP, nBin, axis=1) # Bin data separately for each channel return dataRP if timeAvg else dataRP.reshape(dataRSP.shape)
def plot_corr_consistency_l1_phase(dataDB, nDropPCA=None, dropChannels=None, performance=None, datatype=None): mice = sorted(dataDB.mice) phases = dataDB.get_interval_names() nPhases = len(phases) dfColumns = ['mousename', 'trialtype', 'consistency'] dfConsistency = pd.DataFrame(columns=dfColumns) for iMouse, mousename in enumerate(mice): for trialType in dataDB.get_trial_type_names(): fnameSuffix = '_'.join( [datatype, mousename, trialType, str(performance)]) print(fnameSuffix) corrLst = [] for intervName in phases: kwargs = { 'datatype': datatype, 'intervName': intervName, 'trialType': trialType } if performance is not None: kwargs['performance'] = performance dataRSPLst = dataDB.get_neuro_data({'mousename': mousename}, zscoreDim='rs', **kwargs) dataRSP = np.concatenate(dataRSPLst, axis=0) dataRP = np.mean(dataRSP, axis=1) # dataRP = zscore(dataRP, axis=0) if dropChannels is not None: channelMask = np.ones(dataRP.shape[1]).astype(bool) channelMask[dropChannels] = 0 dataRP = dataRP[:, channelMask] if nDropPCA is not None: dataRP = drop_PCA(dataRP, nDropPCA) corrLst += [tril_1D(np.corrcoef(dataRP.T))] # fig, ax = plt.subplots(nrows=nMice, ncols=nMice, figsize=(4 * nMice, 4 * nMice)) pairDict = {} rezMat = np.zeros((nPhases, nPhases)) for idxNamei, iName in enumerate(phases): pairDict[iName] = corrLst[idxNamei] for idxNamej, jName in enumerate(phases): rezMat[idxNamei][idxNamej] = np.corrcoef( corrLst[idxNamei], corrLst[idxNamej])[0, 1] pPlot = sns.pairplot(data=pd.DataFrame(pairDict), vars=phases, kind='kde') prefixPath = 'pics/consistency/corr/phase/dropPCA_' + str( nDropPCA) + '/scatter/' make_path(prefixPath) plt.savefig(prefixPath + 'scatter_' + fnameSuffix + '.svg') plt.close() fig, ax = plt.subplots() imshow(fig, ax, rezMat, haveColorBar=True, limits=[0, 1], xTicks=phases, yTicks=phases, cmap='jet') prefixPath = 'pics/consistency/corr/phase/dropPCA_' + str( nDropPCA) + '/metric/' make_path(prefixPath) plt.savefig(prefixPath + 'metric_' + fnameSuffix + '.svg') plt.close() avgConsistency = np.round(np.mean(offdiag_1D(rezMat)), 2) dfConsistency = pd_append_row( dfConsistency, [mousename, trialType, avgConsistency]) fig, ax = plt.subplots() dfPivot = pd_pivot(dfConsistency, *dfColumns) sns.heatmap(data=dfPivot, ax=ax, annot=True, vmin=0, vmax=1, cmap='jet') prefixPath = 'pics/consistency/corr/phase/dropPCA_' + str(nDropPCA) + '/' make_path(prefixPath) fig.savefig(prefixPath + datatype + '_' + str(performance) + '.svg') plt.close()
def plot_corr_consistency_l1_mouse( dataDB, nDropPCA=None, dropChannels=None, exclQueryLst=None, **kwargs): # performances=None, trialTypes=None, assert 'intervName' in kwargs.keys(), 'Requires phases' dps = DataParameterSweep(dataDB, exclQueryLst, mousename='auto', intervName='auto', datatype='auto', **kwargs) mice = sorted(dataDB.mice) nMice = len(mice) for paramExtraVals, dfTmp in dps.sweepDF.groupby( dps.invert_param(['mousename', 'datatype', 'intervName'])): plotExtraSuffix = param_vals_to_suffix(paramExtraVals) dfColumns = ['datatype', 'phase', 'consistency'] dfConsistency = pd.DataFrame(columns=dfColumns) for paramVals, dfMouse in dfTmp.groupby(dps.invert_param(['mousename' ])): plotSuffix = param_vals_to_suffix(paramVals) print(plotSuffix) corrLst = [] for idx, row in dfMouse.iterrows(): plotSuffix = '_'.join([str(s) for s in row.values]) print(plotSuffix) kwargsThis = pd_row_to_kwargs(row, parseNone=True, dropKeys=['mousename']) dataRSPLst = dataDB.get_neuro_data( { 'mousename': row['mousename'] }, # NOTE: zscore channels for each session to avoid session-wise effects zscoreDim='rs', **kwargsThis) dataRSP = np.concatenate(dataRSPLst, axis=0) dataRP = np.mean(dataRSP, axis=1) # dataRP = zscore(dataRP, axis=0) if dropChannels is not None: channelMask = np.ones(dataRP.shape[1]).astype(bool) channelMask[dropChannels] = 0 dataRP = dataRP[:, channelMask] if nDropPCA is not None: dataRP = drop_PCA(dataRP, nDropPCA) corrLst += [tril_1D(np.corrcoef(dataRP.T))] # fig, ax = plt.subplots(nrows=nMice, ncols=nMice, figsize=(4 * nMice, 4 * nMice)) pairDict = {} rezMat = np.zeros((nMice, nMice)) for iMouse, mousename in enumerate(mice): # ax[iMouse][0].set_ylabel(mice[iMouse]) # ax[-1][iMouse].set_xlabel(mice[iMouse]) pairDict[mousename] = corrLst[iMouse] for jMouse in range(nMice): # rezMat[iMouse][jMouse] = 1 - rmae(corrLst[iMouse], corrLst[jMouse]) rezMat[iMouse][jMouse] = np.corrcoef( corrLst[iMouse], corrLst[jMouse])[0, 1] # cci = offdiag_1D(corrLst[iMouse]) # ccj = offdiag_1D(corrLst[jMouse]) # ax[iMouse][jMouse].plot(cci, ccj, '.') pPlot = sns.pairplot(data=pd.DataFrame(pairDict), vars=mice, kind='kde') prefixPath = 'pics/consistency/corr/mouse/dropPCA_' + str( nDropPCA) + '/scatter/' make_path(prefixPath) plt.savefig(prefixPath + 'scatter_' + plotSuffix + '.svg') plt.close() fig, ax = plt.subplots() imshow(fig, ax, rezMat, haveColorBar=True, limits=[0, 1], xTicks=mice, yTicks=mice, cmap='jet') prefixPath = 'pics/consistency/corr/mouse/dropPCA_' + str( nDropPCA) + '/metric/' make_path(prefixPath) plt.savefig(prefixPath + 'metric_' + plotSuffix + '.svg') plt.close() avgConsistency = np.round(np.mean(offdiag_1D(rezMat)), 2) dfConsistency = pd_append_row( dfConsistency, [row['datatype'], row['intervName'], avgConsistency]) fig, ax = plt.subplots() dfPivot = pd_pivot(dfConsistency, *dfColumns) sns.heatmap(data=dfPivot, ax=ax, annot=True, vmin=0, vmax=1, cmap='jet') prefixPath = 'pics/consistency/corr/mouse/dropPCA_' + str( nDropPCA) + '/' make_path(prefixPath) fig.savefig(prefixPath + plotExtraSuffix + '.svg') plt.close()
def hypotheses_calc_plot_info3D(dataDB, hDict, datatypes=None, nBin=4, nDropPCA=None, **kwargs): if datatypes is None: datatypes = dataDB.get_data_types() for datatype in datatypes: for hLabel, (intervName, sources, targets) in hDict.items(): print(hLabel) dataLabel = '_'.join(['PID', datatype, hLabel, intervName]) # Find combinations of all source pairs nSrc = len(sources) sourcePairs = matiter.sample_list( sources, matiter.iter_g_2D(nSrc)) # Pairs of sources for s1Label, s2Label in sourcePairs: for labelTrg in targets: nMice = len(dataDB.mice) fig, ax = plt.subplots(nrows=nMice, ncols=nBin, figsize=(4 * nBin, 4 * nMice), tight_layout=True) for iMouse, mousename in enumerate(sorted(dataDB.mice)): channelNames = dataDB.get_channel_labels(mousename) s1Idx = channelNames.index(s1Label) s2Idx = channelNames.index(s2Label) targetIdx = channelNames.index(labelTrg) dataLst = dataDB.get_neuro_data( {'mousename': mousename}, datatype=datatype, intervName=intervName, **kwargs) dataRSP = np.concatenate( dataLst, axis=0) # Concatenate all sessions dataRP = np.mean(dataRSP, axis=1) # Average out time if nDropPCA is not None: dataRP = drop_PCA(dataRP, nDropPCA) dataBin = bin_data( dataRP, nBin, axis=1) # Binarize data over channels h3d = np.histogramdd( dataBin[:, [targetIdx, s1Idx, s2Idx]], bins=(nBin, nBin, nBin))[0] h3d /= np.sum(h3d) # Normalize for iTrgBin in range(nBin): img = ax[iMouse][iTrgBin].imshow(h3d[iTrgBin], vmin=0, vmax=10 / nBin**3, cmap='jet') ax[iMouse][iTrgBin].set_ylabel( s1Label) # First label is rows a.k.a Y-AXIS!!! ax[iMouse][iTrgBin].set_xlabel(s2Label) ax[iMouse][iTrgBin].set_title(labelTrg + '=' + str(iTrgBin)) imshow_add_color_bar(fig, ax[iMouse][iTrgBin], img) plt.savefig('pics/info3D_' + dataLabel + '_' + s1Label + '_' + s2Label + '_' + labelTrg + '.pdf') plt.close(fig)