2424from nipype .pipeline import engine as pe
2525from niworkflows .engine .workflows import LiterateWorkflow as Workflow
2626from niworkflows .interfaces .header import ValidateImage
27- from niworkflows .utils .misc import pass_dummy_scans
2827from nipype .interfaces import fsl
2928
3029DEFAULT_MEMORY_MIN_GB = 0.01
@@ -67,20 +66,13 @@ def init_raw_petref_wf(
6766 ------
6867 pet_file : str
6968 PET series NIfTI file
70- dummy_scans : int or None
71- Number of non-steady-state volumes specified by user at beginning of ``pet_file``
7269
7370 Outputs
7471 -------
7572 pet_file : str
7673 Validated PET series NIfTI file
7774 petref : str
7875 Reference image to which PET series is motion corrected
79- skip_vols : int
80- Number of non-steady-state volumes selected at beginning of ``pet_file``
81- algo_dummy_scans : int
82- Number of non-steady-state volumes agorithmically detected at
83- beginning of ``pet_file``
8476
8577 """
8678 from niworkflows .interfaces .images import RobustAverage
@@ -92,16 +84,14 @@ def init_raw_petref_wf(
9284"""
9385
9486 inputnode = pe .Node (
95- niu .IdentityInterface (fields = ['pet_file' , 'dummy_scans' ]),
87+ niu .IdentityInterface (fields = ['pet_file' ]),
9688 name = 'inputnode' ,
9789 )
9890 outputnode = pe .Node (
9991 niu .IdentityInterface (
10092 fields = [
10193 'pet_file' ,
10294 'petref' ,
103- 'skip_vols' ,
104- 'algo_dummy_scans' ,
10595 'validation_report' ,
10696 ]
10797 ),
@@ -112,7 +102,7 @@ def init_raw_petref_wf(
112102 if pet_file is not None :
113103 inputnode .inputs .pet_file = pet_file
114104
115- validation_and_dummies_wf = init_validation_and_dummies_wf ( )
105+ val_pet = pe . Node ( ValidateImage (), name = 'val_pet' , mem_gb = DEFAULT_MEMORY_MIN_GB )
116106
117107 gen_avg = pe .Node (RobustAverage (), name = 'gen_avg' , mem_gb = 1 )
118108 extract_roi = pe .Node (
@@ -123,34 +113,26 @@ def init_raw_petref_wf(
123113
124114 workflow .connect (
125115 [
126- (inputnode , validation_and_dummies_wf , [
127- ('pet_file' , 'inputnode.pet_file' ),
128- ('dummy_scans' , 'inputnode.dummy_scans' ),
129- ]),
130- (validation_and_dummies_wf , outputnode , [
131- ('outputnode.pet_file' , 'pet_file' ),
132- ('outputnode.skip_vols' , 'skip_vols' ),
133- ('outputnode.algo_dummy_scans' , 'algo_dummy_scans' ),
134- ('outputnode.validation_report' , 'validation_report' ),
116+ (inputnode , val_pet , [('pet_file' , 'in_file' )]),
117+ (val_pet , outputnode , [
118+ ('out_file' , 'pet_file' ),
119+ ('out_report' , 'validation_report' ),
135120 ]),
136121 ]
137122 ) # fmt:skip
138123
139124 if reference_frame in (None , 'average' ):
140125 workflow .connect (
141126 [
142- (validation_and_dummies_wf , gen_avg , [
143- ('outputnode.pet_file' , 'in_file' ),
144- ('outputnode.t_mask' , 't_mask' ),
145- ]),
127+ (val_pet , gen_avg , [('out_file' , 'in_file' )]),
146128 (gen_avg , outputnode , [('out_file' , 'petref' )]),
147129 ]
148130 ) # fmt:skip
149131 else :
150132 extract_roi .inputs .t_min = int (reference_frame )
151133 workflow .connect (
152134 [
153- (validation_and_dummies_wf , extract_roi , [('outputnode.pet_file ' , 'in_file' )]),
135+ (val_pet , extract_roi , [('out_file ' , 'in_file' )]),
154136 (extract_roi , outputnode , [('roi_file' , 'petref' )]),
155137 ]
156138 ) # fmt:skip
@@ -160,96 +142,27 @@ def init_validation_and_dummies_wf(
160142 pet_file = None ,
161143 name = 'validation_and_dummies_wf' ,
162144):
163- """
164- Build a workflow that validates a PET image and detects non-steady-state volumes.
165-
166- Workflow Graph
167- .. workflow::
168- :graph2use: orig
169- :simple_form: yes
170-
171- from fmriprep.workflows.pet.reference import init_validation_and_dummies_wf
172- wf = init_validation_and_dummies_wf()
173-
174- Parameters
175- ----------
176- pet_file : :obj:`str`
177- PET series NIfTI file
178- name : :obj:`str`
179- Name of workflow (default: ``validation_and_dummies_wf``)
180-
181- Inputs
182- ------
183- pet_file : str
184- PET series NIfTI file
185- dummy_scans : int or None
186- Number of non-steady-state volumes specified by user at beginning of ``pet_file``
187-
188- Outputs
189- -------
190- pet_file : str
191- Validated PET series NIfTI file
192- skip_vols : int
193- Number of non-steady-state volumes selected at beginning of ``pet_file``
194- algo_dummy_scans : int
195- Number of non-steady-state volumes agorithmically detected at
196- beginning of ``pet_file``
197-
198- """
199- from niworkflows .interfaces .bold import NonsteadyStatesDetector
145+ """Build a workflow that validates a PET image."""
200146
201147 workflow = Workflow (name = name )
202148
203- inputnode = pe .Node (
204- niu .IdentityInterface (fields = ['pet_file' , 'dummy_scans' ]),
205- name = 'inputnode' ,
206- )
149+ inputnode = pe .Node (niu .IdentityInterface (fields = ['pet_file' ]), name = 'inputnode' )
207150 outputnode = pe .Node (
208- niu .IdentityInterface (
209- fields = [
210- 'pet_file' ,
211- 'skip_vols' ,
212- 'algo_dummy_scans' ,
213- 't_mask' ,
214- 'validation_report' ,
215- ]
216- ),
151+ niu .IdentityInterface (fields = ['pet_file' , 'validation_report' ]),
217152 name = 'outputnode' ,
218153 )
219154
220- # Simplify manually setting input image
221155 if pet_file is not None :
222156 inputnode .inputs .pet_file = pet_file
223157
224- val_pet = pe .Node (
225- ValidateImage (),
226- name = 'val_pet' ,
227- mem_gb = DEFAULT_MEMORY_MIN_GB ,
228- )
229-
230- get_dummy = pe .Node (NonsteadyStatesDetector (), name = 'get_dummy' )
231-
232- calc_dummy_scans = pe .Node (
233- niu .Function (function = pass_dummy_scans , output_names = ['skip_vols_num' ]),
234- name = 'calc_dummy_scans' ,
235- run_without_submitting = True ,
236- mem_gb = DEFAULT_MEMORY_MIN_GB ,
237- )
158+ val_pet = pe .Node (ValidateImage (), name = 'val_pet' , mem_gb = DEFAULT_MEMORY_MIN_GB )
238159
239160 workflow .connect ([
240161 (inputnode , val_pet , [('pet_file' , 'in_file' )]),
241162 (val_pet , outputnode , [
242163 ('out_file' , 'pet_file' ),
243164 ('out_report' , 'validation_report' ),
244165 ]),
245- (inputnode , get_dummy , [('pet_file' , 'in_file' )]),
246- (inputnode , calc_dummy_scans , [('dummy_scans' , 'dummy_scans' )]),
247- (get_dummy , calc_dummy_scans , [('n_dummy' , 'algo_dummy_scans' )]),
248- (get_dummy , outputnode , [
249- ('n_dummy' , 'algo_dummy_scans' ),
250- ('t_mask' , 't_mask' ),
251- ]),
252- (calc_dummy_scans , outputnode , [('skip_vols_num' , 'skip_vols' )]),
253- ]) # fmt:skip
166+ ])
254167
255168 return workflow
0 commit comments