@@ -1192,76 +1192,60 @@ def init_cortex_masks_wf(
1192
1192
niu .IdentityInterface (fields = ['midthickness' , 'thickness' ]),
1193
1193
name = 'inputnode' ,
1194
1194
)
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 (
1196
1203
niu .IdentityInterface (fields = ['cortex_masks' , 'source_files' ]),
1197
1204
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 ,
1198
1212
)
1199
1213
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 ,
1204
1220
)
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
+
1205
1227
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 , [
1207
1243
('midthickness' , 'in1' ),
1208
1244
('thickness' , 'in2' ),
1209
1245
]),
1210
- (combine_sources , outputnode , [(( 'out' , _transpose_lol ) , 'source_files' )]),
1246
+ (combine_sources , outputnode , [('out' , 'source_files' )]),
1211
1247
]) # fmt:skip
1212
1248
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
-
1265
1249
return workflow
1266
1250
1267
1251
@@ -1804,8 +1788,3 @@ def _select_seg(in_files, segmentation):
1804
1788
1805
1789
def _repeat (seq : list , count : int ) -> list :
1806
1790
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