Correspondence of large-scale functional brain network decline across aging mice and humans.
The 2 matches
- [1] § Materials and Methods › Mouse Data Acquisition and Preprocessing. ↔ rabies/confound_correction_pkg/confound_correction.py, lines 752 to 838 · score 0.70 · confound correction, motion parameters, spatial smoothing, NOise, filtering, EPI · Report a mismatch
- [2] § Materials and Methods › Human Data Acquisition and Preprocessing. ↔ rabies/confound_correction_pkg/confound_correction.py, lines 752 to 838 · score 0.53 · motion parameters, spatial smoothing, variance, regression, frames, global · Report a mismatch
Paper
Loaded from Europe PMC by your browser; OSCR does not store it: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 838 lines · 41 KB · other · 2 matches
- from nipype.pipeline import engine as pe
- from nipype.interfaces import utility as niu
- from nipype.interfaces.base import (
- traits, TraitedSpec, BaseInterfaceInputSpec,
- File, BaseInterface
- )
- def init_confound_correction_wf(cr_opts, name="confound_correction_wf"):
- # confound_wf_head_start
- """
- This workflow applies the RABIES confound correction pipeline to preprocessed EPI timeseries. The correction steps are
- orchestrated in line with recommendations from human litterature:
- #1 - Compute and apply frame censoring mask (from FD and/or DVARS thresholds)
- #2 - If --match_number_timepoints is set, each scan is matched to the defined number of frames.
- #4 - Linear/Quadratic detrending of fMRI timeseries and nuisance regressors
- #4 - Apply ICA-AROMA.
- #5 - If frequency filtering and frame censoring are applied, simulate data in censored timepoints using the Lomb-Scargle periodogram,
- as suggested in Power et al. (2014, Neuroimage), for both the fMRI timeseries and nuisance regressors prior to filtering.
- #6 - As recommended in Lindquist et al. (2019, Human brain mapping), make the nuisance regressors orthogonal
- to the temporal frequency filter.
- #7 - Apply highpass and/or lowpass filtering on the fMRI timeseries (with simulated timepoints).
- #8 - Re-apply the frame censoring mask onto filtered fMRI timeseries and nuisance regressors, taking out the
- simulated timepoints. Edge artefacts from frequency filtering can also be removed as recommended in Power et al. (2014, Neuroimage).
- #9 - Apply confound regression using the selected nuisance regressors.
- #10 - Scaling of timeseries variance.
- #11 - Apply Gaussian spatial smoothing.
- References:
- Power, J. D., Barnes, K. A., Snyder, A. Z., Schlaggar, B. L., & Petersen, S. E. (2012). Spurious but systematic
- correlations in functional connectivity MRI networks arise from subject motion. Neuroimage, 59(3), 2142-2154.
- Power, J. D., Mitra, A., Laumann, T. O., Snyder, A. Z., Schlaggar, B. L., & Petersen, S. E. (2014). Methods to detect,
- characterize, and remove motion artifact in resting state fMRI. Neuroimage, 84, 320-341.
- Lindquist, M. A., Geuter, S., Wager, T. D., & Caffo, B. S. (2019). Modular preprocessing pipelines can reintroduce
- artifacts into fMRI data. Human brain mapping, 40(8), 2358-2376.
- Workflow:
- parameters
- cr_opts: command line interface parameters from confound_correction
- inputs
- bold_file: preprocessed EPI timeseries
- brain_mask: brain mask overlapping with EPI timeseries
- csf_mask: CSF mask overlapping with EPI timeseries
- motion_params_csv: CSV file with motion regressors
- FD_file: CSV file with the framewise displacement
- outputs
- cleaned_path: the cleaned EPI timeseries
- aroma_out: folder with outputs from ICA-AROMA
- VE_file: variance explained (R^2) from confound regression at each voxel
- STD_file: standard deviation on the cleaned EPI timeseries
- CR_STD_file: standard deviation on the confound timeseries modelled during confound regression
- random_CR_STD_file_path: variance fitted by random regressors during confound regression
- corrected_CR_STD_file_path: CR_STD_file after substracting the variance fitted by random
- regressors.
- frame_mask_file: CSV file which records which frame were censored
- CR_data_dict: dictionary object storing extra data computed during confound correction
- """
- # confound_wf_head_end
- workflow = pe.Workflow(name=name)
- inputnode = pe.Node(niu.IdentityInterface(fields=[
- 'bold_file', 'brain_mask', 'WM_mask', 'CSF_mask', 'vascular_mask', 'motion_params_csv', 'FD_file', 'raw_input_file']), name='inputnode')
- outputnode = pe.Node(niu.IdentityInterface(fields=[
- 'cleaned_path', 'aroma_out', 'VE_file', 'STD_file', 'CR_STD_file',
- 'random_CR_STD_file_path', 'corrected_CR_STD_file_path', 'frame_mask_file', 'CR_data_dict']), name='outputnode')
- clean_image_node = pe.Node(CleanImage(cr_opts=cr_opts),
- name='clean_image', mem_gb=3*cr_opts.scale_min_memory) # 3X memory as the timeseries is expanded into many arrays
- workflow.connect([
- (inputnode, clean_image_node, [
- ("bold_file", "bold_file"),
- ("brain_mask", "brain_mask_file"),
- ("WM_mask", "WM_mask_file"),
- ("CSF_mask", "CSF_mask_file"),
- ("vascular_mask", "vascular_mask_file"),
- ("raw_input_file", "raw_input_file"),
- ("motion_params_csv", "motion_params_csv"),
- ("FD_file", "FD_file"),
- ]),
- (clean_image_node, outputnode, [
- ("cleaned_path", "cleaned_path"),
- ("VE_file_path", "VE_file"),
- ("STD_file_path", "STD_file"),
- ("CR_STD_file_path", "CR_STD_file"),
- ("random_CR_STD_file_path", "random_CR_STD_file_path"),
- ("corrected_CR_STD_file_path", "corrected_CR_STD_file_path"),
- ("frame_mask_file", "frame_mask_file"),
- ("data_dict", "CR_data_dict"),
- ("aroma_out", "aroma_out"),
- ]),
- ])
- return workflow
- class CleanImageInputSpec(BaseInterfaceInputSpec):
- raw_input_file = File(exists=True, mandatory=True,
- desc="The raw EPI scan before preprocessing.")
- bold_file = File(exists=True, mandatory=True,
- desc="Timeseries to denoise.")
- brain_mask_file = File(exists=True, mandatory=True,
- desc="Brain mask.")
- WM_mask_file = traits.Any(mandatory=True,
- desc="WM mask.")
- CSF_mask_file = traits.Any(mandatory=True,
- desc="CSF mask.")
- vascular_mask_file = traits.Any(mandatory=True,
- desc="vascular mask.")
- FD_file = File(exists=True, mandatory=True,
- desc="CSV with framewise displacement.")
- motion_params_csv = File(exists=True, mandatory=True,
- desc="CSV with motion parameters.")
- cr_opts = traits.Any(
- exists=True, mandatory=True, desc="Processing specs.")
- class CleanImageOutputSpec(TraitedSpec):
- cleaned_path = File(exists=True, mandatory=True,
- desc="Cleaned timeseries.")
- VE_file_path = File(exists=True, mandatory=True,
- desc="Variance explained map from confound regression.")
- STD_file_path = File(exists=True, mandatory=True,
- desc="Temporal standard deviation map after confound correction, prior to standardization.")
- CR_STD_file_path = File(exists=True, mandatory=True,
- desc="Temporal standard deviation on predicted confound timeseries.")
- random_CR_STD_file_path = File(exists=False, mandatory=False,
- desc="Temporal standard deviation on predicted confound timeseries from random regressors.")
- corrected_CR_STD_file_path = File(exists=False, mandatory=False,
- desc="Same as CR_STD_file_path, but the variance explained by random regressors was substracted.")
- frame_mask_file = File(exists=True, mandatory=True,
- desc="Frame mask from temporal censoring.")
- data_dict = traits.Any(
- desc="A dictionary with key outputs.")
- aroma_out = traits.Any(
- desc="Output directory from ICA-AROMA.")
- class CleanImage(BaseInterface):
- '''
- Apply a flexible confound correction pipeline in line with recommendations from
- human litterature.
- #1 - Compute and apply frame censoring mask (from FD and/or DVARS thresholds)
- #2 - If --match_number_timepoints is set, each scan is matched to the defined number of frames.
- #4 - Linear/Quadratic detrending of fMRI timeseries and nuisance regressors
- #4 - Apply ICA-AROMA.
- #5 - If frequency filtering and frame censoring are applied, simulate data in censored timepoints using the Lomb-Scargle periodogram,
- as suggested in Power et al. (2014, Neuroimage), for both the fMRI timeseries and nuisance regressors prior to filtering.
- #6 - As recommended in Lindquist et al. (2019, Human brain mapping), make the nuisance regressors orthogonal
- to the temporal frequency filter.
- #7 - Apply highpass and/or lowpass filtering on the fMRI timeseries (with simulated timepoints).
- #8 - Re-apply the frame censoring mask onto filtered fMRI timeseries and nuisance regressors, taking out the
- simulated timepoints. Edge artefacts from frequency filtering can also be removed as recommended in Power et al. (2014, Neuroimage).
- #9 - If selected, compute the WM/CSF/vascular signal or aCompCorr and add to list of regressors. This is computed post-AROMA and filtering to
- minimize re-introduction of previously corrected signal fluctuations.
- #10 - Apply confound regression using the selected nuisance regressors.
- #11 - Scaling of timeseries.
- #12 - Apply Gaussian spatial smoothing.
- References:
- Power, J. D., Barnes, K. A., Snyder, A. Z., Schlaggar, B. L., & Petersen, S. E. (2012).
- Spurious but systematic correlations in functional connectivity MRI networks arise from subject motion. Neuroimage, 59(3), 2142-2154.
- Power, J. D., Mitra, A., Laumann, T. O., Snyder, A. Z., Schlaggar, B. L., & Petersen, S. E. (2014).
- Methods to detect, characterize, and remove motion artifact in resting state fMRI. Neuroimage, 84, 320-341.
- Lindquist, M. A., Geuter, S., Wager, T. D., & Caffo, B. S. (2019).
- Modular preprocessing pipelines can reintroduce artifacts into fMRI data. Human brain mapping, 40(8), 2358-2376.
- '''
- input_spec = CleanImageInputSpec
- output_spec = CleanImageOutputSpec
- def _run_interface(self, runtime):
- import os
- import numpy as np
- import pandas as pd
- import SimpleITK as sitk
- ### set null returns in case the workflow is interrupted
- empty_img = sitk.GetImageFromArray(np.empty([1,1]))
- empty_file = os.path.abspath('empty.nii.gz')
- sitk.WriteImage(empty_img, empty_file)
- setattr(self, 'cleaned_path', empty_file)
- setattr(self, 'VE_file_path', empty_file)
- setattr(self, 'STD_file_path', empty_file)
- setattr(self, 'CR_STD_file_path', empty_file)
- setattr(self, 'random_CR_STD_file_path', empty_file)
- setattr(self, 'corrected_CR_STD_file_path', empty_file)
- setattr(self, 'frame_mask_file', empty_file)
- setattr(self, 'data_dict', empty_file)
- setattr(self, 'aroma_out', empty_file)
- ###
- cr_opts = self.inputs.cr_opts
- from nipype import logging
- nipype_log = logging.getLogger('nipype.workflow')
- with np.errstate(invalid='ignore', divide='ignore'):
- cleaning_out = clean_image(
- input_bold = self.inputs.bold_file,
- brain_mask = self.inputs.brain_mask_file,
- WM_mask = self.inputs.WM_mask_file,
- CSF_mask = self.inputs.CSF_mask_file,
- vascular_mask = self.inputs.vascular_mask_file,
- FD_csv = self.inputs.FD_file,
- motion_params_csv=self.inputs.motion_params_csv,
- timeseries_interval = cr_opts.timeseries_interval,
- FD_censoring=cr_opts.frame_censoring['FD_censoring'],
- FD_threshold=cr_opts.frame_censoring['FD_threshold'],
- DVARS_censoring=cr_opts.frame_censoring['DVARS_censoring'],
- MSE_censoring=cr_opts.frame_censoring['MSE_censoring'],
- censoring_percent_exclusion=cr_opts.frame_censoring['censoring_percent_exclusion'],
- TR=cr_opts.TR,
- detrending_order=cr_opts.detrending['order'],
- detrending_time_interval=cr_opts.detrending['time_interval'],
- apply_ica_aroma=cr_opts.ica_aroma['apply'],
- ica_aroma_dim=cr_opts.ica_aroma['dim'],
- ica_aroma_random_seed=cr_opts.ica_aroma['random_seed'],
- match_number_timepoints=cr_opts.match_number_timepoints,
- highpass=cr_opts.highpass,
- lowpass=cr_opts.lowpass,
- edge_cutoff=cr_opts.edge_cutoff,
- nuisance_regressors = cr_opts.nuisance_regressors,
- generate_CR_null=cr_opts.generate_CR_null,
- scale_variance_voxelwise=cr_opts.scale_variance_voxelwise,
- image_scaling=cr_opts.image_scaling,
- keep_EPI_average=cr_opts.keep_EPI_average,
- smoothing_filter=cr_opts.smoothing_filter,
- slicewise_correction_direction=cr_opts.slicewise_correction_direction,
- nipype_log=nipype_log,
- )
- if cleaning_out is None:
- return runtime
- else:
- [timeseries_img,
- CR_data_dict,
- VE_spatial_map,
- STD_spatial_map,
- CR_STD_spatial_map,
- random_CR_STD_spatial_map,
- corrected_CR_STD_spatial_map] = cleaning_out
- '''
- Generate all the output files
- '''
- cr_out = os.getcwd()
- import pathlib # Better path manipulation
- filename_split = pathlib.Path(self.inputs.raw_input_file).name.rsplit(".nii")
- cleaned_path = cr_out+'/'+filename_split[0]+'_cleaned.nii.gz'
- sitk.WriteImage(timeseries_img, cleaned_path)
- VE_file_path = cr_out+'/'+filename_split[0]+'_VE_map.nii.gz'
- sitk.WriteImage(VE_spatial_map, VE_file_path)
- STD_file_path = cr_out+'/'+filename_split[0]+'_STD_map.nii.gz'
- sitk.WriteImage(STD_spatial_map, STD_file_path)
- CR_STD_file_path = cr_out+'/'+filename_split[0]+'_CR_STD_map.nii.gz'
- sitk.WriteImage(CR_STD_spatial_map, CR_STD_file_path)
- frame_mask_file = cr_out+'/'+filename_split[0]+'_frame_censoring_mask.csv'
- pd.DataFrame(CR_data_dict['frame_mask']).to_csv(frame_mask_file, index=False, header=['False = Masked Frames'])
- if cr_opts.generate_CR_null:
- random_CR_STD_file_path = cr_out+'/'+filename_split[0]+'_random_CR_STD_map.nii.gz'
- sitk.WriteImage(random_CR_STD_spatial_map, random_CR_STD_file_path)
- corrected_CR_STD_file_path = cr_out+'/'+filename_split[0]+'_corrected_CR_STD_map.nii.gz'
- sitk.WriteImage(corrected_CR_STD_spatial_map, corrected_CR_STD_file_path)
- else:
- random_CR_STD_file_path=''
- corrected_CR_STD_file_path=''
- CR_data_dict['cleaned_path'] = cleaned_path
- CR_data_dict['VE_file_path'] = VE_file_path
- CR_data_dict['STD_file_path'] = STD_file_path
- CR_data_dict['CR_STD_file_path'] = CR_STD_file_path
- CR_data_dict['random_CR_STD_file_path'] = random_CR_STD_file_path
- CR_data_dict['corrected_CR_STD_file_path'] = corrected_CR_STD_file_path
- CR_data_dict['frame_mask_file'] = frame_mask_file
- setattr(self, 'cleaned_path', cleaned_path)
- setattr(self, 'VE_file_path', VE_file_path)
- setattr(self, 'STD_file_path', STD_file_path)
- setattr(self, 'CR_STD_file_path', CR_STD_file_path)
- setattr(self, 'random_CR_STD_file_path', random_CR_STD_file_path)
- setattr(self, 'corrected_CR_STD_file_path', corrected_CR_STD_file_path)
- setattr(self, 'frame_mask_file', frame_mask_file)
- setattr(self, 'data_dict', CR_data_dict)
- if CR_data_dict['aroma_out'] is not None:
- setattr(self, 'aroma_out', CR_data_dict['aroma_out'])
- return runtime
- def _list_outputs(self):
- return {'cleaned_path': getattr(self, 'cleaned_path'),
- 'VE_file_path': getattr(self, 'VE_file_path'),
- 'STD_file_path': getattr(self, 'STD_file_path'),
- 'CR_STD_file_path': getattr(self, 'CR_STD_file_path'),
- 'random_CR_STD_file_path': getattr(self, 'random_CR_STD_file_path'),
- 'corrected_CR_STD_file_path': getattr(self, 'corrected_CR_STD_file_path'),
- 'frame_mask_file': getattr(self, 'frame_mask_file'),
- 'data_dict': getattr(self, 'data_dict'),
- 'aroma_out': getattr(self, 'aroma_out'),
- }
- def clean_image(input_bold, brain_mask, FD_csv, motion_params_csv, # necessary input files
- WM_mask=None, CSF_mask=None, vascular_mask=None,
- timeseries_interval='0-end', FD_censoring=False, FD_threshold=0.05,
- DVARS_censoring=False, MSE_censoring=False, censoring_percent_exclusion=0, TR='auto',
- detrending_order=1, detrending_time_interval='0-end',
- apply_ica_aroma=False, ica_aroma_dim=0, ica_aroma_random_seed=1,
- match_number_timepoints=0, highpass=None, lowpass=None, edge_cutoff=0,
- nuisance_regressors = [], generate_CR_null=False,
- scale_variance_voxelwise=False,image_scaling='grand_mean_scaling',
- keep_EPI_average=False,
- smoothing_filter=None,
- slicewise_correction_direction = 'Off',
- nipype_log=None,
- ):
- """
- Core function for carying confound correction of an image using the set of RABIES tools.
- Parameters
- ----------
- input_bold : filepath or sitk.Image
- The input 4D timeseries image to clean.
- brain_mask : filepath or sitk.Image
- A brain mask in the same space as input_bold
- FD_csv : filepath or pd.DataFrame
- The framewise displacement CSV generated by RABIES associated with input_bold.
- motion_params_csv : filepath or pd.DataFrame
- The motion parameters CSV generated by RABIES associated with input_bold.
- WM_mask : filepath or sitk.Image, default=None
- A WM mask in the same space as input_bold
- CSF_mask : filepath or sitk.Image, default=None
- A CSV mask in the same space as input_bold
- vascular_mask : filepath or sitk.Image, default=None
- A vascular mask in the same space as input_bold
- timeseries_interval : str, default='0-end'
- The chunk of frames to clean controlled by --timeseries_interval.
- FD_censoring : bool, default=False
- Whether to apply FD censoring.
- FD_threshold : float, default=0.05
- The FD censoring threshold.
- DVARS_censoring : bool, default=False
- Whether to apply DVARS censoring.
- MSE_censoring : bool, default=False
- Whether to apply MSE censoring.
- censoring_percent_exclusion : int, default=0
- Sets a minimum percentage of frames that must be left after censoring, otherwise returns None.
- TR : str, default='auto'
- The repetition time in seconds. If 'auto', the TR is read from the Nifti header.
- detrending_order : int, default=1
- The polynomial order for detrending.
- detrending_time_interval : str, default='0-end'
- The time interval over which the trends are computed for detrending. The trends
- are always removed across the entire timeseries, even if they were estimated from
- a subset of frames.
- This follows the same syntax as timeseries_interval.
- apply_ica_aroma : bool, default=False
- Whether to apply ICA-AROMA.
- ica_aroma_dim : int, default=0
- ICA dimensionality for AROMA. If 0, uses MELODIC's automated estimator.
- ica_aroma_random_seed : int, default=1
- Sets a random seed for AROMA to ensure deterministic behavior.
- match_number_timepoints : int, default=0
- Sets a fixed final number of frames for the output image. To reach
- this fixed number of frames, a random set of frames are additionally
- censored until the desired time length is reached. This can avoid
- inconsistent temporal degrees of freedom (tDOF) across scans as a consequence
- of censoring.
- If 0, no correction is performed.
- highpass : float, default=None
- Frequency cutoff for highpass filter.
- lowpass : float, default=None
- Frequency cutoff for lowpass filter.
- edge_cutoff : int, default=0
- Number of seconds of data to remove at each edge after frequency filtering to
- remove edge artefacts.
- nuisance_regressors : list, default=[]
- List of nuisance regressors. Possible options are: "WM_signal", "CSF_signal",
- "vascular_signal", "global_signal", "aCompCor_percent", "aCompCor_5", "mot_6",
- "mot_24"
- generate_CR_null : bool, default=False
- Whether to estimate overfitting from confound regression by generating phase
- randomised regressors, and comparing the variance explained by the real
- regressors VS the randomized regressors.
- scale_variance_voxelwise : bool, default=False
- If scaling was not applied voxelwise with voxelwise_standardization or
- voxelwise_mean, this option standardize the variance at each voxel to be equal,
- while preserving to total variance of the 4D timeseries (i.e. voxels have same
- variance, but not unit variance).
- image_scaling : str, default='grand_mean_scaling'
- Method for image scaling, select among: "None", "global_variance",
- "voxelwise_standardization", "grand_mean_scaling", "voxelwise_mean"
- keep_EPI_average : bool, default=False
- This option allows to re-introduce the voxelwise average that was removed during
- detrending at the end of confound correction, so that the original EPI background
- intensity is preserved.
- Specifically, the intercept that is calculated from the linear model during
- detrending is re-introduced. This intercept is also subjected to the same
- image_scaling as the timeseries, so as to retain the proportion between the
- average and variance of timeseries.
- Because this parameter re-introduces the intercept from detrending, if the
- trend was estimated over a specific time intervel with detrending_time_interval,
- the intercept is the average over that time interval.
- smoothing_filter : float, default=None
- Gaussian smoothing filter to apply.
- slicewise_correction_direction : str, default='Off'
- By inputing a slice direction with this parameters, the computation of nuisance
- signals, nuisance regression, and smoothing, are all conducted on each 2D slice
- independently along the provided slice direction. This strategy can be useful in
- the presence of artefacts (e.g. intensity spikes) that are not shared across
- slices due to time delays between slice acquisition, in which case a slicewise
- nuisance regression may perform better. Otherwise, in the case of images with
- spatial gaps between slices, smoothing should be applied slicewise using this
- parameter. To apply slicewise correction, provide as input one of the RAS axial
- direction for slice selection, i.e. this parameter takes as input one of: 'RL',
- 'AP' or 'SI'. For accurate slice selection, the axial directions of the input
- nifti images must be properly encoded. If no direction is provided, standard
- whole-brain correction is conducted.
- nipype_log : nipype.logging.getLogger('nipype.workflow'), default=None
- Provide a nipype log for printing statements.
- Returns
- -------
- timeseries_img : sitk.Image
- Output cleaned timeseries image.
- CR_data_dict : dict
- Output cleaned timeseries image.
- VE_spatial_map : sitk.Image
- R2 of nuisance regression voxelwise.
- STD_spatial_map : sitk.Image
- Voxelwise standard deviation of cleaned timeseries.
- CR_STD_spatial_map : sitk.Image
- Voxelwise standard deviation of fitted nuisance timeseries.
- random_CR_STD_spatial_map : sitk.Image
- Voxelwise standard deviation of fitted randomized regressors with
- generate_CR_null=True.
- corrected_CR_STD_spatial_map : sitk.Image
- Voxelwise standard deviation of fitted nuisance timeseries, after correction
- by the randomized regressors with generate_CR_null=True.
- Returns if internal error.
- -------
- None : if an error is detected in the workflow, the function only returns None.
- """
- import os
- import numpy as np
- import pandas as pd
- import SimpleITK as sitk
- from rabies.utils import recover_3D,recover_4D
- from . import utils as cr_utils
- if censoring_percent_exclusion<0 or censoring_percent_exclusion>100:
- raise ValueError(f"The input censoring_percent_exclusion={censoring_percent_exclusion} is not valid. It must be between 0 and 100.")
- '''
- The function can take as input either an adequately pre-loaded python object or a file path
- '''
- def read_input(input):
- if (input is None) or isinstance(input, sitk.Image) or isinstance(input, pd.DataFrame):
- return input
- elif os.path.isfile(input):
- if '.nii' in input:
- return sitk.ReadImage(input, sitk.sitkFloat32)
- elif '.csv' in input:
- return pd.read_csv(input)
- else:
- raise ValueError(f"The input {input} was neither a .nii or .csv file.")
- else:
- raise ValueError(f"The input {input} was neither a file nor a recognized python object.")
- [input_bold,
- FD_csv,
- motion_params_df,
- brain_mask,
- WM_mask,
- CSF_mask,
- vascular_mask] = [read_input(input) for input in [
- input_bold,
- FD_csv,
- motion_params_csv,
- brain_mask,
- WM_mask,
- CSF_mask,
- vascular_mask,
- ]]
- volume_idx = sitk.GetArrayFromImage(brain_mask).astype(bool)
- # save the header and original array size, since the image will be removed to space memory below
- from rabies.utils import get_geometry_header
- header_geo = get_geometry_header(input_bold)
- orig_4d_size = input_bold.GetSize() # copy the original array size
- if TR=='auto':
- TR = float(header_geo.GetSpacing()[3])
- else:
- TR = float(TR)
- # save specifically the 6 rigid parameters for AROMA
- motion6_regressors_array = cr_utils.select_motion_regressors(['mot_6'],motion_params_df)
- if len(nuisance_regressors)==0:
- motion_regressors_array = motion6_regressors_array
- else:
- motion_regressors_array = cr_utils.select_motion_regressors(nuisance_regressors,motion_params_df)
- FD_trace = FD_csv.get('MeanFD')
- time_range = cr_utils.prep_timeseries_interval(timeseries_interval, num_frames=orig_4d_size[3])
- timeseries_4d_arr = sitk.GetArrayFromImage(input_bold)
- timeseries_4d_arr = timeseries_4d_arr[time_range]
- del input_bold
- mse_trace = cr_utils.MSE_relative_to_average(timeseries_4d_arr)
- timeseries = timeseries_4d_arr[:,volume_idx] # read directly as a 2D array
- del timeseries_4d_arr # free memory
- motion_regressors_array = motion_regressors_array[time_range, :]
- motion6_regressors_array = motion6_regressors_array[time_range, :]
- FD_trace = FD_trace[time_range]
- '''
- #1 - Compute and apply frame censoring mask (from FD and/or DVARS thresholds)
- '''
- # scans are always excluded if fewer than MIN_FRAMES_POSTCENSOR frames are left, independently of censoring_percent_exclusion
- min_nframes_postcensor = max(cr_utils.MIN_FRAMES_POSTCENSOR, int(np.floor(timeseries.shape[0]*censoring_percent_exclusion/100)))
- # compute the DVARS before denoising
- DVARS_trace = cr_utils.get_DVARS(timeseries)
- frame_mask = cr_utils.temporal_censoring(FD_trace,
- FD_censoring, FD_threshold, DVARS_trace, DVARS_censoring,
- mse_trace, MSE_censoring, min_nframes_postcensor)
- if frame_mask is None:
- return None
- '''
- #2 - If --match_number_timepoints is selected, each scan is matched to the defined number of frames.
- '''
- if match_number_timepoints>0:
- if (highpass is not None) or (lowpass is not None):
- # if frequency filtering is applied, avoid selecting timepoints that would be removed with --edge_cutoff
- num_cut = int(edge_cutoff/TR)
- if not num_cut==0:
- frame_mask[:num_cut]=0
- frame_mask[-num_cut:]=0
- if frame_mask.sum()<match_number_timepoints:
- if nipype_log:
- nipype_log.warning(f"CONFOUND CORRECTION LEFT LESS THAN {str(match_number_timepoints)} VOLUMES. THIS SCAN WILL BE REMOVED FROM FURTHER PROCESSING.")
- return None
- # randomly shuffle indices that haven't been censored, then remove an extra subset above --match_number_timepoints
- num_timepoints = len(frame_mask)
- time_idx=np.array(range(num_timepoints))
- perm = np.random.permutation(time_idx[frame_mask])
- # selecting the subset of extra timepoints, and censoring them
- subset_idx = perm[match_number_timepoints:]
- frame_mask[subset_idx]=0
- # keep track of the original number of timepoints for tDOF estimation, to evaluate latter if the correction was succesful
- number_extra_timepoints = len(subset_idx)
- else:
- number_extra_timepoints = 0
- timeseries = timeseries[frame_mask]
- motion_regressors_array = motion_regressors_array[frame_mask]
- '''
- #3 - Linear/Quadratic detrending of fMRI timeseries and nuisance regressors
- '''
- timeseries, voxelwise_intercept = cr_utils.remove_trend(timeseries, frame_mask, order = detrending_order, time_interval = detrending_time_interval, remove_intercept=True)
- motion_regressors_array, _ = cr_utils.remove_trend(motion_regressors_array, frame_mask, order = detrending_order, time_interval = detrending_time_interval, remove_intercept=True)
- '''
- #4 - Apply ICA-AROMA.
- '''
- if apply_ica_aroma:
- # write intermediary output files for timeseries and 6 rigid body parameters
- inFile = os.path.abspath('aroma_input_timeseries.nii.gz')
- sitk.WriteImage(recover_4D(brain_mask, timeseries, header_geo), inFile)
- brain_mask_file = os.path.abspath("aroma_brain_mask.nii.gz")
- sitk.WriteImage(brain_mask, brain_mask_file)
- CSF_mask_file = os.path.abspath("aroma_CSF_mask.nii.gz")
- sitk.WriteImage(CSF_mask, CSF_mask_file)
- motion6_regressors_array=motion6_regressors_array[frame_mask,:]
- motion6_regressors_array, _ = cr_utils.remove_trend(motion6_regressors_array, frame_mask, order = detrending_order, time_interval = detrending_time_interval) # apply detrending to the confounds too
- df = pd.DataFrame(motion6_regressors_array)
- df.columns = ['mov1', 'mov2', 'mov3', 'rot1', 'rot2', 'rot3']
- mc_file = os.path.abspath('aroma_motion_params.csv')
- df.to_csv(mc_file)
- aroma_out = os.path.abspath('aroma_out/')
- cleaned_file, aroma_out = cr_utils.exec_ICA_AROMA(inFile, mc_file, brain_mask_file, CSF_mask_file, aroma_out, TR, ica_aroma_dim, random_seed=ica_aroma_random_seed)
- timeseries = sitk.GetArrayFromImage(sitk.ReadImage(cleaned_file, sitk.sitkFloat32))[:,volume_idx] # read directly as a 2D array
- else:
- aroma_out = None
- if (highpass is not None) or (lowpass is not None):
- '''
- #5 - If frequency filtering and frame censoring are applied, simulate data in censored timepoints using the Lomb-Scargle periodogram,
- as suggested in Power et al. (2014, Neuroimage), for both the fMRI timeseries and nuisance regressors prior to filtering.
- '''
- from rabies.confound_correction_pkg.spectral_interpolation import spectral_interpolation
- timeseries, _ = spectral_interpolation(x=timeseries, time_step=TR, time_mask=frame_mask, rescale=True)
- del _
- motion_regressors_array, _ = spectral_interpolation(x=motion_regressors_array, time_step=TR, time_mask=frame_mask, rescale=True)
- del _
- ### arrays are now interpolated
- '''
- #6 - As recommended in Lindquist et al. (2019, Human brain mapping), make the nuisance regressors orthogonal
- to the temporal filter.
- '''
- motion_regressors_array = cr_utils.butterworth(motion_regressors_array, TR=TR,
- high_pass=highpass, low_pass=lowpass)
- '''
- #7 - Apply highpass and/or lowpass filtering on the fMRI timeseries (with simulated timepoints).
- '''
- timeseries = cr_utils.butterworth(timeseries, TR=TR,
- high_pass=highpass, low_pass=lowpass)
- # correct for edge effects of the filters
- num_cut = int(edge_cutoff/TR)
- if len(frame_mask)<2*num_cut:
- raise ValueError(f"The timeseries are too short to remove {edge_cutoff}sec of data at each edge.")
- if not num_cut==0:
- frame_mask[:num_cut]=0
- frame_mask[-num_cut:]=0
- '''
- #8 - Re-apply the frame censoring mask onto filtered fMRI timeseries and nuisance regressors, taking out the
- simulated timepoints. Edge artefacts from frequency filtering can also be removed as recommended in Power et al. (2014, Neuroimage).
- '''
- # re-apply the masks to take out simulated data points, and take off the edges
- timeseries = timeseries[frame_mask]
- motion_regressors_array = motion_regressors_array[frame_mask]
- if frame_mask.sum()<int(min_nframes_postcensor):
- if nipype_log:
- nipype_log.warning(f"CONFOUND CORRECTION LEFT LESS THAN {str(min_nframes_postcensor)} VOLUMES. THIS SCAN WILL BE REMOVED FROM FURTHER PROCESSING.")
- return None
- '''
- #9 - If selected, compute the WM/CSF/vascular signal or aCompCorr and add to list of regressors. This is computed post-AROMA and filtering to
- minimize re-introduction of previously corrected signal fluctuations.
- #10 - Apply confound regression using the selected nuisance regressors.
- '''
- regress_out = cr_utils.nuisance_regression(
- timeseries, motion_regressors_array, TR, frame_mask, orig_4d_size, brain_mask, WM_mask, CSF_mask, vascular_mask, nuisance_regressors=nuisance_regressors,
- slicewise_correction_direction=slicewise_correction_direction, generate_CR_null=generate_CR_null, nipype_log=nipype_log)
- if regress_out is None:
- return None
- timeseries, predicted, predicted_random, num_regressors, VE_temporal, VE_spatial, VE_total_ratio, cleaned_slice_l = regress_out
- '''
- #11 - Scaling of timeseries.
- '''
- if scale_variance_voxelwise: # homogenize the variability distribution while preserving the same total variance
- if image_scaling=='voxelwise_standardization' or image_scaling=='voxelwise_mean':
- raise ValueError(f"Can't select --scale_variance_voxelwise with --image_scaling {image_scaling}.")
- else:
- temporal_std = timeseries.std(axis=0)
- total_std = timeseries.std()
- # homogenize variance across voxels
- timeseries /= temporal_std
- nan_voxels = np.isnan(timeseries).sum(axis=0)>1
- timeseries[:,nan_voxels] = 0
- scaled_total_std = timeseries.std()
- # rescale to preserve total variance
- timeseries = (timeseries/scaled_total_std)*total_std
- # the same scaling estimated from BOLD is applied to CR estimates to preserve accurate ratios of variance explained per voxel
- scaled_list = []
- for scaled_timeseries in [predicted,predicted_random]:
- scaled_timeseries /= temporal_std
- nan_voxels = np.isnan(scaled_timeseries).sum(axis=0)>1
- scaled_timeseries[:,nan_voxels] = 0
- scaled_timeseries = (scaled_timeseries/scaled_total_std)*total_std
- scaled_list.append(scaled_timeseries)
- del scaled_timeseries
- [predicted,predicted_random] = scaled_list
- if image_scaling=='global_variance':
- scaling_factor = timeseries.std()
- elif image_scaling=='grand_mean_scaling':
- scaling_factor = voxelwise_intercept.mean()/100 # we scale BOLD in % fluctuations, hence dividing by 100
- elif image_scaling=='voxelwise_standardization':
- # each voxel is scaled according to its STD
- scaling_factor = timeseries.std(axis=0)
- elif image_scaling=='voxelwise_mean':
- scaling_factor = voxelwise_intercept/100 # we scale BOLD in % fluctuations, hence dividing by 100
- else:
- scaling_factor = 1
- # scale fMRI timeseries, as well as the CR prediction to keep consistent scaling
- scaled_list = []
- for scaled_timeseries in [timeseries,predicted,predicted_random]:
- scaled_timeseries /= scaling_factor
- nan_voxels = np.isnan(scaled_timeseries).sum(axis=0)>1
- scaled_timeseries[:,nan_voxels] = 0
- scaled_list.append(scaled_timeseries)
- del scaled_timeseries
- [timeseries,predicted,predicted_random] = scaled_list
- # after variance scaling, compute the variability estimates
- temporal_std = timeseries.std(axis=0)
- predicted_std = predicted.std(axis=0)
- predicted_time = np.sqrt((predicted.T**2).mean(axis=0))
- predicted_global_std = predicted.std()
- if generate_CR_null:
- predicted_random_std = predicted_random.std(axis=0)
- # here we correct the previous STD estimates by substrating the variance explained by that of the overfitting with random regressors
- var_dif = predicted.var(axis=0) - predicted_random.var(axis=0)
- var_dif[var_dif<0] = 0 # when there's more variance explained in random regressors, set variance explained to 0
- corrected_predicted_std = np.sqrt(var_dif)
- del predicted_random
- del predicted
- # apply the frame mask to FD trace/DVARS to prepare outputs from the function
- DVARS_trace = DVARS_trace[frame_mask]
- FD_trace = FD_trace[frame_mask]
- mse_trace = mse_trace[frame_mask]
- # calculate temporal degrees of freedom left after confound correction
- num_timepoints = frame_mask.sum()
- if apply_ica_aroma:
- aroma_rm = (pd.read_csv(f'{aroma_out}/classification_overview.txt', sep='\t')['Motion/noise']).sum()
- else:
- aroma_rm = 0
- tDOF = num_timepoints - (aroma_rm+num_regressors) + number_extra_timepoints
- # compute DVARS correlation with FD post-correction
- DVARS_cleaned_trace = cr_utils.get_DVARS(timeseries)
- FD_DVARS_corr = np.corrcoef(DVARS_cleaned_trace[1:], FD_trace[1:])[0,1] # skip first index which is 0 for DVARS
- # smoothing takes an SITK image
- timeseries_img = recover_4D(brain_mask, timeseries, header_geo)
- del timeseries
- if smoothing_filter is not None:
- '''
- #12 - Apply Gaussian spatial smoothing.
- '''
- if not slicewise_correction_direction=='Off':
- # smooth 1 slice at a time
- for slice in cleaned_slice_l:
- # here the axis direction is in proper order since we are indexing a SITK image
- if slicewise_correction_direction=='RL':
- timeseries_img[slice:slice+1,:,:,:] = cr_utils.smooth_image(
- timeseries_img[slice:slice+1,:,:,:], smoothing_filter, brain_mask[slice:slice+1,:,:])
- elif slicewise_correction_direction=='AP':
- timeseries_img[:,slice:slice+1,:,:] = cr_utils.smooth_image(
- timeseries_img[:,slice:slice+1,:,:], smoothing_filter, brain_mask[:,slice:slice+1,:])
- elif slicewise_correction_direction=='SI':
- timeseries_img[:,:,slice:slice+1,:] = cr_utils.smooth_image(
- timeseries_img[:,:,slice:slice+1,:], smoothing_filter, brain_mask[:,:,slice:slice+1])
- else:
- raise ValueError(f"slicewise_correction_direction must be one of 'RL', 'AP' or 'SI', got {slicewise_correction_direction} instead.")
- else:
- timeseries_img = cr_utils.smooth_image(
- timeseries_img, smoothing_filter, brain_mask)
- voxelwise_intercept /= scaling_factor # the intercept is also scaling, so that the mean and variance remain proportional to the original data
- if keep_EPI_average:
- # this needs to be done after smoothing, because the intercept would impact smoothing results
- timeseries = sitk.GetArrayFromImage(timeseries_img)[:,volume_idx]
- del timeseries_img
- timeseries += voxelwise_intercept
- timeseries_img = recover_4D(brain_mask, timeseries, header_geo)
- # save output files
- VE_spatial_map = recover_3D(brain_mask, VE_spatial)
- STD_spatial_map = recover_3D(brain_mask, temporal_std)
- CR_STD_spatial_map = recover_3D(brain_mask, predicted_std)
- del VE_spatial, temporal_std, predicted_std
- if generate_CR_null:
- random_CR_STD_spatial_map = recover_3D(brain_mask, predicted_random_std)
- corrected_CR_STD_spatial_map = recover_3D(brain_mask, corrected_predicted_std)
- del predicted_random_std, corrected_predicted_std
- else:
- random_CR_STD_spatial_map = None
- corrected_CR_STD_spatial_map = None
- CR_data_dict = {
- 'TR':TR, 'FD_trace':FD_trace, 'DVARS_pre_correction':DVARS_trace, 'DVARS_post_correction':DVARS_cleaned_trace, 'FD_DVARS_corr':FD_DVARS_corr, 'mse_trace':mse_trace, 'time_range':time_range, 'frame_mask':frame_mask, 'VE_temporal':VE_temporal,
- 'motion_params_df':motion_params_df, 'predicted_time':predicted_time, 'tDOF':tDOF, 'CR_global_std':predicted_global_std,
- 'VE_total_ratio':VE_total_ratio, 'voxelwise_mean':voxelwise_intercept, 'aroma_out':aroma_out,
- }
- return timeseries_img, CR_data_dict, VE_spatial_map, STD_spatial_map, CR_STD_spatial_map, random_CR_STD_spatial_map, corrected_CR_STD_spatial_map
confound_correction.py at commit 21ec843, under other · at the source
Overview
- Center for Vital Longevity, The University of Texas at Dallas, Dallas, TX 75235
- Department of Psychology, School of Behavioral and Brain Sciences, The University of Texas at Dallas, Dallas, TX 75080
- Department of Neuroscience, Rappaport Faculty of Medicine, Technion—Israel Institute of Technology, Haifa, Israel 3525433
- Zuckerman Mind Brain Behavior Institute and Department of Neuroscience, Columbia University, New York, NY
- Allen Institute for Brain Science, Seattle, WA 98109
- Department of Psychiatry, The University of Texas Southwestern Medical Center, Dallas, TX 75390
Abstract
Human aging is marked by progressive reorganization of large-scale functional brain networks; these brain network changes have been linked to cognitive decline and disease vulnerability. Conversely, while mice have served as powerful models for understanding the molecular and cellular changes that occur over the lifespan, an absence of precise characterization of age-related changes in large-scale functional brain network organization has limited cross-species translational insights. Here, using densely sampled resting-state functional MRI data acquired cross-sectionally and longitudinally in awake mice over a broad range of adulthood (n = 82; 3 to 20 mo), we describe organizational features and age-related alterations of the mouse’s functional connectome. Mouse resting-state functional connectivity recapitulates known functional circuits, demonstrating the organizational validity of these signals. Graph theoretic analysis applied to functional connectivity reveals that mice exhibit modular architectures of functional brain network organization and that increasing age is associated with decreasing system segregation, indicative of network dedifferentiation analogous to observations in humans. Notably, mouse resting-state brain networks are more segregated than those of humans [determined using data from the Human Connectome Project and its developmental- and aging-counterparts (n = 1,179; 18 to 90 y)], attributable to mice exhibiting a diminished contribution of long-range functional relationships that integrate distributed systems. Mice also exhibit slower rates of age-related decline in brain network organization relative to humans, highlighting important species differences in functional brain network organization and trajectories of brain network aging. These findings establish a model of large-scale functional brain network aging in mice and provide a translational bridge across species and spatial scales of analysis.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 2 matches between paragraphs and lines of code.
wiglab/mouse-community-nodes
eec8ea9ccf0e0494b2c84e0acd2a57e8233e49a4, 9 January 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
1 file
- README.md, Text, 8 lines
wiglab/system-segregation-and-graph-tools
e7c30345b8ebf29e3a9ab44593d95e41cd0b16ed, 15 October 2024Availability: 2 checks, the latest on 1 November 2026: the link answers
- 1 November 2026: the link answers
- 30 September 2026: the link answers
19 files
- MATLAB/
export/ , MATLAB, 208 linescolormap_roi.m - MATLAB/
export/ , MATLAB, 240 linescolormap_roi_meta.m - MATLAB/
fsLR2roizmat.m , MATLAB, 98 lines - MATLAB/
fsLR2roizmat_ciftidat_ci , MATLAB, 62 linesftinode.m - MATLAB/
fsLR2roizmat_ciftidat_gi , MATLAB, 81 linesftinode.m - MATLAB/
map_to_gii.m , MATLAB, 44 lines - MATLAB/
mat2cytoscape.m , MATLAB, 42 lines - MATLAB/
segregation.m , MATLAB, 71 lines - MATLAB/
segregation_by_type_eqco , MATLAB, 155 linesnt.m - MATLAB/
segregation_by_type_prco , MATLAB, 164 linesnt.m - R/
segregation.R , R, 63 lines - R/
segregation_by_type_eqco , R, 100 linesnt.R - R/
segregation_by_type_prco , R, 105 linesnt.R - R/
segregation_individual_s , R, 55 linesystems.R - test/
b_other_example.m , MATLAB, 27 lines - test/
testR.R , R, 63 lines - test/
test_segtype_proc.R , R, 42 lines - LICENSE, License, 21 lines
- README.md, Text, 20 lines
SteenMoeller/NORDIC_Raw
58c20de2482d773e3a9b852dd9538a1974351b84, 30 September 2026Availability: 2 checks, the latest on 30 October 2026: the link answers
- 30 October 2026: the link answers
- 30 September 2026: the link answers
7 files
- DEMO/
phantom3dAniso.m , MATLAB, 242 lines - DEMO/
script_for_creating_simu , MATLAB, 84 lineslation_data.m - NIFTI_NORDIC.m, MATLAB, 1,218 lines
- NIFTI_NORDIC2.m, MATLAB, 1,279 lines
- NORDIC.m, MATLAB, 1,215 lines
- LICENCE.md, License, 11 lines
- README.md, Text, 80 lines
CoBrALab/RABIES
21ec8439434c177a6ef61dcd1f1e2a2d42f825f4, 27 October 2026Availability: 2 checks, the latest on 30 October 2026: the link answers
- 30 October 2026: the link answers
- 27 September 2026: the link answers
54 files
- docs/
conf.py , Python, 96 lines - rabies/
__init__.py , Python, 1 line - rabies/
__version__.py , Python, 8 lines - rabies/
analysis_pkg/ , Python, 1 line__init__.py - rabies/
analysis_pkg/ , Python, 238 linesanalysis_functions.py - rabies/
analysis_pkg/ , Python, 227 linesanalysis_math.py - rabies/
analysis_pkg/ , Python, 534 linesanalysis_wf.py - rabies/
analysis_pkg/ , Python, 1 linediagnosis_pkg/ __init__.py - rabies/
analysis_pkg/ , Python, 482 linesdiagnosis_pkg/ dataset_QC.py - rabies/
analysis_pkg/ , Python, 778 linesdiagnosis_pkg/ diagnosis_functions.py - rabies/
analysis_pkg/ , Python, 177 linesdiagnosis_pkg/ diagnosis_wf.py - rabies/
analysis_pkg/ , Python, 520 linesdiagnosis_pkg/ interfaces.py - rabies/
analysis_pkg/ , Python, 518 linesmain_wf.py - rabies/
analysis_pkg/ , Python, 108 linesutils.py - rabies/
boilerplate.py , Python, 329 lines - rabies/
confound_correction_pkg/ , Python, 1 line__init__.py - rabies/
confound_correction_pkg/ , Python, 838 lines, 2 matchesconfound_correction.py - rabies/
confound_correction_pkg/ , Python, 559 linesmain_wf.py - rabies/
confound_correction_pkg/ , Python, 239 linesmod_ICA_AROMA/ ICA_AROMA.py - rabies/
confound_correction_pkg/ , Python, 931 linesmod_ICA_AROMA/ ICA_AROMA_functions.py - rabies/
confound_correction_pkg/ , Python, 1 linemod_ICA_AROMA/ __init__.py - rabies/
confound_correction_pkg/ , Python, 247 linesmod_ICA_AROMA/ classification_plots.py - rabies/
confound_correction_pkg/ , Python, 24 linesmod_ICA_AROMA/ ica-aroma-via-docker.py - rabies/
confound_correction_pkg/ , Python, 172 linesspectral_interpolation.p y - rabies/
confound_correction_pkg/ , Python, 756 linesutils.py - rabies/
parser.py , Python, 1,412 lines - rabies/
preprocess_pkg/ , Python, 1 line__init__.py - rabies/
preprocess_pkg/ , Python, 553 linesbold_main_wf.py - rabies/
preprocess_pkg/ , Python, 187 linesbold_ref.py - rabies/
preprocess_pkg/ , Python, 855 linescommonspace_reg.py - rabies/
preprocess_pkg/ , Python, 475 lineshmc.py - rabies/
preprocess_pkg/ , Python, 511 linesinho_correction.py - rabies/
preprocess_pkg/ , Python, 587 linesmain_wf.py - rabies/
preprocess_pkg/ , Python, 313 linesprep_input.py - rabies/
preprocess_pkg/ , Python, 246 linespreprocess_visual_QC.py - rabies/
preprocess_pkg/ , Python, 174 linesregistration.py - rabies/
preprocess_pkg/ , Python, 161 linesresampling.py - rabies/
preprocess_pkg/ , Python, 121 linesstc.py - rabies/
preprocess_pkg/ , Python, 340 linesutils.py - rabies/
run_main.py , Python, 451 lines - rabies/
utils.py , Python, 707 lines - rabies/
visualization.py , Python, 143 lines - scripts/
debug_workflow.py , Python, 55 lines - scripts/
error_check_rabies.py , Python, 290 lines - scripts/
gen_DSURQE_masks.py , Python, 113 lines - scripts/
install_DSURQE.sh , Shell, 78 lines - scripts/
preprocess_scripts/ , Shell, 188 linesEPI-preprocessing.sh - scripts/
preprocess_scripts/ , Python, 89 linesmultistage_otsu_cor.py - scripts/
preprocess_scripts/ , Shell, 28 linesnull_nonlin.sh - scripts/
preprocess_scripts/ , Shell, 13 linesplot_overlap.sh - scripts/
preprocess_scripts/ , Shell, 231 linesstructural-preprocessing .sh - setup.py, Python, 168 lines
- LICENSE, License, 76 lines
- README.md, Text, 61 lines
Washington-University/HCPpipelines
fb25ef4e9be44402d1d746834d18050842bb4042, 24 September 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
463 files
- DeDriftAndResample/
DeDriftAndResamplePipeli , Shell, 616 linesne.sh - DeDriftAndResample/
MSMRemoveGroupDrift.sh , Shell, 333 lines - DiffusionPreprocessing/
DiffPreprocPipeline.sh , Shell, 470 lines - DiffusionPreprocessing/
DiffPreprocPipeline_Eddy , Shell, 253 lines.sh - DiffusionPreprocessing/
DiffPreprocPipeline_Post , Shell, 301 linesEddy.sh - DiffusionPreprocessing/
DiffPreprocPipeline_PreE , Shell, 482 linesddy.sh - DiffusionPreprocessing/
scripts/ , Shell, 209 linesDiffusionToStructural.sh - DiffusionPreprocessing/
scripts/ , Shell, 282 linesbasic_preproc_best_b0.sh - DiffusionPreprocessing/
scripts/ , Shell, 71 linesbasic_preproc_norm_inten sity.sh - DiffusionPreprocessing/
scripts/ , Shell, 182 linesbasic_preproc_sequence.s h - DiffusionPreprocessing/
scripts/ , Shell, 214 lineseddy_postproc.sh - DiffusionPreprocessing/
scripts/ , Shell, 487 linesrun_eddy.sh - DiffusionPreprocessing/
scripts/ , Shell, 126 linesrun_topup.sh - Examples/
Scripts/ , Shell, 183 linesApplyAutoRecleanPipeline Batch.sh - Examples/
Scripts/ , Shell, 104 linesApplyHandReClassificatio nsBatch.sh - Examples/
Scripts/ , Shell, 93 linesCorrThickPipelineBatch.s h - Examples/
Scripts/ , Shell, 212 linesDeDriftAndResamplePipeli neBatch-long.sh - Examples/
Scripts/ , Shell, 174 linesDeDriftAndResamplePipeli neBatch.sh - Examples/
Scripts/ , Shell, 110 linesDiffusionPreprocessingBa tch-long.sh - Examples/
Scripts/ , Shell, 173 linesDiffusionPreprocessingBa tch.sh - Examples/
Scripts/ , Shell, 217 linesDiffusionPreprocessingBa tchNHP.sh - Examples/
Scripts/ , Shell, 139 linesFreeSurferPipelineBatch- long.sh - Examples/
Scripts/ , Shell, 119 linesFreeSurferPipelineBatch. sh - Examples/
Scripts/ , Shell, 191 linesFreeSurferPipelineBatchN HP.sh - Examples/
Scripts/ , Shell, 116 linesGenericfMRISurfaceProces singPipelineBatch-long.s h - Examples/
Scripts/ , Shell, 139 linesGenericfMRISurfaceProces singPipelineBatch.sh - Examples/
Scripts/ , Shell, 183 linesGenericfMRISurfaceProces singPipelineBatchNHP.sh - Examples/
Scripts/ , Shell, 309 linesGenericfMRIVolumeProcess ingPipelineBatch-long.sh - Examples/
Scripts/ , Shell, 316 linesGenericfMRIVolumeProcess ingPipelineBatch.sh - Examples/
Scripts/ , Shell, 458 linesGenericfMRIVolumeProcess ingPipelineBatchNHP.sh - Examples/
Scripts/ , Shell, 4 linesHistorical/ 3T_Size_Checking/ DiffusionPreprocessingBa tch.3T_Size_Checking.sh - Examples/
Scripts/ , Shell, 3 linesHistorical/ 3T_Size_Checking/ FreeSurferPipelineBatch. 3T_Size_Checking.sh - Examples/
Scripts/ , Shell, 3 linesHistorical/ 3T_Size_Checking/ GenericfMRISurfaceProces singPipelineBatch.3T_Siz e_Checking.sh - Examples/
Scripts/ , Shell, 3 linesHistorical/ 3T_Size_Checking/ GenericfMRIVolumeProcess ingPipelineBatch.3T_Size _Checking.sh - Examples/
Scripts/ , Shell, 4 linesHistorical/ 3T_Size_Checking/ IcaFixProcessingBatch.3T _Size_Checking.sh - Examples/
Scripts/ , Shell, 4 linesHistorical/ 3T_Size_Checking/ PostFreeSurferPipelineBa tch.3T_Size_Checking.sh - Examples/
Scripts/ , Shell, 3 linesHistorical/ 3T_Size_Checking/ PreFreeSurferPipelineBat ch.3T_Size_Checking.sh - Examples/
Scripts/ , Shell, 52 linesHistorical/ 3T_Size_Checking/ PrepareForTaskAnalysis.s h - Examples/
Scripts/ , Shell, 4 linesHistorical/ 3T_Size_Checking/ TaskfMRIAnalysisBatch.3T _Size_Checking.sh - Examples/
Scripts/ , Shell, 221 linesHistorical/ 7T/ DiffusionPreprocessingBa tch.7T.sh - Examples/
Scripts/ , Shell, 156 linesHistorical/ 7T/ GenericfMRISurfaceProces singPipelineBatch.7T.sh - Examples/
Scripts/ , Shell, 156 linesHistorical/ 7T/ GenericfMRISurfaceProces singPipelineBatch.7T_1re s.sh - Examples/
Scripts/ , Shell, 280 linesHistorical/ 7T/ GenericfMRIVolumeProcess ingPipelineBatch.7T.sh - Examples/
Scripts/ , Shell, 177 linesHistorical/ 7T/ IcaFixProcessingBatch.7T .sh - Examples/
Scripts/ , Shell, 129 linesHistorical/ 7T/ PostFreeSurferPipelineBa tch.7T_1res.sh - Examples/
Scripts/ , Shell, 272 linesIcaFixProcessingBatch.sh - Examples/
Scripts/ , Shell, 179 linesMSMAllPipelineBatch-long .sh - Examples/
Scripts/ , Shell, 138 linesMSMAllPipelineBatch.sh - Examples/
Scripts/ , Shell, 213 linesMakeAverageDatasetBatch. sh - Examples/
Scripts/ , Shell, 111 linesPostFixBatch.sh - Examples/
Scripts/ , Shell, 169 linesPostFreeSurferPipelineBa tch-long.sh - Examples/
Scripts/ , Shell, 130 linesPostFreeSurferPipelineBa tch.sh - Examples/
Scripts/ , Shell, 165 linesPostFreeSurferPipelineBa tchNHP.sh - Examples/
Scripts/ , Shell, 521 linesPreFreeSurferPipelineBat ch.sh - Examples/
Scripts/ , Shell, 347 linesPreFreeSurferPipelineBat chNHP.sh - Examples/
Scripts/ , Shell, 258 linesReApplyFixMultiRunBatch- long.sh - Examples/
Scripts/ , Shell, 220 linesReApplyFixProcessingBatc h.sh - Examples/
Scripts/ , Shell, 292 linesRunTICAPipeline_FullRun. sh - Examples/
Scripts/ , Shell, 302 linesRunTICAPipeline_Precompu tedTICA_SubjectCleanBatc h-long.sh - Examples/
Scripts/ , Shell, 258 linesRunTICAPipeline_Precompu tedTICA_SubjectCleanBatc h.sh - Examples/
Scripts/ , Shell, 114 linesSetUpHCPPipeline.sh - Examples/
Scripts/ , Shell, 404 linesSetUpSPECIES.sh - Examples/
Scripts/ , Shell, 158 linesTaskfMRIAnalysisBatch.sh - Examples/
Scripts/ , Shell, 98 linesTransmitBiasBatch-long.s h - Examples/
Scripts/ , Shell, 186 linesTransmitBiasBatch.sh - Examples/
Scripts/ , Shell, 133 linescopy_evs_into_results.sh - Examples/
Scripts/ , Shell, 214 linesfMRIstatsBatch.sh - Examples/
Scripts/ , Shell, 192 linesgenerate_level1_fsf.sh - FreeSurfer/
FreeSurferPipeline-v5.3. , Shell, 235 lines0-HCP.sh - FreeSurfer/
FreeSurferPipeline.sh , Shell, 823 lines - FreeSurfer/
FreeSurferPipelineNHP.sh , Shell, 1,051 lines - FreeSurfer/
LongitudinalFreeSurferPi , Shell, 378 linespeline.sh - FreeSurfer/
custom/ , Shell, 261 linesSetUpFSNHP.sh - FreeSurfer/
scripts/ , Shell, 102 linesConf2GCAReg_FNIRTbasedNH P.sh - FreeSurfer/
scripts/ , Shell, 267 linesFreeSurferHiresPial.sh - FreeSurfer/
scripts/ , Shell, 181 linesFreeSurferHiresWhite.sh - FreeSurfer/
scripts/ , Shell, 157 linesIntensityCorNHP.sh - FreeSurfer/
scripts/ , Shell, 181 linesIntensityNormalizeNHP.sh - FreeSurfer/
scripts/ , Shell, 113 linesMakeAverageT2w.sh - FreeSurfer/
scripts/ , Shell, 191 linesRescaleVolumeAndSurfaceN HP.sh - FreeSurfer/
scripts/ , Shell, 70 linesRestorePreFreeSurferResa mplingNHP.sh - FreeSurfer/
scripts/ , Shell, 163 linesSubcortSegmentNHP.sh - GenerateSpinEchoBiasFiel
dPrereqs/ , Shell, 251 linesGenerateSpinEchoBiasFiel dPrereqs.sh - ICAFIX/
ApplyAutoRecleanPipeline , Shell, 205 lines.sh - ICAFIX/
ApplyHandReClassificatio , Shell, 232 linesns.sh - ICAFIX/
PostFix.sh , Shell, 371 lines - ICAFIX/
ReApplyFixMultiRunPipeli , Shell, 887 linesne.sh - ICAFIX/
ReApplyFixPipeline.sh , Shell, 454 lines - ICAFIX/
scripts/ , Shell, 215 linesCompile_MATLAB_code.sh - ICAFIX/
scripts/ , Shell, 36 linesCompiled_computeRecleanF eatures/ run_computeRecleanFeatur es.sh - ICAFIX/
scripts/ , Shell, 36 linesCompiled_fix_3_clean/ run_fix_3_clean.sh - ICAFIX/
scripts/ , Shell, 36 linesCompiled_functionhighpas sandvariancenormalize/ run_functionhighpassandv ariancenormalize.sh - ICAFIX/
scripts/ , Shell, 36 linesCompiled_melodicicasso/ run_melodicicasso.sh - ICAFIX/
scripts/ , Shell, 36 linesCompiled_prepareICAs/ run_prepareICAs.sh - ICAFIX/
scripts/ , Shell, 208 linesMapVolumeToCIFTI.sh - ICAFIX/
scripts/ , Python, 63 linesOnnxClassifierInterface. py - ICAFIX/
scripts/ , Python, 148 linesRecleanClassifierInferen ce.py - ICAFIX/
scripts/ , Shell, 274 linesRecleanClassify.sh - ICAFIX/
scripts/ , MATLAB, 278 linescomputeRecleanFeatures.m - ICAFIX/
scripts/ , Python, 115 linesconvertJoblibToOnnxModel .py - ICAFIX/
scripts/ , MATLAB, 23 linesdemean.m - ICAFIX/
scripts/ , MATLAB, 240 linesfix_3_clean.m - ICAFIX/
scripts/ , MATLAB, 354 linesfunctionhighpassandvaria ncenormalize.m - ICAFIX/
scripts/ , Shell, 87 linesmelodicHelper.sh - ICAFIX/
scripts/ , MATLAB, 342 linesmelodicicasso.m - ICAFIX/
scripts/ , MATLAB, 90 linesprepareICAs.m - ICAFIX/
scripts/ , Python, 112 linesxgboost_ensemble_classif ier.py - MSMAll/
MSMAllPipeline.sh , Shell, 390 lines - MSMAll/
scripts/ , Shell, 125 linesCompile_MATLAB_code.sh - MSMAll/
scripts/ , Shell, 36 linesCompiled_ComputeVN/ run_ComputeVN.sh - MSMAll/
scripts/ , Shell, 36 linesCompiled_MSMregression/ run_MSMregression.sh - MSMAll/
scripts/ , MATLAB, 39 linesComputeVN.m - MSMAll/
scripts/ , Shell, 892 linesMSMAll.sh - MSMAll/
scripts/ , MATLAB, 234 linesMSMregression.m - MSMAll/
scripts/ , Shell, 228 linesSingleSubjectConcat.sh - MSMAll/
scripts/ , MATLAB, 25 linesss_svds.m - PostFreeSurfer/
PostFreeSurferPipeline.s , Shell, 497 linesh - PostFreeSurfer/
PostFreeSurferPipelineLo , Shell, 266 linesngLauncher.sh - PostFreeSurfer/
PostFreeSurferPipelineLo , Shell, 424 linesngPrep.sh - PostFreeSurfer/
PostFreeSurferPipeline_1 , Shell, 257 linesres.sh - PostFreeSurfer/
scripts/ , Shell, 433 linesCreateMyelinMaps.sh - PostFreeSurfer/
scripts/ , Shell, 195 linesCreateMyelinMaps_1res.sh - PostFreeSurfer/
scripts/ , Shell, 125 linesCreateRibbon.sh - PostFreeSurfer/
scripts/ , Shell, 59 linesExample_1res_inflate.sh - PostFreeSurfer/
scripts/ , Shell, 762 linesFreeSurfer2CaretConvertA ndRegisterNonlinear.sh - PostFreeSurfer/
scripts/ , Shell, 343 linesFreeSurfer2CaretConvertA ndRegisterNonlinear_1res .sh - PostFreeSurfer/
scripts/ , Shell, 331 linesGenerateStructuralScenes .sh - PreFreeSurfer/
PreFreeSurferPipeline.sh , Shell, 1,005 lines - PreFreeSurfer/
scripts/ , Shell, 234 linesACPCAlignment.sh - PreFreeSurfer/
scripts/ , Shell, 156 linesAnatomicalAverage.sh - PreFreeSurfer/
scripts/ , Shell, 148 linesAtlasRegistrationToMNI15 2_FLIRTandFNIRT.sh - PreFreeSurfer/
scripts/ , Shell, 145 linesBiasFieldCorrection_T1wO nly.sh - PreFreeSurfer/
scripts/ , Shell, 135 linesBiasFieldCorrection_sqrt T1wXT2w.sh - PreFreeSurfer/
scripts/ , Shell, 250 linesBrainExtraction_FNIRTbas ed.sh - PreFreeSurfer/
scripts/ , Shell, 576 linesT2wToT1wDistortionCorrec tAndReg.sh - PreFreeSurfer/
scripts/ , Shell, 91 linesT2wToT1wReg.sh - RestingStateStats/
RestingStateStats.sh , Shell, 1,134 lines - RestingStateStats/
scripts/ , Shell, 89 linesCompile_MATLAB_code.sh - RestingStateStats/
scripts/ , Shell, 36 linesCompiled_RestingStateSta ts/ run_RestingStateStats.sh - RestingStateStats/
scripts/ , MATLAB, 882 linesRestingStateStats.m - Supplemental/
MakeAverageDataset/ , Shell, 802 linesMakeAverageDataset.sh - TaskfMRIAnalysis/
TaskfMRIAnalysis.sh , Shell, 303 lines - TaskfMRIAnalysis/
TaskfMRILevel3.sh , Shell, 472 lines - TaskfMRIAnalysis/
scripts/ , Shell, 656 linesTaskfMRILevel1.sh - TaskfMRIAnalysis/
scripts/ , Shell, 490 linesTaskfMRILevel2.sh - TaskfMRIAnalysis/
scripts/ , Shell, 424 linesmakeSubjectTaskSummary.s h - TransmitBias/
Phase1_IndividualAlign.s , Shell, 319 linesh - TransmitBias/
Phase2_GroupAverageFit.s , Shell, 130 linesh - TransmitBias/
Phase3_IndividualAdjustm , Shell, 186 linesent.sh - TransmitBias/
Phase4_GroupAverageCorre , Shell, 111 linesctedMaps.sh - TransmitBias/
RunIndividualOnly.sh , Shell, 201 lines - TransmitBias/
TransmitBiasLong.sh , Shell, 204 lines - TransmitBias/
scripts/ , MATLAB, 47 linesAFI_GroupAverage.m - TransmitBias/
scripts/ , Shell, 194 linesAFI_GroupAverage.sh - TransmitBias/
scripts/ , MATLAB, 42 linesAFI_GroupAverageCorrecte dMaps.m - TransmitBias/
scripts/ , Shell, 205 linesAFI_GroupAverageCorrecte dMaps.sh - TransmitBias/
scripts/ , Shell, 273 linesAFI_IndividualAlignRawAn dInitialMaps.sh - TransmitBias/
scripts/ , Shell, 313 linesAFI_IndividualFitCorrect ion.sh - TransmitBias/
scripts/ , MATLAB, 166 linesAFI_OptimizeSmoothing.m - TransmitBias/
scripts/ , MATLAB, 41 linesB1Tx_GroupAverage.m - TransmitBias/
scripts/ , Shell, 176 linesB1Tx_GroupAverage.sh - TransmitBias/
scripts/ , MATLAB, 41 linesB1Tx_GroupAverageCorrect edMaps.m - TransmitBias/
scripts/ , Shell, 182 linesB1Tx_GroupAverageCorrect edMaps.sh - TransmitBias/
scripts/ , Shell, 234 linesB1Tx_IndividualAlignRawA ndInitialMaps.sh - TransmitBias/
scripts/ , Shell, 286 linesB1Tx_IndividualFitCorrec tion.sh - TransmitBias/
scripts/ , MATLAB, 152 linesB1Tx_OptimizeSmoothing.m - TransmitBias/
scripts/ , Shell, 496 linesCalculateReceiveField.sh - TransmitBias/
scripts/ , Shell, 64 linesCompile_MATLAB_code.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_AFI_GroupAverag e/ run_AFI_GroupAverage.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_AFI_GroupAverag eCorrectedMaps/ run_AFI_GroupAverageCorr ectedMaps.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_AFI_OptimizeSmo othing/ run_AFI_OptimizeSmoothin g.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_B1Tx_GroupAvera ge/ run_B1Tx_GroupAverage.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_B1Tx_GroupAvera geCorrectedMaps/ run_B1Tx_GroupAverageCor rectedMaps.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_B1Tx_OptimizeSm oothing/ run_B1Tx_OptimizeSmoothi ng.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_PseudoTransmit_ GroupAverage/ run_PseudoTransmit_Group Average.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_PseudoTransmit_ GroupAverageCorrectedMap s/ run_PseudoTransmit_Group AverageCorrectedMaps.sh - TransmitBias/
scripts/ , Shell, 36 linesCompiled_PseudoTransmit_ OptimizeSmoothing/ run_PseudoTransmit_Optim izeSmoothing.sh - TransmitBias/
scripts/ , Shell, 120 linesCreateTransmitBiasROIs.s h - TransmitBias/
scripts/ , MATLAB, 96 linesPseudoTransmit_GroupAver age.m - TransmitBias/
scripts/ , Shell, 159 linesPseudoTransmit_GroupAver age.sh - TransmitBias/
scripts/ , MATLAB, 59 linesPseudoTransmit_GroupAver ageCorrectedMaps.m - TransmitBias/
scripts/ , Shell, 179 linesPseudoTransmit_GroupAver ageCorrectedMaps.sh - TransmitBias/
scripts/ , Shell, 274 linesPseudoTransmit_Individua lAlignRawAndInitialMaps. sh - TransmitBias/
scripts/ , Shell, 349 linesPseudoTransmit_Individua lFitCorrection.sh - TransmitBias/
scripts/ , MATLAB, 231 linesPseudoTransmit_OptimizeS moothing.m - TransmitBias/
scripts/ , MATLAB, 47 linesfindFlipCorrectionSlopeG roup.m - TransmitBias/
scripts/ , MATLAB, 41 linesfindFlipCorrectionSlopeL R.m - fMRIStats/
fMRIStats.sh , Shell, 491 lines - fMRIStats/
scripts/ , Shell, 26 linesCompile_MATLAB_code.sh - fMRIStats/
scripts/ , Shell, 36 linesCompiled_fMRIStats/ run_fMRIStats.sh - fMRIStats/
scripts/ , Shell, 36 linesCompiled_fMRIStats_Summa ryCSV/ run_fMRIStats_SummaryCSV .sh - fMRIStats/
scripts/ , MATLAB, 300 linesfMRIStats.m - fMRIStats/
scripts/ , MATLAB, 87 linesfMRIStats_SummaryCSV.m - fMRISurface/
GenericfMRISurfaceProces , Shell, 171 linessingPipeline.sh - fMRISurface/
GenericfMRISurfaceProces , Shell, 163 linessingPipeline_1res.sh - fMRISurface/
scripts/ , Shell, 98 linesCreateDenseTimeseries.sh - fMRISurface/
scripts/ , Shell, 113 linesGenerateFMRIScenes.sh - fMRISurface/
scripts/ , Shell, 153 linesRibbonVolumeToSurfaceMap ping.sh - fMRISurface/
scripts/ , Shell, 81 linesRibbonVolumeToSurfaceMap ping_1res.sh - fMRISurface/
scripts/ , Shell, 157 linesSubcorticalProcessing.sh - fMRISurface/
scripts/ , Shell, 71 linesSurfaceSmoothing.sh - fMRIVolume/
GenericfMRIVolumeProcess , Shell, 1,345 linesingPipeline.sh - fMRIVolume/
scripts/ , Shell, 19 linesCompile_MATLAB_code.sh - fMRIVolume/
scripts/ , Shell, 36 linesCompiled_multiEchoCombin e/ run_multiEchoCombine.sh - fMRIVolume/
scripts/ , Shell, 115 linesComputeSpinEchoBiasField .sh - fMRIVolume/
scripts/ , Shell, 1,326 linesDistortionCorrectionAndE PIToT1wReg_FLIRTBBRAndFr eeSurferBBRbased.sh - fMRIVolume/
scripts/ , Shell, 226 linesIntensityNormalization.s h - fMRIVolume/
scripts/ , Shell, 325 linesMotionCorrection.sh - fMRIVolume/
scripts/ , Shell, 362 linesOneStepResampling.sh - fMRIVolume/
scripts/ , MATLAB, 332 linesmultiEchoCombine.m - global/
fsl/ , MATLAB, 37 linesetc/ matlab/ call_fsl.m - global/
fsl/ , MATLAB, 20 linesetc/ matlab/ cleanup_read_avw_img_sli ce.m - global/
fsl/ , MATLAB, 24 linesetc/ matlab/ prepare_read_avw_img_sli ce.m - global/
fsl/ , MATLAB, 41 linesetc/ matlab/ read_avw.m - global/
fsl/ , MATLAB, 34 linesetc/ matlab/ read_avw_complex.m - global/
fsl/ , MATLAB, 42 linesetc/ matlab/ read_avw_hdr.m - global/
fsl/ , MATLAB, 47 linesetc/ matlab/ read_avw_img.m - global/
fsl/ , MATLAB, 55 linesetc/ matlab/ read_avw_img_slice.m - global/
fsl/ , MATLAB, 54 linesetc/ matlab/ read_pulse.m - global/
fsl/ , MATLAB, 43 linesetc/ matlab/ save_avw.m - global/
fsl/ , MATLAB, 26 linesetc/ matlab/ save_avw_complex.m - global/
fsl/ , MATLAB, 92 linesetc/ matlab/ save_avw_hdr.m - global/
fsl/ , MATLAB, 57 linesetc/ matlab/ save_avw_img.m - global/
fsl/ , MATLAB, 43 linesetc/ matlab/ write_pulse.m - global/
matlab/ , MATLAB, 39 lines@gifti/ Contents.m - global/
matlab/ , MATLAB, 25 lines@gifti/ display.m - global/
matlab/ , MATLAB, 53 lines@gifti/ export.m - global/
matlab/ , MATLAB, 16 lines@gifti/ fieldnames.m - global/
matlab/ , MATLAB, 111 lines@gifti/ gifti.m - global/
matlab/ , MATLAB, 13 lines@gifti/ isfield.m - global/
matlab/ , MATLAB, 67 lines@gifti/ plot.m - global/
matlab/ , MATLAB, 81 lines@gifti/ private/ base64decode.m - global/
matlab/ , MATLAB, 157 lines@gifti/ private/ base64encode.m - global/
matlab/ , MATLAB, 26 lines@gifti/ private/ getdict.m - global/
matlab/ , MATLAB, 116 lines@gifti/ private/ isintent.m - global/
matlab/ , C, 4,150 lines@gifti/ private/ miniz.c - global/
matlab/ , MATLAB, 564 lines@gifti/ private/ mvtk_write.m - global/
matlab/ , MATLAB, 25 lines@gifti/ private/ read_freesurfer_file.m - global/
matlab/ , MATLAB, 236 lines@gifti/ private/ read_gifti_file_standalo ne.m - global/
matlab/ , MATLAB, 429 lines@gifti/ private/ xml_parser.m - global/
matlab/ , C, 77 lines@gifti/ private/ zstream.c - global/
matlab/ , MATLAB, 49 lines@gifti/ private/ zstream.m - global/
matlab/ , MATLAB, 253 lines@gifti/ save.m - global/
matlab/ , MATLAB, 365 lines@gifti/ saveas.m - global/
matlab/ , MATLAB, 18 lines@gifti/ struct.m - global/
matlab/ , MATLAB, 139 lines@gifti/ subsasgn.m - global/
matlab/ , MATLAB, 60 lines@gifti/ subsref.m - global/
matlab/ , Shell, 183 linesCompile_All_MATLAB_code. sh - global/
matlab/ , MATLAB, 45 linescifti-legacy/ ciftiopen.m - global/
matlab/ , MATLAB, 33 linescifti-legacy/ ciftisave.m - global/
matlab/ , MATLAB, 49 linescifti-legacy/ ciftisavereset.m - global/
matlab/ , MATLAB, 50 linescifti-matlab/ @xmltreemod/ Contents.m - global/
matlab/ , MATLAB, 90 linescifti-matlab/ @xmltreemod/ add.m - global/
matlab/ , MATLAB, 111 linescifti-matlab/ @xmltreemod/ attributes.m - global/
matlab/ , MATLAB, 49 linescifti-matlab/ @xmltreemod/ branch.m - global/
matlab/ , MATLAB, 14 linescifti-matlab/ @xmltreemod/ char.m - global/
matlab/ , MATLAB, 26 linescifti-matlab/ @xmltreemod/ children.m - global/
matlab/ , MATLAB, 129 linescifti-matlab/ @xmltreemod/ convert.m - global/
matlab/ , MATLAB, 44 linescifti-matlab/ @xmltreemod/ copy.m - global/
matlab/ , MATLAB, 31 linescifti-matlab/ @xmltreemod/ delete.m - global/
matlab/ , MATLAB, 19 linescifti-matlab/ @xmltreemod/ display.m - global/
matlab/ , MATLAB, 396 linescifti-matlab/ @xmltreemod/ editor.m - global/
matlab/ , MATLAB, 165 linescifti-matlab/ @xmltreemod/ find.m - global/
matlab/ , MATLAB, 37 linescifti-matlab/ @xmltreemod/ flush.m - global/
matlab/ , MATLAB, 37 linescifti-matlab/ @xmltreemod/ get.m - global/
matlab/ , MATLAB, 14 linescifti-matlab/ @xmltreemod/ getfilename.m - global/
matlab/ , MATLAB, 20 linescifti-matlab/ @xmltreemod/ isfield.m - global/
matlab/ , MATLAB, 31 linescifti-matlab/ @xmltreemod/ length.m - global/
matlab/ , MATLAB, 16 linescifti-matlab/ @xmltreemod/ move.m - global/
matlab/ , MATLAB, 14 linescifti-matlab/ @xmltreemod/ parent.m - global/
matlab/ , Shell, 41 linescifti-matlab/ @xmltreemod/ private/ compile_mex.sh - global/
matlab/ , MATLAB, 91 linescifti-matlab/ @xmltreemod/ private/ struct2xml.m - global/
matlab/ , C, 111 linescifti-matlab/ @xmltreemod/ private/ xml_findstr.c - global/
matlab/ , MATLAB, 30 linescifti-matlab/ @xmltreemod/ private/ xml_findstr.m - global/
matlab/ , MATLAB, 411 linescifti-matlab/ @xmltreemod/ private/ xml_parser.m - global/
matlab/ , MATLAB, 31 linescifti-matlab/ @xmltreemod/ root.m - global/
matlab/ , MATLAB, 129 linescifti-matlab/ @xmltreemod/ save.m - global/
matlab/ , MATLAB, 100 linescifti-matlab/ @xmltreemod/ save_string.m - global/
matlab/ , MATLAB, 21 linescifti-matlab/ @xmltreemod/ set.m - global/
matlab/ , MATLAB, 13 linescifti-matlab/ @xmltreemod/ setfilename.m - global/
matlab/ , MATLAB, 62 linescifti-matlab/ @xmltreemod/ xmltreemod.m - global/
matlab/ , MATLAB, 21 linescifti-matlab/ cifti_diminfo_dense_get_ structures.m - global/
matlab/ , MATLAB, 21 linescifti-matlab/ cifti_diminfo_dense_get_ surface_info.m - global/
matlab/ , MATLAB, 53 linescifti-matlab/ cifti_diminfo_dense_get_ volume_all_info.m - global/
matlab/ , MATLAB, 45 linescifti-matlab/ cifti_diminfo_dense_get_ volume_structure_info.m - global/
matlab/ , MATLAB, 47 linescifti-matlab/ cifti_diminfo_make_scala rs.m - global/
matlab/ , MATLAB, 30 linescifti-matlab/ cifti_diminfo_make_serie s.m - global/
matlab/ , MATLAB, 14 linescifti-matlab/ cifti_metadata_get.m - global/
matlab/ , MATLAB, 14 linescifti-matlab/ cifti_metadata_remove.m - global/
matlab/ , MATLAB, 19 linescifti-matlab/ cifti_metadata_set.m - global/
matlab/ , MATLAB, 157 linescifti-matlab/ cifti_read.m - global/
matlab/ , MATLAB, 110 linescifti-matlab/ cifti_struct_create_from _template.m - global/
matlab/ , MATLAB, 25 linescifti-matlab/ cifti_struct_create_sdse ries.m - global/
matlab/ , MATLAB, 40 linescifti-matlab/ cifti_struct_dense_extra ct_surface_data.m - global/
matlab/ , MATLAB, 59 linescifti-matlab/ cifti_struct_dense_extra ct_volume_all_data.m - global/
matlab/ , MATLAB, 59 linescifti-matlab/ cifti_struct_dense_extra ct_volume_structure_data .m - global/
matlab/ , MATLAB, 46 linescifti-matlab/ cifti_struct_dense_repla ce_surface_data.m - global/
matlab/ , MATLAB, 64 linescifti-matlab/ cifti_struct_dense_repla ce_volume_all_data.m - global/
matlab/ , MATLAB, 64 linescifti-matlab/ cifti_struct_dense_repla ce_volume_structure_data .m - global/
matlab/ , MATLAB, 17 linescifti-matlab/ cifti_vox2ind.m - global/
matlab/ , MATLAB, 208 linescifti-matlab/ cifti_write.m - global/
matlab/ , MATLAB, 38 linescifti-matlab/ cifti_write_from_templat e.m - global/
matlab/ , MATLAB, 18 linescifti-matlab/ cifti_write_sdseries.m - global/
matlab/ , MATLAB, 11 linescifti-matlab/ ciftiopen.m - global/
matlab/ , MATLAB, 33 linescifti-matlab/ ciftisave.m - global/
matlab/ , MATLAB, 28 linescifti-matlab/ ciftisavereset.m - global/
matlab/ , MATLAB, 33 linescifti-matlab/ private/ ambiguate_dims.m - global/
matlab/ , MATLAB, 15 linescifti-matlab/ private/ child_match.m - global/
matlab/ , MATLAB, 19 linescifti-matlab/ private/ cifti_diminfo_length.m - global/
matlab/ , MATLAB, 615 linescifti-matlab/ private/ cifti_parse_xml.m - global/
matlab/ , MATLAB, 333 linescifti-matlab/ private/ cifti_write_xml.m - global/
matlab/ , MATLAB, 8 linescifti-matlab/ private/ fread_excepting.m - global/
matlab/ , MATLAB, 6 linescifti-matlab/ private/ fwrite_excepting.m - global/
matlab/ , MATLAB, 41 linescifti-matlab/ private/ make_nifti2_hdr.m - global/
matlab/ , MATLAB, 36 linescifti-matlab/ private/ my_system.m - global/
matlab/ , MATLAB, 20 linescifti-matlab/ private/ myargparse.m - global/
matlab/ , MATLAB, 10 linescifti-matlab/ private/ myattrs.m - global/
matlab/ , MATLAB, 9 linescifti-matlab/ private/ mydelete.m - global/
matlab/ , MATLAB, 8 linescifti-matlab/ private/ myendswith.m - global/
matlab/ , MATLAB, 14 linescifti-matlab/ private/ mygettext.m - global/
matlab/ , MATLAB, 183 linescifti-matlab/ private/ read_nifti2_hdr.m - global/
matlab/ , MATLAB, 29 linescifti-matlab/ private/ sanity_check_cdata.m - global/
matlab/ , MATLAB, 9 linescifti-matlab/ private/ str2vec.m - global/
matlab/ , MATLAB, 96 linescifti-matlab/ private/ write_nifti2_hdr.m - global/
matlab/ , MATLAB, 23 linesdemean.m - global/
matlab/ , MATLAB, 30 lineseta_calc_pair.m - global/
matlab/ , MATLAB, 23 linesicaDim/ Feta.m - global/
matlab/ , MATLAB, 11 linesicaDim/ iFeta.m - global/
matlab/ , MATLAB, 511 linesicaDim/ icaDim.m - global/
matlab/ , MATLAB, 41 linesicaDim/ nets_svds.m - global/
matlab/ , MATLAB, 80 linesicaDim/ pca_dim.m - global/
matlab/ , MATLAB, 283 linesicasso122/ cca.m - global/
matlab/ , MATLAB, 42 linesicasso122/ centrotype.m - global/
matlab/ , MATLAB, 169 linesicasso122/ clusterhull.m - global/
matlab/ , MATLAB, 92 linesicasso122/ clusterquality.m - global/
matlab/ , MATLAB, 151 linesicasso122/ clusterstat.m - global/
matlab/ , MATLAB, 61 linesicasso122/ corrw.m - global/
matlab/ , MATLAB, 107 linesicasso122/ hcluster.m - global/
matlab/ , MATLAB, 165 linesicasso122/ icasso.m - global/
matlab/ , MATLAB, 239 linesicasso122/ icassoCluster.m - global/
matlab/ , MATLAB, 120 linesicasso122/ icassoDendrogram.m - global/
matlab/ , MATLAB, 285 linesicasso122/ icassoEst.m - global/
matlab/ , MATLAB, 99 linesicasso122/ icassoExp.m - global/
matlab/ , MATLAB, 196 linesicasso122/ icassoGet.m - global/
matlab/ , MATLAB, 391 linesicasso122/ icassoGraph.m - global/
matlab/ , MATLAB, 92 linesicasso122/ icassoIdx2Centrotype.m - global/
matlab/ , MATLAB, 187 linesicasso122/ icassoProjection.m - global/
matlab/ , MATLAB, 113 linesicasso122/ icassoResult.m - global/
matlab/ , MATLAB, 158 linesicasso122/ icassoRindex.m - global/
matlab/ , MATLAB, 317 linesicasso122/ icassoShow.m - global/
matlab/ , MATLAB, 191 linesicasso122/ icassoStability.m - global/
matlab/ , MATLAB, 240 linesicasso122/ icassoStruct.m - global/
matlab/ , MATLAB, 12 linesicasso122/ icatb_get_matlab_version .m - global/
matlab/ , MATLAB, 97 linesicasso122/ megdemo.m - global/
matlab/ , MATLAB, 58 linesicasso122/ mmds.m - global/
matlab/ , MATLAB, 44 linesicasso122/ parallelize.m - global/
matlab/ , MATLAB, 76 linesicasso122/ processvarargin.m - global/
matlab/ , MATLAB, 55 linesicasso122/ redscale.m - global/
matlab/ , MATLAB, 118 linesicasso122/ reducesim.m - global/
matlab/ , MATLAB, 91 linesicasso122/ rindex.m - global/
matlab/ , MATLAB, 249 linesicasso122/ sammon.m - global/
matlab/ , MATLAB, 91 linesicasso122/ signalplot.m - global/
matlab/ , MATLAB, 50 linesicasso122/ sim2dis.m - global/
matlab/ , MATLAB, 160 linesicasso122/ similaritygraph.m - global/
matlab/ , MATLAB, 292 linesicasso122/ som_dendrogram.m - global/
matlab/ , MATLAB, 771 linesicasso122/ som_grid.m - global/
matlab/ , MATLAB, 291 linesicasso122/ som_linkage.m - global/
matlab/ , MATLAB, 777 linesicasso122/ som_set.m - global/
matlab/ , MATLAB, 51 linesicasso122/ sqrtsim2dis.m - global/
matlab/ , MATLAB, 269 linesicasso122/ vis_valuetype.m - global/
matlab/ , MATLAB, 24 linesnets_spectra/ nets_demean.m - global/
matlab/ , MATLAB, 81 linesnets_spectra/ nets_spectra.m - global/
matlab/ , MATLAB, 85 linesnets_spectra/ nets_spectra_mp.m - global/
matlab/ , MATLAB, 86 linesnets_spectra/ nets_spectra_sp.m - global/
matlab/ , MATLAB, 25 linesnormalise.m - global/
scripts/ , Shell, 23 linesCompile_MATLAB_code.sh - global/
scripts/ , Shell, 36 linesCompiled_RSNregression/ run_RSNregression.sh - global/
scripts/ , Shell, 152 linesCorrThick.sh - global/
scripts/ , Python, 42 linesCorrThick/ CorrThick.py - global/
scripts/ , Python, 251 linesCorrThick/ curvature.py - global/
scripts/ , Python, 313 linesCorrThick/ metric_regression.py - global/
scripts/ , Python, 109 linesCorrThick/ neighbor_info.py - global/
scripts/ , Python, 42 linesCorrThick/ roi.py - global/
scripts/ , Python, 178 linesCorrThick/ wb.py - global/
scripts/ , Shell, 257 linesCorrectVolumeOrientation .sh - global/
scripts/ , Shell, 207 linesExtractFromMRFIXConcat.s h - global/
scripts/ , Shell, 306 linesFieldMapPreprocessingAll .sh - global/
scripts/ , Shell, 104 linesGradientDistortionUnwarp .sh - global/
scripts/ , Shell, 137 linesMSMSulc.sh - global/
scripts/ , Shell, 185 linesMyelinMap_BC.sh - global/
scripts/ , Shell, 452 linesROI_to_DICOM.sh - global/
scripts/ , MATLAB, 436 linesRSNregression.m - global/
scripts/ , Shell, 343 linesRSNregression.sh - global/
scripts/ , Shell, 65 linesRotate_bvecs.sh - global/
scripts/ , Shell, 72 linesScaleVolumeNHP.sh - global/
scripts/ , Shell, 666 linesTopupPreprocessingAll.sh - global/
scripts/ , Shell, 229 linesVolumeToCIFTI.sh - global/
scripts/ , Python, 69 linesaff2rigid.py - global/
scripts/ , Python, 324 linesaverage_bvecs.py - global/
scripts/ , Shell, 186 linesbbregister.sh - global/
scripts/ , Shell, 15 linescaptureoutput.sh - global/
scripts/ , Shell, 61 linescreateHeadMask.sh - global/
scripts/ , Shell, 10 linesdownload_NHP_Templates.s h - global/
scripts/ , Shell, 120 linesmcflirt.sh - global/
scripts/ , Shell, 77 linesmcflirt_acc.sh - global/
scripts/ , Shell, 119 linesmixtureModel.sh - global/
scripts/ , Python, 303 linesnifti2dcm.py - tICA/
scripts/ , Shell, 65 linesCompile_MATLAB_code.sh - tICA/
scripts/ , Shell, 36 linesCompiled_ComputeGroupTIC A/ run_ComputeGroupTICA.sh - tICA/
scripts/ , Shell, 36 linesCompiled_ComputeTICAFeat ures/ run_ComputeTICAFeatures. sh - tICA/
scripts/ , Shell, 36 linesCompiled_ConcatGroupSICA / run_ConcatGroupSICA.sh - tICA/
scripts/ , Shell, 36 linesCompiled_GroupSICA/ run_GroupSICA.sh - tICA/
scripts/ , Shell, 36 linesCompiled_MIGP/ run_MIGP.sh - tICA/
scripts/ , Shell, 36 linesCompiled_tICACleanData/ run_tICACleanData.sh - tICA/
scripts/ , MATLAB, 266 linesComputeGroupTICA.m - tICA/
scripts/ , Shell, 170 linesComputeGroupTICA.sh - tICA/
scripts/ , MATLAB, 689 linesComputeTICAFeatures.m - tICA/
scripts/ , Shell, 166 linesComputeTICAFeatures.sh - tICA/
scripts/ , MATLAB, 121 linesConcatGroupSICA.m - tICA/
scripts/ , Shell, 166 linesConcatGroupSICA.sh - tICA/
scripts/ , MATLAB, 40 linesFastICA_25/ Contents.m - tICA/
scripts/ , MATLAB, 32 linesFastICA_25/ demosig.m - tICA/
scripts/ , MATLAB, 15 linesFastICA_25/ dispsig.m - tICA/
scripts/ , MATLAB, 519 linesFastICA_25/ fastica.m - tICA/
scripts/ , MATLAB, 667 linesFastICA_25/ fasticag.m - tICA/
scripts/ , MATLAB, 930 linesFastICA_25/ fpica.m - tICA/
scripts/ , MATLAB, 441 linesFastICA_25/ gui_adv.m - tICA/
scripts/ , MATLAB, 256 linesFastICA_25/ gui_advc.m - tICA/
scripts/ , MATLAB, 581 linesFastICA_25/ gui_cb.m - tICA/
scripts/ , MATLAB, 84 linesFastICA_25/ gui_cg.m - tICA/
scripts/ , MATLAB, 224 linesFastICA_25/ gui_help.m - tICA/
scripts/ , MATLAB, 180 linesFastICA_25/ gui_l.m - tICA/
scripts/ , MATLAB, 112 linesFastICA_25/ gui_lc.m - tICA/
scripts/ , MATLAB, 177 linesFastICA_25/ gui_s.m - tICA/
scripts/ , MATLAB, 74 linesFastICA_25/ gui_sc.m - tICA/
scripts/ , MATLAB, 397 linesFastICA_25/ icaplot.m - tICA/
scripts/ , MATLAB, 358 linesFastICA_25/ pcamat.m - tICA/
scripts/ , MATLAB, 15 linesFastICA_25/ remmean.m - tICA/
scripts/ , MATLAB, 82 linesFastICA_25/ whitenv.m - tICA/
scripts/ , MATLAB, 101 linesGroupSICA.m - tICA/
scripts/ , Shell, 132 linesGroupSICA.sh - tICA/
scripts/ , MATLAB, 124 linesMIGP.m - tICA/
scripts/ , Shell, 138 linesMIGP.sh - tICA/
scripts/ , MATLAB, 11 linesfeature_helpers/ CE.m - tICA/
scripts/ , MATLAB, 133 linesfeature_helpers/ ComputeDVARSandGS.m - tICA/
scripts/ , Shell, 139 linesfeature_helpers/ brain_masks.sh - tICA/
scripts/ , MATLAB, 18 linesfeature_helpers/ brain_region_features.m - tICA/
scripts/ , MATLAB, 29 linesfeature_helpers/ eta_calc_pair.m - tICA/
scripts/ , MATLAB, 12 linesfeature_helpers/ findFivePercentageOutlie rs.m - tICA/
scripts/ , MATLAB, 7 linesfeature_helpers/ findOutliers.m - tICA/
scripts/ , MATLAB, 15 linesfeature_helpers/ findScaledMADOutliers.m - tICA/
scripts/ , MATLAB, 65 linesfeature_helpers/ gp_match.m - tICA/
scripts/ , MATLAB, 12 linesfeature_helpers/ gp_xcorr.m - tICA/
scripts/ , MATLAB, 10 linesfeature_helpers/ pwelch_ps.m - tICA/
scripts/ , MATLAB, 38 linesfeature_helpers/ single_subject_tcs_featu res.m - tICA/
scripts/ , MATLAB, 20 linesfeature_helpers/ std_outlier.m - tICA/
scripts/ , MATLAB, 13 linesfeature_helpers/ sum_outlier.m - tICA/
scripts/ , MATLAB, 253 linestICACleanData.m - tICA/
scripts/ , Shell, 402 linestICACleanData.sh - tICA/
scripts/ , Shell, 147 linestICAMakeCleanLongitudina lTemplate.sh - tICA/
tICAPipeline.sh , Shell, 773 lines - LICENSE.md, License, 56 lines
- README.md, Text, 28 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 5 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 535 scripts, each with its path and the digest of its content;
- 2 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- humanconnectome.org/
study/ , at Human Connectome Project; found in “Data, Materials, and Software Availability”hcp-lifespan-aging - humanconnectome.org/
study/ , at Human Connectome Project; found in “Data, Materials, and Software Availability”hcp-lifespan-development - humanconnectome.org/
study/ , at Human Connectome Project; found in “Data, Materials, and Software Availability”hcp-young-adult - openneuro:ds007100, at OpenNeuro; found in “Data, Materials, and Software Availability”
Data, Materials, and Software Availability
The human data used in this study are publicly available. The HCP-D dataset can be downloaded from: https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 30 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 12 authors, 5 keywords, 15 MeSH terms, 3 funders, 120 references.
Cite
This paper
Winter-Nelson, E., Bergmann, E., Chan, M. Y., Vill, G., Han, L., Zhang, Z., Kavushansky, A., Dolgopyat, I., Asleh, J., Whitesell, J. D., Kahn, I., & Wig, G. S. (2026). Correspondence of large-scale functional brain network decline across aging mice and humans. Proceedings of the National Academy of Sciences of the United States of America, 123(13), e2527522123. https://
BibTeX
@article{winternelson202
author = {Winter-Nelson, Ezra and Bergmann, Eyal and Chan, Micaela Y and Vill, Gabriella and Han, Liang and Zhang, Ziwei and Kavushansky, Alexandra and Dolgopyat, Irit and Asleh, Jad and Whitesell, Jennifer D and Kahn, Itamar and Wig, Gagan S},
title = {{Correspondence of large-scale functional brain network decline across aging mice and humans}},
journal = {Proceedings of the National Academy of Sciences of the United States of America},
year = {2026},
month = mar,
volume = {123},
number = {13},
pages = {e2527522123},
publisher = {National Academy of Sciences},
issn = {0027-8424},
doi = {10.1073/
url = {https://
pmid = {41894329},
pmcid = {PMC13037878}
}
RIS
TY - JOUR
AU - Winter-Nelson, Ezra
AU - Bergmann, Eyal
AU - Chan, Micaela Y
AU - Vill, Gabriella
AU - Han, Liang
AU - Zhang, Ziwei
AU - Kavushansky, Alexandra
AU - Dolgopyat, Irit
AU - Asleh, Jad
AU - Whitesell, Jennifer D
AU - Kahn, Itamar
AU - Wig, Gagan S
TI - Correspondence of large-scale functional brain network decline across aging mice and humans
T2 - Proceedings of the National Academy of Sciences of the United States of America
J2 - Proc Natl Acad Sci U S A
PY - 2026
DA - 2026/
VL - 123
IS - 13
SP - e2527522123
SN - 0027-8424
PB - National Academy of Sciences
DO - 10.1073/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1073/
"type": "article-journal",
"title": "Correspondence of large-scale functional brain network decline across aging mice and humans",
"container-title": "Proceedings of the National Academy of Sciences of the United States of America",
"author": [
{
"family": "Winter-Nelson",
"given": "Ezra"
},
{
"family": "Bergmann",
"given": "Eyal"
},
{
"family": "Chan",
"given": "Micaela Y"
},
{
"family": "Vill",
"given": "Gabriella"
},
{
"family": "Han",
"given": "Liang"
},
{
"family": "Zhang",
"given": "Ziwei"
},
{
"family": "Kavushansky",
"given": "Alexandra"
},
{
"family": "Dolgopyat",
"given": "Irit"
},
{
"family": "Asleh",
"given": "Jad"
},
{
"family": "Whitesell",
"given": "Jennifer D"
},
{
"family": "Kahn",
"given": "Itamar"
},
{
"family": "Wig",
"given": "Gagan S"
}
],
"container-title-short":
"volume": "123",
"issue": "13",
"page": "e2527522123",
"DOI": "10.1073/
"PMID": "41894329",
"PMCID": "PMC13037878",
"ISSN": "0027-8424",
"publisher": "National Academy of Sciences",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
27
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1162/imag.a.1338 [code]
- Systematic fMRI signal differences across cohorts alter lifespan trajectories of functional brain networks.Journal: Imaging neuroscience (Cambridge, Mass.)In common: cifti-matlab, GIfTI library for MATLAB, scikit-learn, 2 other tools, humanconnectome.org/study/hcp-lifespan-aging, humanconnectome.org/study/hcp-young-adult, fMRI, 14 references, 2 authors
- [2] doi:10.1038/s41467-025-62812-9 [code]
- Mapping the coupling between tract reachability and cortical geometry of the human brain.Journal: Nature communicationsIn common: HCP Pipelines, dcm2niix, cifti-matlab, 21 other tools, humanconnectome.org/study/hcp-lifespan-development, 4 references
- [3] doi:10.1038/s42003-025-08509-7 [code]
- Development of areal-level individualized homologous functional parcellations in youth.Journal: Communications biologyIn common: HCP Pipelines, dcm2niix, cifti-matlab, 20 other tools, fMRI, 8 references
- [4] doi:10.1038/s41593-024-01596-5 [code]
- A precision functional atlas of personalized network topography and probabilities.Journal: Nature neuroscienceIn common: HCP Pipelines, cifti-matlab, PyBIDS, 9 other tools, humanconnectome.org/study/hcp-lifespan-development, 11 references
- [5] doi:10.1371/journal.pbio.3003856 [code]
- Aging and metabolism contribute separately to brain-body health.Journal: PLoS biologyIn common: HCP Pipelines, Connectome Workbench, GIfTI library for MATLAB, 14 other tools, humanconnectome.org/study/hcp-lifespan-aging, 8 references
- [6] doi:10.1093/cercor/bhae278 [code]
- Task and stimulus coding in the multiple-demand network.Journal: Cerebral cortex (New York, N.Y. : 1991)In common: HCP Pipelines, dcm2niix, cifti-matlab, 18 other tools, 1 reference
- [7] doi:10.34133/research.1143 [code]
- Lifestyle and Transcriptional Signatures Associated with Ethnicity/
Race-Related Variations in the Functional Connectome. Journal: Research (Washington, D.C.)In common: Connectome Workbench, GIfTI library for MATLAB, Tools for NIfTI and ANALYZE image (MATLAB), 12 other tools, humanconnectome.org/study/hcp-lifespan-development, humanconnectome.org/study/hcp-young-adult, 6 references - [8] doi:10.1523/jneurosci.0579-23.2023 [code]
- Dissociable Effects of Alzheimer's Disease-Related Cognitive Dysfunction and Aging on Functional Brain Network Segregation.Journal: The Journal of neuroscience : the official journal of the Society for NeuroscienceIn common: cifti-matlab, GIfTI library for MATLAB, seaborn, 2 other tools, fMRI, 10 references, 2 authors
- [9] doi:10.1038/s41467-023-44363-z [code]
- Multimodal measures of spontaneous brain activity reveal both common and divergent patterns of cortical functional organization.Journal: Nature communicationsIn common: PyBIDS, Nipype, SimpleITK, 10 other tools, fMRI, mouse, 10 references
- [10] doi:10.1038/s41586-026-10631-3 [code]
- A prognostic human brain network for diffuse midline glioma.Journal: NatureIn common: cifti-matlab, pydicom, Curve Fitting Toolbox, 17 other tools, 5 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 5 repositories of the authors' code, each at its verified commit and with its license, 535 scripts, and 2 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:a1b38b446fc3ea16…
Add the badge to the code's README
If you are an author or a maintainer of this paper's code, you can add this badge. It says what OSCR knows of the paper (its code, its validated tracing map) and links the code to this page. Paste one of these snippets under the README's title. Keep the two marks around it, so that the badge can be replaced in place and is never added twice. OSCR changes nothing in your repository.
Markdown
<!-- oscr-badge:start -->
[](https://openscicode.org/badge/doi/10.1073/pnas.2527522123)
<!-- oscr-badge:end -->reStructuredText
.. oscr-badge:start
.. image:: https://openscicode.org/badge/doi/10.1073/pnas.2527522123.svg
:target: https://openscicode.org/badge/doi/10.1073/pnas.2527522123
:alt: OSCR
.. oscr-badge:endHTML
<!-- oscr-badge:start -->
<a href="https://openscicode.org/badge/doi/10.1073/pnas.2527522123"><img src="https://openscicode.org/badge/doi/10.1073/pnas.2527522123.svg" alt="OSCR"></a>
<!-- oscr-badge:end -->On GitHub, open the README, choose Edit (the pencil), paste the snippet under the title, then "Commit changes".
- SteenMoeller/NORDIC_Raw: README.md on GitHub
- CoBrALab/RABIES: README.md on GitHub
- Washington-University/HCPpipelines: README.md on GitHub
If you choose to, you can have the badge kept up to date for you, with oscr badge --write from the command line or with the GitHub Action in your repository's workflows. Every other form and option (a card, AsciiDoc, LaTeX, shields.io) is on the badge page.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: code errors and mismatches between the code and the paper about this paper and its code, from readers and its authors, beside the paper and its tracing map.
Report a mismatch between the code and the paper · Report a code error (signed in)
Reproductions: reports from readers who ran the authors' code and did not get the paper's result, what they ran, with which environment, commit and data.
Report a reproduction failure (signed in)
Versions of its code: the releases of its code tied to a version of this paper (the preprint, the accepted manuscript, the version of record…), each with the tracing map versioned with it.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
