diff --git a/pyproject.toml b/pyproject.toml index 1868867..ac20b9e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,9 +21,11 @@ dependencies = [ "acres", "datalad", "nipype", + "nireports", "pandas", "pybids >= 0.15.6", "typer", + "toml", "pyyaml", ] dynamic = ["version"] @@ -187,6 +189,7 @@ ignore = [ "S113", "S202", "S602", + "T100", ] [tool.ruff.lint.flake8-quotes] diff --git a/src/simbids/cli/parser.py b/src/simbids/cli/parser.py index c3653cc..eeccb54 100644 --- a/src/simbids/cli/parser.py +++ b/src/simbids/cli/parser.py @@ -146,6 +146,12 @@ def _bids_filter(value, parser): ), ) + parser.add_argument( + 'bids_app', + choices=['qsiprep', 'qsirecon', 'xcp_d', 'fmriprep'], + help=('BIDS-App to be simulated'), + ) + g_bids = parser.add_argument_group('Options for filtering BIDS queries') g_bids.add_argument( '--skip_bids_validation', @@ -336,3 +342,4 @@ def parse_args(args=None, namespace=None): ) config.execution.participant_label = sorted(participant_label) + return opts diff --git a/src/simbids/cli/raw_mri.py b/src/simbids/cli/raw_mri.py index 7aed191..d272c36 100644 --- a/src/simbids/cli/raw_mri.py +++ b/src/simbids/cli/raw_mri.py @@ -31,7 +31,7 @@ LGR = logging.getLogger(__name__) # Get all the yaml files using importlib -with resources.path('simbids.data.bids-mri', '') as bids_mri_path: +with resources.path('simbids.data.bids_mri', '') as bids_mri_path: yaml_files = [f.name for f in bids_mri_path.glob('*.yaml')] @@ -83,12 +83,12 @@ def main(): config_path = Path(args.config_file) if not config_path.exists(): raise FileNotFoundError(f'Config file {args.config_file} not found') + # For custom config files, pass the string path + simulate_dataset(args.bids_dir, str(config_path), args.fill_files, args.datalad_init) else: LGR.info(f'Using bundled config file: {args.config_file}') - config_path = resources.path('simbids.data.bids-mri', args.config_file) - - # Create the raw MRI BIDS dataset - simulate_dataset(args.bids_dir, config_path, args.fill_files, args.datalad_init) + # For bundled config files, pass the filename directly + simulate_dataset(args.bids_dir, args.config_file, args.fill_files, args.datalad_init) if __name__ == '__main__': diff --git a/src/simbids/cli/run.py b/src/simbids/cli/run.py index 81ccd58..c685fb1 100644 --- a/src/simbids/cli/run.py +++ b/src/simbids/cli/run.py @@ -30,13 +30,12 @@ def main(): """Entry point.""" import gc - from multiprocessing import Manager, Process + from simbids.cli.parser import parse_args from simbids.cli.workflow import build_workflow - # Code Carbon - if config.execution.track_carbon: - pass + # Parse arguments + parse_args() if 'pdb' in config.execution.debug: from simbids.utils.debug import setup_exceptionhook @@ -51,22 +50,7 @@ def main(): config_file.parent.mkdir(exist_ok=True, parents=True) config.to_filename(config_file) - # CRITICAL Call build_workflow(config_file, retval) in a subprocess. - # Because Python on Linux does not ever free virtual memory (VM), running the - # workflow construction jailed within a process preempts excessive VM buildup. - if 'pdb' not in config.execution.debug: - with Manager() as mgr: - retval = mgr.dict() - p = Process(target=build_workflow, args=(str(config_file), retval)) - p.start() - p.join() - retval = dict(retval.items()) # Convert to base dictionary - - if p.exitcode: - retval['return_code'] = p.exitcode - - else: - retval = build_workflow(str(config_file), {}) + retval = build_workflow(str(config_file), {}) global EXITCODE EXITCODE = retval.get('return_code', 0) diff --git a/src/simbids/cli/workflow.py b/src/simbids/cli/workflow.py index 099fadc..02c3c82 100644 --- a/src/simbids/cli/workflow.py +++ b/src/simbids/cli/workflow.py @@ -36,8 +36,6 @@ def build_workflow(config_file, retval): """Create the Nipype Workflow that supports the whole execution graph.""" from pathlib import Path - from fmriprep.utils.bids import check_pipeline_version - from fmriprep.utils.misc import check_deps from niworkflows.utils.bids import collect_participants from pkg_resources import resource_filename as pkgrf @@ -48,7 +46,6 @@ def build_workflow(config_file, retval): config.load(config_file) build_log = config.loggers.workflow - output_dir = config.execution.output_dir version = config.environment.version retval['return_code'] = 1 @@ -64,15 +61,6 @@ def build_workflow(config_file, retval): banner += ['#' * len(banner[1])] build_log.log(25, f'\n{" " * 9}'.join(banner)) - # warn if older results exist: check for dataset_description.json in output folder - msg = check_pipeline_version( - 'SimBIDS', - version, - output_dir / 'dataset_description.json', - ) - if msg is not None: - build_log.warning(msg) - # Please note this is the input folder's dataset_description.json dset_desc_path = config.execution.bids_dir / 'dataset_description.json' if dset_desc_path.exists(): @@ -103,6 +91,7 @@ def build_workflow(config_file, retval): "Building SimBIDS's workflow:", f'BIDS dataset path: {config.execution.bids_dir}.', f'Participant list: {subject_list}.', + f'BIDS-App: {config.workflow.bids_app}.', f'Run identifier: {config.execution.run_uuid}.', f'Output spaces: {config.execution.output_spaces}.', ] @@ -114,16 +103,6 @@ def build_workflow(config_file, retval): retval['workflow'] = init_simbids_wf() - # Check workflow for missing commands - missing = check_deps(retval['workflow']) - if missing: - build_log.critical( - 'Cannot run SimBIDS. Missing dependencies:%s', - '\n\t* '.join([''] + [f'{cmd} (Interface: {iface})' for iface, cmd in missing]), - ) - retval['return_code'] = 127 # 127 == command not found. - return retval - config.to_filename(config_file) build_log.info( 'SimBIDS workflow graph with %d nodes built successfully.', diff --git a/src/simbids/config.py b/src/simbids/config.py index be7aa3d..6e0d209 100644 --- a/src/simbids/config.py +++ b/src/simbids/config.py @@ -206,7 +206,7 @@ # Debug modes are names that influence the exposure of internal details to # the user, either through additional derivatives or increased verbosity -DEBUG_MODES = ('compcor', 'fieldmaps', 'pdb') +DEBUG_MODES = ('pdb',) class _Config: @@ -481,9 +481,7 @@ def init(cls): 'sourcedata', 'models', re.compile(r'^\.'), - re.compile( - r'sub-[a-zA-Z0-9]+(/ses-[a-zA-Z0-9]+)?/(beh|dwi|eeg|ieeg|meg|perf)' - ), + re.compile(r'sub-[a-zA-Z0-9]+(/ses-[a-zA-Z0-9]+)?/(beh|eeg|ieeg|meg|perf)'), ), ) cls._layout = BIDSLayout( @@ -541,15 +539,8 @@ class workflow(_Config): ignore = None """Ignore particular steps for *SimBIDS*.""" - cifti_output = None - """Generate HCP Grayordinates, accepts either ``'91k'`` (default) or ``'170k'``.""" - dummy_scans = None - """Set a number of initial scans to be considered nonsteady states.""" - slice_time_ref = 0.5 - """The time of the reference slice to correct BOLD values to, as a fraction - acquisition time. 0 indicates the start, 0.5 the midpoint, and 1 the end - of acquisition. The alias `start` corresponds to 0, and `middle` to 0.5. - The default value is 0.5.""" + bids_app = 'qsiprep' + """The BIDS App to simulate.""" class loggers: @@ -738,14 +729,5 @@ def init_spaces(checkpoint=True): if 'MNI152NLin6Asym' not in spaces.get_spaces(nonstandard=False, dim=(3,)): spaces.add(Reference('MNI152NLin6Asym', {})) - # Ensure user-defined spatial references for outputs are correctly parsed. - # Certain options require normalization to a space not explicitly defined by users. - # These spaces will not be included in the final outputs. - cifti_output = workflow.cifti_output - if cifti_output: - # CIFTI grayordinates to corresponding FSL-MNI resolutions. - vol_res = '2' if cifti_output == '91k' else '1' - spaces.add(Reference('MNI152NLin6Asym', {'res': vol_res})) - # Make the SpatialReferences object available workflow.spaces = spaces diff --git a/src/simbids/data/bids_mri/ds002278_configs.yaml b/src/simbids/data/bids_mri/ds002278_configs.yaml index cc1912c..3d04d54 100644 --- a/src/simbids/data/bids_mri/ds002278_configs.yaml +++ b/src/simbids/data/bids_mri/ds002278_configs.yaml @@ -1,14 +1,54 @@ "Blossom": -- "func": +- "anat": [] + "fmap": + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "1" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "2" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "3" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "4" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "1" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "2" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "3" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "4" + "suffix": "epi" + "func": - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "EIRT" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "39" @@ -151,14 +191,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "EIRT" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -302,14 +340,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "EIRT" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "39" @@ -452,14 +488,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "EIRT" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -603,14 +637,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "EIRT" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "38" @@ -753,14 +785,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "EIRT" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -904,14 +934,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "EIRT" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "38" @@ -1054,14 +1082,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "EIRT" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -1205,14 +1231,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "EIRT" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -1355,14 +1379,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "EIRT" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "36" @@ -1506,14 +1528,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "EIRT" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -1656,14 +1676,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "EIRT" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "36" @@ -1807,14 +1825,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "EIRT" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -1957,14 +1973,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "EIRT" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "35" @@ -2108,14 +2122,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "EIRT" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -2258,14 +2270,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "EIRT" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "35" @@ -2409,14 +2419,12 @@ "suffix": "bold" "task": "EIRT" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -2559,14 +2567,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -2710,14 +2716,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -2860,14 +2864,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -3011,14 +3013,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -3161,14 +3161,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -3312,14 +3310,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -3462,14 +3458,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -3613,14 +3607,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -3763,14 +3755,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -3914,14 +3904,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -4064,14 +4052,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -4215,14 +4201,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -4365,14 +4349,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -4516,14 +4498,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -4666,14 +4646,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -4817,14 +4795,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -4967,14 +4943,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -5118,14 +5092,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -5268,14 +5240,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -5419,14 +5389,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -5569,14 +5537,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -5720,14 +5686,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -5870,14 +5834,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -6021,14 +5983,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -6171,14 +6131,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -6322,14 +6280,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -6472,14 +6428,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -6623,14 +6577,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -6773,14 +6725,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -6924,14 +6874,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -7074,14 +7022,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -7225,14 +7171,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -7375,14 +7319,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -7526,14 +7468,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -7676,14 +7616,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -7827,14 +7765,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -7977,14 +7913,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -8128,14 +8062,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -8278,14 +8210,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -8429,14 +8359,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -8579,14 +8507,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -8730,14 +8656,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -8880,14 +8804,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -9031,14 +8953,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -9181,14 +9101,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -9332,14 +9250,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -9482,14 +9398,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -9633,14 +9547,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -9783,14 +9695,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -9934,14 +9844,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -10084,14 +9992,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -10235,14 +10141,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -10385,14 +10289,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -10536,14 +10438,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -10686,14 +10586,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -10837,14 +10735,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -10987,14 +10883,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -11138,14 +11032,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -11288,14 +11180,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -11439,14 +11329,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -11589,14 +11477,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -11740,14 +11626,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -11890,14 +11774,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -12041,14 +11923,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -12191,14 +12071,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "145" @@ -12342,14 +12220,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -12492,14 +12368,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "145" @@ -12643,14 +12517,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -12793,14 +12665,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "145" @@ -12944,14 +12814,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -13094,14 +12962,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "144" @@ -13245,14 +13111,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -13395,14 +13259,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -13546,14 +13408,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -13696,14 +13556,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -13847,14 +13705,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -13997,14 +13853,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -14148,14 +14002,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -14298,14 +14150,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -14450,179 +14300,61 @@ "task": "strangerthings" "session": "01" - "anat": - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "1" "suffix": "T1w" - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "256" - "AcquisitionNumber": "1" - "AcquisitionTime": "18:18:23.715000" - "BaseResolution": "256" - "BodyPartExamined": "BRAIN" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20200331" - "DeviceSerialNumber": "166003" - "DwellTime": 8.2e-06 - "EchoTime": 0.0029 - "FlipAngle": "8" - "ImageOrientationPatientDICOM": - - 0 - - 1 - - 0 - - 0 - - 0 - - -1 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "M" - - "ND" - - "NORM" - "ImagingFrequency": 123.249 - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "SW_8TH_ST_OE116_11200_MIAMI_Med-Lab_US_33199" - "InstitutionName": "FIU_Center_For_Imaging_Science" - "InstitutionalDepartmentName": "Department" - "InversionTime": 1.07 - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma" - "Modality": "MR" - "ParallelReductionFactorInPlane": "2" - "PartialFourier": "1" - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PercentSampling": "100" - "PhaseEncodingSteps": "255" - "PhaseResolution": "1" - "PixelBandwidth": "240" - "ProcedureStepDescription": "Laird_Laird_DIVA" - "ProtocolName": "anat-T1w_run-01" - "PulseSequenceDetails": "%CustomerSeq%_tfl_mgh_epinav_ABCD" - "ReceiveCoilActiveElements": "HEA;HEP" - "ReceiveCoilName": "Head_32" - "ReconMatrixPE": "256" - "RefLinesPE": "32" - "RepetitionTime": 2.5 - "SAR": 0.0350434 - "ScanOptions": "IR_WE" - "ScanningSequence": "GR_IR" - "SequenceName": "tfl3d1_16ns" - "SequenceVariant": "SK_SP_MP" - "SeriesDescription": "anat-T1w_run-01" - "SeriesNumber": "35" - "ShimSetting": - - -179 - - -428 - - 889 - - 324 - - 18 - - 65 - - 104 - - -3 - "SliceThickness": "1" - "SoftwareVersions": "syngo_MR_E11" - "StationName": "AWP166003" - "TxRefAmp": 231.921 - "WipMemBlock": "Prisma_epi_moco_navigator_ABCD_tfl.prot" + - "metadata": {} "run": "1" - "suffix": "T1w" - - "extension": ".json" + "suffix": "T2w" + "fmap": + - "acq": "func" + "dir": "AP" "metadata": {} "run": "1" - "suffix": "T2w" - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "256" - "AcquisitionNumber": "1" - "AcquisitionTime": "18:25:2.277500" - "BaseResolution": "256" - "BodyPartExamined": "BRAIN" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20200331" - "DeviceSerialNumber": "166003" - "DwellTime": 8.1e-06 - "EchoTime": 0.565 - "EchoTrainLength": "190" - "FlipAngle": "120" - "ImageOrientationPatientDICOM": - - 0 - - 1 - - 0 - - 0 - - 0 - - -1 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "M" - - "ND" - - "NORM" - "ImagingFrequency": 123.249 - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "SW_8TH_ST_OE116_11200_MIAMI_Med-Lab_US_33199" - "InstitutionName": "FIU_Center_For_Imaging_Science" - "InstitutionalDepartmentName": "Department" - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma" - "Modality": "MR" - "ParallelReductionFactorInPlane": "2" - "PartialFourier": "1" - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PercentSampling": "100" - "PhaseEncodingDirection": "i" - "PhaseEncodingSteps": "227" - "PhaseResolution": "1" - "PixelBandwidth": "240" - "ProcedureStepDescription": "Laird_Laird_DIVA" - "ProtocolName": "anat-T2w_run-01" - "PulseSequenceDetails": "%CustomerSeq%_tse_vfl_mgh_epinav_ABCD" - "ReceiveCoilActiveElements": "HEA;HEP" - "ReceiveCoilName": "Head_32" - "ReconMatrixPE": "256" - "RefLinesPE": "32" - "RepetitionTime": 3.2 - "SAR": 0.0771972 - "ScanOptions": "PFP_FS" - "ScanningSequence": "SE" - "SequenceName": "spc_200ns" - "SequenceVariant": "SK_SP" - "SeriesDescription": "anat-T2w_run-01" - "SeriesNumber": "38" - "ShimSetting": - - -179 - - -428 - - 889 - - 324 - - 18 - - 65 - - 104 - - -3 - "SliceThickness": "1" - "SoftwareVersions": "syngo_MR_E11" - "StationName": "AWP166003" - "TxRefAmp": 231.921 - "WipMemBlock": "Prisma_epi_moco_navigator_ABCD_tse_vfl.prot" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "2" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "3" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "4" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} "run": "1" - "suffix": "T2w" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "2" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "3" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "4" + "suffix": "epi" "func": - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -14765,14 +14497,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -14916,14 +14646,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -15066,14 +14794,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -15217,14 +14943,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -15367,14 +15091,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -15518,14 +15240,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -15668,14 +15388,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -15819,14 +15537,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -15969,14 +15685,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -16120,14 +15834,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -16270,14 +15982,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -16421,14 +16131,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -16571,14 +16279,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -16722,14 +16428,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -16872,14 +16576,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -17023,14 +16725,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -17173,14 +16873,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -17324,14 +17022,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -17474,14 +17170,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -17625,14 +17319,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -17775,14 +17467,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -17926,14 +17616,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -18076,14 +17764,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -18227,14 +17913,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -18377,14 +18061,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -18528,14 +18210,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -18678,14 +18358,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -18829,14 +18507,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -18979,14 +18655,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -19130,14 +18804,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -19280,14 +18952,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -19431,14 +19101,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -19581,14 +19249,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -19732,14 +19398,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -19882,14 +19546,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -20033,14 +19695,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -20183,14 +19843,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -20334,14 +19992,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -20484,14 +20140,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -20635,14 +20289,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -20785,14 +20437,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -20936,14 +20586,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -21086,14 +20734,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -21237,14 +20883,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -21387,14 +21031,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -21538,14 +21180,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -21688,14 +21328,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -21839,14 +21477,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -21989,14 +21625,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -22140,14 +21774,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -22290,14 +21922,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -22441,14 +22071,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -22591,14 +22219,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -22742,14 +22368,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -22892,14 +22516,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -23043,14 +22665,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -23193,14 +22813,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -23344,14 +22962,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -23494,14 +23110,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -23645,14 +23259,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -23795,14 +23407,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -23946,14 +23556,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -24096,14 +23704,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -24247,14 +23853,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -24397,14 +24001,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -24548,14 +24150,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -24698,14 +24298,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -24849,14 +24447,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -24999,14 +24595,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -25150,14 +24744,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -25300,14 +24892,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -25451,14 +25041,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -25601,14 +25189,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -25752,14 +25338,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -25902,14 +25486,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -26053,14 +25635,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -26203,14 +25783,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -26354,14 +25932,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -26504,14 +26080,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -26655,14 +26229,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -26805,14 +26377,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -26956,14 +26526,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -27106,14 +26674,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -27257,14 +26823,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -27407,14 +26971,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -27558,14 +27120,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -27708,14 +27268,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -27859,14 +27417,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -28009,14 +27565,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -28160,14 +27714,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -28310,14 +27862,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -28461,14 +28011,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -28611,14 +28159,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -28762,14 +28308,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -28912,14 +28456,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -29064,16 +28606,56 @@ "task": "strangerthings" "session": "02" "Bubbles": -- "func": +- "anat": [] + "fmap": + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "1" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "2" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "3" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "4" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "1" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "2" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "3" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "4" + "suffix": "epi" + "func": - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "arithmetic" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -29216,14 +28798,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "arithmetic" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -29367,14 +28947,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "arithmetic" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -29517,14 +29095,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "arithmetic" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -29668,14 +29244,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "arithmetic" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -29818,14 +29392,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "arithmetic" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -29969,14 +29541,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "arithmetic" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -30119,14 +29689,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "arithmetic" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -30270,14 +29838,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "arithmetic" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -30420,14 +29986,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "arithmetic" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -30571,14 +30135,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "arithmetic" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -30721,14 +30283,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "arithmetic" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -30872,14 +30432,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "arithmetic" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -31022,14 +30580,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "arithmetic" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -31173,14 +30729,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "arithmetic" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -31323,14 +30877,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "arithmetic" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -31474,14 +31026,12 @@ "suffix": "bold" "task": "arithmetic" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "SORPF" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -31624,14 +31174,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "SORPF" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -31775,14 +31323,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "SORPF" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -31925,14 +31471,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "SORPF" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -32076,14 +31620,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "SORPF" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -32226,14 +31768,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "SORPF" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -32377,14 +31917,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "SORPF" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -32527,14 +32065,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "SORPF" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -32678,14 +32214,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "SORPF" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -32828,14 +32362,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "SORPF" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -32979,14 +32511,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "SORPF" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -33129,14 +32659,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "SORPF" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -33280,14 +32808,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "SORPF" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -33430,14 +32956,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "SORPF" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -33581,14 +33105,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "SORPF" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -33731,14 +33253,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "SORPF" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -33882,14 +33402,12 @@ "suffix": "bold" "task": "SORPF" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -34032,14 +33550,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -34183,14 +33699,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -34333,14 +33847,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -34484,14 +33996,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -34634,14 +34144,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -34785,14 +34293,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -34935,14 +34441,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -35086,14 +34590,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -35236,14 +34738,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -35387,14 +34887,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -35537,14 +35035,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -35688,14 +35184,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -35838,14 +35332,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -35989,14 +35481,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -36139,14 +35629,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -36290,14 +35778,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -36440,14 +35926,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -36591,14 +36075,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -36741,14 +36223,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -36892,14 +36372,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -37042,14 +36520,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -37193,14 +36669,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -37343,14 +36817,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -37494,14 +36966,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -37644,14 +37114,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -37795,14 +37263,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -37945,14 +37411,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -38096,14 +37560,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -38246,14 +37708,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -38397,14 +37857,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -38547,14 +38005,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -38698,14 +38154,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -38848,14 +38302,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -38999,14 +38451,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -39149,14 +38599,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -39300,14 +38748,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -39450,14 +38896,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -39601,14 +39045,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -39751,14 +39193,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -39902,14 +39342,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -40052,14 +39490,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -40203,14 +39639,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -40353,14 +39787,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -40504,14 +39936,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -40654,14 +40084,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -40805,14 +40233,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -40955,14 +40381,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -41106,16 +40530,56 @@ "suffix": "bold" "task": "strangerthings" "session": "01" -- "func": +- "anat": [] + "fmap": + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "1" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "2" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "3" + "suffix": "epi" + - "acq": "func" + "dir": "AP" + "metadata": {} + "run": "4" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "1" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "2" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "3" + "suffix": "epi" + - "acq": "func" + "dir": "PA" + "metadata": {} + "run": "4" + "suffix": "epi" + "func": - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -41258,14 +40722,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -41409,14 +40871,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -41559,14 +41019,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -41710,14 +41168,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -41860,14 +41316,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -42011,14 +41465,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -42161,14 +41613,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerDetection" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -42312,14 +41762,12 @@ "suffix": "bold" "task": "localizerDetection" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -42462,14 +41910,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -42613,14 +42059,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -42763,14 +42207,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -42914,14 +42356,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -43064,14 +42504,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -43215,14 +42653,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -43365,14 +42801,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "localizerEstimation" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -43516,14 +42950,12 @@ "suffix": "bold" "task": "localizerEstimation" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -43666,14 +43098,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -43817,14 +43247,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -43967,14 +43395,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -44118,14 +43544,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -44268,14 +43692,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -44419,14 +43841,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -44569,14 +43989,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -44720,14 +44138,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -44870,14 +44286,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -45021,14 +44435,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -45171,14 +44583,12 @@ "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -45322,14 +44732,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -45472,14 +44880,12 @@ "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -45623,14 +45029,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -45773,14 +45177,12 @@ "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "PST" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -45924,14 +45326,12 @@ "suffix": "bold" "task": "PST" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -46074,14 +45474,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -46225,14 +45623,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -46375,14 +45771,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -46526,14 +45920,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -46676,14 +46068,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -46827,14 +46217,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -46977,14 +46365,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -47128,14 +46514,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -47278,14 +46662,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -47429,14 +46811,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -47579,14 +46959,12 @@ "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "rest" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -47730,14 +47108,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -47880,14 +47256,12 @@ "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "rest" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -48031,14 +47405,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -48181,14 +47553,12 @@ "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "rest" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -48332,14 +47702,12 @@ "suffix": "bold" "task": "rest" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -48482,14 +47850,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -48633,14 +47999,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -48783,14 +48147,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -48934,14 +48296,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -49084,14 +48444,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -49235,14 +48593,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -49385,14 +48741,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "1" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -49536,14 +48890,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -49686,14 +49038,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -49837,14 +49187,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -49987,14 +49335,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -50138,14 +49484,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -50288,14 +49632,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -50439,14 +49781,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -50589,14 +49929,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "2" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -50740,14 +50078,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -50890,14 +50226,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -51041,14 +50375,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -51191,14 +50523,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -51342,14 +50672,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -51492,14 +50820,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -51643,14 +50969,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -51793,14 +51117,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "3" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -51944,14 +51266,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -52094,14 +51414,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -52245,14 +51563,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -52395,14 +51711,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -52546,14 +51860,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -52696,14 +52008,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -52847,14 +52157,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -52997,14 +52305,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "4" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -53148,14 +52454,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -53298,14 +52602,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -53449,14 +52751,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -53599,14 +52899,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -53750,14 +53048,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -53900,14 +53196,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -54051,14 +53345,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -54201,14 +53493,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "5" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -54352,14 +53642,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -54502,14 +53790,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -54653,14 +53939,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -54803,14 +54087,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -54954,14 +54236,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -55104,14 +54384,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -55255,14 +54533,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -55405,14 +54681,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "6" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -55556,14 +54830,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "mag" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -55706,14 +54978,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".json" "metadata": {} "part": "phase" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "1" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -55857,14 +55127,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "mag" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -56007,14 +55275,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".json" "metadata": {} "part": "phase" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "2" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -56158,14 +55424,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "mag" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -56308,14 +55572,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".json" "metadata": {} "part": "phase" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "3" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -56459,14 +55721,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "mag" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" @@ -56609,14 +55869,12 @@ "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".json" "metadata": {} "part": "phase" "run": "7" "suffix": "bold" "task": "strangerthings" - "echo": "4" - "extension": ".nii.gz" "metadata": "AcquisitionMatrixPE": "62" "AcquisitionNumber": "1" diff --git a/src/simbids/data/bids_mri/ds004146_configs.yaml b/src/simbids/data/bids_mri/ds004146_configs.yaml index 9402d51..ffa597d 100644 --- a/src/simbids/data/bids_mri/ds004146_configs.yaml +++ b/src/simbids/data/bids_mri/ds004146_configs.yaml @@ -1,83 +1,11 @@ "0001": - "anat": - - "extension": ".json" - "metadata": {} - "suffix": "T2w" - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "256" - "AcquisitionNumber": "1" - "AcquisitionTime": "12:08:33.415000" - "BaseResolution": "256" - "BodyPartExamined": "BRAIN" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20171215 GCC6.3.0" - "DeviceSerialNumber": "167001" - "DwellTime": 2.6e-06 - "EchoTime": 0.408 - "EchoTrainLength": "259" - "FlipAngle": "120" - "ImageOrientationPatientDICOM": - - -0.0652318 - - 0.99787 - - 9.3308e-09 - - 0.0330828 - - 0.00216267 - - -0.99945 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "M" - - "ND" - - "NORM" - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "Cooper_60_St._Lucia_QLD_AU_4072" - "InstitutionName": "St_Lucia_Campus" - "InstitutionalDepartmentName": "Gehrmann_Labs_MRI" - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma_fit" - "Modality": "MR" - "ParallelReductionFactorInPlane": "2" - "PartialFourier": "1" - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PhaseEncodingSteps": "233" - "PhaseResolution": "1" - "PixelBandwidth": "750" - "ProcedureStepDescription": "Research_16092_QTAB" - "ProtocolName": "t2_spc_sag_p2_iso" - "PulseSequenceDetails": "%SiemensSeq%_tse_vfl" - "ReceiveCoilActiveElements": "HC1-7;NC1,2" - "ReceiveCoilName": "HeadNeck_64" - "ReconMatrixPE": "256" - "RepetitionTime": 3.2 - "SAR": 0.175607 - "ScanOptions": "PFP" - "ScanningSequence": "SE" - "SequenceName": "_spcR_282ns" - "SequenceVariant": "SK_SP" - "SeriesDescription": "t2_spc_sag_p2_iso" - "SeriesNumber": "19" - "ShimSetting": - - 3045 - - -4172 - - -1048 - - 3 - - -5 - - 36 - - -4 - - -10 - "SliceThickness": "1" - "SoftwareVersions": "syngo_MR_E11" - "StationName": "mrc_Trio" - "TxRefAmp": 206.955 + - "metadata": {} + "suffix": "FLAIR" + - "metadata": {} "suffix": "T2w" "dwi": - - "direction": "AP" - "extension": ".bval" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -228,8 +156,7 @@ "TxRefAmp": 206.955 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".bvec" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -380,13 +307,11 @@ "TxRefAmp": 206.955 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -537,8 +462,7 @@ "TxRefAmp": 206.955 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".bval" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -689,8 +613,7 @@ "TxRefAmp": 206.955 "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".bvec" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -841,13 +764,11 @@ "TxRefAmp": 206.955 "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -998,8 +919,7 @@ "TxRefAmp": 206.955 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".bval" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -1150,8 +1070,7 @@ "TxRefAmp": 206.955 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".bvec" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -1302,13 +1221,11 @@ "TxRefAmp": 206.955 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -1459,8 +1376,7 @@ "TxRefAmp": 206.955 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".bval" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -1611,8 +1527,7 @@ "TxRefAmp": 206.955 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".bvec" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -1763,13 +1678,11 @@ "TxRefAmp": 206.955 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -1920,14 +1833,13 @@ "TxRefAmp": 206.955 "run": "02" "suffix": "dwi" + "fmap": [] "func": - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "suffix": "bold" "task": "rest" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" @@ -2080,13 +1992,11 @@ "TxRefAmp": 206.955 "suffix": "bold" "task": "rest" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "suffix": "bold" "task": "rest" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" @@ -2241,86 +2151,12 @@ "task": "rest" "session": "01" - "anat": - - "extension": ".json" - "metadata": {} - "suffix": "T2w" - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "256" - "AcquisitionNumber": "1" - "AcquisitionTime": "12:48:19.277500" - "BaseResolution": "256" - "BodyPartExamined": "BRAIN" - "CoilString": "HC1-7;NC1_2" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20190410 GCC6.3.0" - "DeviceSerialNumber": "167001" - "DwellTime": 2.6e-06 - "EchoTime": 0.408 - "EchoTrainLength": "259" - "FlipAngle": "120" - "ImageOrientationPatientDICOM": - - 0.0278157 - - 0.999564 - - -0.00991428 - - 0.0822746 - - -0.0121738 - - -0.996535 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "M" - - "ND" - - "NORM" - "ImagingFrequency": 123.229 - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "Cooper_60_St._Lucia_QLD_AU_4072" - "InstitutionName": "St_Lucia_Campus" - "InstitutionalDepartmentName": "Gehrmann_Labs_MRI" - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma_fit" - "Modality": "MR" - "PartialFourier": "1" - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PhaseEncodingSteps": "233" - "PhaseResolution": "1" - "PixelBandwidth": "750" - "ProcedureStepDescription": "Research_16092_QTAB" - "ProtocolName": "t2_spc_sag_p2_iso" - "PulseSequenceDetails": "%SiemensSeq%_tse_vfl" - "ReceiveCoilActiveElements": "HC1-7;NC1,2" - "ReceiveCoilName": "HeadNeck_64" - "ReconMatrixPE": "256" - "RefLinesPE": "24" - "RepetitionTime": 3.2 - "SAR": 0.165765 - "ScanOptions": "PFP" - "ScanningSequence": "SE" - "SequenceName": "_spcR_282ns" - "SequenceVariant": "SK_SP" - "SeriesDescription": "t2_spc_sag_p2_iso" - "SeriesNumber": "41" - "ShimSetting": - - 3044 - - -4172 - - -1039 - - -11 - - -3 - - 35 - - -21 - - -13 - "SliceThickness": "1" - "SoftwareVersions": "syngo_MR_E11" - "StationName": "mrc_Trio" - "TxRefAmp": 215.016 + - "metadata": {} + "suffix": "FLAIR" + - "metadata": {} "suffix": "T2w" "dwi": - - "direction": "AP" - "extension": ".bval" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -2475,8 +2311,7 @@ "TxRefAmp": 216.389 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".bvec" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -2631,13 +2466,11 @@ "TxRefAmp": 216.389 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -2792,8 +2625,7 @@ "TxRefAmp": 216.389 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".bval" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -2948,8 +2780,7 @@ "TxRefAmp": 216.389 "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".bvec" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -3104,13 +2935,11 @@ "TxRefAmp": 216.389 "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -3265,8 +3094,7 @@ "TxRefAmp": 216.389 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".bval" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -3421,8 +3249,7 @@ "TxRefAmp": 216.389 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".bvec" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -3577,13 +3404,11 @@ "TxRefAmp": 216.389 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -3738,8 +3563,7 @@ "TxRefAmp": 216.389 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".bval" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -3894,8 +3718,7 @@ "TxRefAmp": 216.389 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".bvec" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -4050,13 +3873,11 @@ "TxRefAmp": 216.389 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -4211,13 +4032,18 @@ "TxRefAmp": 216.389 "run": "02" "suffix": "dwi" - "func": - - "extension": ".json" + "fmap": + - "dir": "AP" "metadata": {} + "suffix": "epi" + - "dir": "PA" + "metadata": {} + "suffix": "epi" + "func": + - "metadata": {} "suffix": "bold" "task": "partlycloudy" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "90" "AcquisitionNumber": "1" "AcquisitionTime": "12:05:44.567500" @@ -4361,13 +4187,11 @@ "TxRefAmp": 216.389 "suffix": "bold" "task": "partlycloudy" - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "suffix": "bold" "task": "rest" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" @@ -4523,13 +4347,11 @@ "TxRefAmp": 216.389 "suffix": "bold" "task": "rest" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "suffix": "bold" "task": "rest" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" @@ -4688,85 +4510,12 @@ "session": "02" "0002": - "anat": - - "extension": ".json" - "metadata": {} - "suffix": "T2w" - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "256" - "AcquisitionNumber": "1" - "AcquisitionTime": "16:18:11.762500" - "BaseResolution": "256" - "BodyPartExamined": "BRAIN" - "CoilString": "HC1-7;NC1_2" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20181125 (JP2:OpenJPEG) GCC6.3.0" - "DeviceSerialNumber": "167001" - "DwellTime": 2.6e-06 - "EchoTime": 0.408 - "EchoTrainLength": "259" - "FlipAngle": "120" - "ImageOrientationPatientDICOM": - - -0.0462715 - - 0.997209 - - -0.0585999 - - 0.0208202 - - -0.0576872 - - -0.998118 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "M" - - "ND" - - "NORM" - "ImagingFrequency": 123.229 - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "Cooper_60_St._Lucia_QLD_AU_4072" - "InstitutionName": "St_Lucia_Campus" - "InstitutionalDepartmentName": "Gehrmann_Labs_MRI" - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma_fit" - "Modality": "MR" - "PartialFourier": "1" - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PhaseEncodingSteps": "233" - "PhaseResolution": "1" - "PixelBandwidth": "750" - "ProcedureStepDescription": "Research_16092_QTAB" - "ProtocolName": "t2_spc_sag_p2_iso" - "PulseSequenceDetails": "%SiemensSeq%_tse_vfl" - "ReceiveCoilActiveElements": "HC1-7;NC1,2" - "ReceiveCoilName": "HeadNeck_64" - "ReconMatrixPE": "256" - "RepetitionTime": 3.2 - "SAR": 0.162427 - "ScanOptions": "PFP" - "ScanningSequence": "SE" - "SequenceName": "_spcR_282ns" - "SequenceVariant": "SK_SP" - "SeriesDescription": "t2_spc_sag_p2_iso" - "SeriesNumber": "19" - "ShimSetting": - - 3044 - - -4172 - - -1039 - - -11 - - -3 - - 35 - - -21 - - -13 - "SliceThickness": "1" - "SoftwareVersions": "syngo_MR_E11" - "StationName": "mrc_Trio" - "TxRefAmp": 216.744 + - "metadata": {} + "suffix": "FLAIR" + - "metadata": {} "suffix": "T2w" "dwi": - - "direction": "AP" - "extension": ".bval" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -4918,8 +4667,7 @@ "TxRefAmp": 216.744 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".bvec" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -5071,13 +4819,11 @@ "TxRefAmp": 216.744 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -5229,8 +4975,7 @@ "TxRefAmp": 216.744 "run": "01" "suffix": "dwi" - - "direction": "AP" - "extension": ".bval" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -5382,8 +5127,7 @@ "TxRefAmp": 216.744 "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".bvec" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -5535,13 +5279,11 @@ "TxRefAmp": 216.744 "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "run": "02" "suffix": "dwi" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -5693,8 +5435,7 @@ "TxRefAmp": 216.744 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".bval" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -5846,8 +5587,7 @@ "TxRefAmp": 216.744 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".bvec" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -5999,13 +5739,11 @@ "TxRefAmp": 216.744 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -6157,8 +5895,7 @@ "TxRefAmp": 216.744 "run": "01" "suffix": "dwi" - - "direction": "PA" - "extension": ".bval" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -6310,8 +6047,7 @@ "TxRefAmp": 216.744 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".bvec" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -6463,13 +6199,11 @@ "TxRefAmp": 216.744 "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "run": "02" "suffix": "dwi" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "122" "AcquisitionNumber": "1" @@ -6621,14 +6355,13 @@ "TxRefAmp": 216.744 "run": "02" "suffix": "dwi" + "fmap": [] "func": - - "direction": "AP" - "extension": ".json" + - "dir": "AP" "metadata": {} "suffix": "bold" "task": "rest" - - "direction": "AP" - "extension": ".nii.gz" + - "dir": "AP" "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" @@ -6783,13 +6516,11 @@ "TxRefAmp": 216.744 "suffix": "bold" "task": "rest" - - "direction": "PA" - "extension": ".json" + - "dir": "PA" "metadata": {} "suffix": "bold" "task": "rest" - - "direction": "PA" - "extension": ".nii.gz" + - "dir": "PA" "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" diff --git a/src/simbids/data/bids_mri/ds005237_configs.yaml b/src/simbids/data/bids_mri/ds005237_configs.yaml index c7e3efa..07b1b0d 100644 --- a/src/simbids/data/bids_mri/ds005237_configs.yaml +++ b/src/simbids/data/bids_mri/ds005237_configs.yaml @@ -1,170 +1,24 @@ "NDARINVAZ218MB7": "anat": - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "192" - "AcquisitionNumber": "1" - "AcquisitionTime": "13:50:18.135000" - "BaseResolution": "192" - "BodyPartExamined": "BRAIN" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20210317" - "DeviceSerialNumber": "166095" - "DwellTime": 4.0e-06 - "EchoTime": 0.00157 - "FlipAngle": "7" - "ImageOrientationPatientDICOM": - - -0.00210967 - - 0.962574 - - -0.271011 - - 0.0590296 - - -0.270419 - - -0.960931 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "OTHER" - - "ND" - - "NORM" - - "MEAN" - "ImagingFrequency": 123.261 - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "Hillhouse Ave. 10,New Haven ,Northeast,US,06519" - "InstitutionName": "Yale University - Dunham Lab. Bldg." - "InstitutionalDepartmentName": "Department" - "InversionTime": 1.1 - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma" - "Modality": "MR" - "NumberOfAverages": "4" - "ParallelReductionFactorInPlane": "4" - "PartialFourier": 0.75 - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PercentSampling": "100" - "PhaseEncodingSteps": "145" - "PhaseResolution": "1" - "PixelBandwidth": "650" - "ProcedureStepDescription": "PCY" - "ProtocolName": "T1_MEMPRAGE_GSP_vNavTrk" - "PulseSequenceDetails": "%CustomerSeq%\\tfl_mgh_epinav_ABCD" - "ReceiveCoilActiveElements": "HC1-7;NC1,2" - "ReceiveCoilName": "HeadNeck_64" - "ReconMatrixPE": "192" - "RefLinesPE": "32" - "RepetitionTime": 2.2 - "SAR": 0.0412408 - "ScanOptions": "IR\\PFP" - "ScanningSequence": "GR\\IR" - "SequenceName": "tfl3d4_16ns" - "SequenceVariant": "SK\\SP\\MP" - "SeriesDescription": "T1_MEMPRAGE_GSP_vNavTrk RMS" - "SeriesNumber": "12" - "ShimSetting": - - -2099 - - -596 - - -3980 - - 531 - - -38 - - 19 - - -85 - - 58 - "SliceThickness": 1.2 - "SoftwareVersions": "syngo MR E11" - "StationName": "AWP166095" - "TxRefAmp": 227.431 - "WipMemBlock": "Prisma_epi_moco_navigator_ABCD_tfl.prot" + - "metadata": {} "run": "01" "suffix": "T1w" - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "192" - "AcquisitionNumber": "1" - "AcquisitionTime": "13:52:42.015000" - "BaseResolution": "192" - "BodyPartExamined": "BRAIN" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20210317" - "DeviceSerialNumber": "166095" - "DwellTime": 4.0e-06 - "EchoTime": 0.326 - "EchoTrainLength": "199" - "FlipAngle": "120" - "ImageOrientationPatientDICOM": - - -0.00210967 - - 0.962574 - - -0.271011 - - 0.0590296 - - -0.270419 - - -0.960931 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "M" - - "ND" - - "NORM" - "ImagingFrequency": 123.261 - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "Hillhouse Ave. 10,New Haven ,Northeast,US,06519" - "InstitutionName": "Yale University - Dunham Lab. Bldg." - "InstitutionalDepartmentName": "Department" - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma" - "Modality": "MR" - "ParallelReductionFactorInPlane": "2" - "PartialFourier": "1" - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PercentSampling": "100" - "PhaseEncodingDirection": "i" - "PhaseEncodingSteps": "179" - "PhaseResolution": "1" - "PixelBandwidth": "650" - "ProcedureStepDescription": "PCY" - "ProtocolName": "T2_SPACE_GSP_vNavTrk" - "PulseSequenceDetails": "%CustomerSeq%\\tse_vfl_mgh_epinav_ABCD" - "ReceiveCoilActiveElements": "HC1-7;NC1,2" - "ReceiveCoilName": "HeadNeck_64" - "ReconMatrixPE": "192" - "RefLinesPE": "24" - "RepetitionTime": 2.8 - "SAR": 0.1729 - "ScanOptions": "PFP" - "ScanningSequence": "SE" - "SequenceName": "spc_212ns" - "SequenceVariant": "SK\\SP" - "SeriesDescription": "T2_SPACE_GSP_vNavTrk" - "SeriesNumber": "16" - "ShimSetting": - - -2099 - - -596 - - -3980 - - 531 - - -38 - - 19 - - -85 - - 58 - "SliceThickness": 1.2 - "SoftwareVersions": "syngo MR E11" - "StationName": "AWP166095" - "TxRefAmp": 227.431 - "WipMemBlock": "Prisma_epi_moco_navigator_ABCD_tse_vfl.prot" + - "metadata": {} "run": "01" "suffix": "T2w" - "func": - - "extension": ".json" + "fmap": + - "dir": "ap" + "metadata": {} + "suffix": "epi" + - "dir": "pa" "metadata": {} + "suffix": "epi" + "func": + - "metadata": {} "run": "01" "suffix": "bold" "task": "hammerAP" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "14:27:23.790000" @@ -323,13 +177,11 @@ "run": "01" "suffix": "bold" "task": "hammerAP" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "01" "suffix": "bold" "task": "restAP" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "13:56:37.977500" @@ -488,13 +340,11 @@ "run": "01" "suffix": "bold" "task": "restAP" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "02" "suffix": "bold" "task": "restAP" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "14:34:38.785000" @@ -653,13 +503,11 @@ "run": "02" "suffix": "bold" "task": "restAP" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "01" "suffix": "bold" "task": "restPA" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "14:03:59.697500" @@ -818,13 +666,11 @@ "run": "01" "suffix": "bold" "task": "restPA" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "02" "suffix": "bold" "task": "restPA" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "14:41:35.372500" @@ -983,13 +829,11 @@ "run": "02" "suffix": "bold" "task": "restPA" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "01" "suffix": "bold" "task": "stroopAP" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "14:11:53.197500" @@ -1148,13 +992,11 @@ "run": "01" "suffix": "bold" "task": "stroopAP" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "01" "suffix": "bold" "task": "stroopPA" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "14:19:26.745000" @@ -1315,171 +1157,25 @@ "task": "stroopPA" "NDARINVBH315KUM": "anat": - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "192" - "AcquisitionNumber": "1" - "AcquisitionTime": "16:08:22.132500" - "BaseResolution": "192" - "BodyPartExamined": "BRAIN" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20210317" - "DeviceSerialNumber": "166095" - "DwellTime": 4.0e-06 - "EchoTime": 0.00157 - "FlipAngle": "7" - "ImageOrientationPatientDICOM": - - -0.0471174 - - 0.933592 - - -0.355227 - - -0.0749997 - - -0.357924 - - -0.930734 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "OTHER" - - "ND" - - "NORM" - - "MEAN" - "ImagingFrequency": 123.261 - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "Hillhouse Ave. 10,New Haven ,Northeast,US,06519" - "InstitutionName": "Yale University - Dunham Lab. Bldg." - "InstitutionalDepartmentName": "Department" - "InversionTime": 1.1 - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma" - "Modality": "MR" - "NumberOfAverages": "4" - "ParallelReductionFactorInPlane": "4" - "PartialFourier": 0.75 - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PercentSampling": "100" - "PhaseEncodingSteps": "145" - "PhaseResolution": "1" - "PixelBandwidth": "650" - "ProcedureStepDescription": "PCY" - "ProtocolName": "T1_MEMPRAGE_GSP_vNavTrk" - "PulseSequenceDetails": "%CustomerSeq%\\tfl_mgh_epinav_ABCD" - "ReceiveCoilActiveElements": "HC1-7;NC1,2" - "ReceiveCoilName": "HeadNeck_64" - "ReconMatrixPE": "192" - "RefLinesPE": "32" - "RepetitionTime": 2.2 - "SAR": 0.035699 - "ScanOptions": "IR\\PFP" - "ScanningSequence": "GR\\IR" - "SequenceName": "tfl3d4_16ns" - "SequenceVariant": "SK\\SP\\MP" - "SeriesDescription": "T1_MEMPRAGE_GSP_vNavTrk RMS" - "SeriesNumber": "12" - "ShimSetting": - - -2143 - - -607 - - -4006 - - 431 - - 10 - - -325 - - -32 - - 64 - "SliceThickness": 1.2 - "SoftwareVersions": "syngo MR E11" - "StationName": "AWP166095" - "TxRefAmp": 228.804 - "WipMemBlock": "Prisma_epi_moco_navigator_ABCD_tfl.prot" + - "metadata": {} "run": "01" "suffix": "T1w" - - "extension": ".nii.gz" - "metadata": - "AcquisitionMatrixPE": "192" - "AcquisitionNumber": "1" - "AcquisitionTime": "16:10:45.105000" - "BaseResolution": "192" - "BodyPartExamined": "BRAIN" - "ConsistencyInfo": "N4_VE11C_LATEST_20160120" - "ConversionSoftware": "dcm2niix" - "ConversionSoftwareVersion": "v1.0.20210317" - "DeviceSerialNumber": "166095" - "DwellTime": 4.0e-06 - "EchoTime": 0.326 - "EchoTrainLength": "199" - "FlipAngle": "120" - "ImageOrientationPatientDICOM": - - -0.0471174 - - 0.933592 - - -0.355227 - - -0.0749997 - - -0.357924 - - -0.930734 - "ImageType": - - "ORIGINAL" - - "PRIMARY" - - "M" - - "ND" - - "NORM" - "ImagingFrequency": 123.261 - "InPlanePhaseEncodingDirectionDICOM": "ROW" - "InstitutionAddress": "Hillhouse Ave. 10,New Haven ,Northeast,US,06519" - "InstitutionName": "Yale University - Dunham Lab. Bldg." - "InstitutionalDepartmentName": "Department" - "MRAcquisitionType": "3D" - "MagneticFieldStrength": "3" - "Manufacturer": "Siemens" - "ManufacturersModelName": "Prisma" - "Modality": "MR" - "ParallelReductionFactorInPlane": "2" - "PartialFourier": "1" - "PatientPosition": "HFS" - "PercentPhaseFOV": "100" - "PercentSampling": "100" - "PhaseEncodingDirection": "i" - "PhaseEncodingSteps": "179" - "PhaseResolution": "1" - "PixelBandwidth": "650" - "ProcedureStepDescription": "PCY" - "ProtocolName": "T2_SPACE_GSP_vNavTrk" - "PulseSequenceDetails": "%CustomerSeq%\\tse_vfl_mgh_epinav_ABCD" - "ReceiveCoilActiveElements": "HC1-7;NC1,2" - "ReceiveCoilName": "HeadNeck_64" - "ReconMatrixPE": "192" - "RefLinesPE": "24" - "RepetitionTime": 2.8 - "SAR": 0.149666 - "ScanOptions": "PFP" - "ScanningSequence": "SE" - "SequenceName": "spc_212ns" - "SequenceVariant": "SK\\SP" - "SeriesDescription": "T2_SPACE_GSP_vNavTrk" - "SeriesNumber": "16" - "ShimSetting": - - -2143 - - -607 - - -4006 - - 431 - - 10 - - -325 - - -32 - - 64 - "SliceThickness": 1.2 - "SoftwareVersions": "syngo MR E11" - "StationName": "AWP166095" - "TxRefAmp": 228.804 - "WipMemBlock": "Prisma_epi_moco_navigator_ABCD_tse_vfl.prot" + - "metadata": {} "run": "01" "suffix": "T2w" - "func": - - "extension": ".json" + "fmap": + - "dir": "ap" + "metadata": {} + "suffix": "epi" + - "dir": "pa" "metadata": {} + "suffix": "epi" + "func": + - "metadata": {} "run": "01" "suffix": "bold" "task": "hammerAP" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "16:45:43.900000" @@ -1638,13 +1334,11 @@ "run": "01" "suffix": "bold" "task": "hammerAP" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "01" "suffix": "bold" "task": "restAP" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "16:14:42.280000" @@ -1803,13 +1497,11 @@ "run": "01" "suffix": "bold" "task": "restAP" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "02" "suffix": "bold" "task": "restAP" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "16:53:2.015000" @@ -1968,13 +1660,11 @@ "run": "02" "suffix": "bold" "task": "restAP" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "01" "suffix": "bold" "task": "restPA" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "16:21:53.715000" @@ -2133,13 +1823,11 @@ "run": "01" "suffix": "bold" "task": "restPA" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "02" "suffix": "bold" "task": "restPA" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "17:00:4.942500" @@ -2294,13 +1982,11 @@ "run": "02" "suffix": "bold" "task": "restPA" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "01" "suffix": "bold" "task": "stroopAP" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "16:29:58.562500" @@ -2459,13 +2145,11 @@ "run": "01" "suffix": "bold" "task": "stroopAP" - - "extension": ".json" - "metadata": {} + - "metadata": {} "run": "01" "suffix": "bold" "task": "stroopPA" - - "extension": ".nii.gz" - "metadata": + - "metadata": "AcquisitionMatrixPE": "104" "AcquisitionNumber": "1" "AcquisitionTime": "16:37:37.630000" diff --git a/src/simbids/data/qsiprep_io_spec.json b/src/simbids/data/qsiprep_io_spec.json new file mode 100644 index 0000000..ec69c6d --- /dev/null +++ b/src/simbids/data/qsiprep_io_spec.json @@ -0,0 +1,39 @@ +{ + "name": "qsiprep", + "entities": [ + { + "name": "datatype", + "pattern": "[/\\\\]+(anat|beh|dwi|eeg|figures|fmap|func|ieeg|meg|micr|perf|pet)[/\\\\]+" + }, + { + "name": "cohort", + "pattern": "(?:^|_)cohort-([0-9]+)", + "dtype": "int" + }, + { + "name": "model", + "pattern": "(?:^|_)model-([a-zA-Z0-9]+)" + }, + { + "name": "statistic", + "pattern": "(?:^|_)stat-([a-zA-Z0-9]+)" + } + ], + "default_path_patterns": [ + "sub-{subject}[/ses-{session}]/{datatype|anat}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_desc-{desc}]_{suffix}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|anat}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}]_from-{from}_to-{to}_mode-{mode|image}_{suffix|xfm}.{extension}", + "sub-{subject}[/ses-{session}]/{datatype|anat}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}]_desc-{desc}_{suffix|mask}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|anat}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}]_label-{label}[_desc-{desc}]_{suffix|probseg}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_desc-{desc}]_{suffix|dwiref}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_desc-{desc}]_{suffix|mask}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_desc-{desc}]_{suffix|dwi}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_desc-{desc}]_{suffix|timeseries}.{extension|tsv}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_desc-{desc}]_{suffix|bvecs}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_model-{model}][_stat-{statistic}][_desc-{desc}]_{suffix|dwimap}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|fmap}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_desc-{desc}]_{suffix|fmapreg}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|fmap}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_space-{space}][_desc-{desc}]_{suffix|biascorr}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{segmentation}][_desc-{desc}]_{suffix}{extension<.html|.svg|.png|.json|.png|.gif>}", + "sub-{subject}[/ses-{session}]/{datatype}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{segmentation}][_desc-{desc}]_{suffix}{extension<.html|.svg|.png|.gif>}", + "[desc-{desc}]_{suffix}.{extension|json}" + ] + } diff --git a/src/simbids/data/qsirecon_io_spec.json b/src/simbids/data/qsirecon_io_spec.json new file mode 100644 index 0000000..5991aa0 --- /dev/null +++ b/src/simbids/data/qsirecon_io_spec.json @@ -0,0 +1,57 @@ +{ + "name": "qsirecon", + "entities": [ + { + "name": "datatype", + "pattern": "[/\\\\]+(anat|beh|dwi|eeg|figures|fmap|func|ieeg|meg|micr|perf|pet)[/\\\\]+" + }, + { + "name": "cohort", + "pattern": "(?:^|_)cohort-([0-9]+)", + "dtype": "int" + }, + { + "name": "seg", + "pattern": "(?:^|_)seg-([a-zA-Z0-9]+)" + }, + { + "name": "dsistudiotemplate", + "pattern": "([a-zA-Z0-9_]+)" + }, + { + "name": "model", + "pattern": "(?:^|_)model-([a-zA-Z0-9]+)" + }, + { + "name": "bundles", + "pattern": "(?:^|_)bundles-([a-zA-Z0-9]+)" + }, + { + "name": "param", + "pattern": "(?:^|_)param-([a-zA-Z0-9]+)" + }, + { + "name": "bundle", + "pattern": "(?:^|_)bundle-([a-zA-Z0-9]+)" + }, + { + "name": "label", + "pattern": "(?:^|_)label-([a-zA-Z0-9]+)" + } + ], + "default_path_patterns": [ + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|tck.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|tsv}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|map.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.fib.gz[.{dsistudiotemplate}].{extension|map.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|nii.gz}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|txt}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|zip}", + "sub-{subject}[/ses-{session}]/{datatype|dwi}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension|mat}", + "sub-{subject}[/ses-{session}]/{datatype}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension}", + "sub-{subject}[/ses-{session}]/{datatype}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension}", + "sub-{subject}[/ses-{session}]/{datatype}/sub-{subject}[_ses-{session}][_acq-{acquisition}][_ce-{ceagent}][_dir-{direction}][_rec-{reconstruction}][_run-{run}][_space-{space}][_cohort-{cohort}][_seg-{seg}][_model-{model}][_bundles-{bundles}][_param-{param}][_bundle-{bundle}][_label-{label}][_desc-{desc}]_{suffix}.{extension}" + ] +} diff --git a/src/simbids/data/text_file.txt b/src/simbids/data/text_file.txt new file mode 100644 index 0000000..799a288 --- /dev/null +++ b/src/simbids/data/text_file.txt @@ -0,0 +1 @@ +Text File \ No newline at end of file diff --git a/src/simbids/interfaces/bids.py b/src/simbids/interfaces/bids.py index 3a6377d..387118d 100644 --- a/src/simbids/interfaces/bids.py +++ b/src/simbids/interfaces/bids.py @@ -7,26 +7,72 @@ from simbids.data import load as load_data -# NOTE: Modified for simbids's purposes -simbids_spec = loads(load_data('io_spec.json').read_text()) -bids_config = Config.load('bids') -deriv_config = Config.load('derivatives') -simbids_entities = {v['name']: v['pattern'] for v in simbids_spec['entities']} -merged_entities = {**bids_config.entities, **deriv_config.entities} -merged_entities = {k: v.pattern for k, v in merged_entities.items()} -merged_entities = {**merged_entities, **simbids_entities} -merged_entities = [{'name': k, 'pattern': v} for k, v in merged_entities.items()] -config_entities = frozenset({e['name'] for e in merged_entities}) +class DerivativesDataSink(BaseDerivativesDataSink): + """Store derivative files. + + A child class of the niworkflows DerivativesDataSink, + using simbids's configuration files. + """ + simbids_spec = loads(load_data('io_spec.json').read_text()) + bids_config = Config.load('bids') + deriv_config = Config.load('derivatives') -class DerivativesDataSink(BaseDerivativesDataSink): + simbids_entities = {v['name']: v['pattern'] for v in simbids_spec['entities']} + merged_entities = {**bids_config.entities, **deriv_config.entities} + merged_entities = {k: v.pattern for k, v in merged_entities.items()} + merged_entities = {**merged_entities, **simbids_entities} + merged_entities = [{'name': k, 'pattern': v} for k, v in merged_entities.items()] + config_entities = frozenset({e['name'] for e in merged_entities}) + out_path_base = '' + _allowed_entities = set(config_entities) + _config_entities = config_entities + _config_entities_dict = merged_entities + _file_patterns = simbids_spec['default_path_patterns'] + + +class QSIPrepDerivativesDataSink(BaseDerivativesDataSink): """Store derivative files. A child class of the niworkflows DerivativesDataSink, using simbids's configuration files. """ + simbids_spec = loads(load_data('qsiprep_io_spec.json').read_text()) + bids_config = Config.load('bids') + deriv_config = Config.load('derivatives') + + simbids_entities = {v['name']: v['pattern'] for v in simbids_spec['entities']} + merged_entities = {**bids_config.entities, **deriv_config.entities} + merged_entities = {k: v.pattern for k, v in merged_entities.items()} + merged_entities = {**merged_entities, **simbids_entities} + merged_entities = [{'name': k, 'pattern': v} for k, v in merged_entities.items()] + config_entities = frozenset({e['name'] for e in merged_entities}) + out_path_base = '' + _allowed_entities = set(config_entities) + _config_entities = config_entities + _config_entities_dict = merged_entities + _file_patterns = simbids_spec['default_path_patterns'] + + +class QSIReconDerivativesDataSink(BaseDerivativesDataSink): + """Store derivative files. + + A child class of the niworkflows DerivativesDataSink, + using simbids's configuration files. + """ + + simbids_spec = loads(load_data('qsirecon_io_spec.json').read_text()) + bids_config = Config.load('bids') + deriv_config = Config.load('derivatives') + + simbids_entities = {v['name']: v['pattern'] for v in simbids_spec['entities']} + merged_entities = {**bids_config.entities, **deriv_config.entities} + merged_entities = {k: v.pattern for k, v in merged_entities.items()} + merged_entities = {**merged_entities, **simbids_entities} + merged_entities = [{'name': k, 'pattern': v} for k, v in merged_entities.items()] + config_entities = frozenset({e['name'] for e in merged_entities}) out_path_base = '' _allowed_entities = set(config_entities) _config_entities = config_entities diff --git a/src/simbids/interfaces/reportlets.py b/src/simbids/interfaces/reportlets.py index 4e25c51..976c229 100644 --- a/src/simbids/interfaces/reportlets.py +++ b/src/simbids/interfaces/reportlets.py @@ -120,21 +120,27 @@ def _generate_segment(self): bold_series = self.inputs.bold if isdefined(self.inputs.bold) else [] bold_series = [s[0] if isinstance(s, list) else s for s in bold_series] - counts = Counter( - BIDS_NAME.search(series).groupdict()['task_id'][5:] for series in bold_series - ) + # Check if we're dealing with DWI or BOLD files + is_dwi = any('dwi' in series.lower() for series in bold_series) tasks = '' - if counts: - header = '\t\t
    ' - footer = '\t\t
' - lines = [ - '\t\t\t
  • Task: {task_id} ({n_runs:d} run{s})
  • '.format( - task_id=task_id, n_runs=n_runs, s='' if n_runs == 1 else 's' - ) - for task_id, n_runs in sorted(counts.items()) - ] - tasks = '\n'.join([header] + lines + [footer]) + if not is_dwi: + counts = Counter( + BIDS_NAME.search(series).groupdict()['task_id'][5:] + for series in bold_series + if BIDS_NAME.search(series).groupdict()['task_id'] is not None + ) + + if counts: + header = '\t\t
      ' + footer = '\t\t
    ' + lines = [ + '\t\t\t
  • Task: {task_id} ({n_runs:d} run{s})
  • '.format( + task_id=task_id, n_runs=n_runs, s='' if n_runs == 1 else 's' + ) + for task_id, n_runs in sorted(counts.items()) + ] + tasks = '\n'.join([header] + lines + [footer]) return SUBJECT_TEMPLATE.format( subject_id=self.inputs.subject_id, diff --git a/src/simbids/utils/bids.py b/src/simbids/utils/bids.py index a9eaf5e..c7c7280 100644 --- a/src/simbids/utils/bids.py +++ b/src/simbids/utils/bids.py @@ -26,12 +26,230 @@ import json import os +from collections import defaultdict from copy import deepcopy from importlib import resources from pathlib import Path import datalad.api as dlapi import yaml +from bids.layout import BIDSLayout, Query +from niworkflows.utils.spaces import SpatialReferences + +from simbids.data import load as load_data + + +def collect_derivatives( + raw_dataset: Path | BIDSLayout | None, + derivatives_dataset: Path | BIDSLayout | None, + entities: dict | None, + fieldmap_id: str | None, + spec: dict | None = None, + patterns: list[str] | None = None, + allow_multiple: bool = False, + spaces: SpatialReferences | None = None, + bids_app: str | None = None, +) -> dict: + """Gather existing derivatives and compose a cache. + + TODO: Ingress 'spaces' and search for BOLD+mask in the spaces *or* xfms. + + Parameters + ---------- + raw_dataset : Path | BIDSLayout | None + Path to the raw dataset or a BIDSLayout instance. + derivatives_dataset : Path | BIDSLayout + Path to the derivatives dataset or a BIDSLayout instance. + entities : dict + Dictionary of entities to use for filtering. + fieldmap_id : str | None + Fieldmap ID to use for filtering. + spec : dict | None + Specification dictionary. + patterns : list[str] | None + List of patterns to use for filtering. + allow_multiple : bool + Allow multiple files to be returned for a given query. + spaces : SpatialReferences | None + Spatial references to select for. + + Returns + ------- + derivs_cache : dict + Dictionary with keys corresponding to the derivatives and values + corresponding to the file paths. + """ + if not entities: + entities = {} + + if spec is None or patterns is None: + if bids_app == 'qsirecon': + _spec = json.loads(load_data.readable('io_spec_qsirecon.json').read_text()) + elif bids_app == 'fmriprep': + _spec = json.loads(load_data.readable('io_spec_fmriprep.json').read_text()) + else: + _spec = json.loads(load_data.readable('io_spec.json').read_text()) + + if spec is None: + spec = _spec['queries'] + + if patterns is None: + patterns = _spec['patterns'] + + # Search for derivatives data + derivs_cache = defaultdict(list, {}) + if derivatives_dataset is not None: + layout = derivatives_dataset + if isinstance(layout, Path): + layout = BIDSLayout( + layout, + config=['bids', 'derivatives'], + validate=False, + ) + + for k, q in spec['derivatives'].items(): + if k.startswith('anat'): + # Allow anatomical derivatives at session level or subject level + query = { + **{'subject': entities['subject'], 'session': [entities.get('session'), None]}, + **q, + } + else: + # Combine entities with query. Query values override file entities. + query = {**entities, **q} + + item = layout.get(return_type='filename', **query) + if k.startswith('anat') and not item: + # If the anatomical derivative is not found, try to find it + # across sessions + query = {**{'subject': entities['subject'], 'session': [Query.ANY]}, **q} + item = layout.get(return_type='filename', **query) + + if not item: + derivs_cache[k] = None + elif not allow_multiple and len(item) > 1 and k.startswith('anat'): + # Raise an error if multiple derivatives are found from different sessions + item_sessions = [layout.get_file(f).entities['session'] for f in item] + if len(set(item_sessions)) > 1: + raise ValueError(f'Multiple anatomical derivatives found for {k}: {item}') + + # Anatomical derivatives are allowed to have multiple files (e.g., T1w and T2w) + # but we just grab the first one + derivs_cache[k] = item[0] + elif not allow_multiple and len(item) > 1: + raise ValueError(f'Multiple files found for {k}: {item}') + else: + derivs_cache[k] = item[0] if len(item) == 1 else item + + for k, q in spec['transforms'].items(): + if k.startswith('anat'): + # Allow anatomical derivatives at session level or subject level + query = { + **{'subject': entities['subject'], 'session': [entities.get('session'), None]}, + **q, + } + else: + # Combine entities with query. Query values override file entities. + query = {**entities, **q} + + if k == 'boldref2fmap': + query['to'] = fieldmap_id + + item = layout.get(return_type='filename', **query) + if k.startswith('anat') and not item: + # If the anatomical derivative is not found, try to find it + # across sessions + query = {**{'subject': entities['subject'], 'session': [Query.ANY]}, **q} + item = layout.get(return_type='filename', **query) + + if not item: + derivs_cache[k] = None + elif not allow_multiple and len(item) > 1 and k.startswith('anat'): + # Anatomical derivatives are allowed to have multiple files (e.g., T1w and T2w) + # but we just grab the first one + derivs_cache[k] = item[0] + elif not allow_multiple and len(item) > 1: + raise ValueError(f'Multiple files found for {k}: {item}') + else: + derivs_cache[k] = item[0] if len(item) == 1 else item + + # Search for requested output spaces + if spaces is not None: + # Put the output-space files/transforms in lists so they can be parallelized with + # template_iterator_wf. + spaces_found, bold_outputspaces, bold_mask_outputspaces = [], [], [] + for space in spaces.references: + # First try to find processed BOLD+mask files in the requested space + bold_query = {**entities, **spec['derivatives']['bold_mni152nlin6asym']} + bold_query['space'] = space.space + bold_query = {**bold_query, **space.spec} + bold_item = layout.get(return_type='filename', **bold_query) + bold_outputspaces.append(bold_item[0] if bold_item else None) + + mask_query = {**entities, **spec['derivatives']['bold_mask_mni152nlin6asym']} + mask_query['space'] = space.space + mask_query = {**mask_query, **space.spec} + mask_item = layout.get(return_type='filename', **mask_query) + bold_mask_outputspaces.append(mask_item[0] if mask_item else None) + + spaces_found.append(bool(bold_item) and bool(mask_item)) + + if all(spaces_found): + derivs_cache['bold_outputspaces'] = bold_outputspaces + derivs_cache['bold_mask_outputspaces'] = bold_mask_outputspaces + else: + # The requested spaces were not found, try to find transforms + print( + 'Not all requested output spaces were found. ' + 'We will try to find transforms to these spaces and apply them to the BOLD data.', + flush=True, + ) + + spaces_found, anat2outputspaces_xfm = [], [] + for space in spaces.references: + base_file = derivs_cache['anat2mni152nlin6asym'] + base_file = layout.get_file(base_file) + # Now try to find transform to the requested space, using the + # entities from the transform to MNI152NLin6Asym + anat2space_query = base_file.entities + anat2space_query['to'] = space.space + item = layout.get(return_type='filename', **anat2space_query) + anat2outputspaces_xfm.append(item[0] if item else None) + spaces_found.append(bool(item)) + + if all(spaces_found): + derivs_cache['anat2outputspaces_xfm'] = anat2outputspaces_xfm + else: + missing_spaces = ', '.join( + [ + s.space + for s, found in zip(spaces.references, spaces_found, strict=False) + if not found + ] + ) + raise ValueError( + f'Transforms to the following requested spaces not found: {missing_spaces}.' + ) + + # Search for raw BOLD data + if not derivs_cache and raw_dataset is not None: + if isinstance(raw_dataset, Path): + raw_layout = BIDSLayout(raw_dataset, config=['bids'], validate=False) + else: + raw_layout = raw_dataset + + for k, q in spec['raw'].items(): + # Combine entities with query. Query values override file entities. + query = {**entities, **q} + item = raw_layout.get(return_type='filename', **query) + if not item: + derivs_cache[k] = None + elif not allow_multiple and len(item) > 1: + raise ValueError(f'Multiple files found for {k}: {item}') + else: + derivs_cache[k] = item[0] if len(item) == 1 else item + + return derivs_cache def generate_bids_skeleton(target_path, bids_config): @@ -155,14 +373,16 @@ def simulate_dataset(output_dir, yaml_file, fill_files=False, datalad_init=False # Load the YAML file from the package resources if it exists there, # otherwise load it from the local file system - if resources.files('simbids.data.bids_mri').joinpath(yaml_file).exists(): - with resources.files('simbids.data.bids_mri').joinpath(yaml_file).open() as f: - bids_skeleton = yaml.safe_load(f) - elif Path(yaml_file).exists(): - with open(yaml_file) as f: - bids_skeleton = yaml.safe_load(f) - else: - raise FileNotFoundError(f'YAML file {yaml_file} not found') + with resources.path('simbids.data.bids_mri', '') as bids_mri_path: + yaml_path = bids_mri_path / yaml_file + if yaml_path.exists(): + with open(yaml_path) as f: + bids_skeleton = yaml.safe_load(f) + elif Path(yaml_file).exists(): + with open(yaml_file) as f: + bids_skeleton = yaml.safe_load(f) + else: + raise FileNotFoundError(f'YAML file {yaml_file} not found') # Create the qsiprep directory first generate_bids_skeleton(dataset_dir, bids_skeleton) diff --git a/src/simbids/utils/debug.py b/src/simbids/utils/debug.py new file mode 100644 index 0000000..d5ed721 --- /dev/null +++ b/src/simbids/utils/debug.py @@ -0,0 +1,82 @@ +# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- +# vi: set ft=python sts=4 ts=4 sw=4 et: +# +# ATTRIBUTION NOTICE FROM SOURCE WE COPIED IT FROM: +# +# Copyright The NiPreps Developers +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# We support and encourage derived works from this project, please read +# about our expectations at +# +# https://www.nipreps.org/community/licensing/ +# +# STATEMENT OF CHANGES: This file is derived from sources licensed under the Apache-2.0 terms, +# and uses the following portion of the original code: +# https://github.com/dandi/dandi-cli/blob/da3b7a726c4a352dfb53a0c6bee59e660de827e6/dandi/utils.py#L49-L82 +# +# +# ORIGINAL WORK'S ATTRIBUTION NOTICE: +# +# Copyright DANDI Client Developers +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import sys + + +def is_interactive(): + """Return True if all in/outs are tty""" + # TODO: check on windows if hasattr check would work correctly and add value: + # + return sys.stdin.isatty() and sys.stdout.isatty() and sys.stderr.isatty() + + +def setup_exceptionhook(ipython=False): + """Overloads default sys.excepthook with our exceptionhook handler. + If interactive, our exceptionhook handler will invoke + pdb.post_mortem; if not interactive, then invokes default handler. + """ + + def _pdb_excepthook(_type, value, tb): + import traceback + + traceback.print_exception(_type, value, tb) + print() + if is_interactive(): + # Import pdb only when needed + import pdb + + pdb.post_mortem(tb) + + if ipython: + from IPython.core import ultratb + + sys.excepthook = ultratb.FormattedTB( + mode='Verbose', + # color_scheme='Linux', + call_pdb=is_interactive(), + ) + else: + sys.excepthook = _pdb_excepthook diff --git a/src/simbids/utils/utils.py b/src/simbids/utils/utils.py index 4a8a9df..3981f71 100644 --- a/src/simbids/utils/utils.py +++ b/src/simbids/utils/utils.py @@ -29,6 +29,182 @@ LGR = logging.getLogger(__name__) +# Define ordered entity lists for each modality +# These lists define the order in which entities should appear in the YAML output +# Using BIDS entity keys (e.g., 'ses' instead of 'session') +DWI_ENTITIES = [ + 'sub', + 'ses', + 'acq', + 'dir', + 'run', + 'rec', + 'mod', + 'echo', + 'flip', + 'inv', + 'mt', + 'part', + 'ce', + 'recording', + 'proc', + 'space', + 'res', + 'den', + 'desc', + 'label', + 'from', + 'to', + 'mode', + 'cohort', + 'res', +] + +FMAP_ENTITIES = [ + 'sub', + 'ses', + 'acq', + 'dir', + 'run', + 'rec', + 'mod', + 'echo', + 'flip', + 'inv', + 'mt', + 'part', + 'ce', + 'recording', + 'proc', + 'space', + 'res', + 'den', + 'desc', + 'label', + 'from', + 'to', + 'mode', + 'cohort', + 'res', +] + +ANAT_ENTITIES = [ + 'sub', + 'ses', + 'acq', + 'ce', + 'rec', + 'run', + 'mod', + 'echo', + 'flip', + 'inv', + 'mt', + 'part', + 'proc', + 'space', + 'res', + 'den', + 'desc', + 'label', + 'from', + 'to', + 'mode', + 'cohort', + 'res', +] + +FUNC_ENTITIES = [ + 'sub', + 'ses', + 'task', + 'acq', + 'ce', + 'rec', + 'dir', + 'run', + 'echo', + 'recording', + 'part', + 'proc', + 'space', + 'res', + 'den', + 'desc', + 'label', + 'from', + 'to', + 'mode', + 'cohort', + 'res', +] + +PERF_ENTITIES = [ + 'sub', + 'ses', + 'acq', + 'rec', + 'run', + 'mod', + 'echo', + 'flip', + 'inv', + 'mt', + 'part', + 'proc', + 'space', + 'res', + 'den', + 'desc', + 'label', + 'from', + 'to', + 'mode', + 'cohort', + 'res', +] + +# Mapping from full entity names to BIDS entity keys +ENTITY_KEY_MAP = { + 'subject': 'sub', + 'session': 'ses', + 'acquisition': 'acq', + 'direction': 'dir', + 'reconstruction': 'rec', + 'modality': 'mod', + 'echo': 'echo', + 'flip': 'flip', + 'inversion': 'inv', + 'magnetization_transfer': 'mt', + 'part': 'part', + 'contrast_enhancement': 'ce', + 'recording': 'recording', + 'processing': 'proc', + 'space': 'space', + 'resolution': 'res', + 'denoising': 'den', + 'description': 'desc', + 'label': 'label', + 'from': 'from', + 'to': 'to', + 'mode': 'mode', + 'cohort': 'cohort', + 'res': 'res', +} + +# Reverse mapping from BIDS entity keys to full names +REVERSE_ENTITY_KEY_MAP = {v: k for k, v in ENTITY_KEY_MAP.items()} + + +def _convert_to_bids_key(key): + """Convert full entity name to BIDS entity key.""" + return ENTITY_KEY_MAP.get(key, key) + + +def _convert_from_bids_key(key): + """Convert BIDS entity key to full entity name.""" + return REVERSE_ENTITY_KEY_MAP.get(key, key) + def _get_wf_name(bold_fname, prefix): """Derive the workflow name for supplied BOLD file. @@ -176,10 +352,11 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions): dwi_sidecar = _sanitize_metadata(dwi_file.get_metadata()) entities = parse_file_entities(Path(dwi_file).name) dwi_entry = {'suffix': 'dwi', 'metadata': dwi_sidecar} - # Add all entities except subject and session - for key, value in entities.items(): - if key not in ['subject', 'session', 'suffix']: - dwi_entry[key] = _sanitize_value(value) + for key in DWI_ENTITIES: + full_key = _convert_from_bids_key(key) + # Skip session as it's handled separately + if full_key in entities and full_key != 'session': + dwi_entry[key] = _sanitize_value(entities[full_key]) skeleton[subject]['dwi'].append(dwi_entry) # Get functional data @@ -190,11 +367,44 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions): func_sidecar = _sanitize_metadata(func_file.get_metadata()) entities = parse_file_entities(Path(func_file).name) func_entry = {'suffix': 'bold', 'metadata': func_sidecar} - # Add all entities except subject and session - for key, value in entities.items(): - if key not in ['subject', 'session', 'suffix']: - func_entry[key] = _sanitize_value(value) + for key in FUNC_ENTITIES: + full_key = _convert_from_bids_key(key) + # Skip session as it's handled separately + if full_key in entities and full_key != 'session': + func_entry[key] = _sanitize_value(entities[full_key]) skeleton[subject]['func'].append(func_entry) + + # Add fmap entries + fmap_entries = [] + for fmap_file in layout.get(subject=subject, suffix='epi', extension='.json'): + fmap_sidecar = _sanitize_metadata(fmap_file.get_metadata()) + entities = parse_file_entities(Path(fmap_file).name) + fmap_entry = {'suffix': 'epi', 'metadata': fmap_sidecar} + for key in FMAP_ENTITIES: + full_key = _convert_from_bids_key(key) + if ( + full_key in entities and full_key != 'session' + ): # Skip session as it's handled separately + fmap_entry[key] = _sanitize_value(entities[full_key]) + fmap_entries.append(fmap_entry) + skeleton[subject]['fmap'] = fmap_entries + + # Add anat entries + anat_entries = [] + for anat_file in layout.get( + subject=subject, suffix=['T1w', 'T2w', 'FLAIR', 'PDw'], extension='.json' + ): + anat_sidecar = _sanitize_metadata(anat_file.get_metadata()) + entities = parse_file_entities(Path(anat_file).name) + anat_entry = {'suffix': entities.get('suffix', ''), 'metadata': anat_sidecar} + for key in ANAT_ENTITIES: + full_key = _convert_from_bids_key(key) + if ( + full_key in entities and full_key != 'session' + ): # Skip session as it's handled separately + anat_entry[key] = _sanitize_value(entities[full_key]) + anat_entries.append(anat_entry) + skeleton[subject]['anat'] = anat_entries else: # With sessions case - similar to multi_ses_qsiprep.yaml skeleton[subject] = [] @@ -230,10 +440,11 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions): dwi_sidecar = _sanitize_metadata(dwi_file.get_metadata()) entities = parse_file_entities(Path(dwi_file).name) dwi_entry = {'suffix': 'dwi', 'metadata': dwi_sidecar} - # Add all entities except subject and session - for key, value in entities.items(): - if key not in ['subject', 'session', 'suffix']: - dwi_entry[key] = _sanitize_value(value) + for key in DWI_ENTITIES: + full_key = _convert_from_bids_key(key) + # Skip session as it's handled separately + if full_key in entities and full_key != 'session': + dwi_entry[key] = _sanitize_value(entities[full_key]) session_data['dwi'].append(dwi_entry) # Get functional data for this session @@ -246,12 +457,48 @@ def create_skeleton_from_bids(bids_dir, n_subjects, n_sessions): func_sidecar = _sanitize_metadata(func_file.get_metadata()) entities = parse_file_entities(Path(func_file).name) func_entry = {'suffix': 'bold', 'metadata': func_sidecar} - # Add all entities except subject and session - for key, value in entities.items(): - if key not in ['subject', 'session', 'suffix']: - func_entry[key] = _sanitize_value(value) + for key in FUNC_ENTITIES: + full_key = _convert_from_bids_key(key) + # Skip session as it's handled separately + if full_key in entities and full_key != 'session': + func_entry[key] = _sanitize_value(entities[full_key]) session_data['func'].append(func_entry) + # Add fmap entries + fmap_entries = [] + for fmap_file in layout.get( + subject=subject, session=session, suffix='epi', extension='.json' + ): + fmap_sidecar = _sanitize_metadata(fmap_file.get_metadata()) + entities = parse_file_entities(Path(fmap_file).name) + fmap_entry = {'suffix': 'epi', 'metadata': fmap_sidecar} + for key in FMAP_ENTITIES: + full_key = _convert_from_bids_key(key) + # Skip session as it's handled separately + if full_key in entities and full_key != 'session': + fmap_entry[key] = _sanitize_value(entities[full_key]) + fmap_entries.append(fmap_entry) + session_data['fmap'] = fmap_entries + + # Add anat entries + anat_entries = [] + for anat_file in layout.get( + subject=subject, + session=session, + suffix=['T1w', 'T2w', 'FLAIR', 'PDw'], + extension='.json', + ): + anat_sidecar = _sanitize_metadata(anat_file.get_metadata()) + entities = parse_file_entities(Path(anat_file).name) + anat_entry = {'suffix': entities.get('suffix', ''), 'metadata': anat_sidecar} + for key in ANAT_ENTITIES: + full_key = _convert_from_bids_key(key) + # Skip session as it's handled separately + if full_key in entities and full_key != 'session': + anat_entry[key] = _sanitize_value(entities[full_key]) + anat_entries.append(anat_entry) + session_data['anat'] = anat_entries + skeleton[subject].append(session_data) return skeleton @@ -286,3 +533,14 @@ def _convert_to_serializable(obj): if isinstance(obj, dict): return {k: _convert_to_serializable(v) for k, v in obj.items()} return str(obj) + + +# configs = {} +# ds_paths = ("ds002278", "ds004146", "ds005237") + +# for ds_path in ds_paths: +# configs[ds_path] = create_skeleton_from_bids(Path("..") / ds_path, 2, 3) +# configs[ds_path] = _convert_to_serializable(configs[ds_path]) + +# with open(f"src/simbids/data/bids_mri/{ds_path}_configs.yaml", "w") as f: +# yaml.dump(configs[ds_path], f, Dumper=BIDSDumper) diff --git a/src/simbids/workflows/base.py b/src/simbids/workflows/base.py index ce66cd5..42ac7fa 100644 --- a/src/simbids/workflows/base.py +++ b/src/simbids/workflows/base.py @@ -30,17 +30,11 @@ """ -import os -import sys -from collections import defaultdict from copy import deepcopy -import yaml -from nipype.pipeline import engine as pe from packaging.version import Version from simbids import config -from simbids.utils.utils import _get_wf_name, update_dict def init_simbids_wf(): @@ -111,306 +105,14 @@ def init_single_subject_wf(subject_id: str): subject_id : :obj:`str` Subject label for this single-subject workflow. """ - from bids.utils import listify - from niworkflows.engine.workflows import LiterateWorkflow as Workflow - from niworkflows.interfaces.bids import BIDSInfo - - from simbids.interfaces.bids import DerivativesDataSink - from simbids.interfaces.reportlets import AboutSummary, SubjectSummary - from simbids.utils.bids import collect_derivatives - - spaces = config.workflow.spaces - - workflow = Workflow(name=f'sub_{subject_id}_wf') - workflow.__desc__ = f""" -Results included in this manuscript come from postprocessing -performed using *SimBIDS* {config.environment.version}, -which is based on *Nipype* {config.environment.nipype_version} -(@nipype1; @nipype2; RRID:SCR_002502). - -""" - workflow.__postdesc__ = """ - -For more details of the pipeline, see [the section corresponding -to workflows in *SimBIDS*'s documentation]\ -(https://simbids.readthedocs.io/en/latest/workflows.html). - - -### Copyright Waiver -The above boilerplate text was automatically generated by SimBIDS -with the express intention that users should copy and paste this -text into their manuscripts *unchanged*. -It is released under the -[CC0](https://creativecommons.org/publicdomain/zero/1.0/) license. + if config.workflow.bids_app == 'fmripost': + from simbids.workflows.xcp_d.xcp_d import init_single_subject_fmripost_wf -### References + return init_single_subject_fmripost_wf(subject_id) + elif config.workflow.bids_app == 'qsiprep': + from simbids.workflows.qsiprep import init_single_subject_qsiprep_wf -""" - entities = config.execution.bids_filters or {} - entities['subject'] = subject_id - - if config.execution.derivatives: - # Raw dataset + derivatives dataset - config.loggers.workflow.info('Raw+derivatives workflow mode enabled') - # Just build a list of BOLD files right now - subject_data = collect_derivatives( - raw_dataset=config.execution.layout, - derivatives_dataset=None, - entities=entities, - fieldmap_id=None, - allow_multiple=True, - spaces=None, - ) - subject_data['bold'] = listify(subject_data['bold_raw']) + return init_single_subject_qsiprep_wf(subject_id) else: - # Derivatives dataset only - config.loggers.workflow.info('Derivatives-only workflow mode enabled') - # Just build a list of BOLD files right now - subject_data = collect_derivatives( - raw_dataset=None, - derivatives_dataset=config.execution.layout, - entities=entities, - fieldmap_id=None, - allow_multiple=True, - spaces=None, - ) - # Patch standard-space BOLD files into 'bold' key - subject_data['bold'] = listify(subject_data['bold_mni152nlin6asym']) - - # Make sure we always go through these two checks - if not subject_data['bold']: - task_id = config.execution.task_id - raise RuntimeError( - f'No BOLD images found for participant {subject_id} and ' - f'task {task_id if task_id else ""}. ' - 'All workflows require BOLD images. ' - f'Please check your BIDS filters: {config.execution.bids_filters}.' - ) - - config.loggers.workflow.info( - f'Collected subject data:\n{yaml.dump(subject_data, default_flow_style=False, indent=4)}', - ) - - bids_info = pe.Node( - BIDSInfo( - bids_dir=config.execution.bids_dir, - bids_validate=False, - in_file=subject_data['bold'][0], - ), - name='bids_info', - ) - - summary = pe.Node( - SubjectSummary( - bold=subject_data['bold'], - std_spaces=spaces.get_spaces(nonstandard=False), - nstd_spaces=spaces.get_spaces(standard=False), - ), - name='summary', - run_without_submitting=True, - ) - workflow.connect([(bids_info, summary, [('subject', 'subject_id')])]) - - about = pe.Node( - AboutSummary(version=config.environment.version, command=' '.join(sys.argv)), - name='about', - run_without_submitting=True, - ) - - ds_report_summary = pe.Node( - DerivativesDataSink( - source_file=subject_data['bold'][0], - base_directory=config.execution.output_dir, - desc='summary', - datatype='figures', - ), - name='ds_report_summary', - run_without_submitting=True, - ) - workflow.connect([(summary, ds_report_summary, [('out_report', 'in_file')])]) - - ds_report_about = pe.Node( - DerivativesDataSink( - source_file=subject_data['bold'][0], - base_directory=config.execution.output_dir, - desc='about', - datatype='figures', - ), - name='ds_report_about', - run_without_submitting=True, - ) - workflow.connect([(about, ds_report_about, [('out_report', 'in_file')])]) - - # Append the functional section to the existing anatomical excerpt - # That way we do not need to stream down the number of bold datasets - func_pre_desc = f""" -Functional data postprocessing - -: For each of the {len(subject_data['bold'])} BOLD runs found per subject -(across all tasks and sessions), the following postprocessing was performed. -""" - workflow.__desc__ += func_pre_desc - - for bold_file in subject_data['bold']: - single_run_wf = init_single_run_wf(bold_file) - workflow.add_nodes([single_run_wf]) - - return clean_datasinks(workflow) - - -def init_single_run_wf(bold_file): - """Set up a single-run workflow for SimBIDS.""" - from niworkflows.engine.workflows import LiterateWorkflow as Workflow - - from simbids.utils.bids import collect_derivatives, extract_entities - - spaces = config.workflow.spaces - - workflow = Workflow(name=_get_wf_name(bold_file, 'single_run')) - workflow.__desc__ = '' - - entities = extract_entities(bold_file) - - # Attempt to extract the associated fmap ID - fmapid = None - all_fmapids = config.execution.layout.get_fmapids( - subject=entities['subject'], - session=entities.get('session', None), - ) - if all_fmapids: - fmap_file = config.execution.layout.get_nearest( - bold_file, - to=all_fmapids, - suffix='xfm', - extension='.txt', - strict=False, - **{'from': 'boldref'}, - ) - fmapid = config.execution.layout.get_file(fmap_file).entities['to'] - - functional_cache = defaultdict(list, {}) - if config.execution.derivatives: - # Collect native-space derivatives and transforms - functional_cache = collect_derivatives( - raw_dataset=config.execution.layout, - derivatives_dataset=None, - entities=entities, - fieldmap_id=fmapid, - allow_multiple=False, - spaces=None, - ) - for deriv_dir in config.execution.derivatives.values(): - functional_cache = update_dict( - functional_cache, - collect_derivatives( - raw_dataset=None, - derivatives_dataset=deriv_dir, - entities=entities, - fieldmap_id=fmapid, - allow_multiple=False, - spaces=spaces, - ), - ) - - if not functional_cache['bold_confounds']: - if config.workflow.dummy_scans is None: - raise ValueError( - 'No confounds detected. ' - 'Automatical dummy scan detection cannot be performed. ' - 'Please set the `--dummy-scans` flag explicitly.' - ) - - # TODO: Calculate motion parameters from motion correction transform - raise ValueError('No confounds detected.') - - else: - # Collect MNI152NLin6Asym:res-2 derivatives - # Only derivatives dataset was passed in, so we expected standard-space derivatives - functional_cache.update( - collect_derivatives( - raw_dataset=None, - derivatives_dataset=config.execution.layout, - entities=entities, - fieldmap_id=fmapid, - allow_multiple=False, - spaces=spaces, - ), - ) - - config.loggers.workflow.info( - ( - f'Collected run data for {os.path.basename(bold_file)}:\n' - f'{yaml.dump(functional_cache, default_flow_style=False, indent=4)}' - ), - ) - - if config.workflow.dummy_scans is not None: - skip_vols = config.workflow.dummy_scans - else: - if not functional_cache['bold_confounds']: - raise ValueError( - 'No confounds detected. ' - 'Automatical dummy scan detection cannot be performed. ' - 'Please set the `--dummy-scans` flag explicitly.' - ) - skip_vols = get_nss(functional_cache['bold_confounds']) - - print(skip_vols) # just to circumvent flake8 warning - - # Fill in datasinks seen so far - for node in workflow.list_node_names(): - if node.split('.')[-1].startswith('ds_'): - workflow.get_node(node).inputs.base_directory = config.execution.output_dir - workflow.get_node(node).inputs.source_file = bold_file - - return workflow - - -def _prefix(subid): - return subid if subid.startswith('sub-') else f'sub-{subid}' - - -def clean_datasinks(workflow: pe.Workflow) -> pe.Workflow: - """Overwrite ``out_path_base`` of DataSinks.""" - for node in workflow.list_node_names(): - if node.split('.')[-1].startswith('ds_'): - workflow.get_node(node).interface.out_path_base = '' - return workflow - - -def get_nss(confounds_file): - """Get number of non-steady state volumes. - - Parameters - ---------- - confounds_file : :obj:`str` - Path to the confounds file. - - Returns - ------- - :obj:`int` - Number of non-steady state volumes. - - Notes - ----- - This function assumes that all non-steady state volumes are contiguous, - and that the non-steady state outlier columns are named `non_steady_state_outlier*`. - """ - import numpy as np - import pandas as pd - - df = pd.read_table(confounds_file) - - nss_cols = [c for c in df.columns if c.startswith('non_steady_state_outlier')] - - dummy_scans = 0 - if nss_cols: - initial_volumes_df = df[nss_cols] - dummy_scans = np.any(initial_volumes_df.to_numpy(), axis=1) - dummy_scans = np.where(dummy_scans)[0] - - # reasonably assumes all NSS volumes are contiguous - dummy_scans = int(dummy_scans[-1] + 1) - - return dummy_scans + raise ValueError(f'Unknown application: {config.workflow.simulated_app}') diff --git a/src/simbids/workflows/qsiprep/__init__.py b/src/simbids/workflows/qsiprep/__init__.py new file mode 100644 index 0000000..833d0bf --- /dev/null +++ b/src/simbids/workflows/qsiprep/__init__.py @@ -0,0 +1,3 @@ +from .qsiprep import init_single_subject_qsiprep_wf + +__all__ = ['init_single_subject_qsiprep_wf'] diff --git a/src/simbids/workflows/qsiprep/qsiprep.py b/src/simbids/workflows/qsiprep/qsiprep.py new file mode 100644 index 0000000..665a45b --- /dev/null +++ b/src/simbids/workflows/qsiprep/qsiprep.py @@ -0,0 +1,449 @@ +# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- +# vi: set ft=python sts=4 ts=4 sw=4 et: +# +# Copyright 2024 The NiPreps Developers +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# We support and encourage derived works from this project, please read +# about our expectations at +# +# https://www.nipreps.org/community/licensing/ +# +""" +SimBIDS workflows +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autofunction:: init_simbids_wf +.. autofunction:: init_single_subject_wf +.. autofunction:: init_single_run_wf + +""" + +import sys +from importlib import resources + +import nipype.pipeline.engine as pe +import yaml +from niworkflows.engine.workflows import LiterateWorkflow as Workflow +from niworkflows.interfaces.bids import BIDSInfo + +from simbids import config +from simbids.interfaces.bids import QSIPrepDerivativesDataSink as DerivativesDataSink +from simbids.interfaces.reportlets import AboutSummary, SubjectSummary +from simbids.utils.utils import _get_wf_name + + +def collect_data(layout, participant_label, session_id=None, filters=None): + """Use pybids to retrieve the input data for a given participant.""" + + from bids.layout import Query + + queries = { + 'fmap': {'datatype': 'fmap'}, + 'sbref': {'datatype': 'func', 'suffix': 'sbref'}, + 'flair': {'datatype': 'anat', 'suffix': 'FLAIR'}, + 't2w': {'datatype': 'anat', 'suffix': 'T2w'}, + 't1w': {'datatype': 'anat', 'suffix': 'T1w'}, + 'roi': {'datatype': 'anat', 'suffix': 'roi'}, + 'dwi': {'datatype': 'dwi', 'suffix': 'dwi'}, + } + bids_filters = filters or {} + for acq in queries.keys(): + entities = bids_filters.get(acq, {}) + + if ('session' in entities.keys()) and (session_id is not None): + config.loggers.workflow.warning( + 'BIDS filter file value for session may conflict with values specified ' + 'on the command line' + ) + queries[acq]['session'] = session_id or Query.OPTIONAL + queries[acq].update(entities) + + subj_data = { + dtype: sorted( + layout.get( + return_type='file', + subject=participant_label, + extension=['nii', 'nii.gz'], + **query, + ) + ) + for dtype, query in queries.items() + } + + config.loggers.workflow.log( + 25, + f'Collected data:\n{yaml.dump(subj_data, default_flow_style=False, indent=4)}', + ) + + return subj_data + + +def init_single_subject_qsiprep_wf(subject_id: str): + """Organize the postprocessing pipeline for a single subject.""" + + workflow = Workflow(name=f'sub_{subject_id}_wf') + workflow.__desc__ = f""" +Results included in this manuscript come from postprocessing +performed using *SimBIDS* {config.environment.version}, +which is based on *Nipype* {config.environment.nipype_version} +(@nipype1; @nipype2; RRID:SCR_002502). + +""" + workflow.__postdesc__ = """ + +For more details of the pipeline, see [the section corresponding +to workflows in *SimBIDS*'s documentation]\ +(https://simbids.readthedocs.io/en/latest/workflows.html). + + +### Copyright Waiver + +The above boilerplate text was automatically generated by SimBIDS +with the express intention that users should copy and paste this +text into their manuscripts *unchanged*. +It is released under the +[CC0](https://creativecommons.org/publicdomain/zero/1.0/) license. + +### References + +""" + spaces = config.workflow.spaces + subject_data = collect_data(config.execution.layout, subject_id) + # Make sure we always go through these two checks + if not subject_data['dwi']: + raise RuntimeError( + f'No DWI images found for participant {subject_id}. ' + f'Please check your BIDS filters: {config.execution.bids_filters}.' + ) + + config.loggers.workflow.info( + f'Collected subject data:\n{yaml.dump(subject_data, default_flow_style=False, indent=4)}', + ) + + bids_info = pe.Node( + BIDSInfo( + bids_dir=config.execution.bids_dir, + bids_validate=False, + in_file=subject_data['dwi'][0], + ), + name='bids_info', + ) + + summary = pe.Node( + SubjectSummary( + bold=subject_data['dwi'], + std_spaces=spaces.get_spaces(nonstandard=False), + nstd_spaces=spaces.get_spaces(standard=False), + ), + name='summary', + run_without_submitting=True, + ) + workflow.connect([(bids_info, summary, [('subject', 'subject_id')])]) + + about = pe.Node( + AboutSummary(version=config.environment.version, command=' '.join(sys.argv)), + name='about', + run_without_submitting=True, + ) + + ds_report_summary = pe.Node( + DerivativesDataSink( + source_file=subject_data['dwi'][0], + base_directory=config.execution.output_dir, + desc='summary', + datatype='figures', + ), + name='ds_report_summary', + run_without_submitting=True, + ) + workflow.connect([(summary, ds_report_summary, [('out_report', 'in_file')])]) + + ds_report_about = pe.Node( + DerivativesDataSink( + source_file=subject_data['dwi'][0], + base_directory=config.execution.output_dir, + desc='about', + datatype='figures', + ), + name='ds_report_about', + run_without_submitting=True, + ) + workflow.connect([(about, ds_report_about, [('out_report', 'in_file')])]) + + # Append the functional section to the existing anatomical excerpt + # That way we do not need to stream down the number of bold datasets + dwi_pre_desc = f""" +dMRI data postprocessing + +: For each of the {len(subject_data['dwi'])} DWI runs found per subject +(across all sessions), these files were copied into the output directory. +""" + workflow.__desc__ += dwi_pre_desc + + text_file = resources.files('simbids').joinpath('data/text_file.txt') + + for dwi_file in subject_data['dwi']: + workflow.add_nodes( + [ + pe.Node( + DerivativesDataSink( + source_file=dwi_file, + in_file=dwi_file, + base_directory=config.execution.output_dir, + space='ACPC', + desc='preproc', + suffix='dwi', + extension='.nii.gz', + compress=True, + ), + name=_get_wf_name(dwi_file, 'ds_dwi_t1'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + source_file=dwi_file, + in_file=text_file, + base_directory=config.execution.output_dir, + space='ACPC', + suffix='dwi', + extension='.bval', + desc='preproc', + ), + name=_get_wf_name(dwi_file, 'ds_bvals_t1'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + source_file=dwi_file, + in_file=text_file, + base_directory=config.execution.output_dir, + space='ACPC', + suffix='dwi', + extension='.bvec', + desc='preproc', + ), + name=_get_wf_name(dwi_file, 'ds_bvecs_t1'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + source_file=dwi_file, + in_file=dwi_file, + base_directory=config.execution.output_dir, + space='ACPC', + suffix='dwiref', + extension='.nii.gz', + compress=True, + ), + name=_get_wf_name(dwi_file, 'ds_t1_b0_ref'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + source_file=dwi_file, + in_file=dwi_file, + base_directory=config.execution.output_dir, + space='ACPC', + desc='brain', + suffix='mask', + extension='.nii.gz', + compress=True, + ), + name=_get_wf_name(dwi_file, 'ds_dwi_mask_t1'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + source_file=dwi_file, + in_file=dwi_file, + base_directory=config.execution.output_dir, + space='ACPC', + model='eddy', + statistic='cnr', + suffix='dwimap', + extension='.nii.gz', + compress=True, + meta_dict={ + 'Description': 'Contrast-to-noise ratio map for the HMC step.', + }, + ), + name=_get_wf_name(dwi_file, 'ds_cnr_map_t1'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + source_file=dwi_file, + in_file=text_file, + base_directory=config.execution.output_dir, + space='ACPC', + desc='preproc', + suffix='dwi', + extension='.b', + ), + name=_get_wf_name(dwi_file, 'ds_gradient_table_t1'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + source_file=dwi_file, + in_file=text_file, + base_directory=config.execution.output_dir, + space='ACPC', + desc='preproc', + suffix='dwi', + extension='.b_table.txt', + ), + name=_get_wf_name(dwi_file, 'ds_btable_t1'), + run_without_submitting=True, + ), + ] + ) + + # Create the anatomical datasinks + anatomical_template = 'MNI152NLin6Asym' + for anat_file in subject_data['t1w']: + workflow.add_nodes( + [ + pe.Node( + DerivativesDataSink( + compress=True, + in_file=anat_file, + source_file=anat_file, + base_directory=config.execution.output_dir, + space='ACPC', + desc='preproc', + keep_dtype=True, + ), + name=_get_wf_name(anat_file, 'ds_t1_preproc'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + compress=True, + in_file=anat_file, + source_file=anat_file, + base_directory=config.execution.output_dir, + space='ACPC', + desc='brain', + suffix='mask', + ), + name=_get_wf_name(anat_file, 'ds_t1_mask'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + compress=True, + in_file=anat_file, + source_file=anat_file, + base_directory=config.execution.output_dir, + space='ACPC', + suffix='dseg', + ), + name=_get_wf_name(anat_file, 'ds_t1_seg'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + compress=True, + in_file=anat_file, + source_file=anat_file, + base_directory=config.execution.output_dir, + space='ACPC', + desc='aseg', + suffix='dseg', + ), + name=_get_wf_name(anat_file, 'ds_t1_aseg'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + in_file=anat_file, + source_file=anat_file, + base_directory=config.execution.output_dir, + to='ACPC', + mode='image', + suffix='xfm', + **{'from': anatomical_template}, + ), + name=_get_wf_name(anat_file, 'ds_t1_mni_inv_warp'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + source_file=anat_file, + in_file=anat_file, + base_directory=config.execution.output_dir, + to='ACPC', + mode='image', + suffix='xfm', + **{'from': 'anat'}, + ), + name=_get_wf_name(anat_file, 'ds_t1_template_acpc_transforms'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + in_file=anat_file, + source_file=anat_file, + base_directory=config.execution.output_dir, + to='anat', + mode='image', + suffix='xfm', + **{'from': 'ACPC'}, + ), + name=_get_wf_name(anat_file, 'ds_t1_template_acpc_inv_transforms'), + run_without_submitting=True, + ), + pe.Node( + DerivativesDataSink( + in_file=anat_file, + source_file=anat_file, + base_directory=config.execution.output_dir, + to=anatomical_template, + mode='image', + suffix='xfm', + **{'from': 'ACPC'}, + ), + name=_get_wf_name(anat_file, 'ds_t1_mni_warp'), + run_without_submitting=True, + ), + ] + ) + + return clean_datasinks(workflow) + + +def init_single_dwi_run_wf(dwi_file: str): + """Set up a single-run workflow for SimBIDS.""" + from niworkflows.engine.workflows import LiterateWorkflow as Workflow + + workflow = Workflow(name=_get_wf_name(dwi_file, 'single_run')) + workflow.__desc__ = '' + + # Fill in datasinks seen so far + for node in workflow.list_node_names(): + if node.split('.')[-1].startswith('ds_'): + workflow.get_node(node).inputs.base_directory = config.execution.output_dir + workflow.get_node(node).inputs.source_file = dwi_file + + return workflow + + +def clean_datasinks(workflow: pe.Workflow) -> pe.Workflow: + """Overwrite ``out_path_base`` of DataSinks.""" + for node in workflow.list_node_names(): + if node.split('.')[-1].startswith('ds_'): + workflow.get_node(node).interface.out_path_base = '' + return workflow diff --git a/src/simbids/workflows/xcp_d/__init__.py b/src/simbids/workflows/xcp_d/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/simbids/workflows/xcp_d/xcp_d.py b/src/simbids/workflows/xcp_d/xcp_d.py new file mode 100644 index 0000000..b1bf525 --- /dev/null +++ b/src/simbids/workflows/xcp_d/xcp_d.py @@ -0,0 +1,349 @@ +# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- +# vi: set ft=python sts=4 ts=4 sw=4 et: +# +# Copyright 2024 The NiPreps Developers +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# We support and encourage derived works from this project, please read +# about our expectations at +# +# https://www.nipreps.org/community/licensing/ +# +""" +SimBIDS workflows +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autofunction:: init_simbids_wf +.. autofunction:: init_single_subject_wf +.. autofunction:: init_single_run_wf + +""" + +import os +import sys +from collections import defaultdict + +import nipype.pipeline.engine as pe +import yaml +from niworkflows.engine.workflows import LiterateWorkflow as Workflow +from niworkflows.interfaces.bids import BIDSInfo + +from simbids import config +from simbids.interfaces.bids import DerivativesDataSink +from simbids.interfaces.reportlets import AboutSummary, SubjectSummary +from simbids.utils.utils import _get_wf_name, update_dict + + +def init_single_subject_fmripost_wf(subject_id: str): + """Organize the postprocessing pipeline for a single subject.""" + from bids.utils import listify + + from simbids.utils.bids import collect_derivatives + + entities = config.execution.bids_filters or {} + entities['subject'] = subject_id + + if config.execution.derivatives: + # Raw dataset + derivatives dataset + config.loggers.workflow.info('Raw+derivatives workflow mode enabled') + # Just build a list of BOLD files right now + subject_data = collect_derivatives( + raw_dataset=config.execution.layout, + derivatives_dataset=None, + entities=entities, + fieldmap_id=None, + allow_multiple=True, + spaces=None, + bids_app='xcp_d', + ) + subject_data['bold'] = listify(subject_data['bold_raw']) + else: + # Derivatives dataset only + config.loggers.workflow.info('Derivatives-only workflow mode enabled') + # Just build a list of BOLD files right now + subject_data = collect_derivatives( + raw_dataset=None, + derivatives_dataset=config.execution.layout, + entities=entities, + fieldmap_id=None, + allow_multiple=True, + spaces=None, + ) + # Patch standard-space BOLD files into 'bold' key + subject_data['bold'] = listify(subject_data['bold_mni152nlin6asym']) + + workflow = Workflow(name=f'sub_{subject_id}_wf') + workflow.__desc__ = f""" +Results included in this manuscript come from postprocessing +performed using *SimBIDS* {config.environment.version}, +which is based on *Nipype* {config.environment.nipype_version} +(@nipype1; @nipype2; RRID:SCR_002502). + +""" + workflow.__postdesc__ = """ + +For more details of the pipeline, see [the section corresponding +to workflows in *SimBIDS*'s documentation]\ +(https://simbids.readthedocs.io/en/latest/workflows.html). + + +### Copyright Waiver + +The above boilerplate text was automatically generated by SimBIDS +with the express intention that users should copy and paste this +text into their manuscripts *unchanged*. +It is released under the +[CC0](https://creativecommons.org/publicdomain/zero/1.0/) license. + +### References + +""" + spaces = config.workflow.spaces + + # Make sure we always go through these two checks + if not subject_data['bold']: + task_id = config.execution.task_id + raise RuntimeError( + f'No BOLD images found for participant {subject_id} and ' + f'task {task_id if task_id else ""}. ' + 'All workflows require BOLD images. ' + f'Please check your BIDS filters: {config.execution.bids_filters}.' + ) + + config.loggers.workflow.info( + f'Collected subject data:\n{yaml.dump(subject_data, default_flow_style=False, indent=4)}', + ) + + bids_info = pe.Node( + BIDSInfo( + bids_dir=config.execution.bids_dir, + bids_validate=False, + in_file=subject_data['bold'][0], + ), + name='bids_info', + ) + + summary = pe.Node( + SubjectSummary( + bold=subject_data['bold'], + std_spaces=spaces.get_spaces(nonstandard=False), + nstd_spaces=spaces.get_spaces(standard=False), + ), + name='summary', + run_without_submitting=True, + ) + workflow.connect([(bids_info, summary, [('subject', 'subject_id')])]) + + about = pe.Node( + AboutSummary(version=config.environment.version, command=' '.join(sys.argv)), + name='about', + run_without_submitting=True, + ) + + ds_report_summary = pe.Node( + DerivativesDataSink( + source_file=subject_data['bold'][0], + base_directory=config.execution.output_dir, + desc='summary', + datatype='figures', + ), + name='ds_report_summary', + run_without_submitting=True, + ) + workflow.connect([(summary, ds_report_summary, [('out_report', 'in_file')])]) + + ds_report_about = pe.Node( + DerivativesDataSink( + source_file=subject_data['bold'][0], + base_directory=config.execution.output_dir, + desc='about', + datatype='figures', + ), + name='ds_report_about', + run_without_submitting=True, + ) + workflow.connect([(about, ds_report_about, [('out_report', 'in_file')])]) + + # Append the functional section to the existing anatomical excerpt + # That way we do not need to stream down the number of bold datasets + func_pre_desc = f""" +Functional data postprocessing + +: For each of the {len(subject_data['bold'])} BOLD runs found per subject +(across all tasks and sessions), the following postprocessing was performed. +""" + workflow.__desc__ += func_pre_desc + + for bold_file in subject_data['bold']: + single_run_wf = init_single_run_wf(bold_file) + workflow.add_nodes([single_run_wf]) + + return clean_datasinks(workflow) + + +def init_single_run_wf(bold_file: str): + """Set up a single-run workflow for SimBIDS.""" + from niworkflows.engine.workflows import LiterateWorkflow as Workflow + + from simbids.utils.bids import collect_derivatives, extract_entities + + spaces = config.workflow.spaces + + workflow = Workflow(name=_get_wf_name(bold_file, 'single_run')) + workflow.__desc__ = '' + + entities = extract_entities(bold_file) + + # Attempt to extract the associated fmap ID + fmapid = None + all_fmapids = config.execution.layout.get_fmapids( + subject=entities['subject'], + session=entities.get('session', None), + ) + if all_fmapids: + fmap_file = config.execution.layout.get_nearest( + bold_file, + to=all_fmapids, + suffix='xfm', + extension='.txt', + strict=False, + **{'from': 'boldref'}, + ) + fmapid = config.execution.layout.get_file(fmap_file).entities['to'] + + functional_cache = defaultdict(list, {}) + if config.execution.derivatives: + # Collect native-space derivatives and transforms + functional_cache = collect_derivatives( + raw_dataset=config.execution.layout, + derivatives_dataset=None, + entities=entities, + fieldmap_id=fmapid, + allow_multiple=False, + spaces=None, + ) + for deriv_dir in config.execution.derivatives.values(): + functional_cache = update_dict( + functional_cache, + collect_derivatives( + raw_dataset=None, + derivatives_dataset=deriv_dir, + entities=entities, + fieldmap_id=fmapid, + allow_multiple=False, + spaces=spaces, + ), + ) + + if not functional_cache['bold_confounds']: + if config.workflow.dummy_scans is None: + raise ValueError( + 'No confounds detected. ' + 'Automatical dummy scan detection cannot be performed. ' + 'Please set the `--dummy-scans` flag explicitly.' + ) + + # TODO: Calculate motion parameters from motion correction transform + raise ValueError('No confounds detected.') + + else: + # Collect MNI152NLin6Asym:res-2 derivatives + # Only derivatives dataset was passed in, so we expected standard-space derivatives + functional_cache.update( + collect_derivatives( + raw_dataset=None, + derivatives_dataset=config.execution.layout, + entities=entities, + fieldmap_id=fmapid, + allow_multiple=False, + spaces=spaces, + ), + ) + + config.loggers.workflow.info( + ( + f'Collected run data for {os.path.basename(bold_file)}:\n' + f'{yaml.dump(functional_cache, default_flow_style=False, indent=4)}' + ), + ) + + if config.workflow.dummy_scans is not None: + skip_vols = config.workflow.dummy_scans + else: + if not functional_cache['bold_confounds']: + raise ValueError( + 'No confounds detected. ' + 'Automatical dummy scan detection cannot be performed. ' + 'Please set the `--dummy-scans` flag explicitly.' + ) + skip_vols = get_nss(functional_cache['bold_confounds']) + + print(skip_vols) # just to circumvent flake8 warning + + # Fill in datasinks seen so far + for node in workflow.list_node_names(): + if node.split('.')[-1].startswith('ds_'): + workflow.get_node(node).inputs.base_directory = config.execution.output_dir + workflow.get_node(node).inputs.source_file = bold_file + + return workflow + + +def _prefix(subid): + return subid if subid.startswith('sub-') else f'sub-{subid}' + + +def clean_datasinks(workflow: pe.Workflow) -> pe.Workflow: + """Overwrite ``out_path_base`` of DataSinks.""" + for node in workflow.list_node_names(): + if node.split('.')[-1].startswith('ds_'): + workflow.get_node(node).interface.out_path_base = '' + return workflow + + +def get_nss(confounds_file): + """Get number of non-steady state volumes. + + Parameters + ---------- + confounds_file : :obj:`str` + Path to the confounds file. + + Returns + ------- + :obj:`int` + Number of non-steady state volumes. + + Notes + ----- + This function assumes that all non-steady state volumes are contiguous, + and that the non-steady state outlier columns are named `non_steady_state_outlier*`. + """ + import numpy as np + import pandas as pd + + df = pd.read_table(confounds_file) + + nss_cols = [c for c in df.columns if c.startswith('non_steady_state_outlier')] + + dummy_scans = 0 + if nss_cols: + initial_volumes_df = df[nss_cols] + dummy_scans = np.any(initial_volumes_df.to_numpy(), axis=1) + dummy_scans = np.where(dummy_scans)[0] + + # reasonably assumes all NSS volumes are contiguous + dummy_scans = int(dummy_scans[-1] + 1) + + return dummy_scans