diff --git a/.circleci/config.yml b/.circleci/config.yml index 9aecb5596..d001166f5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,7 +5,7 @@ orbs: .dockersetup: &dockersetup docker: - - image: pennlinc/xcp_d_build:0.0.10 + - image: pennlinc/xcp_d_build:0.0.11 working_directory: /src/xcp_d runinstall: @@ -73,6 +73,25 @@ jobs: # The resource_class feature allows configuring CPU and RAM resources for each job. Different resource classes are available for different executors. https://circleci.com/docs/2.0/configuration-reference/#resourceclass resource_class: large + download_data_ukbiobank: + <<: *dockersetup + steps: + - checkout + - restore_cache: + key: ukbiobank-08 + - run: *runinstall + - run: + name: Download ukbiobank test data + command: | + cd /src/xcp_d/.circleci + python get_data.py $PWD/data ukbiobank + - save_cache: + key: ukbiobank-08 + paths: + - /src/xcp_d/.circleci/data/ukbiobank + # The resource_class feature allows configuring CPU and RAM resources for each job. Different resource classes are available for different executors. https://circleci.com/docs/2.0/configuration-reference/#resourceclass + resource_class: large + download_data_fmriprepwithoutfreesurfer: <<: *dockersetup steps: @@ -200,7 +219,7 @@ jobs: - store_artifacts: path: /src/xcp_d/.circleci/out/test_ds001419_cifti/xcp_d/ - pnc_nifti: + ukbiobank: <<: *dockersetup steps: - checkout @@ -208,28 +227,28 @@ jobs: name: Check whether build should be skipped command: | cd /src/xcp_d - if [[ "$( git log --format=oneline -n 1 $CIRCLE_SHA1 | grep -i -E '\[skip[ _]?pnc_nifti\]' )" != "" ]]; then - echo "Skipping pnc_nifti build" + if [[ "$( git log --format=oneline -n 1 $CIRCLE_SHA1 | grep -i -E '\[skip[ _]?ukbiobank\]' )" != "" ]]; then + echo "Skipping ukbiobank build" circleci step halt fi - restore_cache: - key: pnc-02 + key: ukbiobank-08 - run: *runinstall - run: name: Run full xcp_d on nifti with freesurfer no_output_timeout: 1h command: | - pytest -rP -o log_cli=true -m "pnc_nifti" --cov-append --cov-report term-missing --cov=xcp_d --data_dir=/src/xcp_d/.circleci/data --output_dir=/src/xcp_d/.circleci/out --working_dir=/src/xcp_d/.circleci/work xcp_d + pytest -rP -o log_cli=true -m "ukbiobank" --cov-append --cov-report term-missing --cov=xcp_d --data_dir=/src/xcp_d/.circleci/data --output_dir=/src/xcp_d/.circleci/out --working_dir=/src/xcp_d/.circleci/work xcp_d mkdir /src/coverage - mv /src/xcp_d/.coverage /src/coverage/.coverage.pnc_nifti + mv /src/xcp_d/.coverage /src/coverage/.coverage.ukbiobank # remove nifti files before uploading artifacts find /src/xcp_d/.circleci/out/ -name "*.nii.gz" -type f -delete - persist_to_workspace: root: /src/coverage/ paths: - - .coverage.pnc_nifti + - .coverage.ukbiobank - store_artifacts: - path: /src/xcp_d/.circleci/out/test_pnc_nifti/xcp_d/ + path: /src/xcp_d/.circleci/out/test_ukbiobank/xcp_d/ nibabies: <<: *dockersetup @@ -450,6 +469,13 @@ workflows: tags: only: /.*/ + - download_data_ukbiobank: + requires: + - build + filters: + tags: + only: /.*/ + - download_data_fmriprepwithoutfreesurfer: requires: - build @@ -486,9 +512,9 @@ workflows: tags: only: /.*/ - - pnc_nifti: + - ukbiobank: requires: - - download_data_pnc + - download_data_ukbiobank filters: branches: ignore: @@ -561,7 +587,7 @@ workflows: - pnc_cifti_t2wonly - ds001419_nifti - ds001419_cifti - - pnc_nifti + - ukbiobank - nibabies - nifti_without_freesurfer - pytests @@ -577,7 +603,7 @@ workflows: requires: - ds001419_nifti - ds001419_cifti - - pnc_nifti + - ukbiobank - nifti_without_freesurfer - nibabies - pnc_cifti diff --git a/Dockerfile b/Dockerfile index 8d5984363..96628c871 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM pennlinc/xcp_d_build:0.0.10 +FROM pennlinc/xcp_d_build:0.0.11 # Install xcp_d COPY . /src/xcp_d diff --git a/docs/api.rst b/docs/api.rst index 64e655925..1434bd9ba 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -88,8 +88,6 @@ xcp_d-combineqc xcp_d.utils.bids xcp_d.utils.concatenation xcp_d.utils.confounds - xcp_d.utils.dcan2fmriprep - xcp_d.utils.hcp2fmriprep xcp_d.utils.doc xcp_d.utils.execsummary xcp_d.utils.filemanip @@ -100,3 +98,23 @@ xcp_d-combineqc xcp_d.utils.sentry xcp_d.utils.utils xcp_d.utils.write_save + + +*********************************************************************** +:mod:`xcp_d.ingression`: Functions to Ingress Preprocessing Derivatives +*********************************************************************** + +.. automodule:: xcp_d.ingression + :no-members: + :no-inherited-members: + +.. currentmodule:: xcp_d + +.. autosummary:: + :toctree: generated/ + :template: module.rst + + xcp_d.ingression.abcdbids + xcp_d.ingression.hcpya + xcp_d.ingression.ukbiobank + xcp_d.ingression.utils diff --git a/docs/workflows.rst b/docs/workflows.rst index a047024ef..1b7fae2ac 100644 --- a/docs/workflows.rst +++ b/docs/workflows.rst @@ -246,6 +246,88 @@ For more information about confound regressor selection, please refer to :footci options. +.. list-table:: Preprocessing Pipeline Support + + * - Nuisance Strategy + - 24P + - 27P + - 36P + - acompcor + - acompcor_gsr + - aroma + - aroma_gsr + - gsr_only + - none + * - fMRIPrep (>=23.1.0) + - X + - X + - X + - X + - X + - + - + - X + - X + * - fMRIPrep (<23.1.0) + - X + - X + - X + - X + - X + - X + - X + - X + - X + * - Nibabies + - X + - X + - X + - X + - X + - + - + - X + - X + * - ABCD-BIDS (DCAN) + - X + - X + - X + - + - + - + - + - X + - X + * - HCP-YA + - X + - X + - X + - + - + - + - + - X + - X + * - UK Biobank + - X + - + - + - + - + - + - + - X + - X + +.. important:: + fMRIPrep removed AROMA support in 23.1.0. + In the future, there will be an fMRIPost-AROMA BIDS App that runs AROMA on fMRIPrep outputs. + +.. warning:: + The strategy ``gsr_only`` is only appropriate for UK Biobank data, + as those data have already been denoised with FSL FIX. + + Dummy scan removal [OPTIONAL] ============================= :func:`~xcp_d.workflows.postprocessing.init_prepare_confounds_wf`, diff --git a/pyproject.toml b/pyproject.toml index 1516d8da3..5f85b53f2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -165,11 +165,11 @@ per-file-ignores = [ ] [tool.pytest.ini_options] -addopts = '-m "not ds001419_nifti and not ds001419_cifti and not pnc_nifti and not pnc_cifti and not pnc_cifti_t2wonly and not fmriprep_without_freesurfer and not nibabies"' +addopts = '-m "not ds001419_nifti and not ds001419_cifti and not ukbiobank and not pnc_cifti and not pnc_cifti_t2wonly and not fmriprep_without_freesurfer and not nibabies"' markers = [ "ds001419_nifti: mark NIfTI integration test for fMRIPrep derivatives from ds001419", "ds001419_cifti: mark CIFTI integration test for fMRIPrep derivatives from ds001419", - "pnc_nifti: mark integration test for fMRIPrep derivatives with NIFTI settings", + "ukbiobank: mark integration test for UK Biobank derivatives with NIfTI settings", "pnc_cifti: mark integration test for fMRIPrep derivatives with CIFTI settings", "pnc_cifti_t2wonly: mark integration test for fMRIPrep derivatives with CIFTI settings and a simulated T2w file", "fmriprep_without_freesurfer: mark integration test for fMRIPrep derivatives without FreeSurfer", diff --git a/xcp_d/cli/run.py b/xcp_d/cli/run.py index 8852a0124..ffe2108d9 100644 --- a/xcp_d/cli/run.py +++ b/xcp_d/cli/run.py @@ -175,11 +175,11 @@ def get_parser(): "--input_type", required=False, default="fmriprep", - choices=["fmriprep", "dcan", "hcp", "nibabies"], + choices=["fmriprep", "dcan", "hcp", "nibabies", "ukb"], help=( "The pipeline used to generate the preprocessed derivatives. " "The default pipeline is 'fmriprep'. " - "The 'dcan', 'hcp', and 'nibabies' pipelines are also supported. " + "The 'dcan', 'hcp', 'nibabies', and 'ukb' pipelines are also supported. " "'nibabies' assumes the same structure as 'fmriprep'." ), ) @@ -218,6 +218,8 @@ def get_parser(): "aroma_gsr", "custom", "none", + # GSR-only for UKB + "gsr_only", ], default="36P", type=str, @@ -797,6 +799,21 @@ def _validate_parameters(opts, build_log): ) opts.process_surfaces = True + elif opts.input_type == "ukb": + if opts.cifti: + build_log.warning( + f"With input_type {opts.input_type}, cifti processing (--cifti) will be " + "disabled automatically." + ) + opts.cifti = False + + if opts.process_surfaces: + build_log.warning( + f"With input_type {opts.input_type}, surface normalization " + "(--warp-surfaces-native2std) will be disabled automatically." + ) + opts.process_surfaces = False + # process_surfaces and nifti processing are incompatible. if opts.process_surfaces and not opts.cifti: build_log.error( @@ -852,11 +869,13 @@ def build_workflow(opts, retval): retval["work_dir"] = str(opts.work_dir) # First check that fmriprep_dir looks like a BIDS folder - if opts.input_type in ("dcan", "hcp"): + if opts.input_type in ("dcan", "hcp", "ukb"): if opts.input_type == "dcan": - from xcp_d.utils.dcan2fmriprep import convert_dcan2bids as convert_to_bids + from xcp_d.ingression.abcdbids import convert_dcan2bids as convert_to_bids elif opts.input_type == "hcp": - from xcp_d.utils.hcp2fmriprep import convert_hcp2bids as convert_to_bids + from xcp_d.ingression.hcpya import convert_hcp2bids as convert_to_bids + elif opts.input_type == "ukb": + from xcp_d.ingression.ukbiobank import convert_ukb2bids as convert_to_bids NIWORKFLOWS_LOG.info(f"Converting {opts.input_type} to fmriprep format") converted_fmri_dir = os.path.join( diff --git a/xcp_d/data/MNI152_T1_2mm.nii.gz b/xcp_d/data/MNI152_T1_2mm.nii.gz new file mode 100644 index 000000000..fff004154 Binary files /dev/null and b/xcp_d/data/MNI152_T1_2mm.nii.gz differ diff --git a/xcp_d/data/README b/xcp_d/data/README new file mode 100644 index 000000000..8d26b6b38 --- /dev/null +++ b/xcp_d/data/README @@ -0,0 +1,8 @@ +MNI152_T1_2mm.nii.gz comes from the FSL standard templates folder. +I copied it here to use in the UK Biobank ingression step, +instead of TemplateFlow's tpl-MNI152NLin6Asym_res-2 template, +because FSL's version is in LAS+, while TemplateFlow's version is in RAS+. + +FSL apparently can't handle differently-oriented files, +and really only works with LAS+ files (yay), +so it just seems easier to have an LAS+ copy of the template on hand. diff --git a/xcp_d/data/boilerplate.bib b/xcp_d/data/boilerplate.bib index 870dbae7a..b9bd6bb9b 100644 --- a/xcp_d/data/boilerplate.bib +++ b/xcp_d/data/boilerplate.bib @@ -725,6 +725,17 @@ @article{najdenovska2018vivo doi={10.1038/sdata.2018.270} } +@article{miller2016multimodal, + title={Multimodal population brain imaging in the UK Biobank prospective epidemiological study}, + author={Miller, Karla L and Alfaro-Almagro, Fidel and Bangerter, Neal K and Thomas, David L and Yacoub, Essa and Xu, Junqian and Bartsch, Andreas J and Jbabdi, Saad and Sotiropoulos, Stamatios N and Andersson, Jesper LR and others}, + journal={Nature neuroscience}, + volume={19}, + number={11}, + pages={1523--1536}, + year={2016}, + publisher={Nature Publishing Group US New York} +} + @article{taylorlomb, title={Lomb-Scargle your way to RSFC parameter estimation in AFNI-FATCAT}, author={Taylor, Paul A and Chen, Gang and Glen, Daniel R and Reynolds, Richard C and Cox, Robert W}, diff --git a/xcp_d/data/reports.yml b/xcp_d/data/reports.yml index 5a1ed07de..5f2113b09 100755 --- a/xcp_d/data/reports.yml +++ b/xcp_d/data/reports.yml @@ -26,6 +26,9 @@ sections: - bids: {datatype: figures, suffix: design} caption: The "design matrix" represents the confounds that are used to denoise the BOLD data. subtitle: Design Matrix for Confound Regression + style: + height: 100px + width: auto - bids: {datatype: figures, desc: postprocessing, suffix: bold} caption: FD and DVARS are two measures of in-scanner motion. This plot shows standardized FD, DVARS, and then a carpet plot for the diff --git a/xcp_d/data/transform/itkIdentityTransform.txt b/xcp_d/data/transform/itkIdentityTransform.txt index 944d05683..fd2f22cf4 100644 --- a/xcp_d/data/transform/itkIdentityTransform.txt +++ b/xcp_d/data/transform/itkIdentityTransform.txt @@ -2,4 +2,4 @@ #Transform 0 Transform: MatrixOffsetTransformBase_double_3_3 Parameters: 1 0 0 0 1 0 0 0 1 0 0 0 -FixedParameters: 0 0 0 \ No newline at end of file +FixedParameters: 0 0 0 diff --git a/xcp_d/ingression/__init__.py b/xcp_d/ingression/__init__.py new file mode 100644 index 000000000..12c499679 --- /dev/null +++ b/xcp_d/ingression/__init__.py @@ -0,0 +1,9 @@ +"""Tools for converting derivatives from various pipelines to an fMRIPrep-like format.""" +from xcp_d.ingression import abcdbids, hcpya, ukbiobank, utils + +__all__ = [ + "abcdbids", + "hcpya", + "ukbiobank", + "utils", +] diff --git a/xcp_d/utils/dcan2fmriprep.py b/xcp_d/ingression/abcdbids.py similarity index 70% rename from xcp_d/utils/dcan2fmriprep.py rename to xcp_d/ingression/abcdbids.py index 04d32be12..2a7a5ca87 100644 --- a/xcp_d/utils/dcan2fmriprep.py +++ b/xcp_d/ingression/abcdbids.py @@ -1,6 +1,10 @@ # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: -"""Functions for converting DCAN-format derivatives to fMRIPrep format.""" +"""Functions for converting ABCD-BIDS-format derivatives to fMRIPrep format. + +These functions are specifically designed to work with abcd-hcp-pipeline version 0.1.3. +https://github.com/DCAN-Labs/abcd-hcp-pipeline/releases/tag/v0.1.3 +""" import glob import os import re @@ -10,16 +14,16 @@ from nipype import logging from pkg_resources import resource_filename as pkgrf -from xcp_d.utils.filemanip import ensure_list -from xcp_d.utils.ingestion import ( +from xcp_d.ingression.utils import ( collect_anatomical_files, - collect_confounds, + collect_hcp_confounds, collect_meshes, collect_morphs, copy_files_in_dict, plot_bbreg, write_json, ) +from xcp_d.utils.filemanip import ensure_list LOGGER = logging.getLogger("nipype.utils") @@ -91,6 +95,44 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): ----- Since the T1w is in standard space already, we use identity transforms instead of the individual transforms available in the DCAN derivatives. + + .. code-block:: + + sub- + └── ses- + └── files + └── MNINonLinear + ├── Results + │ ├── ses-_task-_run- + │ │ ├── ses-_task-_run-_SBRef.nii.gz + │ │ ├── ses-_task-_run-.nii.gz + │ │ ├── ses-_task-_run-_Atlas.dtseries.nii + │ │ ├── Movement_Regressors.txt + │ │ ├── Movement_AbsoluteRMS.txt + │ │ └── brainmask_fs.2.0.nii.gz + ├── fsaverage_LR32k + │ ├── L.pial.32k_fs_LR.surf.gii + │ ├── R.pial.32k_fs_LR.surf.gii + │ ├── L.white.32k_fs_LR.surf.gii + │ ├── R.white.32k_fs_LR.surf.gii + │ ├── .L.thickness.32k_fs_LR.shape.gii + │ ├── .R.thickness.32k_fs_LR.shape.gii + │ ├── .L.corrThickness.32k_fs_LR.shape.gii + │ ├── .R.corrThickness.32k_fs_LR.shape.gii + │ ├── .L.curvature.32k_fs_LR.shape.gii + │ ├── .R.curvature.32k_fs_LR.shape.gii + │ ├── .L.sulc.32k_fs_LR.shape.gii + │ ├── .R.sulc.32k_fs_LR.shape.gii + │ ├── .L.MyelinMap.32k_fs_LR.func.gii + │ ├── .R.MyelinMap.32k_fs_LR.func.gii + │ ├── .L.SmoothedMyelinMap.32k_fs_LR.func.gii + │ └── .R.SmoothedMyelinMap.32k_fs_LR.func.gii + ├── T1w.nii.gz + ├── aparc+aseg.nii.gz + ├── brainmask_fs.nii.gz + ├── ribbon.nii.gz + ├── vent_2mm__mask_eroded.nii.gz + └── wm_2mm__mask_eroded.nii.gz """ assert isinstance(in_dir, str) assert os.path.isdir(in_dir), f"Folder DNE: {in_dir}" @@ -105,8 +147,8 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): volspace_ent = f"space-{VOLSPACE}" RES_ENT = "res-2" - subject_dir_fmriprep = os.path.join(out_dir, sub_ent) - os.makedirs(subject_dir_fmriprep, exist_ok=True) + subject_dir_bids = os.path.join(out_dir, sub_ent) + os.makedirs(subject_dir_bids, exist_ok=True) # get session ids session_folders = sorted(glob.glob(os.path.join(in_dir, sub_ent, "s*"))) @@ -133,26 +175,26 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): for ses_ent in ses_entities: LOGGER.info(f"Processing {ses_ent}") subses_ents = f"{sub_ent}_{ses_ent}" - session_dir_fmriprep = os.path.join(subject_dir_fmriprep, ses_ent) + session_dir_fmriprep = os.path.join(subject_dir_bids, ses_ent) anat_dir_orig = os.path.join(in_dir, sub_ent, ses_ent, "files", "MNINonLinear") - anat_dir_fmriprep = os.path.join(session_dir_fmriprep, "anat") + anat_dir_bids = os.path.join(session_dir_fmriprep, "anat") func_dir_orig = os.path.join(anat_dir_orig, "Results") - func_dir_fmriprep = os.path.join(session_dir_fmriprep, "func") - work_dir = os.path.join(subject_dir_fmriprep, "work") + func_dir_bids = os.path.join(session_dir_fmriprep, "func") + work_dir = os.path.join(subject_dir_bids, "work") - os.makedirs(anat_dir_fmriprep, exist_ok=True) - os.makedirs(func_dir_fmriprep, exist_ok=True) + os.makedirs(anat_dir_bids, exist_ok=True) + os.makedirs(func_dir_bids, exist_ok=True) os.makedirs(work_dir, exist_ok=True) # Create identity-based transforms t1w_to_template_fmriprep = os.path.join( - anat_dir_fmriprep, + anat_dir_bids, f"{subses_ents}_from-T1w_to-{VOLSPACE}_mode-image_xfm.txt", ) copy_dictionary[identity_xfm].append(t1w_to_template_fmriprep) template_to_t1w_fmriprep = os.path.join( - anat_dir_fmriprep, + anat_dir_bids, f"{subses_ents}_from-{VOLSPACE}_to-T1w_mode-image_xfm.txt", ) copy_dictionary[identity_xfm].append(template_to_t1w_fmriprep) @@ -161,17 +203,17 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): base_anatomical_ents = f"{subses_ents}_{volspace_ent}_{RES_ENT}" anat_dict = collect_anatomical_files( anat_dir_orig, - anat_dir_fmriprep, + anat_dir_bids, base_anatomical_ents, ) copy_dictionary = {**copy_dictionary, **anat_dict} # Collect surface files to copy - mesh_dict = collect_meshes(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents) + mesh_dict = collect_meshes(anat_dir_orig, anat_dir_bids, sub_id, subses_ents) copy_dictionary = {**copy_dictionary, **mesh_dict} # Convert morphometry files - morphometry_dict = collect_morphs(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents) + morphometry_dict = collect_morphs(anat_dir_orig, anat_dir_bids, sub_id, subses_ents) morph_dict_all_ses = {**morph_dict_all_ses, **morphometry_dict} LOGGER.info("Finished collecting anatomical files") @@ -202,32 +244,27 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): run_ent = f"run-{run_id}" task_dir_orig = os.path.join(func_dir_orig, base_task_name) + func_prefix = f"{subses_ents}_{task_ent}_{run_ent}" # Find original task files sbref_orig = os.path.join(task_dir_orig, f"{base_task_name}_SBRef.nii.gz") boldref_fmriprep = os.path.join( - func_dir_fmriprep, - ( - f"{subses_ents}_{task_ent}_{run_ent}_{volspace_ent}_" - f"{RES_ENT}_boldref.nii.gz" - ), + func_dir_bids, + f"{func_prefix}_{volspace_ent}_{RES_ENT}_boldref.nii.gz", ) copy_dictionary[sbref_orig] = [boldref_fmriprep] bold_nifti_orig = os.path.join(task_dir_orig, f"{base_task_name}.nii.gz") bold_nifti_fmriprep = os.path.join( - func_dir_fmriprep, - ( - f"{subses_ents}_{task_ent}_{run_ent}_" - f"{volspace_ent}_{RES_ENT}_desc-preproc_bold.nii.gz" - ), + func_dir_bids, + f"{func_prefix}_{volspace_ent}_{RES_ENT}_desc-preproc_bold.nii.gz", ) copy_dictionary[bold_nifti_orig] = [bold_nifti_fmriprep] bold_cifti_orig = os.path.join(task_dir_orig, f"{base_task_name}_Atlas.dtseries.nii") bold_cifti_fmriprep = os.path.join( - func_dir_fmriprep, - f"{subses_ents}_{task_ent}_{run_ent}_space-fsLR_den-91k_bold.dtseries.nii", + func_dir_bids, + f"{func_prefix}_space-fsLR_den-91k_bold.dtseries.nii", ) copy_dictionary[bold_cifti_orig] = [bold_cifti_fmriprep] @@ -237,11 +274,8 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): "TaskName": task_id, } bold_nifti_json_fmriprep = os.path.join( - func_dir_fmriprep, - ( - f"{subses_ents}_{task_ent}_{run_ent}_{volspace_ent}_" - f"{RES_ENT}_desc-preproc_bold.json" - ), + func_dir_bids, + f"{func_prefix}_{volspace_ent}_{RES_ENT}_desc-preproc_bold.json", ) write_json(bold_metadata, bold_nifti_json_fmriprep) @@ -255,16 +289,16 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): }, ) bold_cifti_json_fmriprep = os.path.join( - func_dir_fmriprep, - f"{subses_ents}_{task_ent}_{run_ent}_space-fsLR_den-91k_bold.dtseries.json", + func_dir_bids, + f"{func_prefix}_space-fsLR_den-91k_bold.dtseries.json", ) write_json(bold_metadata, bold_cifti_json_fmriprep) # Create confound regressors - collect_confounds( - task_dir_orig, - func_dir_fmriprep, - f"{subses_ents}_{task_ent}_{run_ent}", + collect_hcp_confounds( + task_dir_orig=task_dir_orig, + out_dir=func_dir_bids, + prefix=func_prefix, work_dir=work_dir, bold_file=bold_nifti_orig, # This file is the anatomical brain mask downsampled to 2 mm3. @@ -274,11 +308,11 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): ) # Make figures - figdir = os.path.join(subject_dir_fmriprep, "figures") + figdir = os.path.join(subject_dir_bids, "figures") os.makedirs(figdir, exist_ok=True) bbref_fig_fmriprep = os.path.join( figdir, - f"{subses_ents}_{task_ent}_{run_ent}_desc-bbregister_bold.svg", + f"{func_prefix}_desc-bbregister_bold.svg", ) t1w = os.path.join(anat_dir_orig, "T1w.nii.gz") ribbon = os.path.join(anat_dir_orig, "ribbon.nii.gz") @@ -324,6 +358,6 @@ def convert_dcan_to_bids_single_subject(in_dir, out_dir, sub_ent): scans_tuple = tuple(scans_dict.items()) scans_df = pd.DataFrame(scans_tuple, columns=["filename", "source_file"]) - scans_tsv = os.path.join(subject_dir_fmriprep, f"{subses_ents}_scans.tsv") + scans_tsv = os.path.join(subject_dir_bids, f"{subses_ents}_scans.tsv") scans_df.to_csv(scans_tsv, sep="\t", index=False) LOGGER.info("Conversion completed") diff --git a/xcp_d/utils/hcp2fmriprep.py b/xcp_d/ingression/hcpya.py similarity index 71% rename from xcp_d/utils/hcp2fmriprep.py rename to xcp_d/ingression/hcpya.py index c6e44a61e..346439c3f 100644 --- a/xcp_d/utils/hcp2fmriprep.py +++ b/xcp_d/ingression/hcpya.py @@ -1,6 +1,11 @@ # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: -"""Functions for converting HCP-format data to fMRIPrep format.""" +"""Functions for converting HCP-YA-format data to fMRIPrep format. + +These functions are specifically designed to work with HCP-YA data downloaded around Feb 2023. +Because HCP-YA doesn't really version their processing pipeline and derivatives, +we have to pin to download periods. +""" import glob import os import re @@ -10,16 +15,16 @@ from nipype import logging from pkg_resources import resource_filename as pkgrf -from xcp_d.utils.filemanip import ensure_list -from xcp_d.utils.ingestion import ( +from xcp_d.ingression.utils import ( collect_anatomical_files, - collect_confounds, + collect_hcp_confounds, collect_meshes, collect_morphs, copy_files_in_dict, plot_bbreg, write_json, ) +from xcp_d.utils.filemanip import ensure_list LOGGER = logging.getLogger("nipype.utils") @@ -87,7 +92,7 @@ def convert_hcp2bids(in_dir, out_dir, participant_ids=None): if subject_id not in all_subject_ids and subject_id not in EXCLUDE_LIST: all_subject_ids.append(f"sub-{subject_id}") - participant_ids = all_subject_ids + participant_ids = all_subject_ids if len(participant_ids) == 0: raise ValueError(f"No subject found in {in_dir}") @@ -122,6 +127,41 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): ----- Since the T1w is in standard space already, we use identity transforms instead of the individual transforms available in the DCAN derivatives. + + .. code-block:: + + sub- + └── files + └── MNINonLinear + ├── Results + │ ├── *__ + │ │ ├── SBRef_dc.nii.gz + │ │ ├── *__.nii.gz + │ │ ├── *___Atlas_MSMAll.dtseries.nii + │ │ ├── Movement_Regressors.txt + │ │ ├── Movement_AbsoluteRMS.txt + │ │ └── brainmask_fs.2.0.nii.gz + ├── fsaverage_LR32k + │ ├── L.pial.32k_fs_LR.surf.gii + │ ├── R.pial.32k_fs_LR.surf.gii + │ ├── L.white.32k_fs_LR.surf.gii + │ ├── R.white.32k_fs_LR.surf.gii + │ ├── .L.thickness.32k_fs_LR.shape.gii + │ ├── .R.thickness.32k_fs_LR.shape.gii + │ ├── .L.corrThickness.32k_fs_LR.shape.gii + │ ├── .R.corrThickness.32k_fs_LR.shape.gii + │ ├── .L.curvature.32k_fs_LR.shape.gii + │ ├── .R.curvature.32k_fs_LR.shape.gii + │ ├── .L.sulc.32k_fs_LR.shape.gii + │ ├── .R.sulc.32k_fs_LR.shape.gii + │ ├── .L.MyelinMap.32k_fs_LR.func.gii + │ ├── .R.MyelinMap.32k_fs_LR.func.gii + │ ├── .L.SmoothedMyelinMap.32k_fs_LR.func.gii + │ └── .R.SmoothedMyelinMap.32k_fs_LR.func.gii + ├── T1w.nii.gz + ├── aparc+aseg.nii.gz + ├── brainmask_fs.nii.gz + └── ribbon.nii.gz """ assert isinstance(in_dir, str) assert os.path.isdir(in_dir), f"Folder DNE: {in_dir}" @@ -139,10 +179,10 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): anat_dir_orig = os.path.join(in_dir, sub_id, "MNINonLinear") func_dir_orig = os.path.join(anat_dir_orig, "Results") - subject_dir_fmriprep = os.path.join(out_dir, sub_ent) - anat_dir_fmriprep = os.path.join(subject_dir_fmriprep, "anat") - func_dir_fmriprep = os.path.join(subject_dir_fmriprep, "func") - work_dir = os.path.join(subject_dir_fmriprep, "work") + subject_dir_bids = os.path.join(out_dir, sub_ent) + anat_dir_bids = os.path.join(subject_dir_bids, "anat") + func_dir_bids = os.path.join(subject_dir_bids, "func") + work_dir = os.path.join(subject_dir_bids, "work") dataset_description_fmriprep = os.path.join(out_dir, "dataset_description.json") @@ -150,8 +190,8 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): LOGGER.info("Converted dataset already exists. Skipping conversion.") return - os.makedirs(anat_dir_fmriprep, exist_ok=True) - os.makedirs(func_dir_fmriprep, exist_ok=True) + os.makedirs(anat_dir_bids, exist_ok=True) + os.makedirs(func_dir_bids, exist_ok=True) os.makedirs(work_dir, exist_ok=True) # Get masks to be used to extract confounds @@ -167,28 +207,28 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): copy_dictionary[identity_xfm] = [] t1w_to_template_fmriprep = os.path.join( - anat_dir_fmriprep, + anat_dir_bids, f"{subses_ents}_from-T1w_to-{VOLSPACE}_mode-image_xfm.txt", ) copy_dictionary[identity_xfm].append(t1w_to_template_fmriprep) template_to_t1w_fmriprep = os.path.join( - anat_dir_fmriprep, + anat_dir_bids, f"{subses_ents}_from-{VOLSPACE}_to-T1w_mode-image_xfm.txt", ) copy_dictionary[identity_xfm].append(template_to_t1w_fmriprep) # Collect anatomical files to copy base_anatomical_ents = f"{subses_ents}_{volspace_ent}_{RES_ENT}" - anat_dict = collect_anatomical_files(anat_dir_orig, anat_dir_fmriprep, base_anatomical_ents) + anat_dict = collect_anatomical_files(anat_dir_orig, anat_dir_bids, base_anatomical_ents) copy_dictionary = {**copy_dictionary, **anat_dict} # Collect mesh files to copy - mesh_dict = collect_meshes(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents) + mesh_dict = collect_meshes(anat_dir_orig, anat_dir_bids, sub_id, subses_ents) copy_dictionary = {**copy_dictionary, **mesh_dict} # Convert morphometry files - morphometry_dict = collect_morphs(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents) + morphometry_dict = collect_morphs(anat_dir_orig, anat_dir_bids, sub_id, subses_ents) LOGGER.info("Finished collecting anatomical files") # Collect functional files to copy @@ -214,25 +254,20 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): dir_ent = f"dir-{dir_id}" task_dir_orig = os.path.join(func_dir_orig, base_task_name) + func_prefix = f"{subses_ents}_{task_ent}_{dir_ent}_{run_ent}" # Find original task files sbref_orig = os.path.join(task_dir_orig, "SBRef_dc.nii.gz") boldref_fmriprep = os.path.join( - func_dir_fmriprep, - ( - f"{subses_ents}_{task_ent}_{dir_ent}_{run_ent}_{volspace_ent}_{RES_ENT}_" - f"boldref.nii.gz" - ), + func_dir_bids, + f"{func_prefix}_{volspace_ent}_{RES_ENT}_boldref.nii.gz", ) copy_dictionary[sbref_orig] = [boldref_fmriprep] bold_nifti_orig = os.path.join(task_dir_orig, f"{base_task_name}.nii.gz") bold_nifti_fmriprep = os.path.join( - func_dir_fmriprep, - ( - f"{subses_ents}_{task_ent}_{dir_ent}_{run_ent}_{volspace_ent}_{RES_ENT}_" - "desc-preproc_bold.nii.gz" - ), + func_dir_bids, + f"{func_prefix}_{volspace_ent}_{RES_ENT}_desc-preproc_bold.nii.gz", ) copy_dictionary[bold_nifti_orig] = [bold_nifti_fmriprep] @@ -241,8 +276,8 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): f"{base_task_name}_Atlas_MSMAll.dtseries.nii", ) bold_cifti_fmriprep = os.path.join( - func_dir_fmriprep, - f"{subses_ents}_{task_ent}_{dir_ent}_{run_ent}_space-fsLR_den-91k_bold.dtseries.nii", + func_dir_bids, + f"{func_prefix}_space-fsLR_den-91k_bold.dtseries.nii", ) copy_dictionary[bold_cifti_orig] = [bold_cifti_fmriprep] @@ -252,11 +287,8 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): "TaskName": task_id, } bold_nifti_json_fmriprep = os.path.join( - func_dir_fmriprep, - ( - f"{subses_ents}_{task_ent}_{dir_ent}_{run_ent}_{volspace_ent}_{RES_ENT}" - "_desc-preproc_bold.json" - ), + func_dir_bids, + f"{func_prefix}_{volspace_ent}_{RES_ENT}_desc-preproc_bold.json", ) write_json(bold_metadata, bold_nifti_json_fmriprep) @@ -270,16 +302,16 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): }, ) bold_cifti_json_fmriprep = os.path.join( - func_dir_fmriprep, - f"{subses_ents}_{task_ent}_{dir_ent}_{run_ent}_space-fsLR_den-91k_bold.dtseries.json", + func_dir_bids, + f"{func_prefix}_space-fsLR_den-91k_bold.dtseries.json", ) write_json(bold_metadata, bold_cifti_json_fmriprep) # Create confound regressors - collect_confounds( - task_dir_orig, - func_dir_fmriprep, - f"{subses_ents}_{task_ent}_{dir_ent}_{run_ent}", + collect_hcp_confounds( + task_dir_orig=task_dir_orig, + out_dir=func_dir_bids, + prefix=func_prefix, work_dir=work_dir, bold_file=bold_nifti_orig, brainmask_file=os.path.join(task_dir_orig, "brainmask_fs.2.nii.gz"), @@ -288,11 +320,11 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): ) # Make figures - figdir = os.path.join(subject_dir_fmriprep, "figures") + figdir = os.path.join(subject_dir_bids, "figures") os.makedirs(figdir, exist_ok=True) bbref_fig_fmriprep = os.path.join( figdir, - f"{subses_ents}_{task_ent}_{dir_ent}_{run_ent}_desc-bbregister_bold.svg", + f"{func_prefix}_desc-bbregister_bold.svg", ) t1w = os.path.join(anat_dir_orig, "T1w.nii.gz") ribbon = os.path.join(anat_dir_orig, "ribbon.nii.gz") @@ -337,6 +369,6 @@ def convert_hcp_to_bids_single_subject(in_dir, out_dir, sub_ent): scans_tuple = tuple(scans_dict.items()) scans_df = pd.DataFrame(scans_tuple, columns=["filename", "source_file"]) - scans_tsv = os.path.join(subject_dir_fmriprep, f"{subses_ents}_scans.tsv") + scans_tsv = os.path.join(subject_dir_bids, f"{subses_ents}_scans.tsv") scans_df.to_csv(scans_tsv, sep="\t", index=False) LOGGER.info("Conversion completed") diff --git a/xcp_d/ingression/ukbiobank.py b/xcp_d/ingression/ukbiobank.py new file mode 100644 index 000000000..5f6890738 --- /dev/null +++ b/xcp_d/ingression/ukbiobank.py @@ -0,0 +1,316 @@ +"""Functions to convert preprocessed UK Biobank BOLD data to BIDS derivatives format.""" +import glob +import json +import os + +import pandas as pd +from nipype import logging +from nipype.interfaces.fsl.preprocess import ApplyWarp +from pkg_resources import resource_filename as pkgrf + +from xcp_d.ingression.utils import ( + collect_ukbiobank_confounds, + copy_files_in_dict, + write_json, +) +from xcp_d.utils.filemanip import ensure_list + +LOGGER = logging.getLogger("nipype.utils") + + +def convert_ukb2bids(in_dir, out_dir, participant_ids=None, bids_filters={}): + """Convert UK Biobank derivatives to BIDS-compliant derivatives. + + Parameters + ---------- + in_dir : str + Path to UK Biobank derivatives. + out_dir : str + Path to the output BIDS-compliant derivatives folder. + participant_ids : None or list of str + List of participant IDs to run conversion on. + The participant IDs must not have the "sub-" prefix. + If None, the function will search for all subjects in ``in_dir`` and convert all of them. + bids_filters : dict + Filters to apply to select files to convert. + The only filter that is currently supported is {"bold": {"session": []}}. + + Returns + ------- + participant_ids : list of str + The list of subjects whose derivatives were converted. + + Notes + ----- + Since the T1w is in standard space already, we use identity transforms. + """ + LOGGER.warning("convert_ukb2bids is an experimental function.") + in_dir = os.path.abspath(in_dir) + out_dir = os.path.abspath(out_dir) + + if participant_ids is None: + subject_folders = sorted(glob.glob(os.path.join(in_dir, "*_*_2_0"))) + subject_folders = [ + subject_folder for subject_folder in subject_folders if os.path.isdir(subject_folder) + ] + participant_ids = [ + os.path.basename(subject_folder).split("_")[0] for subject_folder in subject_folders + ] + all_subject_ids = [] + for subject_id in participant_ids: + if subject_id not in all_subject_ids: + all_subject_ids.append(subject_id) + + participant_ids = all_subject_ids + + if len(participant_ids) == 0: + raise ValueError(f"No subject found in {in_dir}") + + else: + participant_ids = ensure_list(participant_ids) + + for subject_id in participant_ids: + LOGGER.info(f"Converting {subject_id}") + session_ids = ensure_list(bids_filters.get("bold", {}).get("session", "*")) + subject_dirs = [] + for session_id in session_ids: + subject_dir = sorted(glob.glob(os.path.join(in_dir, f"{subject_id}_{session_id}_2_0"))) + subject_dirs += subject_dir + + for subject_dir in subject_dirs: + session_id = os.path.basename(subject_dir).split("_")[1] + convert_ukb_to_bids_single_subject( + in_dir=subject_dirs[0], + out_dir=out_dir, + sub_id=subject_id, + ses_id=session_id, + ) + + return participant_ids + + +def convert_ukb_to_bids_single_subject(in_dir, out_dir, sub_id, ses_id): + """Convert UK Biobank derivatives to BIDS-compliant derivatives for a single subject. + + Parameters + ---------- + in_dir : str + Path to the subject's UK Biobank derivatives. + out_dir : str + Path to the output fMRIPrep-style derivatives folder. + sub_id : str + Subject identifier, without "sub-" prefix. + ses_id : str + Session identifier, without "ses-" prefix. + + Notes + ----- + The BOLD and brain mask files are in boldref space, so they must be warped to standard + (MNI152NLin6Asym) space with FNIRT. + + Since the T1w is in standard space already, we use identity transforms. + + .. code-block:: + + __2_0 + ├── fMRI + │ ├── rfMRI.ica + │ │ ├── mc + │ │ │ ├── prefiltered_func_data_mcf_abs.rms + │ │ │ └── prefiltered_func_data_mcf.par + │ │ ├── reg + │ │ │ ├── example_func2standard.mat + │ │ │ └── example_func2standard_warp.nii.gz + │ │ ├── filtered_func_data_clean.nii.gz + │ │ └── mask.nii.gz + │ ├── rfMRI_SBREF.json + │ └── rfMRI_SBREF.nii.gz + └── T1 + └── T1_brain_to_MNI.nii.gz + """ + assert isinstance(in_dir, str) + assert os.path.isdir(in_dir), f"Folder DNE: {in_dir}" + assert isinstance(out_dir, str) + assert isinstance(sub_id, str) + assert isinstance(ses_id, str) + subses_ents = f"sub-{sub_id}_ses-{ses_id}" + + task_dir_orig = os.path.join(in_dir, "fMRI", "rfMRI.ica") + bold_file = os.path.join(task_dir_orig, "filtered_func_data_clean.nii.gz") + assert os.path.isfile(bold_file), f"File DNE: {bold_file}" + bold_json = os.path.join(in_dir, "fMRI", "rfMRI.json") + assert os.path.isfile(bold_json), f"File DNE: {bold_json}" + boldref_file = os.path.join(task_dir_orig, "example_func.nii.gz") + assert os.path.isfile(boldref_file), f"File DNE: {boldref_file}" + brainmask_file = os.path.join(task_dir_orig, "mask.nii.gz") + assert os.path.isfile(brainmask_file), f"File DNE: {brainmask_file}" + t1w = os.path.join(in_dir, "T1", "T1_brain_to_MNI.nii.gz") + assert os.path.isfile(t1w), f"File DNE: {t1w}" + warp_file = os.path.join(task_dir_orig, "reg", "example_func2standard_warp.nii.gz") + assert os.path.isfile(warp_file), f"File DNE: {warp_file}" + + func_prefix = f"sub-{sub_id}_ses-{ses_id}_task-rest" + subject_dir_bids = os.path.join(out_dir, f"sub-{sub_id}", f"ses-{ses_id}") + anat_dir_bids = os.path.join(subject_dir_bids, "anat") + func_dir_bids = os.path.join(subject_dir_bids, "func") + work_dir = os.path.join(subject_dir_bids, "work") + os.makedirs(anat_dir_bids, exist_ok=True) + os.makedirs(func_dir_bids, exist_ok=True) + os.makedirs(work_dir, exist_ok=True) + + collect_ukbiobank_confounds( + task_dir_orig=task_dir_orig, + out_dir=func_dir_bids, + prefix=func_prefix, + work_dir=work_dir, + bold_file=bold_file, + brainmask_file=brainmask_file, + ) + + dataset_description_fmriprep = os.path.join(out_dir, "dataset_description.json") + + if os.path.isfile(dataset_description_fmriprep): + LOGGER.info("Converted dataset already exists. Skipping conversion.") + return + + VOLSPACE = "MNI152NLin6Asym" + + # Warp BOLD, T1w, and brainmask to MNI152NLin6Asym + # We use FSL's MNI152NLin6Asym 2 mm3 template instead of TemplateFlow's version, + # because FSL uses LAS+ orientation, while TemplateFlow uses RAS+. + template_file = pkgrf("xcp_d", "data/MNI152_T1_2mm.nii.gz") + + copy_dictionary = {} + + warp_bold_to_std = ApplyWarp( + interp="spline", + output_type="NIFTI_GZ", + ref_file=template_file, + in_file=bold_file, + field_file=warp_file, + ) + LOGGER.warning(warp_bold_to_std.cmdline) + warp_bold_to_std_results = warp_bold_to_std.run(cwd=work_dir) + bold_nifti_fmriprep = os.path.join( + func_dir_bids, + f"{func_prefix}_space-{VOLSPACE}_desc-preproc_bold.nii.gz", + ) + copy_dictionary[warp_bold_to_std_results.outputs.out_file] = [bold_nifti_fmriprep] + + # Extract metadata for JSON file + with open(bold_json, "r") as fo: + bold_metadata = json.load(fo) + + # Keep only the relevant fields + keep_keys = [ + "FlipAngle", + "EchoTime", + "Manufacturer", + "ManufacturersModelName", + "EffectiveEchoSpacing", + "RepetitionTime", + "PhaseEncodingDirection", + ] + bold_metadata = {k: bold_metadata[k] for k in keep_keys if k in bold_metadata} + bold_metadata["TaskName"] = "resting state" + bold_nifti_json_fmriprep = bold_nifti_fmriprep.replace(".nii.gz", ".json") + write_json(bold_metadata, bold_nifti_json_fmriprep) + + warp_brainmask_to_std = ApplyWarp( + interp="nn", + output_type="NIFTI_GZ", + ref_file=template_file, + in_file=brainmask_file, + field_file=warp_file, + ) + warp_brainmask_to_std_results = warp_brainmask_to_std.run(cwd=work_dir) + copy_dictionary[warp_brainmask_to_std_results.outputs.out_file] = [ + os.path.join( + func_dir_bids, + f"{func_prefix}_space-{VOLSPACE}_desc-brain_mask.nii.gz", + ) + ] + # Use the brain mask as the anatomical brain mask too. + copy_dictionary[warp_brainmask_to_std_results.outputs.out_file].append( + os.path.join( + anat_dir_bids, + f"{subses_ents}_space-{VOLSPACE}_desc-brain_mask.nii.gz", + ) + ) + # Use the brain mask as the "aparcaseg" dseg too. + copy_dictionary[warp_brainmask_to_std_results.outputs.out_file].append( + os.path.join( + anat_dir_bids, + f"{subses_ents}_space-{VOLSPACE}_desc-aparcaseg_dseg.nii.gz", + ) + ) + + # Warp the reference file to MNI space. + warp_boldref_to_std = ApplyWarp( + interp="spline", + output_type="NIFTI_GZ", + ref_file=template_file, + in_file=boldref_file, + field_file=warp_file, + ) + warp_boldref_to_std_results = warp_boldref_to_std.run(cwd=work_dir) + boldref_nifti_fmriprep = os.path.join( + func_dir_bids, + f"{func_prefix}_space-{VOLSPACE}_boldref.nii.gz", + ) + copy_dictionary[warp_boldref_to_std_results.outputs.out_file] = [boldref_nifti_fmriprep] + + # The MNI-space anatomical image. + copy_dictionary[t1w] = [ + os.path.join(anat_dir_bids, f"{subses_ents}_space-{VOLSPACE}_desc-preproc_T1w.nii.gz") + ] + + # The identity xform is used in place of any actual ones. + identity_xfm = pkgrf("xcp_d", "/data/transform/itkIdentityTransform.txt") + copy_dictionary[identity_xfm] = [] + + t1w_to_template_fmriprep = os.path.join( + anat_dir_bids, + f"{subses_ents}_from-T1w_to-{VOLSPACE}_mode-image_xfm.txt", + ) + copy_dictionary[identity_xfm].append(t1w_to_template_fmriprep) + + template_to_t1w_fmriprep = os.path.join( + anat_dir_bids, + f"{subses_ents}_from-{VOLSPACE}_to-T1w_mode-image_xfm.txt", + ) + copy_dictionary[identity_xfm].append(template_to_t1w_fmriprep) + + LOGGER.info("Finished collecting functional files") + + # Copy UK Biobank files to fMRIPrep folder + LOGGER.info("Copying files") + copy_files_in_dict(copy_dictionary) + LOGGER.info("Finished copying files") + + # Write the dataset description out last + dataset_description_dict = { + "Name": "UK Biobank", + "DatasetType": "derivative", + "GeneratedBy": [ + { + "Name": "UK Biobank", + "Version": "unknown", + }, + ], + } + + if not os.path.isfile(dataset_description_fmriprep): + write_json(dataset_description_dict, dataset_description_fmriprep) + + # Write out the mapping from UK Biobank to fMRIPrep + scans_dict = {} + for key, values in copy_dictionary.items(): + for item in values: + scans_dict[item] = key + + scans_tuple = tuple(scans_dict.items()) + scans_df = pd.DataFrame(scans_tuple, columns=["filename", "source_file"]) + scans_tsv = os.path.join(subject_dir_bids, f"{subses_ents}_scans.tsv") + scans_df.to_csv(scans_tsv, sep="\t", index=False) + LOGGER.info("Conversion completed") diff --git a/xcp_d/utils/ingestion.py b/xcp_d/ingression/utils.py similarity index 62% rename from xcp_d/utils/ingestion.py rename to xcp_d/ingression/utils.py index 62121a3f7..d3dd94aca 100644 --- a/xcp_d/utils/ingestion.py +++ b/xcp_d/ingression/utils.py @@ -1,32 +1,20 @@ # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: -"""Functions to support ingestion of non-BIDS preprocessing derivatives.""" +"""Functions to support ingression of non-BIDS preprocessing derivatives.""" import json import os import numpy as np from nilearn import image, maskers from nipype import logging +from niworkflows.interfaces.confounds import NormalizeMotionParams from xcp_d.interfaces.workbench import CiftiCreateDenseScalar LOGGER = logging.getLogger("nipype.utils") -def copy_file(src, dst): - """Copy a file from source to dest. - - source and dest must be file-like objects, - i.e. any object with a read or write method, like for example StringIO. - """ - import filecmp - import shutil - - if not os.path.exists(dst) or not filecmp.cmp(src, dst): - shutil.copyfile(src, dst) - - -def collect_anatomical_files(anat_dir_orig, anat_dir_fmriprep, base_anatomical_ents): +def collect_anatomical_files(anat_dir_orig, anat_dir_bids, base_anatomical_ents): """Collect anatomical files from ABCD or HCP-YA derivatives.""" ANAT_DICT = { # XXX: Why have T1w here and T1w_restore for HCP? @@ -39,7 +27,7 @@ def collect_anatomical_files(anat_dir_orig, anat_dir_fmriprep, base_anatomical_e for in_str, out_str in ANAT_DICT.items(): anat_orig = os.path.join(anat_dir_orig, in_str) - anat_fmriprep = os.path.join(anat_dir_fmriprep, f"{base_anatomical_ents}_{out_str}") + anat_fmriprep = os.path.join(anat_dir_bids, f"{base_anatomical_ents}_{out_str}") if os.path.isfile(anat_orig): copy_dictionary[anat_orig] = [anat_fmriprep] else: @@ -48,7 +36,7 @@ def collect_anatomical_files(anat_dir_orig, anat_dir_fmriprep, base_anatomical_e return copy_dictionary -def collect_meshes(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents): +def collect_meshes(anat_dir_orig, anat_dir_bids, sub_id, subses_ents): """Collect mesh files from ABCD or HCP-YA derivatives.""" SURFACE_DICT = { "{hemi}.pial.32k_fs_LR.surf.gii": "hemi-{hemi}_pial.surf.gii", @@ -63,7 +51,7 @@ def collect_meshes(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents): hemi_out_str = out_str.format(hemi=hemi) surf_orig = os.path.join(fsaverage_dir_orig, f"{sub_id}.{hemi_in_str}") surf_fmriprep = os.path.join( - anat_dir_fmriprep, + anat_dir_bids, f"{subses_ents}_space-fsLR_den-32k_{hemi_out_str}", ) if os.path.isfile(surf_orig): @@ -74,7 +62,7 @@ def collect_meshes(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents): return copy_dictionary -def collect_morphs(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents): +def collect_morphs(anat_dir_orig, anat_dir_bids, sub_id, subses_ents): """Collect and convert morphometry files to CIFTIs.""" SURFACE_DICT = { "thickness.32k_fs_LR.shape.gii": "thickness", @@ -91,7 +79,7 @@ def collect_morphs(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents): lh_file = os.path.join(fsaverage_dir_orig, f"{sub_id}.L.{in_str}") rh_file = os.path.join(fsaverage_dir_orig, f"{sub_id}.R.{in_str}") out_file = os.path.join( - anat_dir_fmriprep, + anat_dir_bids, f"{subses_ents}_space-fsLR_den-91k_{out_str}.dscalar.nii", ) @@ -111,21 +99,44 @@ def collect_morphs(anat_dir_orig, anat_dir_fmriprep, sub_id, subses_ents): return mapping_dictionary -def collect_confounds( +def collect_hcp_confounds( task_dir_orig, - func_dir_fmriprep, - base_task_ents, + out_dir, + prefix, work_dir, bold_file, brainmask_file, csf_mask_file, wm_mask_file, ): - """Create confound regressors.""" + """Create confound regressors from ABCD-BIDS or HCP-YA derivatives. + + Parameters + ---------- + task_dir_orig : str + Path to folder containing original preprocessing derivatives. + out_dir : str + Path to BIDS derivatives 'func' folder, to which the confounds file will be written. + prefix : str + The filename prefix to use for the confounds file. E.g., "sub-X_ses-Y_task-rest". + work_dir : str + Path to working directory, where temporary files created by nilearn during the masking + procedure will be stored. + bold_file : str + Path to preprocessed BOLD file. + brainmask_file : str + Path to brain mask file in same space/resolution as BOLD file. + csf_mask_file : str + Path to CSF mask file in same space/resolution as BOLD file. + wm_mask_file : str + Path to WM mask file in same space/resolution as BOLD file. + """ import pandas as pd mvreg_file = os.path.join(task_dir_orig, "Movement_Regressors.txt") + assert os.path.isfile(mvreg_file) rmsd_file = os.path.join(task_dir_orig, "Movement_AbsoluteRMS.txt") + assert os.path.isfile(rmsd_file) mvreg = pd.read_csv(mvreg_file, header=None, delimiter=r"\s+") @@ -167,10 +178,10 @@ def collect_confounds( nifti=bold_file, work_dir=work_dir, ) - rsmd = np.loadtxt(rmsd_file) + rmsd = np.loadtxt(rmsd_file) brainreg = pd.DataFrame( - {"global_signal": mean_gs, "white_matter": mean_wm, "csf": mean_csf, "rmsd": rsmd} + {"global_signal": mean_gs, "white_matter": mean_wm, "csf": mean_csf, "rmsd": rmsd} ) # get derivatives and powers @@ -192,17 +203,108 @@ def collect_confounds( # write out the confounds regressors_tsv_fmriprep = os.path.join( - func_dir_fmriprep, - f"{base_task_ents}_desc-confounds_timeseries.tsv", + out_dir, + f"{prefix}_desc-confounds_timeseries.tsv", + ) + confounds_df.to_csv(regressors_tsv_fmriprep, sep="\t", na_rep="n/a", index=False) + + regressors_json_fmriprep = os.path.join( + out_dir, + f"{prefix}_desc-confounds_timeseries.json", + ) + confounds_dict = {col: {"Description": ""} for col in confounds_df.columns} + write_json(confounds_dict, regressors_json_fmriprep) + + +def collect_ukbiobank_confounds( + task_dir_orig, + out_dir, + prefix, + work_dir, + bold_file, + brainmask_file, +): + """Create confound regressors from UK Biobank derivatives. + + Parameters + ---------- + task_dir_orig : str + Path to folder containing original preprocessing derivatives. + out_dir : str + Path to BIDS derivatives 'func' folder, to which the confounds file will be written. + prefix : str + The filename prefix to use for the confounds file. E.g., "sub-X_ses-Y_task-rest". + work_dir : str + Path to working directory, where temporary files created by nilearn during the masking + procedure will be stored. + bold_file : str + Path to preprocessed BOLD file. + brainmask_file : str + Path to brain mask file in same space/resolution as BOLD file. + """ + import os + + import pandas as pd + + # Find necessary files + par_file = os.path.join(task_dir_orig, "mc", "prefiltered_func_data_mcf.par") + assert os.path.isfile(par_file), os.listdir(os.path.join(task_dir_orig, "mc")) + rmsd_file = os.path.join(task_dir_orig, "mc", "prefiltered_func_data_mcf_abs.rms") + assert os.path.isfile(rmsd_file) + + # Collect motion confounds and their expansions + normalize_motion = NormalizeMotionParams(format="FSL", in_file=par_file) + normalize_motion_results = normalize_motion.run() + motion_data = np.loadtxt(normalize_motion_results.outputs.out_file) + confounds_df = pd.DataFrame( + data=motion_data, + columns=["trans_x", "trans_y", "trans_z", "rot_x", "rot_y", "rot_z"], + ) + + columns = confounds_df.columns.tolist() + for col in columns: + new_col = f"{col}_derivative1" + confounds_df[new_col] = confounds_df[col].diff() + + columns = confounds_df.columns.tolist() + for col in columns: + new_col = f"{col}_power2" + confounds_df[new_col] = confounds_df[col] ** 2 + + # Use dummy column for framewise displacement, which will be recalculated by XCP-D. + confounds_df["framewise_displacement"] = 0 + + # Add RMS + rmsd = np.loadtxt(rmsd_file) + confounds_df["rmsd"] = rmsd + + # Collect global signal (the primary regressor used for denoising UKB data, + # since the data are already denoised). + confounds_df["global_signal"] = extract_mean_signal( + mask=brainmask_file, + nifti=bold_file, + work_dir=work_dir, + ) + # get derivatives and powers + confounds_df["global_signal_derivative1"] = confounds_df["global_signal"].diff() + confounds_df["global_signal_derivative1_power2"] = ( + confounds_df["global_signal_derivative1"] ** 2 + ) + confounds_df["global_signal_power2"] = confounds_df["global_signal"] ** 2 + + # write out the confounds + regressors_tsv_fmriprep = os.path.join( + out_dir, + f"{prefix}_desc-confounds_timeseries.tsv", ) - confounds_df.to_csv(regressors_tsv_fmriprep, sep="\t", index=False) + confounds_df.to_csv(regressors_tsv_fmriprep, sep="\t", na_rep="n/a", index=False) - # NOTE: Is this JSON any good? regressors_json_fmriprep = os.path.join( - func_dir_fmriprep, - f"{base_task_ents}_desc-confounds_timeseries.json", + out_dir, + f"{prefix}_desc-confounds_timeseries.json", ) - confounds_df.to_json(regressors_json_fmriprep) + confounds_dict = {col: {"Description": ""} for col in confounds_df.columns} + write_json(confounds_dict, regressors_json_fmriprep) def extract_mean_signal(mask, nifti, work_dir): @@ -214,14 +316,6 @@ def extract_mean_signal(mask, nifti, work_dir): return np.mean(signals, axis=1) -def write_json(data, outfile): - """Write dictionary to JSON file.""" - with open(outfile, "w") as f: - json.dump(data, f, sort_keys=True, indent=4) - - return outfile - - def plot_bbreg(fixed_image, moving_image, contour, out_file="report.svg"): """Plot bbref_fig_fmriprep results.""" import numpy as np @@ -279,3 +373,24 @@ def copy_files_in_dict(copy_dictionary): for file_fmriprep in files_fmriprep: copy_file(file_orig, file_fmriprep) + + +def copy_file(src, dst): + """Copy a file from source to dest. + + source and dest must be file-like objects, + i.e. any object with a read or write method, like for example StringIO. + """ + import filecmp + import shutil + + if not os.path.exists(dst) or not filecmp.cmp(src, dst): + shutil.copyfile(src, dst) + + +def write_json(data, outfile): + """Write dictionary to JSON file.""" + with open(outfile, "w") as f: + json.dump(data, f, sort_keys=True, indent=4) + + return outfile diff --git a/xcp_d/tests/data/test_pnc_nifti_outputs.txt b/xcp_d/tests/data/test_pnc_nifti_outputs.txt deleted file mode 100644 index 4864be25e..000000000 --- a/xcp_d/tests/data/test_pnc_nifti_outputs.txt +++ /dev/null @@ -1,424 +0,0 @@ -xcp_d/atlas-4S1056Parcels_dseg.json -xcp_d/atlas-4S1056Parcels_dseg.tsv -xcp_d/atlas-4S156Parcels_dseg.json -xcp_d/atlas-4S156Parcels_dseg.tsv -xcp_d/atlas-4S256Parcels_dseg.json -xcp_d/atlas-4S256Parcels_dseg.tsv -xcp_d/atlas-4S356Parcels_dseg.json -xcp_d/atlas-4S356Parcels_dseg.tsv -xcp_d/atlas-4S456Parcels_dseg.json -xcp_d/atlas-4S456Parcels_dseg.tsv -xcp_d/atlas-4S556Parcels_dseg.json -xcp_d/atlas-4S556Parcels_dseg.tsv -xcp_d/atlas-4S656Parcels_dseg.json -xcp_d/atlas-4S656Parcels_dseg.tsv -xcp_d/atlas-4S756Parcels_dseg.json -xcp_d/atlas-4S756Parcels_dseg.tsv -xcp_d/atlas-4S856Parcels_dseg.json -xcp_d/atlas-4S856Parcels_dseg.tsv -xcp_d/atlas-4S956Parcels_dseg.json -xcp_d/atlas-4S956Parcels_dseg.tsv -xcp_d/atlas-Glasser_dseg.json -xcp_d/atlas-Glasser_dseg.tsv -xcp_d/atlas-Gordon_dseg.json -xcp_d/atlas-Gordon_dseg.tsv -xcp_d/atlas-HCP_dseg.json -xcp_d/atlas-HCP_dseg.tsv -xcp_d/atlas-Tian_dseg.json -xcp_d/atlas-Tian_dseg.tsv -xcp_d/dataset_description.json -xcp_d/desc-linc_qc.json -xcp_d/logs -xcp_d/logs/CITATION.md -xcp_d/space-MNI152NLin6Asym_atlas-4S1056Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S156Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S256Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S356Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S456Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S556Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S656Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S756Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S856Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-4S956Parcels_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-Glasser_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-Gordon_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-HCP_res-2_dseg.nii.gz -xcp_d/space-MNI152NLin6Asym_atlas-Tian_res-2_dseg.nii.gz -xcp_d/sub-1648798153 -xcp_d/sub-1648798153.html -xcp_d/sub-1648798153/ses-PNC1 -xcp_d/sub-1648798153/ses-PNC1/anat -xcp_d/sub-1648798153/ses-PNC1/anat/sub-1648798153_ses-PNC1_acq-refaced_space-MNI152NLin6Asym_desc-preproc_T1w.nii.gz -xcp_d/sub-1648798153/ses-PNC1/anat/sub-1648798153_ses-PNC1_acq-refaced_space-MNI152NLin6Asym_dseg.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_desc-filtered_motion.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_desc-filtered_motion.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_desc-preproc_design.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_desc-preproc_design.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_outliers.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_outliers.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S1056Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S156Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S256Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S356Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S456Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S556Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S656Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S756Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S856Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-4S956Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Glasser_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Gordon_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-HCP_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_atlas-Tian_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_desc-linc_qc.csv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_alff.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_desc-denoisedSmoothed_bold.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_desc-denoisedSmoothed_bold.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_desc-denoised_bold.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_desc-denoised_bold.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_desc-smooth_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_desc-smooth_alff.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-frac2back_space-MNI152NLin6Asym_res-2_reho.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_desc-filtered_motion.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_desc-filtered_motion.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_desc-preproc_design.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_desc-preproc_design.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_outliers.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_outliers.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S1056Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S156Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S256Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S356Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S456Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S556Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S656Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S756Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S856Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-4S956Parcels_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Glasser_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Gordon_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-HCP_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_alff.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_coverage.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_coverage.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_conmat.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_desc-26volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_desc-33volumes_conmat.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_reho.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_timeseries.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_atlas-Tian_timeseries.tsv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_desc-linc_qc.csv -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_alff.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_desc-denoisedSmoothed_bold.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_desc-denoisedSmoothed_bold.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_desc-denoised_bold.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_desc-denoised_bold.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_desc-smooth_alff.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_desc-smooth_alff.nii.gz -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_reho.json -xcp_d/sub-1648798153/ses-PNC1/func/sub-1648798153_ses-PNC1_task-rest_acq-singleband_space-MNI152NLin6Asym_res-2_reho.nii.gz -xcp_d/sub-1648798153_ses-PNC1_executive_summary.html diff --git a/xcp_d/tests/data/test_ukbiobank_outputs.txt b/xcp_d/tests/data/test_ukbiobank_outputs.txt new file mode 100644 index 000000000..e6e4a5e1a --- /dev/null +++ b/xcp_d/tests/data/test_ukbiobank_outputs.txt @@ -0,0 +1,211 @@ +xcp_d/atlas-4S1056Parcels_dseg.json +xcp_d/atlas-4S1056Parcels_dseg.tsv +xcp_d/atlas-4S156Parcels_dseg.json +xcp_d/atlas-4S156Parcels_dseg.tsv +xcp_d/atlas-4S256Parcels_dseg.json +xcp_d/atlas-4S256Parcels_dseg.tsv +xcp_d/atlas-4S356Parcels_dseg.json +xcp_d/atlas-4S356Parcels_dseg.tsv +xcp_d/atlas-4S456Parcels_dseg.json +xcp_d/atlas-4S456Parcels_dseg.tsv +xcp_d/atlas-4S556Parcels_dseg.json +xcp_d/atlas-4S556Parcels_dseg.tsv +xcp_d/atlas-4S656Parcels_dseg.json +xcp_d/atlas-4S656Parcels_dseg.tsv +xcp_d/atlas-4S756Parcels_dseg.json +xcp_d/atlas-4S756Parcels_dseg.tsv +xcp_d/atlas-4S856Parcels_dseg.json +xcp_d/atlas-4S856Parcels_dseg.tsv +xcp_d/atlas-4S956Parcels_dseg.json +xcp_d/atlas-4S956Parcels_dseg.tsv +xcp_d/atlas-Glasser_dseg.json +xcp_d/atlas-Glasser_dseg.tsv +xcp_d/atlas-Gordon_dseg.json +xcp_d/atlas-Gordon_dseg.tsv +xcp_d/atlas-HCP_dseg.json +xcp_d/atlas-HCP_dseg.tsv +xcp_d/atlas-Tian_dseg.json +xcp_d/atlas-Tian_dseg.tsv +xcp_d/dataset_description.json +xcp_d/desc-linc_qc.json +xcp_d/logs +xcp_d/logs/CITATION.md +xcp_d/space-MNI152NLin6Asym_atlas-4S1056Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S156Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S256Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S356Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S456Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S556Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S656Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S756Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S856Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-4S956Parcels_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-Glasser_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-Gordon_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-HCP_dseg.nii.gz +xcp_d/space-MNI152NLin6Asym_atlas-Tian_dseg.nii.gz +xcp_d/sub-0000001 +xcp_d/sub-0000001.html +xcp_d/sub-0000001/ses-01 +xcp_d/sub-0000001/ses-01/anat +xcp_d/sub-0000001/ses-01/anat/sub-0000001_ses-01_space-MNI152NLin6Asym_desc-aparcaseg_dseg.nii.gz +xcp_d/sub-0000001/ses-01/anat/sub-0000001_ses-01_space-MNI152NLin6Asym_desc-preproc_T1w.nii.gz +xcp_d/sub-0000001/ses-01/func +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_desc-filtered_motion.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_desc-filtered_motion.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_desc-preproc_design.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_desc-preproc_design.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_outliers.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_outliers.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S1056Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S156Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S256Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S356Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S456Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S556Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S656Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S756Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S856Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-4S956Parcels_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Glasser_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Gordon_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-HCP_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_alff.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_coverage.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_coverage.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_conmat.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_measure-pearsoncorrelation_conmat.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_reho.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_timeseries.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_atlas-Tian_timeseries.tsv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_desc-linc_qc.csv +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_alff.nii.gz +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_desc-denoisedSmoothed_bold.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_desc-denoisedSmoothed_bold.nii.gz +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_desc-denoised_bold.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_desc-denoised_bold.nii.gz +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_desc-smooth_alff.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_desc-smooth_alff.nii.gz +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_reho.json +xcp_d/sub-0000001/ses-01/func/sub-0000001_ses-01_task-rest_space-MNI152NLin6Asym_reho.nii.gz +xcp_d/sub-0000001_ses-01_executive_summary.html diff --git a/xcp_d/tests/test_cli.py b/xcp_d/tests/test_cli.py index 35a52a006..f0e4cd297 100644 --- a/xcp_d/tests/test_cli.py +++ b/xcp_d/tests/test_cli.py @@ -141,17 +141,16 @@ def test_ds001419_cifti(data_dir, output_dir, working_dir): check_affines(dataset_dir, out_dir, input_type="cifti") -@pytest.mark.pnc_nifti -def test_pnc_nifti(data_dir, output_dir, working_dir): - """Run xcp_d on pnc fMRIPrep derivatives, with nifti options.""" - test_name = "test_pnc_nifti" +@pytest.mark.ukbiobank +def test_ukbiobank(data_dir, output_dir, working_dir): + """Run xcp_d on UK Biobank derivatives.""" + test_name = "test_ukbiobank" - dataset_dir = download_test_data("pnc", data_dir) + dataset_dir = download_test_data("ukbiobank", data_dir) out_dir = os.path.join(output_dir, test_name) work_dir = os.path.join(working_dir, test_name) test_data_dir = get_test_data_path() - filter_file = os.path.join(test_data_dir, "pnc_nifti_filter.json") parameters = [ dataset_dir, @@ -160,8 +159,8 @@ def test_pnc_nifti(data_dir, output_dir, working_dir): f"-w={work_dir}", "--nthreads=2", "--omp-nthreads=2", - f"--bids-filter-file={filter_file}", - "--nuisance-regressors=36P", + "--input-type=ukb", + "--nuisance-regressors=gsr_only", "--despike", "--dummy-scans=4", "--fd-thresh=0.2", @@ -169,11 +168,7 @@ def test_pnc_nifti(data_dir, output_dir, working_dir): "--smoothing=6", "--motion-filter-type=lp", "--band-stop-min=6", - "--min-coverage=1", - "--exact-time", - "80", - "100", - "200", + "--min-coverage=0.1", "--random-seed=8675309", ] opts = run.get_parser().parse_args(parameters) @@ -186,7 +181,7 @@ def test_pnc_nifti(data_dir, output_dir, working_dir): xcpd_wf.run(**plugin_settings) generate_reports( - subject_list=["1648798153"], + subject_list=["0000001"], fmri_dir=dataset_dir, work_dir=work_dir, output_dir=out_dir, @@ -195,10 +190,14 @@ def test_pnc_nifti(data_dir, output_dir, working_dir): packagename="xcp_d", ) - output_list_file = os.path.join(test_data_dir, "test_pnc_nifti_outputs.txt") + output_list_file = os.path.join(test_data_dir, "test_ukbiobank_outputs.txt") check_generated_files(out_dir, output_list_file) - check_affines(dataset_dir, out_dir, input_type="nifti") + converted_fmri_dir = os.path.join( + opts.work_dir, + "dset_bids/derivatives/ukb", + ) + check_affines(converted_fmri_dir, out_dir, input_type="nifti") @pytest.mark.pnc_cifti diff --git a/xcp_d/tests/test_utils_bids.py b/xcp_d/tests/test_utils_bids.py index 54f429db5..d8ef80530 100644 --- a/xcp_d/tests/test_utils_bids.py +++ b/xcp_d/tests/test_utils_bids.py @@ -174,7 +174,7 @@ def test_write_dataset_description(datasets, tmp_path_factory, caplog): def test_get_preproc_pipeline_info(datasets): """Test get_preproc_pipeline_info.""" - input_types = ["fmriprep", "nibabies", "hcp", "dcan"] + input_types = ["fmriprep", "nibabies", "hcp", "dcan", "ukb"] for input_type in input_types: info_dict = xbids.get_preproc_pipeline_info(input_type, datasets["ds001419"]) assert "references" in info_dict.keys() diff --git a/xcp_d/tests/utils.py b/xcp_d/tests/utils.py index 8fd3ed788..2838cbe63 100644 --- a/xcp_d/tests/utils.py +++ b/xcp_d/tests/utils.py @@ -30,6 +30,7 @@ def download_test_data(dset, data_dir=None): "nibabies": "https://upenn.box.com/shared/static/rsd7vpny5imv3qkd7kpuvdy9scpnfpe2.tar.gz", "ds001419": "https://upenn.box.com/shared/static/yye7ljcdodj9gd6hm2r6yzach1o6xq1d.tar.gz", "pnc": "https://upenn.box.com/shared/static/ui2847ys49d82pgn5ewai1mowcmsv2br.tar.gz", + "ukbiobank": "https://upenn.box.com/shared/static/p5h1eg4p5cd2ef9ehhljlyh1uku0xe97.tar.gz", } if dset == "*": for k in URLS: @@ -105,7 +106,7 @@ def check_generated_files(out_dir, output_list_file): def check_affines(data_dir, out_dir, input_type): """Confirm affines don't change across XCP-D runs.""" - fmri_layout = BIDSLayout(str(data_dir), validate=False, derivatives=False) + preproc_layout = BIDSLayout(str(data_dir), validate=False, derivatives=False) xcp_layout = BIDSLayout(str(out_dir), validate=False, derivatives=False) if input_type == "cifti": # Get the .dtseries.nii denoised_files = xcp_layout.get( @@ -114,7 +115,7 @@ def check_affines(data_dir, out_dir, input_type): extension=".dtseries.nii", ) space = denoised_files[0].get_entities()["space"] - bold_files = fmri_layout.get( + preproc_files = preproc_layout.get( invalid_filters="allow", datatype="func", space=space, @@ -129,7 +130,7 @@ def check_affines(data_dir, out_dir, input_type): extension=".nii.gz", ) space = denoised_files[0].get_entities()["space"] - bold_files = fmri_layout.get( + preproc_files = preproc_layout.get( invalid_filters="allow", datatype="func", space=space, @@ -144,7 +145,7 @@ def check_affines(data_dir, out_dir, input_type): suffix="bold", extension=".nii.gz", ) - bold_files = fmri_layout.get( + preproc_files = preproc_layout.get( invalid_filters="allow", datatype="func", space="MNIInfant", @@ -152,17 +153,17 @@ def check_affines(data_dir, out_dir, input_type): extension=".nii.gz", ) - bold_file = bold_files[0].path + preproc_file = preproc_files[0].path denoised_file = denoised_files[0].path if input_type == "cifti": assert ( - nb.load(bold_file)._nifti_header.get_intent() + nb.load(preproc_file)._nifti_header.get_intent() == nb.load(denoised_file)._nifti_header.get_intent() ) else: - if not np.array_equal(nb.load(bold_file).affine, nb.load(denoised_file).affine): - raise AssertionError(f"Affines do not match:\n\t{bold_file}\n\t{denoised_file}") + if not np.array_equal(nb.load(preproc_file).affine, nb.load(denoised_file).affine): + raise AssertionError(f"Affines do not match:\n\t{preproc_file}\n\t{denoised_file}") print("No affines changed.") diff --git a/xcp_d/utils/__init__.py b/xcp_d/utils/__init__.py index 5984621fc..2ab15299b 100644 --- a/xcp_d/utils/__init__.py +++ b/xcp_d/utils/__init__.py @@ -7,11 +7,9 @@ bids, concatenation, confounds, - dcan2fmriprep, doc, execsummary, filemanip, - hcp2fmriprep, modified_data, plotting, qcmetrics, @@ -26,11 +24,9 @@ "bids", "concatenation", "confounds", - "dcan2fmriprep", "doc", "execsummary", "filemanip", - "hcp2fmriprep", "modified_data", "plotting", "qcmetrics", diff --git a/xcp_d/utils/bids.py b/xcp_d/utils/bids.py index 65b7a9d15..492ab9d3b 100644 --- a/xcp_d/utils/bids.py +++ b/xcp_d/utils/bids.py @@ -235,7 +235,7 @@ def collect_data( "suffix": "xfm", }, } - if input_type in ("hcp", "dcan"): + if input_type in ("hcp", "dcan", "ukb"): # HCP/DCAN data have anats only in standard space queries["t1w"]["space"] = "MNI152NLin6Asym" queries["t2w"]["space"] = "MNI152NLin6Asym" @@ -749,6 +749,8 @@ def get_preproc_pipeline_info(input_type, fmri_dir): info_dict["references"] = "[@glasser2013minimal]" elif input_type == "nibabies": info_dict["references"] = "[@goncalves_mathias_2022_7072346]" + elif input_type == "ukb": + info_dict["references"] = "[@miller2016multimodal]" else: raise ValueError(f"Unsupported input_type '{input_type}'") diff --git a/xcp_d/utils/confounds.py b/xcp_d/utils/confounds.py index 8506dcc24..8f32aaac1 100644 --- a/xcp_d/utils/confounds.py +++ b/xcp_d/utils/confounds.py @@ -212,6 +212,10 @@ def describe_regression(params, custom_confounds_file, motion_filter_type): "mean cerebrospinal fluid signal, and mean global signal were selected as " "nuisance regressors [@benchmarkp;@satterthwaite_2013]." ), + "gsr_only": ( + "Nuisance regressors were selected according to the 'gsr_only' strategy. " + "Mean global signal was selected as the only nuisance regressor." + ), } if params not in BASE_DESCRIPTIONS.keys(): @@ -427,6 +431,11 @@ def load_confound_matrix( "wm_csf": "basic", "global_signal": "basic", }, + # Get global signal only + "gsr_only": { + "strategy": ["global_signal"], + "global_signal": "basic", + }, } if params == "none": diff --git a/xcp_d/utils/doc.py b/xcp_d/utils/doc.py index 984a01237..3ce623a1a 100644 --- a/xcp_d/utils/doc.py +++ b/xcp_d/utils/doc.py @@ -118,7 +118,7 @@ docdict[ "input_type" ] = """ -input_type : {"fmriprep", "dcan", "hcp", "nibabies"} +input_type : {"fmriprep", "dcan", "hcp", "nibabies", "ukb"} The format of the incoming preprocessed BIDS derivatives. DCAN- and HCP-format derivatives will automatically be converted to a more BIDS-compliant format. diff --git a/xcp_d/workflows/anatomical.py b/xcp_d/workflows/anatomical.py index 874b6e54b..59187628f 100644 --- a/xcp_d/workflows/anatomical.py +++ b/xcp_d/workflows/anatomical.py @@ -191,7 +191,7 @@ def init_postprocess_anat_wf( ]) # fmt:on - if input_type in ("dcan", "hcp"): + if input_type in ("dcan", "hcp", "ukb"): # Assume that the T1w, T1w segmentation, and T2w files are in standard space, # but don't have the "space" entity, for the "dcan" and "hcp" derivatives. # This is a bug, and the converted filenames are inaccurate, so we have this diff --git a/xcp_d/workflows/bold.py b/xcp_d/workflows/bold.py index 0f9c35796..7798dff24 100644 --- a/xcp_d/workflows/bold.py +++ b/xcp_d/workflows/bold.py @@ -182,7 +182,6 @@ def init_postprocess_nifti_wf( t2w Preprocessed T2w image, warped to standard space. Fed from the subject workflow. - anat_dseg anat_brainmask T1w brain mask, used for transforms in the QC report workflow. Fed from the subject workflow. @@ -227,7 +226,6 @@ def init_postprocess_nifti_wf( "template_to_anat_xfm", "t1w", "t2w", - "anat_dseg", "anat_brainmask", "fmriprep_confounds_file", "fmriprep_confounds_json",