6
6
7
7
from niworkflows .engine .workflows import LiterateWorkflow as Workflow
8
8
from ...interfaces import DerivativesDataSink
9
+ from ...interfaces .reports import DiffusionSummary
9
10
10
11
11
12
def init_dwi_preproc_wf (dwi_file , has_fieldmap = False ):
@@ -41,6 +42,8 @@ def init_dwi_preproc_wf(dwi_file, has_fieldmap=False):
41
42
File path of the b-vectors
42
43
in_bval
43
44
File path of the b-values
45
+ metadata
46
+ dwi metadata
44
47
fmap
45
48
File path of the fieldmap
46
49
fmap_ref
@@ -78,6 +81,7 @@ def init_dwi_preproc_wf(dwi_file, has_fieldmap=False):
78
81
config .loggers .workflow .debug (
79
82
f"Creating DWI preprocessing workflow for <{ dwi_file .name } >"
80
83
)
84
+ metadata = layout .get_metadata (str (dwi_file ))
81
85
82
86
if has_fieldmap :
83
87
import re
@@ -103,6 +107,7 @@ def init_dwi_preproc_wf(dwi_file, has_fieldmap=False):
103
107
"dwi_file" ,
104
108
"in_bvec" ,
105
109
"in_bval" ,
110
+ "metadata" ,
106
111
# From SDCFlows
107
112
"fmap" ,
108
113
"fmap_ref" ,
@@ -130,12 +135,19 @@ def init_dwi_preproc_wf(dwi_file, has_fieldmap=False):
130
135
inputnode .inputs .dwi_file = str (dwi_file .absolute ())
131
136
inputnode .inputs .in_bvec = str (layout .get_bvec (dwi_file ))
132
137
inputnode .inputs .in_bval = str (layout .get_bval (dwi_file ))
138
+ inputnode .metadata = metadata
133
139
134
140
outputnode = pe .Node (
135
141
niu .IdentityInterface (fields = ["dwi_reference" , "dwi_mask" , "gradients_rasb" ]),
136
142
name = "outputnode" ,
137
143
)
138
144
145
+ summary = pe .Node (
146
+ DiffusionSummary (pe_direction = metadata .get ("PhaseEncodingDirection" )),
147
+ name = "dwi_summary" ,
148
+ run_without_submitting = True ,
149
+ )
150
+
139
151
gradient_table = pe .Node (CheckGradientTable (), name = "gradient_table" )
140
152
141
153
dwi_reference_wf = init_dwi_reference_wf (
@@ -149,6 +161,7 @@ def init_dwi_preproc_wf(dwi_file, has_fieldmap=False):
149
161
("in_bvec" , "in_bvec" ),
150
162
("in_bval" , "in_bval" )]),
151
163
(inputnode , dwi_reference_wf , [("dwi_file" , "inputnode.dwi_file" )]),
164
+ (gradient_table , summary , [("shells_dist" , "shells_dist" )]),
152
165
(gradient_table , dwi_reference_wf , [("b0_ixs" , "inputnode.b0_ixs" )]),
153
166
(gradient_table , outputnode , [("out_rasb" , "gradients_rasb" )]),
154
167
])
@@ -209,6 +222,7 @@ def _bold_reg_suffix(fallback):
209
222
# fmt: off
210
223
workflow .connect ([
211
224
(inputnode , reportlets_wf , [("dwi_file" , "inputnode.source_file" )]),
225
+ (summary , reportlets_wf , [("out_report" , "inputnode.summary_report" )]),
212
226
(dwi_reference_wf , reportlets_wf , [
213
227
("outputnode.validation_report" , "inputnode.validation_report" ),
214
228
]),
@@ -239,10 +253,8 @@ def _bold_reg_suffix(fallback):
239
253
write_coeff = True ,
240
254
)
241
255
unwarp_wf = init_unwarp_wf (
242
- debug = config .execution .debug ,
243
- omp_nthreads = config .nipype .omp_nthreads
256
+ debug = config .execution .debug , omp_nthreads = config .nipype .omp_nthreads
244
257
)
245
- unwarp_wf .inputs .inputnode .metadata = layout .get_metadata (str (dwi_file ))
246
258
247
259
output_select = pe .Node (
248
260
KeySelect (fields = ["fmap" , "fmap_ref" , "fmap_coeff" , "fmap_mask" ]),
@@ -257,7 +269,10 @@ def _bold_reg_suffix(fallback):
257
269
)
258
270
259
271
sdc_report = pe .Node (
260
- SimpleBeforeAfter (before_label = "Distorted" , after_label = "Corrected" ,),
272
+ SimpleBeforeAfter (
273
+ before_label = "Distorted" ,
274
+ after_label = "Corrected" ,
275
+ ),
261
276
name = "sdc_report" ,
262
277
mem_gb = 0.1 ,
263
278
)
@@ -276,6 +291,7 @@ def _bold_reg_suffix(fallback):
276
291
(dwi_reference_wf , coeff2epi_wf , [
277
292
("outputnode.ref_image" , "inputnode.target_ref" ),
278
293
("outputnode.dwi_mask" , "inputnode.target_mask" )]),
294
+ (inputnode , unwarp_wf , [("metadata" , "inputnode.metadata" )]),
279
295
(dwi_reference_wf , unwarp_wf , [("outputnode.ref_image" , "inputnode.distorted" )]),
280
296
(coeff2epi_wf , unwarp_wf , [
281
297
("outputnode.fmap_coeff" , "inputnode.fmap_coeff" )]),
0 commit comments