Skip to content

Commit 97f4556

Browse files
mgxdeffigies
authored andcommitted
RF: Strip out template fetching to separate function
1 parent b757367 commit 97f4556

File tree

2 files changed

+39
-56
lines changed

2 files changed

+39
-56
lines changed

smriprep/interfaces/templateflow.py

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -108,34 +108,9 @@ def _run_interface(self, runtime):
108108
if isdefined(self.inputs.cohort):
109109
specs['cohort'] = self.inputs.cohort
110110

111-
name = self.inputs.template.strip(':').split(':', 1)
112-
if len(name) > 1:
113-
specs.update(
114-
{
115-
k: v
116-
for modifier in name[1].split(':')
117-
for k, v in [tuple(modifier.split('-'))]
118-
if k not in specs
119-
}
120-
)
121-
122-
if specs['resolution'] and not isinstance(specs['resolution'], list):
123-
specs['resolution'] = [specs['resolution']]
124-
125-
available_resolutions = tf.TF_LAYOUT.get_resolutions(template=name[0])
126-
if specs['resolution'] and not set(specs['resolution']) & set(available_resolutions):
127-
fallback_res = available_resolutions[0] if available_resolutions else None
128-
LOGGER.warning(
129-
f"Template {name[0]} does not have resolution(s): {specs['resolution']}."
130-
f"Falling back to resolution: {fallback_res}."
131-
)
132-
specs['resolution'] = fallback_res
133-
134-
self._results['t1w_file'] = tf.get(name[0], desc=None, suffix='T1w', **specs)
135-
136-
self._results['brain_mask'] = tf.get(
137-
name[0], desc='brain', suffix='mask', **specs
138-
) or tf.get(name[0], label='brain', suffix='mask', **specs)
111+
files = fetch_template_files(self.inputs.template, specs)
112+
self._results['t1w_file'] = files['t1w']
113+
self._results['brain_mask'] = files['mask']
139114
return runtime
140115

141116

@@ -186,3 +161,39 @@ def _run_interface(self, runtime):
186161
descsplit = desc.split('-')
187162
self._results['spec'][descsplit[0]] = descsplit[1]
188163
return runtime
164+
165+
166+
def fetch_template_files(template: str, specs: dict | None = None) -> dict:
167+
if specs is None:
168+
specs = {}
169+
170+
name = template.strip(':').split(':', 1)
171+
if len(name) > 1:
172+
specs.update(
173+
{
174+
k: v
175+
for modifier in name[1].split(':')
176+
for k, v in [tuple(modifier.split('-'))]
177+
if k not in specs
178+
}
179+
)
180+
181+
if specs['resolution'] and not isinstance(specs['resolution'], list):
182+
specs['resolution'] = [specs['resolution']]
183+
184+
available_resolutions = tf.TF_LAYOUT.get_resolutions(template=name[0])
185+
if specs['resolution'] and not set(specs['resolution']) & set(available_resolutions):
186+
fallback_res = available_resolutions[0] if available_resolutions else None
187+
LOGGER.warning(
188+
f"Template {name[0]} does not have resolution(s): {specs['resolution']}."
189+
f"Falling back to resolution: {fallback_res}."
190+
)
191+
specs['resolution'] = fallback_res
192+
193+
files = {}
194+
files['t1w'] = tf.get(name[0], desc=None, suffix='T1w', **specs)
195+
files['mask'] = (
196+
tf.get(name[0], desc='brain', suffix='mask', **specs)
197+
or tf.get(name[0], label='brain', suffix='mask', **specs)
198+
)
199+
return files

smriprep/utils/misc.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,6 @@
2121
# https://www.nipreps.org/community/licensing/
2222
#
2323
"""Self-contained utilities to be used within Function nodes."""
24-
from pathlib import Path
25-
import typing as ty
26-
27-
if ty.TYPE_CHECKING:
28-
from niworkflows.utils.spaces import Reference
29-
3024

3125
def apply_lut(in_dseg, lut, newpath=None):
3226
"""Map the input discrete segmentation to a new label set (lookup table, LUT)."""
@@ -100,25 +94,3 @@ def fs_isRunning(subjects_dir, subject_id, mtime_tol=86400, logger=None):
10094
if logger:
10195
logger.warn(f'Removed "IsRunning*" files found under {subj_dir}')
10296
return subjects_dir
103-
104-
105-
def get_template_t1w(template: str, sloppy: bool = False) -> Path:
106-
"""Query templateflow for the T1w to ensure it is present on the filesystem."""
107-
import templateflow.api as tf
108-
109-
spec = {}
110-
_space = template.split(':', 1)
111-
if len(_space) > 1:
112-
spec['cohort'] = _space[1].replace('cohort-', '')
113-
space = _space[0]
114-
115-
available_res = tf.TF_LAYOUT.get_resolutions(template=space)
116-
if sloppy and 2 in available_res:
117-
res = 2
118-
elif 1 in available_res:
119-
res = 1
120-
else:
121-
res = None
122-
spec['resolution'] = res
123-
124-
return tf.get(space, desc=None, suffix='T1w', **spec)

0 commit comments

Comments
 (0)