def test_create_est_path_func(): """ Test create_est_path_diff functionality """ base_dir = str(Path(__file__).parent/"examples") dir_path = base_dir + '/002/fmri' network = 'Default' ID = '002' models = ['corr', 'cov', 'sps', 'partcorr'] roi = None node_size = 6 smooth = 6 c_boot = 1000 hpass = 100 parc = True # Cross test various connectivity models, thresholds, and parc true/false. for conn_model in models: for val in range(1, 10): thr = round(val*0.1, 1) for thr_type in ['prop', 'abs', 'dens', 'mst', 'disp']: for parc in [True, False]: est_path = utils.create_est_path_func(ID, network, conn_model, thr, roi, dir_path, node_size, smooth, c_boot, thr_type, hpass, parc) assert est_path is not None
def test_create_csv_path(): """ Test create_csv_path functionality """ import tempfile dir_path = str(tempfile.TemporaryDirectory().name) os.makedirs(dir_path) # fmri case network = 'Default' ID = '002' conn_model = 'corr' roi = None node_size = 6 smooth = 6 hpass = 100 parc = True thr = 0.75 thr_type = 'prop' extract_strategy = 'mean' est_path = utils.create_est_path_func(ID, network, conn_model, thr, roi, dir_path, node_size, smooth, thr_type, hpass, parc, extract_strategy) out_path = utils.create_csv_path(dir_path, est_path) assert out_path is not None
def test_create_est_path_func(node_size, hpass, smooth, parc): """ Test create_est_path_diff functionality """ base_dir = str(Path(__file__).parent / "examples") dir_path = base_dir + '/002/fmri' network = 'Default' ID = '002' conn_model = 'corr' roi = None c_boot = 1000 thr_type = 'prop' thr = 0.75 # Delete pre-existing graphs dir graph_dir = dir_path + '/graphs' if os.path.exists(graph_dir): shutil.move(graph_dir, graph_dir + '_tmp') est_path = utils.create_est_path_func(ID, network, conn_model, thr, roi, dir_path, node_size, smooth, c_boot, thr_type, hpass, parc) assert est_path is not None # Restore pre-existing graph dir if os.path.exists(graph_dir + '_tmp'): shutil.rmtree(graph_dir) shutil.move(graph_dir + '_tmp', graph_dir)
def test_create_csv_path(): """ Test create_csv_path functionality """ import tempfile tmp = tempfile.TemporaryDirectory() dir_path = str(tmp.name) os.makedirs(dir_path, exist_ok=True) # fmri case subnet = 'Default' ID = '002' conn_model = 'corr' roi = None node_size = 6 smooth = 6 hpass = 100 parc = True thr = 0.75 thr_type = 'prop' signal = 'mean' est_path = utils.create_est_path_func(ID, subnet, conn_model, thr, roi, dir_path, node_size, smooth, thr_type, hpass, parc, signal) out_path = utils.create_csv_path(dir_path, est_path) assert out_path is not None tmp.cleanup()
def test_create_csv_path(): """ Test create_csv_path functionality """ base_dir = str(Path(__file__).parent/"examples") # fmri case dir_path = base_dir + '/002/fmri' network = 'Default' ID = '002' models = ['corr', 'cov', 'sps', 'partcorr'] roi = None node_size = 6 smooth = 6 c_boot = 100 hpass = 100 parc = True directget = 'prob' max_length = 200 # Cross test various connectivity models, thresholds, and parc true/false. for conn_model in models: for val in range(1, 10): thr = round(val*0.1, 1) for thr_type in ['prop', 'abs', 'dens', 'mst', 'disp']: for parc in [True, False]: est_path = utils.create_est_path_func(ID, network, conn_model, thr, roi, dir_path, node_size, smooth, c_boot, thr_type, hpass, parc) out_path = utils.create_csv_path(dir_path, est_path) assert out_path is not None dir_path = base_dir + '/002/dmri' network = 'Default' ID = '002' models = ['corr', 'cov', 'sps', 'partcorr'] roi = None node_size = 6 for conn_model in models: for val in range(1, 10): thr = round(val*0.1, 1) for thr_type in ['prop', 'abs', 'dens', 'mst', 'disp']: for target_samples in range(0, 100, 1000): for track_type in ['local', 'particle']: for parc in [True, False]: est_path = utils.create_est_path_diff(ID, network, conn_model, thr, roi, dir_path, node_size, target_samples, track_type, thr_type, parc, directget, max_length) out_path = utils.create_csv_path(dir_path, est_path) assert out_path is not None
def test_create_csv_path(): """ Test create_csv_path functionality """ base_dir = str(Path(__file__).parent / "examples") # fmri case dir_path = base_dir + '/002/fmri' network = 'Default' ID = '002' conn_model = 'corr' roi = None node_size = 6 smooth = 6 c_boot = 100 hpass = 100 parc = True thr = 0.75 thr_type = 'prop' # Delete pre-existing graphs dir graph_dir = dir_path + '/graphs' if os.path.exists(graph_dir): shutil.move(graph_dir, graph_dir + '_tmp') # Delete pre-existing netmetrics dir netmetrics_dir = str(Path(dir_path).parent) + '/netmetrics' if os.path.exists(netmetrics_dir): shutil.move(netmetrics_dir, netmetrics_dir + '_tmp') est_path = utils.create_est_path_func(ID, network, conn_model, thr, roi, dir_path, node_size, smooth, c_boot, thr_type, hpass, parc) out_path = utils.create_csv_path(dir_path, est_path) assert out_path is not None # Restore pre-existing graph dir if os.path.exists(graph_dir + '_tmp'): shutil.rmtree(graph_dir) shutil.move(graph_dir + '_tmp', graph_dir) if os.path.exists(netmetrics_dir + '_tmp'): shutil.rmtree(netmetrics_dir) shutil.move(netmetrics_dir + '_tmp', netmetrics_dir)
def test_create_est_path_func(node_size, hpass, smooth, parc): """ Test create_est_path_diff functionality """ import tempfile dir_path = str(tempfile.TemporaryDirectory().name) os.makedirs(dir_path) network = 'Default' ID = '002' conn_model = 'corr' roi = None thr_type = 'prop' thr = 0.75 extract_strategy = 'mean' est_path = utils.create_est_path_func(ID, network, conn_model, thr, roi, dir_path, node_size, smooth, thr_type, hpass, parc, extract_strategy) assert est_path is not None
def test_create_est_path_func(node_size, hpass, smooth, parc): """ Test create_est_path_diff functionality """ import tempfile tmp = tempfile.TemporaryDirectory() dir_path = str(tmp.name) os.makedirs(dir_path, exist_ok=True) subnet = 'Default' ID = '002' conn_model = 'corr' roi = None thr_type = 'prop' thr = 0.75 signal = 'mean' est_path = utils.create_est_path_func(ID, subnet, conn_model, thr, roi, dir_path, node_size, smooth, thr_type, hpass, parc, signal) assert est_path is not None tmp.cleanup()
def test_pass_meta_outs(embed_multimodal_multiplex): """ Test pass_meta_outs functionality Note: omni argument may be failing due to functions in netmotifs or due to an unexpected input. Marked for xfail and should be updated after tests for netmotifs are created. """ base_dir = str(Path(__file__).parent / "examples") dmri_path = base_dir + '/002/dmri' func_path = base_dir + '/002/fmri' conn_model_func = 'corr' conn_model_struct = 'csa' network_func = 'Default' network_struct = 'Default' thr_func = 0.6 thr_struct = 0.8 prune_func = True prune_struct = False ID_func = '002' ID_struct = '002' roi_func = func_path + '/pDMN_3_bin_mask.nii.gz' roi_struct = dmri_path + '/pDMN_3_bin_mask.nii.gz' # this doesn't exists norm_func = 1 norm_struct = 2 binary_func = False binary_struct = True embed = embed_multimodal_multiplex[0] multimodal = embed_multimodal_multiplex[1] multiplex = embed_multimodal_multiplex[2] node_size = 6 smooth = 6 c_boot = 1000 thr_type = 'prop' hpass = 100 parc = True directget = 'prob' max_length = 200 thr_type = 'prop' target_samples = 10 track_type = 'local' conn_matrix_diff = np.random.rand(10, 10) conn_matrix_func = np.random.rand(10, 10) est_path_func = utils.create_est_path_func(ID_func, network_func, conn_model_func, thr_func, roi_func, func_path, node_size, smooth, c_boot, thr_type, hpass, parc) est_path_diff = utils.create_est_path_diff(ID_struct, network_struct, conn_model_struct, thr_struct, roi_struct, dmri_path, node_size, target_samples, track_type, thr_type, parc, directget, max_length) utils.save_mat(conn_matrix_diff, est_path_diff) utils.save_mat(conn_matrix_func, est_path_func) [ conn_model_iterlist, est_path_iterlist, network_iterlist, thr_iterlist, prune_iterlist, ID_iterlist, roi_iterlist, norm_iterlist, binary_iterlist ] = utils.pass_meta_ins_multi(conn_model_func, est_path_func, network_func, thr_func, prune_func, ID_func, roi_func, norm_func, binary_func, conn_model_struct, est_path_diff, network_struct, thr_struct, prune_struct, ID_struct, roi_struct, norm_struct, binary_struct) [ conn_model_iterlist_out, est_path_iterlist_out, network_iterlist_out, thr_iterlist_out, prune_iterlist_out, ID_iterlist_out, roi_iterlist_out, norm_iterlist_out, binary_iterlist_out ] = utils.pass_meta_outs(conn_model_iterlist, est_path_iterlist, network_iterlist, thr_iterlist, prune_iterlist, ID_iterlist, roi_iterlist, norm_iterlist, binary_iterlist, embed, multimodal, multiplex) assert conn_model_iterlist_out is not None assert est_path_iterlist_out is not None assert network_iterlist_out is not None assert thr_iterlist_out is not None assert prune_iterlist_out is not None assert ID_iterlist_out is not None assert roi_iterlist_out is not None assert norm_iterlist_out is not None assert binary_iterlist_out is not None
def thresh_func(dens_thresh, thr, conn_matrix, conn_model, network, ID, dir_path, roi, node_size, min_span_tree, smooth, disp_filt, parc, prune, atlas, uatlas, labels, coords, c_boot, norm, binary, hpass): """ Threshold a functional connectivity matrix using any of a variety of methods. Parameters ---------- dens_thresh : bool Indicates whether a target graph density is to be used as the basis for thresholding. thr : float A value, between 0 and 1, to threshold the graph using any variety of methods triggered through other options. conn_matrix : array Adjacency matrix stored as an m x n array of nodes and edges. conn_model : str Connectivity estimation model (e.g. corr for correlation, cov for covariance, sps for precision covariance, partcorr for partial correlation). sps type is used by default. network : str Resting-state network based on Yeo-7 and Yeo-17 naming (e.g. 'Default') used to filter nodes in the study of brain subgraphs. ID : str A subject id or other unique identifier. dir_path : str Path to directory containing subject derivative data for given run. roi : str File path to binarized/boolean region-of-interest Nifti1Image file. node_size : int Spherical centroid node size in the case that coordinate-based centroids are used as ROI's. min_span_tree : bool Indicates whether local thresholding from the Minimum Spanning Tree should be used. smooth : int Smoothing width (mm fwhm) to apply to time-series when extracting signal from ROI's. disp_filt : bool Indicates whether local thresholding using a disparity filter and 'backbone network' should be used. parc : bool Indicates whether to use parcels instead of coordinates as ROI nodes. prune : bool Indicates whether to prune final graph of disconnected nodes/isolates. atlas : str Name of atlas parcellation used. uatlas : str File path to atlas parcellation Nifti1Image in MNI template space. labels : list List of string labels corresponding to ROI nodes. coords : list List of (x, y, z) tuples corresponding to a coordinate atlas used or which represent the center-of-mass of each parcellation node. c_boot : int Number of bootstraps if user specified circular-block bootstrapped resampling of the node-extracted time-series. norm : int Indicates method of normalizing resulting graph. binary : bool Indicates whether to binarize resulting graph edges to form an unweighted graph. hpass : float High-pass filter values (Hz) to apply to node-extracted time-series. Returns ------- conn_matrix_thr : array Weighted, thresholded, NxN matrix. edge_threshold : str The string percentage representation of thr. est_path : str File path to the thresholded graph, conn_matrix_thr, saved as a numpy array in .npy format. thr : float The value, between 0 and 1, used to threshold the graph using any variety of methods triggered through other options. node_size : int Spherical centroid node size in the case that coordinate-based centroids are used as ROI's. network : str Resting-state network based on Yeo-7 and Yeo-17 naming (e.g. 'Default') used to filter nodes in the study of brain subgraphs. conn_model : str Connectivity estimation model (e.g. corr for correlation, cov for covariance, sps for precision covariance, partcorr for partial correlation). sps type is used by default. roi : str File path to binarized/boolean region-of-interest Nifti1Image file. smooth : int Smoothing width (mm fwhm) to apply to time-series when extracting signal from ROI's. prune : bool Indicates whether to prune final graph of disconnected nodes/isolates. ID : str A subject id or other unique identifier. dir_path : str Path to directory containing subject derivative data for given run. atlas : str Name of atlas parcellation used. uatlas : str File path to atlas parcellation Nifti1Image in MNI template space. labels : list List of string labels corresponding to ROI nodes. coords : list List of (x, y, z) tuples corresponding to a coordinate atlas used or which represent the center-of-mass of each parcellation node. c_boot : int Number of bootstraps if user specified circular-block bootstrapped resampling of the node-extracted time-series. norm : int Indicates method of normalizing resulting graph. binary : bool Indicates whether to binarize resulting graph edges to form an unweighted graph. hpass : float High-pass filter values (Hz) to apply to node-extracted time-series. """ import gc from pynets.core import utils, thresholding thr_perc = 100 - np.abs(100 * float(thr)) if parc is True: node_size = 'parc' if np.count_nonzero(conn_matrix) == 0: raise ValueError('ERROR: Raw connectivity matrix contains only zeros.') # Save unthresholded utils.save_mat( conn_matrix, utils.create_raw_path_func(ID, network, conn_model, roi, dir_path, node_size, smooth, c_boot, hpass, parc)) [thr_type, edge_threshold, conn_matrix_thr, coords, labels] = thresholding.perform_thresholding(conn_matrix, coords, labels, thr, thr_perc, min_span_tree, dens_thresh, disp_filt) if not nx.is_connected(nx.from_numpy_matrix(conn_matrix_thr)): print('Warning: Fragmented graph') # Save thresholded mat est_path = utils.create_est_path_func(ID, network, conn_model, thr, roi, dir_path, node_size, smooth, c_boot, thr_type, hpass, parc) utils.save_mat(conn_matrix_thr, est_path) gc.collect() return (conn_matrix_thr, edge_threshold, est_path, thr, node_size, network, conn_model, roi, smooth, prune, ID, dir_path, atlas, uatlas, labels, coords, c_boot, norm, binary, hpass)
def thresh_func( dens_thresh, thr, conn_matrix, conn_model, network, ID, dir_path, roi, node_size, min_span_tree, smooth, disp_filt, parc, prune, atlas, uatlas, labels, coords, norm, binary, hpass, extract_strategy, check_consistency=True, ): """ Threshold a functional connectivity matrix using any of a variety of methods. Parameters ---------- dens_thresh : bool Indicates whether a target graph density is to be used as the basis for thresholding. thr : float A value, between 0 and 1, to threshold the graph using any variety of methods triggered through other options. conn_matrix : array Adjacency matrix stored as an m x n array of nodes and edges. conn_model : str Connectivity estimation model (e.g. corr for correlation, cov for covariance, sps for precision covariance, partcorr for partial correlation). sps type is used by default. network : str Resting-state network based on Yeo-7 and Yeo-17 naming (e.g. 'Default') used to filter nodes in the study of brain subgraphs. ID : str A subject id or other unique identifier. dir_path : str Path to directory containing subject derivative data for given run. roi : str File path to binarized/boolean region-of-interest Nifti1Image file. node_size : int Spherical centroid node size in the case that coordinate-based centroids are used as ROI's. min_span_tree : bool Indicates whether local thresholding from the Minimum Spanning Tree should be used. smooth : int Smoothing width (mm fwhm) to apply to time-series when extracting signal from ROI's. disp_filt : bool Indicates whether local thresholding using a disparity filter and 'backbone network' should be used. parc : bool Indicates whether to use parcels instead of coordinates as ROI nodes. prune : bool Indicates whether to prune final graph of disconnected nodes/isolates. atlas : str Name of atlas parcellation used. uatlas : str File path to atlas parcellation Nifti1Image in MNI template space. labels : list List of string labels corresponding to ROI nodes. coords : list List of (x, y, z) tuples corresponding to a coordinate atlas used or which represent the center-of-mass of each parcellation node. norm : int Indicates method of normalizing resulting graph. binary : bool Indicates whether to binarize resulting graph edges to form an unweighted graph. hpass : float High-pass filter values (Hz) to apply to node-extracted time-series. extract_strategy : str The name of a valid function used to reduce the time-series region extraction. Returns ------- conn_matrix_thr : array Weighted, thresholded, NxN matrix. edge_threshold : str The string percentage representation of thr. est_path : str File path to the thresholded graph, conn_matrix_thr, saved as a numpy array in .npy format. thr : float The value, between 0 and 1, used to threshold the graph using any variety of methods triggered through other options. node_size : int Spherical centroid node size in the case that coordinate-based centroids are used as ROI's. network : str Resting-state network based on Yeo-7 and Yeo-17 naming (e.g. 'Default') used to filter nodes in the study of brain subgraphs. conn_model : str Connectivity estimation model (e.g. corr for correlation, cov for covariance, sps for precision covariance, partcorr for partial correlation). sps type is used by default. roi : str File path to binarized/boolean region-of-interest Nifti1Image file. smooth : int Smoothing width (mm fwhm) to apply to time-series when extracting signal from ROI's. prune : bool Indicates whether to prune final graph of disconnected nodes/isolates. ID : str A subject id or other unique identifier. dir_path : str Path to directory containing subject derivative data for given run. atlas : str Name of atlas parcellation used. uatlas : str File path to atlas parcellation Nifti1Image in MNI template space. labels : list List of string labels corresponding to ROI nodes. coords : list List of (x, y, z) tuples corresponding to a coordinate atlas used or which represent the center-of-mass of each parcellation node. norm : int Indicates method of normalizing resulting graph. binary : bool Indicates whether to binarize resulting graph edges to form an unweighted graph. hpass : float High-pass filter values (Hz) to apply to node-extracted time-series. extract_strategy : str The name of a valid function used to reduce the time-series region extraction. References ---------- .. [1] van Wijk, B. C. M., Stam, C. J., & Daffertshofer, A. (2010). Comparing brain networks of different size and connectivity density using graph theory. PLoS ONE. https://doi.org/10.1371/journal.pone.0013701 """ import gc from pynets.core import utils, thresholding if np.count_nonzero(conn_matrix) == 0: print(UserWarning("Raw connectivity matrix contains only" " zeros.")) [thr_type, edge_threshold, conn_matrix_thr] = \ thresholding.perform_thresholding( conn_matrix, thr, min_span_tree, dens_thresh, disp_filt) if not nx.is_connected(nx.from_numpy_matrix(conn_matrix_thr)): print("Warning: Fragmented graph") # Save thresholded mat est_path = utils.create_est_path_func( ID, network, conn_model, thr, roi, dir_path, node_size, smooth, thr_type, hpass, parc, extract_strategy, ) utils.save_mat(conn_matrix_thr, est_path) gc.collect() if check_consistency is True: assert len(coords) == len(labels) == conn_matrix_thr.shape[0] if network is not None: atlas_name = f"{atlas}_{network}_stage-post_thr" else: atlas_name = f"{atlas}_stage-post_thr" utils.save_coords_and_labels_to_json(coords, labels, dir_path, atlas_name, indices=None) return ( edge_threshold, est_path, thr, node_size, network, conn_model, roi, smooth, prune, ID, dir_path, atlas, uatlas, labels, coords, norm, binary, hpass, extract_strategy, )