Skip to content

Commit 27ab2cc

Browse files
committed
ENH: Split up MCRIBReconAll into surfrecon/autorecon steps
1 parent c4d56cf commit 27ab2cc

File tree

1 file changed

+48
-6
lines changed

1 file changed

+48
-6
lines changed

nibabies/workflows/anatomical/surfaces.py

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""Anatomical surface projections"""
2+
from typing import Optional
3+
24
from nipype.interfaces import freesurfer as fs
35
from nipype.interfaces import io as nio
46
from nipype.interfaces import utility as niu
@@ -34,7 +36,12 @@
3436

3537

3638
def init_mcribs_surface_recon_wf(
37-
*, use_aseg: bool, mcribs_dir: str = None, name: str = "mcribs_surface_recon_wf"
39+
*,
40+
omp_nthreads: int,
41+
use_aseg: bool,
42+
use_mask: bool,
43+
mcribs_dir: Optional[str] = None,
44+
name: str = "mcribs_surface_recon_wf",
3845
):
3946
"""
4047
Reconstruct cortical surfaces using the M-CRIB-S pipeline.
@@ -51,7 +58,9 @@ def init_mcribs_surface_recon_wf(
5158
"A previously computed segmentation is required for the M-CRIB-S workflow."
5259
)
5360

54-
inputnode = pe.Node(niu.IdentityInterface(fields=SURFACE_INPUTS), name='inputnode')
61+
inputnode = pe.Node(
62+
niu.IdentityInterface(fields=SURFACE_INPUTS + ['anat_mask']), name='inputnode'
63+
)
5564
outputnode = pe.Node(niu.IdentityInterface(fields=SURFACE_OUTPUTS), name='outputnode')
5665

5766
wf = LiterateWorkflow(name=name)
@@ -103,10 +112,39 @@ def init_mcribs_surface_recon_wf(
103112
seg_las = t2w_las.clone(name="seg_las")
104113

105114
mcribs_recon = pe.Node(
106-
MCRIBReconAll(surfrecon=True, autorecon_after_surf=True), name="mcribs_recon"
115+
MCRIBReconAll(
116+
surfrecon=True,
117+
surfrecon_method='Deformable',
118+
join_thresh=1.0,
119+
fast_collision=True,
120+
nthreads=omp_nthreads,
121+
),
122+
name="mcribs_recon",
123+
mem_gb=5,
107124
)
108125
if mcribs_dir:
109126
mcribs_recon.inputs.outdir = mcribs_dir
127+
mcribs_recon.config = {'execution': {'remove_unnecessary_outputs': False}}
128+
129+
if use_mask:
130+
# If available, dilated mask and use in recon-neonatal-cortex
131+
from niworkflows.interfaces.morphology import BinaryDilation
132+
133+
mask_dil = pe.Node(BinaryDilation(radius=3), name="mask_dil")
134+
mask_las = t2w_las.clone(name="mask_las")
135+
# fmt:off
136+
wf.connect([
137+
(inputnode, mask_dil, [("anat_mask", "in_mask")]),
138+
(mask_dil, mask_las, [("out_mask", "in_file")]),
139+
(mask_las, mcribs_recon, [("out_file", "mask_file")]),
140+
])
141+
# fmt:on
142+
143+
mcribs_postrecon = pe.Node(
144+
MCRIBReconAll(autorecon_after_surf=True, nthreads=omp_nthreads),
145+
name="mcribs_postrecon",
146+
mem_gb=5,
147+
)
110148

111149
fssource = pe.Node(nio.FreeSurferSource(), name='fssource', run_without_submitting=True)
112150
norm2nii = pe.Node(fs.MRIConvert(out_type="niigz"), name="norm2nii")
@@ -134,9 +172,13 @@ def init_mcribs_surface_recon_wf(
134172
("subject_id", "subject_id")]),
135173
(t2w_las, mcribs_recon, [("out_file", "t2w_file")]),
136174
(seg_las, mcribs_recon, [("out_file", "segmentation_file")]),
175+
(inputnode, mcribs_postrecon, [
176+
("subjects_dir", "subjects_dir"),
177+
("subject_id", "subject_id")]),
178+
(mcribs_recon, mcribs_postrecon, [("mcribs_dir", "outdir")]),
137179
(inputnode, fssource, [("subject_id", "subject_id")]),
138-
(mcribs_recon, fssource, [("subjects_dir", "subjects_dir")]),
139-
(mcribs_recon, outputnode, [("subjects_dir", "subjects_dir")]),
180+
(mcribs_postrecon, fssource, [("subjects_dir", "subjects_dir")]),
181+
(mcribs_postrecon, outputnode, [("subjects_dir", "subjects_dir")]),
140182
(inputnode, outputnode, [("subject_id", "subject_id")]),
141183

142184
(inputnode, fsnative2t1w_xfm, [('skullstripped_t1', 'target_file')]),
@@ -146,7 +188,7 @@ def init_mcribs_surface_recon_wf(
146188
(norm2nii, fsnative2t1w_xfm, [('out_file', 'source_file')]),
147189
(fsnative2t1w_xfm, t1w2fsnative_xfm, [('out_reg_file', 'in_lta')]),
148190
(inputnode, gifti_surface_wf, [("subject_id", "inputnode.subject_id")]),
149-
(mcribs_recon, gifti_surface_wf, [("subjects_dir", "inputnode.subjects_dir")]),
191+
(mcribs_postrecon, gifti_surface_wf, [("subjects_dir", "inputnode.subjects_dir")]),
150192
(fsnative2t1w_xfm, gifti_surface_wf, [
151193
('out_reg_file', 'inputnode.fsnative2t1w_xfm')]),
152194
(fsnative2t1w_xfm, outputnode, [('out_reg_file', 'fsnative2t1w_xfm')]),

0 commit comments

Comments
 (0)