예제 #1
0
def main():
    pd_obj = pu.proj_data()
    pdata = pd_obj.get_data()
    rois = pdata['roiLabels']
    meg_subj, meg_sess = pd_obj.get_meg_metadata()

    # downsamp_file = '../data/downsampled_MEG_truncated.hdf5'
    # extract_phase_amp_downsamp(meg_sess, meg_subj, rois, downsamp_file)

    # data_path = '../data/MEG_downsampled_phase_amp_data.hdf5'
    data_path = '../data/MEG_phase_amp_data.hdf5'
    output_path = '../data/MEG_phase_phase_coupling.hdf5'

    for sess in meg_sess:
        for subj in meg_subj:
            subj_ppc = np.ndarray(shape=(len(rois), len(rois)))
            data_file = h5py.File(data_path, 'r')
            subj_data = data_file[subj + '/' + sess +
                                  '/BOLD bandpass/phase_data'][...]

            for r1 in range(len(rois)):
                for r2 in range(len(rois)):
                    phase_1 = subj_data[:, r1]
                    phase_2 = subj_data[:, r2]
                    rho = circ_corr(phase_1, phase_2)
                    subj_ppc[r1, r2] = rho

            ppc_file = h5py.File(output_path)
            prog = sess + '/' + subj
            if prog in ppc_file:
                continue
            out_group = ppc_file.require_group(prog)
            out_group.create_dataset('ppc', data=subj_ppc, compression='lzf')
            ppc_file.close()
예제 #2
0
def main():
    pdata = pu.proj_data()
    rois = pdata.roiLabels
    meg_subj, meg_sess = pdata.get_meg_metadata()
    phase_amp_file = '../data/MEG_phase_amp_data.hdf5'
    attn_rois = ['IPS1_R', 'FEF_R', 'TPOJ1_R', 'AVI_R',
                 '7m_R']  # ['IPS1_R', 'FEF_R', 'TPOJ1_R', 'AVI_R']

    # --Phase-phase coupling-- #
    first_level_tests_ppc = first_level_ppc(phase_amp_file, meg_subj, meg_sess,
                                            rois, attn_rois)
    first_level_tests_ppc.to_excel(
        '../data/attention_networks/ppc_first_level.xlsx')
    first_level_tests_ppc = pd.read_excel(
        '../data/attention_networks/ppc_first_level.xlsx', index_col=0)
    second_level_res = second_level(first_level_tests_ppc)
    cron_alpha_res = cron_alpha_test(first_level_tests_ppc, attn_rois,
                                     meg_sess)

    res = {
        'first_level_tests': first_level_tests_ppc,
        'second_level_tests': second_level_res,
        'cron_alpha_tests': cron_alpha_res
    }
    pu.save_xls(res, '../data/attention_networks/ppc_second_level.xlsx')

    plot_grouped_boxplot(first_level_tests_ppc,
                         attn_rois,
                         cron_alpha_df=cron_alpha_res,
                         fname='../figures/attention_networks/ppc_boxplot.pdf')

    # --Phase-amplitude coupling-- #
    first_level_tests_pac = first_level_pac(phase_amp_file, meg_subj, meg_sess,
                                            rois, attn_rois)
    first_level_tests_pac.to_excel(
        '../data/attention_networks/pac_first_level.xlsx')
    first_level_tests_pac = pd.read_excel(
        '../data/attention_networks/pac_first_level.xlsx', index_col=0)
    second_level_res = second_level(first_level_tests_pac)
    cron_alpha_res = cron_alpha_test(first_level_tests_pac, attn_rois,
                                     meg_sess)

    res = {
        'first_level_tests': first_level_tests_pac,
        'second_level_tests': second_level_res,
        'cron_alpha_tests': cron_alpha_res
    }
    pu.save_xls(res, '../data/attention_networks/pac_second_level.xlsx')

    plot_grouped_boxplot(first_level_tests_pac,
                         attn_rois,
                         cron_alpha_df=cron_alpha_res,
                         fname='../figures/attention_networks/pac_boxplot.pdf')
def main():
    pdir = pu.get_proj_dir()
    pdata = pu.proj_data()
    rois = pdata.roiLabels
    meg_subj, meg_sess = pdata.get_meg_metadata()
    phase_amp_file = pdir + '/data/MEG_phase_amp_data.hdf5'
    attn_rois = ['IPS1_R', 'FEF_R', 'TPOJ1_R', 'AVI_R']

    first_level_tests = first_level(phase_amp_file, meg_subj, meg_sess, rois,
                                    attn_rois)
    first_level_tests.to_excel(
        pdir + '/figures/attention_networks/phase_amp_first_level.xlsx')
예제 #4
0
import sys

sys.path.append("..")

import os
import h5py
import datetime
import numpy as np
import pandas as pd
import proj_utils as pu
import matplotlib.pyplot as plt
from scipy.signal import coherence
from nipype.algorithms import icc

#Load data
pdObj = pu.proj_data()
pdir = pu._get_proj_dir()

pData = pdObj.get_data()
rois = pData['roiLabels']
database = pData['database']

#Getting fmri info
fmri_subj_path = pdir + '/data/timeseries_rs-fMRI'
files = os.listdir(fmri_subj_path)
fmri_subj = sorted(list(set([f.split('_')[0] for f in files])))
fmri_sess = list(set([f.split('_')[2].replace('.mat', '') for f in files]))

badSubjects = ['104012', '125525', '151526', '182840', '200109', '500222']

for subject in badSubjects:
예제 #5
0
def calc_phase_amp_power(how='location'):
    p_data = pu.proj_data()
    subjects, sessions = p_data.get_meg_metadata()
    rois = p_data.roiLabels
    fs = 500

    if how is 'location':
        df_list = []
        for session in sessions:
            session_df = pd.DataFrame(index=subjects)
            for subject in subjects:
                prog = "%s - %s" % (session, subject)
                print('%s: Calculating infraslow power for %s with location' % (pu.ctime(), prog))

                database = h5py.File('../data/multimodal_HCP.hdf5', 'r+')
                dset = database[subject + '/MEG/' + session + '/timeseries'][...]
                for ROIindex in range(len(rois)):
                    data = dset[:, ROIindex]
                    label = rois[ROIindex]

                    # Get real amplitudes of FFT (only in postive frequencies)
                    # Squared to get power
                    fft_power = np.absolute(np.fft.rfft(data)) ** 2
                    # Get frequencies for amplitudes in Hz

                    fft_freq = np.fft.rfftfreq(len(data), 1.0 / fs)
                    infraslow_band = (.01, .1)  # ('BOLD bandpass', (.01, .1))

                    freq_ix = np.where((fft_freq >= infraslow_band[0]) &
                                       (fft_freq <= infraslow_band[1]))[0]
                    colname = '%s %s' % (session, label)
                    if colname not in session_df:
                        session_df[colname] = np.nan

                    avg_power = np.mean(fft_power[freq_ix])
                    session_df.loc[subject][colname] = avg_power

                database.close()

            df_list.append(session_df)

        grand_df = pd.concat(df_list, axis=1)
        return grand_df

    elif how is 'bandpass':
        df_list = []
        for sess in sessions:
            session_colnames = ['%s %s' % (sess, r) for r in rois]
            session_df = pd.DataFrame(index=subjects, columns=session_colnames)
            for subj in subjects:
                prog = "%s - %s" % (sess, subj)
                print('%s: Calculating infraslow power for %s with bandpass' % (pu.ctime(), prog))

                f = h5py.File('../data/multimodal_HCP.hdf5', 'r')
                data = f[subj + '/MEG/' + sess + '/timeseries'][...]
                f.close()

                data = _butter_filter(data, fs=500, cutoffs=[.01, .1])

                fft_power = np.absolute(np.fft.rfft(data, axis=0)) ** 2
                average_power = np.mean(fft_power, axis=0)

                session_df.loc[subj] = average_power

            df_list.append(session_df)

        grand_df = pd.concat(df_list, axis=1)
        return grand_df

    elif how is 'truncated':
        df_list = []
        for sess in sessions:
            session_colnames = ['%s %s' % (sess, r) for r in rois]
            session_df = pd.DataFrame(index=subjects, columns=session_colnames)
            for subj in subjects:
                f = h5py.File('../data/downsampled_MEG_truncated.hdf5', 'r')
                data = f[subj + '/MEG/' + sess + '/resampled_truncated'][...]
                f.close()

                data = _butter_filter(data, fs=500, cutoffs=[.01, .1])

                fft_power = np.absolute(np.fft.rfft(data, axis=0)) ** 2
                average_power = np.mean(fft_power, axis=0)

                session_df.loc[subj] = average_power

            df_list.append(session_df)

        grand_df = pd.concat(df_list, axis=1)
        return grand_df

    print('%s: Finished' % pu.ctime())
예제 #6
0
                continue
            else:
                val = conj_res.loc[idx_label]['LV_1']
                heatmap_data.loc[roi2][roi1] = val

    fig, ax = plt.subplots(figsize=(8, 6))
    heatmap(data=heatmap_data,
            cmap='coolwarm',
            center=0.0,
            annot=True,
            fmt='.2f',
            cbar=True,
            square=True,
            ax=ax)
    fig.savefig(fig_dir + '/heatmap.svg')
    # plt.show()

    logging.info('%s: Finished' % pu.ctime())


if __name__ == "__main__":
    meg_subj, meg_sess = pu.proj_data.get_meg_metadata()
    rois = pu.proj_data().roiLabels
    pls_psqi_with_power(meg_sess,
                        rois,
                        fig_dir='../figures/PLS/card_sort/power',
                        run_check=True)
    pls_psqi_with_bold_alpha_pac(
        fig_dir='../figures/PLS/card_sort/pac_bold_alpha', run_check=True)
    # pls_psqi_with_ppc_roi_version(fig_dir='../figures/PLS/card_sort/ppc_network_rois', run_check=True)