16
16
from niworkflows .interfaces .masks import SimpleShowMaskRPT
17
17
from niworkflows .interfaces .utils import CopyXForm
18
18
19
- from ...interfaces .images import ExtractB0
20
- from ...interfaces .registration import EstimateReferenceImage
19
+ from ...interfaces .images import ExtractB0 , RescaleB0
21
20
22
21
DEFAULT_MEMORY_MIN_GB = 0.01
23
22
@@ -49,6 +48,8 @@ def init_dwi_reference_wf(omp_nthreads, dwi_file=None,
49
48
50
49
dwi_file
51
50
dwi NIfTI file
51
+ b0_ixs : list
52
+ index of b0s in dwi NIfTI file
52
53
53
54
**Outputs**
54
55
@@ -76,11 +77,11 @@ def init_dwi_reference_wf(omp_nthreads, dwi_file=None,
76
77
First, a reference volume and its skull-stripped version were generated
77
78
using a custom methodology taken from *fMRIPrep*.
78
79
"""
79
- inputnode = pe .Node (niu .IdentityInterface (fields = ['dwi_file' , 'bvec_file' , 'bval_file ' ]),
80
+ inputnode = pe .Node (niu .IdentityInterface (fields = ['dwi_file' , 'b0_ixs ' ]),
80
81
name = 'inputnode' )
81
82
outputnode = pe .Node (
82
- niu .IdentityInterface (fields = ['dwi_file' , 'raw_ref_image' ,
83
- 'ref_image' , ' ref_image_brain' ,
83
+ niu .IdentityInterface (fields = ['dwi_file' , 'raw_ref_image' , 'ref_image' ,
84
+ 'ref_image_brain' ,
84
85
'dwi_mask' , 'validation_report' ]),
85
86
name = 'outputnode' )
86
87
@@ -90,26 +91,30 @@ def init_dwi_reference_wf(omp_nthreads, dwi_file=None,
90
91
91
92
validate = pe .Node (ValidateImage (), name = 'validate' , mem_gb = DEFAULT_MEMORY_MIN_GB )
92
93
93
- extract_b0 = pe .Node (ExtractB0 (), name = " extract_b0" )
94
+ extract_b0 = pe .Node (ExtractB0 (), name = ' extract_b0' )
94
95
95
- pre_mask = pe . Node ( afni . Automask ( outputtype = "NIFTI_GZ" ), name = "pre_mask" )
96
+ # b0_template_wf = init_b0_template_wf( )
96
97
97
- gen_ref = pe .Node (EstimateReferenceImage (), name = 'gen_ref' )
98
+ pre_mask = pe .Node (afni .Automask (dilate = 1 , outputtype = 'NIFTI_GZ' ),
99
+ name = 'pre_mask' )
100
+
101
+ rescale_b0 = pe .Node (RescaleB0 (), name = 'rescale_b0' )
98
102
99
103
enhance_and_skullstrip_dwi_wf = init_enhance_and_skullstrip_dwi_wf (
100
104
omp_nthreads = omp_nthreads )
101
105
102
106
workflow .connect ([
103
107
(inputnode , validate , [('dwi_file' , 'in_file' )]),
104
108
(validate , extract_b0 , [('out_file' , 'in_file' )]),
109
+ (inputnode , extract_b0 , [('b0_ixs' , 'b0_ixs' )]),
105
110
(extract_b0 , pre_mask , [('out_file' , 'in_file' )]),
106
- (extract_b0 , gen_ref , [('out_file' , 'in_file' )]),
107
- (pre_mask , gen_ref , [('out_file' , 'pre_mask' )]),
108
- (gen_ref , enhance_and_skullstrip_dwi_wf , [('out_file' , 'inputnode.in_file' )]),
111
+ (extract_b0 , rescale_b0 , [('out_file' , 'in_file' )]),
112
+ (pre_mask , rescale_b0 , [('out_file' , 'pre_mask' )]),
113
+ (rescale_b0 , enhance_and_skullstrip_dwi_wf , [('out_file' , 'inputnode.in_file' )]),
109
114
(pre_mask , enhance_and_skullstrip_dwi_wf , [('out_file' , 'inputnode.pre_mask' )]),
110
115
(validate , outputnode , [('out_file' , 'dwi_file' ),
111
116
('out_report' , 'validation_report' )]),
112
- (gen_ref , outputnode , [('out_file ' , 'raw_ref_image' )]),
117
+ (rescale_b0 , outputnode , [('ref_image ' , 'raw_ref_image' )]),
113
118
(enhance_and_skullstrip_dwi_wf , outputnode , [
114
119
('outputnode.bias_corrected_file' , 'ref_image' ),
115
120
('outputnode.mask_file' , 'dwi_mask' ),
@@ -128,6 +133,16 @@ def init_dwi_reference_wf(omp_nthreads, dwi_file=None,
128
133
return workflow
129
134
130
135
136
+ def init_b0_template_wf (
137
+ name = 'b0_template_wf'
138
+ ):
139
+ """[summary]
140
+
141
+ Keyword Arguments:
142
+ name {str} -- [description] (default: {'b0_template_wf'})
143
+ """
144
+
145
+
131
146
def init_enhance_and_skullstrip_dwi_wf (
132
147
name = 'enhance_and_skullstrip_dwi_wf' ,
133
148
omp_nthreads = 1 ):
@@ -204,16 +219,14 @@ def init_enhance_and_skullstrip_dwi_wf(
204
219
internal_datatype = 'char' ), name = 'skullstrip_first_dilate' )
205
220
bet_mask = pe .Node (fsl .ApplyMask (), name = 'skullstrip_first_mask' )
206
221
207
- # Use AFNI's unifize for T2 constrast & fix header
222
+ # Use AFNI's unifize for T2 contrast & fix header
208
223
unifize = pe .Node (afni .Unifize (
209
224
t2 = True , outputtype = 'NIFTI_GZ' ,
210
- # Default -clfrac is 0.1, 0.4 was too conservative
211
- # -rbt because I'm a Jedi AFNI Master (see 3dUnifize's documentation)
212
225
args = '-clfrac 0.2 -rbt 18.3 65.0 90.0' ,
213
- out_file = " uni.nii.gz" ), name = 'unifize' )
226
+ out_file = ' uni.nii.gz' ), name = 'unifize' )
214
227
fixhdr_unifize = pe .Node (CopyXForm (), name = 'fixhdr_unifize' , mem_gb = 0.1 )
215
228
216
- # Run ANFI 's 3dAutomask to extract a refined brain mask
229
+ # Run AFNI 's 3dAutomask to extract a refined brain mask
217
230
skullstrip_second_pass = pe .Node (afni .Automask (dilate = 1 ,
218
231
outputtype = 'NIFTI_GZ' ),
219
232
name = 'skullstrip_second_pass' )
0 commit comments