def compute_graph_lasso_covariance(subject_id,
                                   group,
                                   session='func1',
                                   preprocessing_folder='pipeline_1',
                                   plot=True,
                                   save=True,
                                   save_file=True,
                                   msdl=False):
    """Returns graph lasso covariance for a subject_id
    """
    # load timeseries
    if msdl:
        ts = load_dynacomp_msdl_timeseries(
            subject_id,
            session=session,
            preprocessing_folder=preprocessing_folder)
        roi_names, roi_coords = load_msdl_names_and_coords()
    else:
        ts = load_dynacomp_roi_timeseries(
            subject_id,
            session=session,
            preprocessing_folder=preprocessing_folder)
        # load rois
        roi_names, roi_coords = load_roi_names_and_coords(subject_id)

    # compute covariance
    gl = covariance.GraphLassoCV(verbose=2)
    gl.fit(ts)
    if plot:
        plot_connectivity_matrix(subject_id, group, gl.covariance_, roi_names,
                                 'gl_covariance', session,
                                 preprocessing_folder, save, msdl)
        plot_connectivity_matrix(subject_id, group, gl.precision_, roi_names,
                                 'gl_precision', session, preprocessing_folder,
                                 save, msdl)
        sparsity = (gl.precision_ == 0)
        plot_connectivity_matrix(subject_id, group, sparsity, roi_names,
                                 'gl_sparsity', session, preprocessing_folder,
                                 save, msdl)

        plot_connectivity_glassbrain(subject_id, group, gl.covariance_,
                                     roi_coords, 'gl_covariance', session,
                                     preprocessing_folder, save, msdl)

    if save_file:
        CONN_DIR = set_data_base_dir('Dynacomp/connectivity')
        sparsity = (gl.precision_ == 0)
        if not os.path.isdir(os.path.join(CONN_DIR, subject_id)):
            os.mkdir(os.path.join(CONN_DIR, subject_id))
        output_file = os.path.join(
            CONN_DIR, subject_id, 'gl_' + session + '_' + preprocessing_folder)
        if msdl:
            output_file += '_msdl'
        np.savez(output_file,
                 covariance=gl.covariance_,
                 precision=gl.precision_,
                 sparsity=sparsity,
                 roi_names=roi_names,
                 roi_coords=roi_coords)
    return gl, roi_names, roi_coords
def compute_graph_lasso_covariance(subject_id, group, session='func1',
                                   preprocessing_folder='pipeline_1',
                                   plot=True, save=True, save_file=True,
                                   msdl=False):
    """Returns graph lasso covariance for a subject_id
    """
    # load timeseries
    if msdl:
        ts = load_dynacomp_msdl_timeseries(subject_id, session=session,
                                          preprocessing_folder=preprocessing_folder)
        roi_names, roi_coords = load_msdl_names_and_coords()
    else:
        ts = load_dynacomp_roi_timeseries(subject_id, session=session,
                                          preprocessing_folder=preprocessing_folder)
        # load rois
        roi_names, roi_coords = load_roi_names_and_coords(subject_id)

    # compute covariance
    gl = covariance.GraphLassoCV(verbose=2)
    gl.fit(ts)
    if plot:
        plot_connectivity_matrix(subject_id, group, gl.covariance_,
                                 roi_names, 'gl_covariance', session,
                                 preprocessing_folder, save, msdl)
        plot_connectivity_matrix(subject_id, group, gl.precision_,
                                 roi_names, 'gl_precision', session,
                                 preprocessing_folder, save, msdl)
        sparsity = (gl.precision_ == 0)
        plot_connectivity_matrix(subject_id, group, sparsity,
                                 roi_names, 'gl_sparsity', session,
                                 preprocessing_folder, save, msdl)

        plot_connectivity_glassbrain(subject_id, group, gl.covariance_,
                                     roi_coords, 'gl_covariance', session,
                                     preprocessing_folder, save, msdl)

    if save_file:
        CONN_DIR = set_data_base_dir('Dynacomp/connectivity')
        sparsity = (gl.precision_ == 0)
        if not os.path.isdir(os.path.join(CONN_DIR, subject_id)):
            os.mkdir(os.path.join(CONN_DIR, subject_id))
        output_file = os.path.join(CONN_DIR, subject_id,
                                   'gl_' + session + '_' + preprocessing_folder)
        if msdl:
            output_file += '_msdl'
        np.savez(output_file, covariance=gl.covariance_,
                 precision=gl.precision_, sparsity=sparsity,
                 roi_names=roi_names, roi_coords=roi_coords)
    return gl, roi_names, roi_coords
def compute_pearson_connectivity(subject_id,
                                 group,
                                 session='func1',
                                 preprocessing_folder='pipeline_1',
                                 plot=True,
                                 save=True,
                                 save_file=True,
                                 msdl=False):
    """Returns Pearson correlation coefficient for a subject_id
    """
    # load timeseries
    if msdl:
        ts = load_dynacomp_msdl_timeseries(
            subject_id,
            session=session,
            preprocessing_folder=preprocessing_folder)
        roi_names, roi_coords = load_msdl_names_and_coords()
    else:
        ts = load_dynacomp_roi_timeseries(
            subject_id,
            session=session,
            preprocessing_folder=preprocessing_folder)
        # load rois
        roi_names, roi_coords = load_roi_names_and_coords(subject_id)

    # pearson correlation
    pc = np.corrcoef(ts.T)

    if plot:
        print session
        plot_connectivity_matrix(subject_id, group, pc, roi_names, 'pc',
                                 session, preprocessing_folder, save, msdl)
        plot_connectivity_glassbrain(subject_id, group, pc, roi_coords, 'pc',
                                     session, preprocessing_folder, save, msdl)
    if save_file:
        CONN_DIR = set_data_base_dir('Dynacomp/connectivity')
        if not os.path.isdir(os.path.join(CONN_DIR, subject_id)):
            os.mkdir(os.path.join(CONN_DIR, subject_id))
        output_file = os.path.join(
            CONN_DIR, subject_id, 'pc_' + session + '_' + preprocessing_folder)
        if msdl:
            output_file += '_msdl'
        np.savez(output_file,
                 correlation=pc,
                 roi_names=roi_names,
                 roi_coords=roi_coords)
    return pc, roi_names, roi_coords
def compute_pearson_connectivity(subject_id, group, session='func1',
                                 preprocessing_folder='pipeline_1',
                                 plot=True, save=True, save_file=True,
                                 msdl=False):
    """Returns Pearson correlation coefficient for a subject_id
    """    
    # load timeseries
    if msdl:
        ts = load_dynacomp_msdl_timeseries(subject_id, session=session,
                                          preprocessing_folder=preprocessing_folder)
        roi_names, roi_coords = load_msdl_names_and_coords()
    else:
        ts = load_dynacomp_roi_timeseries(subject_id, session=session,
                                          preprocessing_folder=preprocessing_folder)
        # load rois
        roi_names, roi_coords = load_roi_names_and_coords(subject_id)

    # pearson correlation
    pc = np.corrcoef(ts.T)

    if plot:
        print session
        plot_connectivity_matrix(subject_id, group, pc,
                                 roi_names, 'pc',
                                 session,
                                 preprocessing_folder, save, msdl)
        plot_connectivity_glassbrain(subject_id, group, pc,
                                     roi_coords, 'pc', session,
                                     preprocessing_folder, save, msdl)
    if save_file:
        CONN_DIR = set_data_base_dir('Dynacomp/connectivity')
        if not os.path.isdir(os.path.join(CONN_DIR, subject_id)):
            os.mkdir(os.path.join(CONN_DIR, subject_id))
        output_file = os.path.join(CONN_DIR, subject_id,
                                   'pc_' + session + '_' + preprocessing_folder)
        if msdl:
            output_file += '_msdl'
        np.savez(output_file, correlation=pc,
                 roi_names=roi_names, roi_coords=roi_coords)
    return pc, roi_names, roi_coords
def compute_group_sparse_covariance(dataset, session='func1',
                                    preprocessing_folder='pipeline_1',
                                    plot=True, save=True, save_file=True,
                                    msdl=False):
    """Returns Group sparse covariance for all subjects
    """

    ts = []
    # load timeseries
    if msdl:
        for subject_id in dataset.subjects:
            ts.append(load_dynacomp_msdl_timeseries(subject_id,\
                      session=session, preprocessing_folder=preprocessing_folder))
        roi_names, roi_coords = load_msdl_names_and_coords()
    else:
        for subject_id in dataset.subjects:
            ts.append(load_dynacomp_roi_timeseries(subject_id, session=session,\
                      preprocessing_folder=preprocessing_folder))
        # load rois
        roi_names, roi_coords = load_roi_names_and_coords(subject_id)

    gsc = GroupSparseCovarianceCV(verbose=2)
    gsc.fit(ts)

    if plot:
        for i in range(len(dataset.subjects)):
            if not msdl:
                # load rois
                roi_names,\
                roi_coords = load_roi_names_and_coords(dataset.subjects[i])

            plot_connectivity_matrix(dataset.subjects[i], dataset.group[i],
                                     gsc.covariances_[..., i],
                                     roi_names, 'gsc_covariance', session,
                                     preprocessing_folder, save, msdl)

            plot_connectivity_matrix(dataset.subjects[i], dataset.group[i],
                                     gsc.precisions_[..., i],
                                     roi_names, 'gsc_precision', session,
                                     preprocessing_folder, save, msdl)

            sparsity = (gsc.precisions_[..., i] == 0)
            plot_connectivity_matrix(dataset.subjects[i], dataset.group[i],
                                     sparsity,
                                     roi_names, 'gsc_sparsity', session,
                                     preprocessing_folder, save, msdl)

            plot_connectivity_glassbrain(dataset.subjects[i], dataset.group[i],
                                         gsc.covariances_[..., i],
                                         roi_coords, 'gsc_covariance', session,
                                         preprocessing_folder, save, msdl)

    for i in range(len(dataset.subjects)):
        if not msdl:
            # load rois
            roi_names,\
            roi_coords = load_roi_names_and_coords(dataset.subjects[i])
        sparsity = (gsc.precisions_[..., i] == 0)            
        CONN_DIR = set_data_base_dir('Dynacomp/connectivity')
        subject_id = dataset.subjects[i]
        if not os.path.isdir(os.path.join(CONN_DIR, subject_id)):
            os.mkdir(os.path.join(CONN_DIR, subject_id))
        output_file = os.path.join(CONN_DIR, subject_id,
                                   'gsc_' + session + '_' + preprocessing_folder)
        if msdl:
            output_file += '_msdl'
        np.savez(output_file, covariance=gsc.covariances_[..., i],
                 precision=gsc.precisions_[..., i], sparsity=sparsity,
                 roi_names=roi_names, roi_coords=roi_coords)

    return gsc, roi_names, roi_coords
# Behavior data
behav_data = dataset.behavior
# Add deltas
for i in range(len(behav_data)):
    for key in ['Thresh', 'RT', 'HIT_RT', 'Perf', 'Conf_mean']:
        behav_data[i]['delta' + key] = - behav_data[i]['post' + key] + \
                                       behav_data[i]['pre' + key]

subject_id = dataset.subjects[0]
all_pc = []
avn = []
v = []
av = []
gr_ind = []
for i, subject_id in enumerate(dataset.subjects):
    ts = load_dynacomp_roi_timeseries(
        subject_id, session='func1', preprocessing_folder=preprocessing_folder)
    # ROIs : 19, 21
    pc = np.corrcoef(ts[:, 19], ts[:, 21])[0, 1]
    if dataset.group[i] == 'v':
        v.append(pc)
        gr_ind.append(i)
    if dataset.group[i] == 'avn':
        avn.append(pc)
        gr_ind.append(i)
    if dataset.group[i] == 'av':
        av.append(pc)
    all_pc.append(pc)

plt.figure()
plt.boxplot([avn, v, av])
plt.xticks(range(1, 4), ['avn', 'v', 'av'], fontsize=16)
def compute_group_sparse_covariance(dataset,
                                    session='func1',
                                    preprocessing_folder='pipeline_1',
                                    plot=True,
                                    save=True,
                                    save_file=True,
                                    msdl=False):
    """Returns Group sparse covariance for all subjects
    """

    ts = []
    # load timeseries
    if msdl:
        for subject_id in dataset.subjects:
            ts.append(load_dynacomp_msdl_timeseries(subject_id,\
                      session=session, preprocessing_folder=preprocessing_folder))
        roi_names, roi_coords = load_msdl_names_and_coords()
    else:
        for subject_id in dataset.subjects:
            ts.append(load_dynacomp_roi_timeseries(subject_id, session=session,\
                      preprocessing_folder=preprocessing_folder))
        # load rois
        roi_names, roi_coords = load_roi_names_and_coords(subject_id)

    gsc = GroupSparseCovarianceCV(verbose=2)
    gsc.fit(ts)

    if plot:
        for i in range(len(dataset.subjects)):
            if not msdl:
                # load rois
                roi_names,\
                roi_coords = load_roi_names_and_coords(dataset.subjects[i])

            plot_connectivity_matrix(dataset.subjects[i], dataset.group[i],
                                     gsc.covariances_[..., i], roi_names,
                                     'gsc_covariance', session,
                                     preprocessing_folder, save, msdl)

            plot_connectivity_matrix(dataset.subjects[i], dataset.group[i],
                                     gsc.precisions_[..., i], roi_names,
                                     'gsc_precision', session,
                                     preprocessing_folder, save, msdl)

            sparsity = (gsc.precisions_[..., i] == 0)
            plot_connectivity_matrix(dataset.subjects[i], dataset.group[i],
                                     sparsity, roi_names, 'gsc_sparsity',
                                     session, preprocessing_folder, save, msdl)

            plot_connectivity_glassbrain(dataset.subjects[i], dataset.group[i],
                                         gsc.covariances_[..., i], roi_coords,
                                         'gsc_covariance', session,
                                         preprocessing_folder, save, msdl)

    for i in range(len(dataset.subjects)):
        if not msdl:
            # load rois
            roi_names,\
            roi_coords = load_roi_names_and_coords(dataset.subjects[i])
        sparsity = (gsc.precisions_[..., i] == 0)
        CONN_DIR = set_data_base_dir('Dynacomp/connectivity')
        subject_id = dataset.subjects[i]
        if not os.path.isdir(os.path.join(CONN_DIR, subject_id)):
            os.mkdir(os.path.join(CONN_DIR, subject_id))
        output_file = os.path.join(
            CONN_DIR, subject_id,
            'gsc_' + session + '_' + preprocessing_folder)
        if msdl:
            output_file += '_msdl'
        np.savez(output_file,
                 covariance=gsc.covariances_[..., i],
                 precision=gsc.precisions_[..., i],
                 sparsity=sparsity,
                 roi_names=roi_names,
                 roi_coords=roi_coords)

    return gsc, roi_names, roi_coords
behav_data = dataset.behavior
# Add deltas
for i in range(len(behav_data)):
    for key in ['Thresh', 'RT', 'HIT_RT', 'Perf', 'Conf_mean']:
        behav_data[i]['delta' + key] = - behav_data[i]['post' + key] + \
                                       behav_data[i]['pre' + key]


subject_id = dataset.subjects[0]
all_pc = []
avn = []
v = []
av = []
gr_ind = []
for i, subject_id in enumerate(dataset.subjects):
    ts = load_dynacomp_roi_timeseries(subject_id, session='func1',
                                      preprocessing_folder=preprocessing_folder)                   
    # ROIs : 19, 21
    pc = np.corrcoef(ts[:,19], ts[:,21])[0,1]
    if dataset.group[i] == 'v':
        v.append(pc)
        gr_ind.append(i)
    if dataset.group[i] == 'avn':
        avn.append(pc)
        gr_ind.append(i)
    if dataset.group[i] == 'av':
        av.append(pc)
    all_pc.append(pc)

plt.figure()
plt.boxplot([avn, v, av])
plt.xticks(range(1, 4), ['avn', 'v', 'av'], fontsize=16)