Skip to content

Commit ccc727d

Browse files
committed
rf: Revert init_cortex_masks_wf to use iterables
1 parent 0f857e8 commit ccc727d

File tree

1 file changed

+43
-64
lines changed

1 file changed

+43
-64
lines changed

src/smriprep/workflows/surfaces.py

Lines changed: 43 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,76 +1192,60 @@ def init_cortex_masks_wf(
11921192
niu.IdentityInterface(fields=['midthickness', 'thickness']),
11931193
name='inputnode',
11941194
)
1195-
outputnode = pe.Node(
1195+
1196+
itersource = pe.Node(
1197+
niu.IdentityInterface(fields=['hemi']),
1198+
name='itersource',
1199+
iterables=[('hemi', ['L', 'R'])],
1200+
)
1201+
1202+
outputnode = pe.JoinNode(
11961203
niu.IdentityInterface(fields=['cortex_masks', 'source_files']),
11971204
name='outputnode',
1205+
joinsource='itersource',
1206+
)
1207+
1208+
select_surfaces = pe.Node(
1209+
KeySelect(fields=['thickness', 'midthickness'], keys=['L', 'R']),
1210+
name='select_surfaces',
1211+
run_without_submitting=True,
11981212
)
11991213

1200-
# Combine the inputs into a list
1201-
combine_sources = pe.Node(
1202-
niu.Merge(2, no_flatten=True),
1203-
name='combine_sources',
1214+
combine_sources = pe.Node(niu.Merge(2), name='combine_sources', run_without_submitting=True)
1215+
1216+
abs_thickness = pe.Node(
1217+
MetricMath(metric='thickness', operation='abs'),
1218+
name='abs_thickness',
1219+
mem_gb=DEFAULT_MEMORY_MIN_GB,
12041220
)
1221+
initial_roi = pe.Node(
1222+
MetricMath(metric='roi', operation='bin'), name='initial_roi', mem_gb=DEFAULT_MEMORY_MIN_GB
1223+
)
1224+
fill_holes = pe.Node(MetricFillHoles(), name='fill_holes', mem_gb=DEFAULT_MEMORY_MIN_GB)
1225+
native_roi = pe.Node(MetricRemoveIslands(), name='native_roi', mem_gb=DEFAULT_MEMORY_MIN_GB)
1226+
12051227
workflow.connect([
1206-
(inputnode, combine_sources, [
1228+
(inputnode, select_surfaces, [
1229+
('thickness', 'thickness'),
1230+
('midthickness', 'midthickness'),
1231+
]),
1232+
(itersource, select_surfaces, [('hemi', 'key')]),
1233+
(itersource, abs_thickness, [('hemi', 'hemisphere')]),
1234+
(itersource, initial_roi, [('hemi', 'hemisphere')]),
1235+
(select_surfaces, abs_thickness, [('thickness', 'metric_file')]),
1236+
(select_surfaces, fill_holes, [('midthickness', 'surface_file')]),
1237+
(select_surfaces, native_roi, [('midthickness', 'surface_file')]),
1238+
(abs_thickness, initial_roi, [('metric_file', 'metric_file')]),
1239+
(initial_roi, fill_holes, [('metric_file', 'metric_file')]),
1240+
(fill_holes, native_roi, [('out_file', 'metric_file')]),
1241+
(native_roi, outputnode, [('out_file', 'cortex_masks')]),
1242+
(select_surfaces, combine_sources, [
12071243
('midthickness', 'in1'),
12081244
('thickness', 'in2'),
12091245
]),
1210-
(combine_sources, outputnode, [(('out', _transpose_lol), 'source_files')]),
1246+
(combine_sources, outputnode, [('out', 'source_files')]),
12111247
]) # fmt:skip
12121248

1213-
combine_masks = pe.Node(
1214-
niu.Merge(2),
1215-
name='combine_masks',
1216-
)
1217-
workflow.connect([(combine_masks, outputnode, [('out', 'cortex_masks')])])
1218-
1219-
for i_hemi, hemi in enumerate(['L', 'R']):
1220-
select_midthickness = pe.Node(
1221-
niu.Select(index=i_hemi),
1222-
name=f'select_midthickness_{hemi}',
1223-
)
1224-
select_thickness = pe.Node(
1225-
niu.Select(index=i_hemi),
1226-
name=f'select_thickness_{hemi}',
1227-
)
1228-
workflow.connect([
1229-
(inputnode, select_midthickness, [('midthickness', 'inlist')]),
1230-
(inputnode, select_thickness, [('thickness', 'inlist')]),
1231-
]) # fmt:skip
1232-
1233-
# Thickness is presumably already positive, but HCP uses abs(-thickness)
1234-
abs_thickness = pe.Node(
1235-
MetricMath(metric='thickness', operation='abs', hemisphere=hemi),
1236-
name=f'abs_thickness_{hemi}',
1237-
)
1238-
1239-
# Native ROI is thickness > 0, with holes and islands filled
1240-
initial_roi = pe.Node(
1241-
MetricMath(metric='roi', operation='bin', hemisphere=hemi),
1242-
name=f'initial_roi_{hemi}',
1243-
)
1244-
fill_holes = pe.Node(
1245-
MetricFillHoles(),
1246-
name=f'fill_holes_{hemi}',
1247-
mem_gb=DEFAULT_MEMORY_MIN_GB,
1248-
)
1249-
native_roi = pe.Node(
1250-
MetricRemoveIslands(),
1251-
name=f'native_roi_{hemi}',
1252-
mem_gb=DEFAULT_MEMORY_MIN_GB,
1253-
)
1254-
1255-
workflow.connect([
1256-
(select_thickness, abs_thickness, [('out', 'metric_file')]),
1257-
(abs_thickness, initial_roi, [('metric_file', 'metric_file')]),
1258-
(select_midthickness, fill_holes, [('out', 'surface_file')]),
1259-
(select_midthickness, native_roi, [('out', 'surface_file')]),
1260-
(initial_roi, fill_holes, [('metric_file', 'metric_file')]),
1261-
(fill_holes, native_roi, [('out_file', 'metric_file')]),
1262-
(native_roi, combine_masks, [('out_file', f'in{i_hemi + 1}')]),
1263-
]) # fmt:skip
1264-
12651249
return workflow
12661250

12671251

@@ -1804,8 +1788,3 @@ def _select_seg(in_files, segmentation):
18041788

18051789
def _repeat(seq: list, count: int) -> list:
18061790
return seq * count
1807-
1808-
1809-
def _transpose_lol(inlist):
1810-
"""Transpose a list of lists."""
1811-
return list(map(list, zip(*inlist, strict=False)))

0 commit comments

Comments
 (0)