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)
Exemple #2
0
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()
Exemple #5
0
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)