def extract_ts_parc(net_parcels_map_nifti, conf, func_file, coords, roi, dir_path, ID, network, smooth, atlas_select, uatlas_select, label_names, c_boot, block_size, mask): import os.path from nilearn import input_data # from pynets.fmri.estimation import extract_ts_parc_fast from pynets import utils #from sklearn.externals.joblib import Memory if not os.path.isfile(func_file): raise ValueError( '\nERROR: Functional data input not found! Check that the file(s) specified with the -i flag ' 'exist(s)') if conf: if not os.path.isfile(conf): raise ValueError( '\nERROR: Confound regressor file not found! Check that the file(s) specified with the ' '-conf flag exist(s)') # if fast is True: # ts_within_nodes = extract_ts_parc_fast(net_parcels_map_nifti, conf, func_file, dir_path) # else: detrending = True # parcel_masker = input_data.NiftiLabelsMasker(labels_img=net_parcels_map_nifti, background_label=0, # standardize=True, smoothing_fwhm=float(smooth), # detrend=detrending, # memory=Memory(cachedir="%s%s%s" % (dir_path, # '/SpheresMasker_cache_', # str(ID)), verbose=2), # memory_level=1) parcel_masker = input_data.NiftiLabelsMasker( labels_img=net_parcels_map_nifti, background_label=0, standardize=True, smoothing_fwhm=float(smooth), detrend=detrending, verbose=2, mask_img=mask) # parcel_masker = input_data.NiftiLabelsMasker(labels_img=net_parcels_map_nifti, background_label=0, # standardize=True) ts_within_nodes = parcel_masker.fit_transform(func_file, confounds=conf) if ts_within_nodes is None: raise RuntimeError('\nERROR: Time-series extraction failed!') if float(c_boot) > 0: print("%s%s%s" % ('Performing circular block bootstrapping iteration: ', c_boot, '...')) ts_within_nodes = utils.timeseries_bootstrap(ts_within_nodes, block_size)[0] print("%s%s%d%s" % ('\nTime series has {0} samples'.format(ts_within_nodes.shape[0]), ' mean extracted from ', len(coords), ' volumetric ROI\'s')) print("%s%s%s" % ('Smoothing FWHM: ', smooth, ' mm\n')) # Save time series as txt file utils.save_ts_to_file(roi, network, ID, dir_path, ts_within_nodes, c_boot) node_size = None return ts_within_nodes, node_size, smooth, dir_path, atlas_select, uatlas_select, label_names, coords, c_boot
def extract_ts_coords(node_size, conf, func_file, coords, dir_path, ID, roi, network, smooth, atlas_select, uatlas_select, label_names, c_boot, block_size, mask): import os.path from nilearn import input_data # from pynets.fmri.estimation import extract_ts_coords_fast from pynets import utils #from sklearn.externals.joblib import Memory if not os.path.isfile(func_file): raise ValueError( '\nERROR: Functional data input not found! Check that the file(s) specified with the -i flag ' 'exist(s)') if conf: if not os.path.isfile(conf): raise ValueError( '\nERROR: Confound regressor file not found! Check that the file(s) specified with the ' '-conf flag exist(s)') # if fast is True: # ts_within_nodes = extract_ts_coords_fast(node_size, conf, func_file, coords, dir_path) # else: detrending = True # spheres_masker = input_data.NiftiSpheresMasker(seeds=coords, radius=float(node_size), allow_overlap=True, # standardize=True, smoothing_fwhm=float(smooth), # detrend=detrending, # memory=Memory(cachedir="%s%s%s" % (dir_path, # '/SpheresMasker_cache_', # str(ID)), verbose=2), # memory_level=1) if len(coords) > 0: spheres_masker = input_data.NiftiSpheresMasker( seeds=coords, radius=float(node_size), allow_overlap=True, standardize=True, smoothing_fwhm=float(smooth), detrend=detrending, verbose=2, mask_img=mask) # spheres_masker = input_data.NiftiSpheresMasker(seeds=coords, radius=float(node_size), allow_overlap=True, # standardize=True, verbose=1) ts_within_nodes = spheres_masker.fit_transform(func_file, confounds=conf) if float(c_boot) > 0: print("%s%s%s" % ('Performing circular block bootstrapping iteration: ', c_boot, '...')) ts_within_nodes = utils.timeseries_bootstrap( ts_within_nodes, block_size)[0] if ts_within_nodes is None: raise RuntimeError('\nERROR: Time-series extraction failed!') else: raise RuntimeError( '\nERROR: Cannot extract time-series from an empty list of coordinates. \nThis usually means ' 'that no nodes were generated based on the specified conditions at runtime (e.g. atlas was ' 'overly restricted by an RSN or some user-defined mask.') print("%s%s%d%s" % ('\nTime series has {0} samples'.format(ts_within_nodes.shape[0]), ' mean extracted from ', len(coords), ' coordinate ROI\'s')) print("%s%s%s" % ('Using node radius: ', node_size, ' mm')) print("%s%s%s" % ('Smoothing FWHM: ', smooth, ' mm\n')) # Save time series as txt file utils.save_ts_to_file(roi, network, ID, dir_path, ts_within_nodes, c_boot) return ts_within_nodes, node_size, smooth, dir_path, atlas_select, uatlas_select, label_names, coords, c_boot
def extract_ts_coords(node_size, conf, func_file, coords, dir_path, ID, roi, network, smooth, atlas, uatlas, labels, c_boot, block_size, hpass, detrending=True): """ API for employing Nilearn's NiftiSpheresMasker to extract fMRI time-series data from spherical ROI's based on a given list of seed coordinates. The resulting time-series can then optionally be resampled using circular-block bootrapping. The final 2D m x n array is ultimately saved to file in .npy format Parameters ---------- node_size : int Spherical centroid node size in the case that coordinate-based centroids are used as ROI's for tracking. conf : str File path to a confound regressor file for reduce noise in the time-series when extracting from ROI's. func_file : str File path to a preprocessed functional Nifti1Image in standard space. coords : list List of (x, y, z) tuples corresponding to an a-priori defined set (e.g. a coordinate atlas). dir_path : str Path to directory containing subject derivative data for given run. ID : str A subject id or other unique identifier. roi : str File path to binarized/boolean region-of-interest Nifti1Image file. 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. smooth : int Smoothing width (mm fwhm) to apply to time-series when extracting signal from ROI's. 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 graph nodes. c_boot : int Number of bootstraps if user specified circular-block bootstrapped resampling of the node-extracted time-series. block_size : int Size bootstrap blocks if bootstrapping (c_boot) is performed. hpass : bool High-pass filter values (Hz) to apply to node-extracted time-series. detrending : bool Indicates whether to remove linear trends from time-series when extracting across nodes. Default is True. Returns ------- ts_within_nodes : array 2D m x n array consisting of the time-series signal for each ROI node where m = number of scans and n = number of ROI's, where ROI's are spheres. node_size : int Spherical centroid node size in the case that coordinate-based centroids are used as ROI's for tracking. smooth : int Smoothing width (mm fwhm) to apply to time-series when extracting signal from ROI's. 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. hpass : bool High-pass filter values (Hz) to apply to node-extracted time-series. """ import os.path as op from nilearn import input_data from pynets import utils if not op.isfile(func_file): raise ValueError('\nERROR: Functional data input not found! Check that the file(s) specified with the -i flag ' 'exist(s)') if conf: if not op.isfile(conf): raise ValueError('\nERROR: Confound regressor file not found! Check that the file(s) specified with the ' '-conf flag exist(s)') if len(coords) > 0: spheres_masker = input_data.NiftiSpheresMasker(seeds=coords, radius=float(node_size), allow_overlap=True, standardize=True, smoothing_fwhm=float(smooth), high_pass=hpass, detrend=detrending, verbose=2) ts_within_nodes = spheres_masker.fit_transform(func_file, confounds=conf) if float(c_boot) > 0: print("%s%s%s" % ('Performing circular block bootstrapping iteration: ', c_boot, '...')) ts_within_nodes = utils.timeseries_bootstrap(ts_within_nodes, block_size)[0] if ts_within_nodes is None: raise RuntimeError('\nERROR: Time-series extraction failed!') else: raise RuntimeError( '\nERROR: Cannot extract time-series from an empty list of coordinates. \nThis usually means ' 'that no nodes were generated based on the specified conditions at runtime (e.g. atlas was ' 'overly restricted by an RSN or some user-defined mask.') print("%s%s%d%s" % ('\nTime series has {0} samples'.format(ts_within_nodes.shape[0]), ' mean extracted from ', len(coords), ' coordinate ROI\'s')) print("%s%s%s" % ('Using node radius: ', node_size, ' mm')) print("%s%s%s" % ('Smoothing FWHM: ', smooth, ' mm\n')) print("%s%s%s" % ('Applying high-pass filter: ', hpass, ' Hz\n')) # Save time series as txt file utils.save_ts_to_file(roi, network, ID, dir_path, ts_within_nodes, c_boot) return ts_within_nodes, node_size, smooth, dir_path, atlas, uatlas, labels, coords, c_boot, hpass
def extract_ts_parc(net_parcels_map_nifti, conf, func_file, coords, roi, dir_path, ID, network, smooth, atlas, uatlas, labels, c_boot, block_size, hpass, detrending=True): """ API for employing Nilearn's NiftiLabelsMasker to extract fMRI time-series data from spherical ROI's based on a given 3D atlas image of integer-based voxel intensities. The resulting time-series can then optionally be resampled using circular-block bootrapping. The final 2D m x n array is ultimately saved to file in .npy format Parameters ---------- net_parcels_map_nifti : Nifti1Image A nibabel-based nifti image consisting of a 3D array with integer voxel intensities corresponding to ROI membership. conf : str File path to a confound regressor file for reduce noise in the time-series when extracting from ROI's. func_file : str File path to a preprocessed functional Nifti1Image in standard space. coords : list List of (x, y, z) tuples corresponding to the center-of-mass of each parcellation node. dir_path : str Path to directory containing subject derivative data for given run. ID : str A subject id or other unique identifier. roi : str File path to binarized/boolean region-of-interest Nifti1Image file. 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. smooth : int Smoothing width (mm fwhm) to apply to time-series when extracting signal from ROI's. 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 graph nodes. c_boot : int Number of bootstraps if user specified circular-block bootstrapped resampling of the node-extracted time-series. block_size : int Size bootstrap blocks if bootstrapping (c_boot) is performed. hpass : bool High-pass filter values (Hz) to apply to node-extracted time-series. detrending : bool Indicates whether to remove linear trends from time-series when extracting across nodes. Default is True. Returns ------- ts_within_nodes : array 2D m x n array consisting of the time-series signal for each ROI node where m = number of scans and n = number of ROI's, where ROI's are parcel volumes. smooth : int Smoothing width (mm fwhm) to apply to time-series when extracting signal from ROI's. 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 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. hpass : bool High-pass filter values (Hz) to apply to node-extracted time-series. """ import os.path as op from nilearn import input_data from pynets import utils if not op.isfile(func_file): raise ValueError('\nERROR: Functional data input not found! Check that the file(s) specified with the -i flag ' 'exist(s)') if conf: if not op.isfile(conf): raise ValueError('\nERROR: Confound regressor file not found! Check that the file(s) specified with the ' '-conf flag exist(s)') parcel_masker = input_data.NiftiLabelsMasker(labels_img=net_parcels_map_nifti, background_label=0, standardize=True, smoothing_fwhm=float(smooth), high_pass=hpass, detrend=detrending, verbose=2, resampling_target='data') ts_within_nodes = parcel_masker.fit_transform(func_file, confounds=conf) if ts_within_nodes is None: raise RuntimeError('\nERROR: Time-series extraction failed!') if float(c_boot) > 0: print("%s%s%s" % ('Performing circular block bootstrapping iteration: ', c_boot, '...')) ts_within_nodes = utils.timeseries_bootstrap(ts_within_nodes, block_size)[0] print("%s%s%d%s" % ('\nTime series has {0} samples'.format(ts_within_nodes.shape[0]), ' mean extracted from ', len(coords), ' volumetric ROI\'s')) print("%s%s%s" % ('Smoothing FWHM: ', smooth, ' mm\n')) print("%s%s%s" % ('Applying high-pass filter: ', hpass, ' Hz\n')) # Save time series as txt file utils.save_ts_to_file(roi, network, ID, dir_path, ts_within_nodes, c_boot) node_size = None return ts_within_nodes, node_size, smooth, dir_path, atlas, uatlas, labels, coords, c_boot, hpass