Source code for cmtklib.bids.network

"""This module provides functions to handle connectome networks / graphs generated by CMP3."""

import os
import warnings
from glob import glob

import networkx as nx
import numpy as np

from cmtklib.bids.io import __cmp_directory__

warnings.simplefilter("ignore")


[docs]def load_graphs(output_dir, subjects, parcellation_scheme, weight): """Return a dictionary of connectivity matrices (graph adjacency matrices). Still in development Parameters ---------- output_dir : string Output/derivatives directory subjects : list List of subject parcellation_scheme : ['NativeFreesurfer', 'Lausanne2018', 'Custom'] Parcellation scheme weight : ['number_of_fibers','fiber_density',...] Edge metric to extract from the graph Returns ------- connmats: dict Dictionary of connectivity matrices """ if parcellation_scheme == "Lausanne2018": bids_atlas_label = "L2018" elif parcellation_scheme == "NativeFreesurfer": bids_atlas_label = "Desikan" if parcellation_scheme == "NativeFreesurfer": for subj in subjects: subj_dir = os.path.join(output_dir, subj) subj_session_dirs = glob(os.path.join(subj_dir, "ses-*")) subj_sessions = [ "ses-{}".format(subj_session_dir.split("-")[-1]) for subj_session_dir in subj_session_dirs ] if len(subj_sessions) > 0: # Session structure for subj_session in subj_sessions: conn_derivatives_dir = os.path.join( output_dir, __cmp_directory__, subj, subj_session, "connectivity" ) # Extract the connectivity matrix # self.subject+'_label-'+bids_atlas_label+'_desc-scale5_conndata-snetwork_connectivity' connmat_fname = os.path.join( conn_derivatives_dir, "{}_{}_atlas-{}_conndata-snetwork_connectivity.gpickle".format( subj, subj_session, bids_atlas_label ), ) connmat_gp = nx.read_gpickle(connmat_fname) connmat = nx.to_numpy_matrix( connmat_gp, weight=weight, dtype=np.float32 ) else: # For each parcellation scale for scale in np.arange(1, 6): for subj in subjects: subj_dir = os.path.join(output_dir, subj) subj_session_dirs = glob(os.path.join(subj_dir, "ses-*")) subj_sessions = [ "ses-{}".format(subj_session_dir.split("-")[-1]) for subj_session_dir in subj_session_dirs ] if len(subj_sessions) > 0: # Session structure for subj_session in subj_sessions: conn_derivatives_dir = os.path.join( output_dir, __cmp_directory__, subj, subj_session, "connectivity" ) # Extract the connectivity matrix # self.subject+'_label-'+bids_atlas_label+'_desc-scale5_conndata-snetwork_connectivity' connmat_fname = os.path.join( conn_derivatives_dir, "{}_{}_atlas-{}_res-scale{}_conndata-snetwork_connectivity.gpickle".format( subj, subj_session, bids_atlas_label, scale ), ) connmat_gp = nx.read_gpickle(connmat_fname) connmat = nx.to_numpy_matrix( connmat_gp, weight=weight, dtype=np.float32 ) # TODO: finalize condition and append all conmat to a list return connmat