diff --git a/mriqc/cli/parser.py b/mriqc/cli/parser.py index de711c9d..bad91cdc 100644 --- a/mriqc/cli/parser.py +++ b/mriqc/cli/parser.py @@ -448,7 +448,7 @@ def parse_args(args=None, namespace=None): from logging import DEBUG from contextlib import suppress - from mriqc.utils.bids import collect_bids_data + from niworkflows.utils.bids import collect_data, DEFAULT_BIDS_QUERIES parser = _build_parser() opts = parser.parse_args(args, namespace) @@ -520,20 +520,29 @@ def parse_args(args=None, namespace=None): config.workflow.analysis_level = list(analysis_level) # List of files to be run - bids_filters = { - "participant_label": config.execution.participant_label, - "session": config.execution.session_id, - "run": config.execution.run_id, - "task": config.execution.task_id, - "bids_type": config.execution.modalities, - } - config.workflow.inputs = { - mod: files - for mod, files in collect_bids_data( - config.execution.layout, **bids_filters - ).items() - if files + lc_modalities = [mod.lower() for mod in config.execution.modalities] + + bids_filters = ( + {mod: {"run": config.execution.run_id} for mod in lc_modalities} + if config.execution.run_id + else {} + ) + + bids_dataset, _ = collect_data( + config.execution.layout, + config.execution.participant_label, + session_id=config.execution.session_id, + task=config.execution.task_id, + group_me=False, # for backward compatibility + bids_filters=bids_filters, + queries={mod: DEFAULT_BIDS_QUERIES[mod] for mod in lc_modalities} + ) + + # Drop empty queries + bids_dataset = { + mod: files for mod, files in bids_dataset.items() if files } + config.workflow.inputs = bids_dataset # Check the query is not empty if not list(config.workflow.inputs.values()): @@ -546,7 +555,9 @@ def parse_args(args=None, namespace=None): ) # Check no DWI or others are sneaked into MRIQC - unknown_mods = set(config.workflow.inputs.keys()) - set(config.SUPPORTED_SUFFIXES) + unknown_mods = set(config.workflow.inputs.keys()) - set( + suffix.lower() for suffix in config.SUPPORTED_SUFFIXES + ) if unknown_mods: parser.error( "MRIQC is unable to process the following modalities: " diff --git a/mriqc/utils/__init__.py b/mriqc/utils/__init__.py index ce449276..e69de29b 100644 --- a/mriqc/utils/__init__.py +++ b/mriqc/utils/__init__.py @@ -1,28 +0,0 @@ -# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- -# vi: set ft=python sts=4 ts=4 sw=4 et: -# -# Copyright 2021 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/ -# -"""Module utils.misc contains utilities.""" -from mriqc.utils.bids import collect_bids_data - -__all__ = [ - "collect_bids_data", -] diff --git a/mriqc/utils/bids.py b/mriqc/utils/bids.py index 5ddc40b4..4ab14265 100644 --- a/mriqc/utils/bids.py +++ b/mriqc/utils/bids.py @@ -23,49 +23,11 @@ """PyBIDS tooling.""" import json import os -from collections import defaultdict from pathlib import Path -from bids.utils import listify - DOI = "https://doi.org/10.1371/journal.pone.0184661" -def collect_bids_data( - layout, - bids_type, - participant_label=None, - session=None, - run=None, - task=None, -): - """Get files in dataset""" - - basequery = { - "subject": participant_label, - "session": session, - "task": task, - "run": run, - "datatype": "func", - "return_type": "file", - "extension": ["nii", "nii.gz"], - } - # Filter empty lists, strings, zero runs, and Nones - basequery = {k: v for k, v in basequery.items() if v} - - # Start querying - imaging_data = defaultdict(list, {}) - for btype in listify(bids_type): - _entities = basequery.copy() - _entities["suffix"] = btype - if btype in ("T1w", "T2w", "dwi"): - _entities["datatype"] = "dwi" if btype == "dwi" else "anat" - _entities.pop("task", None) - imaging_data[btype] = layout.get(**_entities) - - return imaging_data - - def write_bidsignore(deriv_dir): from mriqc.config import SUPPORTED_SUFFIXES bids_ignore = [ diff --git a/mriqc/workflows/anatomical/base.py b/mriqc/workflows/anatomical/base.py index 327ae79f..400dee06 100644 --- a/mriqc/workflows/anatomical/base.py +++ b/mriqc/workflows/anatomical/base.py @@ -87,7 +87,7 @@ def anat_qc_workflow(name="anatMRIQC"): """ - dataset = config.workflow.inputs.get("T1w", []) + config.workflow.inputs.get("T2w", []) + dataset = config.workflow.inputs.get("t1w", []) + config.workflow.inputs.get("t2w", []) message = BUILDING_WORKFLOW.format( modality="anatomical", diff --git a/mriqc/workflows/core.py b/mriqc/workflows/core.py index 8f654d42..5aa53088 100644 --- a/mriqc/workflows/core.py +++ b/mriqc/workflows/core.py @@ -28,7 +28,7 @@ from mriqc.workflows.functional.base import fmri_qc_workflow from mriqc.workflows.diffusion.base import dmri_qc_workflow -ANATOMICAL_KEYS = "T1w", "T2w" +ANATOMICAL_KEYS = "t1w", "t2w" FMRI_KEY = "bold" DMRI_KEY = "dwi"