From 14bddc09a54c8fba6e74d2d0ae65d518fff58a0e Mon Sep 17 00:00:00 2001 From: Taylor Salo Date: Mon, 20 Nov 2023 10:28:55 -0500 Subject: [PATCH] Fix. --- aslprep/utils/bids.py | 36 ++++++++++++++++++++++++++++++++++++ aslprep/workflows/asl/fit.py | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/aslprep/utils/bids.py b/aslprep/utils/bids.py index 11ee79da3..c6c2ebbf9 100644 --- a/aslprep/utils/bids.py +++ b/aslprep/utils/bids.py @@ -309,3 +309,39 @@ def find_atlas_entities(filename): out += [suffix, extension] return tuple(out) + + +def extract_entities(file_list): + """Return a dictionary of common entities given a list of files. + + TODO: Replace with fMRIPrep import once next is merged and released. + + Examples + -------- + >>> extract_entities("sub-01/anat/sub-01_T1w.nii.gz") + {'subject': '01', 'suffix': 'T1w', 'datatype': 'anat', 'extension': '.nii.gz'} + >>> extract_entities(["sub-01/anat/sub-01_T1w.nii.gz"] * 2) + {'subject': '01', 'suffix': 'T1w', 'datatype': 'anat', 'extension': '.nii.gz'} + >>> extract_entities(["sub-01/anat/sub-01_run-1_T1w.nii.gz", + ... "sub-01/anat/sub-01_run-2_T1w.nii.gz"]) + {'subject': '01', 'run': [1, 2], 'suffix': 'T1w', 'datatype': 'anat', 'extension': '.nii.gz'} + + """ + from collections import defaultdict + + from bids.layout import parse_file_entities + from niworkflows.utils.connections import listify + + entities = defaultdict(list) + for e, v in [ + ev_pair for f in listify(file_list) for ev_pair in parse_file_entities(f).items() + ]: + entities[e].append(v) + + def _unique(inlist): + inlist = sorted(set(inlist)) + if len(inlist) == 1: + return inlist[0] + return inlist + + return {k: _unique(v) for k, v in entities.items()} diff --git a/aslprep/workflows/asl/fit.py b/aslprep/workflows/asl/fit.py index f38b44b11..a22e2900f 100644 --- a/aslprep/workflows/asl/fit.py +++ b/aslprep/workflows/asl/fit.py @@ -27,7 +27,6 @@ import nibabel as nb from fmriprep import config from fmriprep.interfaces.reports import FunctionalSummary -from fmriprep.utils.bids import extract_entities from fmriprep.workflows.bold.registration import init_bold_reg_wf from nipype.interfaces import utility as niu from nipype.pipeline import engine as pe @@ -46,6 +45,7 @@ ) from aslprep.interfaces.utility import ReduceASLFiles from aslprep.utils.asl import select_processing_target +from aslprep.utils.bids import extract_entities # TODO: Replace with fMRIPrep import from aslprep.workflows.asl.hmc import init_asl_hmc_wf from aslprep.workflows.asl.outputs import ( init_asl_fit_reports_wf,