diff --git a/aslprep/interfaces/utility.py b/aslprep/interfaces/utility.py index 60af7e8eb..54003e9b8 100644 --- a/aslprep/interfaces/utility.py +++ b/aslprep/interfaces/utility.py @@ -215,6 +215,9 @@ def _run_interface(self, runtime): out_par = [None] * aslcontext.shape[0] out_mat_files = [None] * aslcontext.shape[0] + assert len(self.inputs.volume_types) == len(self.inputs.mat_files) + assert len(self.inputs.volume_types) == len(self.inputs.par_files) + for i_type, volume_type in enumerate(self.inputs.volume_types): type_mat_files = self.inputs.mat_files[i_type] type_par_file = self.inputs.par_files[i_type] diff --git a/aslprep/workflows/asl/hmc.py b/aslprep/workflows/asl/hmc.py index 80671dd2b..cf872f6a8 100644 --- a/aslprep/workflows/asl/hmc.py +++ b/aslprep/workflows/asl/hmc.py @@ -140,6 +140,17 @@ def init_asl_hmc_wf( (split_by_volume_type, mcflirt, [("out_files", "in_file")]), ]) # fmt:skip + listify_mat_files = pe.MapNode( + niu.Function( + function=listify, + inputnames=["value"], + outputnames=["value"], + ), + name="listify_mat_files", + iterfield=["value"], + ) + workflow.connect([(mcflirt, listify_mat_files, [("mat_file", "value")])]) + # Combine the motpars files, mat files, and rms files across the different MCFLIRTed files, # based on the aslcontext file. combine_motpars = pe.Node( @@ -149,26 +160,21 @@ def init_asl_hmc_wf( workflow.connect([ (inputnode, combine_motpars, [("aslcontext", "aslcontext")]), (split_by_volume_type, combine_motpars, [("volume_types", "volume_types")]), - (mcflirt, combine_motpars, [ - (("mat_file", listify), "mat_files"), - ("par_file", "par_files"), - ]), + (mcflirt, combine_motpars, [("par_file", "par_files")]), + (listify_mat_files, combine_motpars, [("value", "mat_files")]), ]) # fmt:skip # Use rmsdiff to calculate relative rms from transform files. rmsdiff = pe.Node(PairwiseRMSDiff(), name="rmsdiff") - # fmt:off workflow.connect([ (inputnode, rmsdiff, [("raw_ref_image", "ref_file")]), (combine_motpars, rmsdiff, [("mat_file_list", "in_files")]), (rmsdiff, outputnode, [("out_file", "rmsd_file")]), - ]) - # fmt:on + ]) # fmt:skip fsl2itk = pe.Node(MCFLIRT2ITK(), name="fsl2itk", mem_gb=0.05, n_procs=omp_nthreads) - # fmt:off workflow.connect([ (inputnode, fsl2itk, [ ("raw_ref_image", "in_source"), @@ -176,19 +182,16 @@ def init_asl_hmc_wf( ]), (combine_motpars, fsl2itk, [("mat_file_list", "in_files")]), (fsl2itk, outputnode, [("out_file", "xforms")]), - ]) - # fmt:on + ]) # fmt:skip normalize_motion = pe.Node( NormalizeMotionParams(format="FSL"), name="normalize_motion", mem_gb=DEFAULT_MEMORY_MIN_GB, ) - # fmt:off workflow.connect([ (combine_motpars, normalize_motion, [("combined_par_file", "in_file")]), (normalize_motion, outputnode, [("out_file", "movpar_file")]), - ]) - # fmt:on + ]) # fmt:skip return workflow