From e5cdab4f1af875e5a450925375f73ee6bcaa1869 Mon Sep 17 00:00:00 2001 From: Taylor Salo Date: Mon, 20 Nov 2023 14:44:02 -0500 Subject: [PATCH] Lots of changes. --- aslprep/interfaces/cbf.py | 13 +++-- aslprep/workflows/asl/base.py | 18 +++---- aslprep/workflows/asl/cbf.py | 71 +++++++++++++++++---------- aslprep/workflows/asl/confounds.py | 12 ++--- aslprep/workflows/asl/ge_utils.py | 6 +-- aslprep/workflows/asl/gecbf.py | 22 ++++----- aslprep/workflows/asl/outputs.py | 30 +---------- aslprep/workflows/asl/plotting.py | 19 ++----- aslprep/workflows/asl/qc.py | 38 +++++++++----- aslprep/workflows/asl/registration.py | 14 +++--- 10 files changed, 123 insertions(+), 120 deletions(-) diff --git a/aslprep/interfaces/cbf.py b/aslprep/interfaces/cbf.py index 47032bef2..731c9f60a 100644 --- a/aslprep/interfaces/cbf.py +++ b/aslprep/interfaces/cbf.py @@ -38,7 +38,11 @@ class _RefineMaskInputSpec(BaseInterfaceInputSpec): t1w_mask = File(exists=True, mandatory=True, desc="t1 mask") asl_mask = File(exists=True, mandatory=True, desct="asl mask") - transforms = File(exists=True, mandatory=True, desc="transfom") + aslref2anat_xfm = File( + exists=True, + mandatory=True, + desc="Transform from reference to anatomical space.", + ) class _RefineMaskOutputSpec(TraitedSpec): @@ -67,7 +71,7 @@ def _run_interface(self, runtime): refine_ref_mask( t1w_mask=self.inputs.t1w_mask, ref_asl_mask=self.inputs.asl_mask, - t12ref_transform=self.inputs.transforms, + aslref2anat_xfm=self.inputs.aslref2anat_xfm, tmp_mask=self._results["out_tmp"], refined_mask=self._results["out_mask"], ) @@ -984,7 +988,7 @@ def regmotoasl(asl, m0file): return flt_results.outputs.out_file -def refine_ref_mask(t1w_mask, ref_asl_mask, t12ref_transform, tmp_mask, refined_mask): +def refine_ref_mask(t1w_mask, ref_asl_mask, aslref2anat_xfm, tmp_mask, refined_mask): """Warp T1w mask to ASL space, then use it to mask the ASL mask. TODO: This should not be a function. It uses interfaces, so it should be a workflow. @@ -995,7 +999,8 @@ def refine_ref_mask(t1w_mask, ref_asl_mask, t12ref_transform, tmp_mask, refined_ input_image=t1w_mask, interpolation="NearestNeighbor", reference_image=ref_asl_mask, - transforms=[t12ref_transform], + transforms=[aslref2anat_xfm], + invert_transform_flags=[True], input_image_type=3, output_image=tmp_mask, ) diff --git a/aslprep/workflows/asl/base.py b/aslprep/workflows/asl/base.py index 642307e69..a64f6bcef 100644 --- a/aslprep/workflows/asl/base.py +++ b/aslprep/workflows/asl/base.py @@ -402,13 +402,13 @@ def init_asl_preproc_wf( ]), (asl_fit_wf, cbf_wf, [ ("outputnode.asl_mask", "inputnode.asl_mask"), + ("outputnode.aslref2anat_xfm", "inputnode.aslref2anat_xfm"), + ]), + (asl_native_wf, cbf_wf, [ + ("outputnode.asl_native", "inputnode.asl_file"), ("outputnode.aslcontext", "inputnode.aslcontext"), - ("outputnode.m0scan", "inputnode.m0scan"), - # XXX: doesn't exist! - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), - ("outputnode.aslref_to_anat_xfm", "inputnode.aslref_to_anat_xfm"), + ("outputnode.m0scan_native", "inputnode.m0scan"), ]), - (asl_native_wf, cbf_wf, [("outputnode.asl_native", "inputnode.asl_file")]), ]) # fmt:on @@ -517,8 +517,7 @@ def init_asl_preproc_wf( ]), (asl_fit_wf, parcellate_cbf_wf, [ ("outputnode.asl_mask", "inputnode.asl_mask"), - # XXX: doesn't exist! - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), + ("outputnode.aslref2anat_xfm", "inputnode.aslref2anat_xfm"), ]), ]) # fmt:on @@ -692,7 +691,7 @@ def init_asl_preproc_wf( ]), (asl_fit_wf, cbf_qc_wf, [ ("outputnode.asl_mask", "inputnode.asl_mask"), - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), + ("outputnode.aslref2anat_xfm", "inputnode.aslref2anat_xfm"), ("outputnode.rmsd_file", "inputnode.rmsd_file"), ]), (asl_confounds_wf, cbf_qc_wf, [("outputnode.confounds_file", "inputnode.confounds_file")]), @@ -724,8 +723,7 @@ def init_asl_preproc_wf( ]), (asl_fit_wf, plot_cbf_wf, [ ("outputnode.coreg_aslref", "inputnode.aslref"), - # XXX: doesn't exist - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), + ("outputnode.aslref2anat_xfm", "inputnode.aslref2anat_xfm"), # XXX: Used to use the one from refine_mask ("inputnode.asl_mask", "inputnode.asl_mask"), ]), diff --git a/aslprep/workflows/asl/cbf.py b/aslprep/workflows/asl/cbf.py index dbf8d125d..a769b2288 100644 --- a/aslprep/workflows/asl/cbf.py +++ b/aslprep/workflows/asl/cbf.py @@ -95,9 +95,7 @@ def init_cbf_wf( t1w probability maps t1w_mask t1w mask Nifti - anat_to_aslref_xfm - t1w to asl transformation file - aslref_to_anat_xfm + aslref2anat_xfm asl to t1w transformation file Outputs @@ -228,9 +226,8 @@ def init_cbf_wf( "asl_mask", "t1w_tpms", "t1w_mask", - "anat_to_aslref_xfm", - "aslref_to_anat_xfm", - ] + "aslref2anat_xfm", + ], ), name="inputnode", ) @@ -268,7 +265,7 @@ def init_cbf_wf( (inputnode, refine_mask, [ ("t1w_mask", "t1w_mask"), ("asl_mask", "asl_mask"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "aslref2anat_xfm"), ]), ]) # fmt:on @@ -289,7 +286,11 @@ def _getfiledir(file): return os.path.dirname(file) gm_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="gm_tfm", mem_gb=0.1, ) @@ -298,14 +299,18 @@ def _getfiledir(file): workflow.connect([ (inputnode, gm_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_gm), "input_image"), ]), ]) # fmt:on wm_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="wm_tfm", mem_gb=0.1, ) @@ -314,14 +319,18 @@ def _getfiledir(file): workflow.connect([ (inputnode, wm_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_wm), "input_image"), ]), ]) # fmt:on csf_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="csf_tfm", mem_gb=0.1, ) @@ -330,7 +339,7 @@ def _getfiledir(file): workflow.connect([ (inputnode, csf_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_csf), "input_image"), ]), ]) @@ -563,8 +572,7 @@ def init_compute_cbf_ge_wf( "asl_mask", "t1w_tpms", "t1w_mask", - "anat_to_aslref_xfm", - "aslref_to_anat_xfm", + "aslref2anat_xfm", "m0_file", "m0tr", ] @@ -609,7 +617,11 @@ def _getfiledir(file): # convert tmps to asl_space # extract probability maps csf_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="csf_tfm", mem_gb=0.1, ) @@ -618,14 +630,18 @@ def _getfiledir(file): workflow.connect([ (inputnode, csf_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_csf), "input_image"), ]), ]) # fmt:on wm_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="wm_tfm", mem_gb=0.1, ) @@ -634,14 +650,18 @@ def _getfiledir(file): workflow.connect([ (inputnode, wm_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_wm), "input_image"), ]), ]) # fmt:on gm_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="gm_tfm", mem_gb=0.1, ) @@ -650,7 +670,7 @@ def _getfiledir(file): workflow.connect([ (inputnode, gm_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_gm), "input_image"), ]), ]) @@ -679,7 +699,7 @@ def _getfiledir(file): (inputnode, refine_mask, [ ("t1w_mask", "t1w_mask"), ("asl_mask", "asl_mask"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "aslref2anat_xfm"), ]), ]) # fmt:on @@ -918,7 +938,7 @@ def init_parcellate_cbf_wf( mean_cbf_basil : Undefined or str mean_cbf_gm_basil : Undefined or str asl_mask : str - anat_to_aslref_xfm : str + aslref2anat_xfm : str MNI152NLin2009cAsym_to_anat_xfm : str The transform from MNI152NLin2009cAsym to the subject's anatomical space. @@ -965,7 +985,7 @@ def init_parcellate_cbf_wf( "mean_cbf_basil", "mean_cbf_gm_basil", "asl_mask", - "anat_to_aslref_xfm", + "aslref2anat_xfm", "MNI152NLin2009cAsym_to_anat_xfm", ], ), @@ -1030,7 +1050,7 @@ def init_parcellate_cbf_wf( workflow.connect([ (inputnode, merge_xforms, [ ("MNI152NLin2009cAsym_to_anat_xfm", "in2"), - ("anat_to_aslref_xfm", "in3"), + ("aslref2anat_xfm", "in3"), ]), ]) # fmt:on @@ -1041,6 +1061,7 @@ def init_parcellate_cbf_wf( interpolation="GenericLabel", input_image_type=3, dimension=3, + invert_transform_flags=[False, False, True], ), name="warp_atlases_to_asl_space", iterfield=["input_image"], diff --git a/aslprep/workflows/asl/confounds.py b/aslprep/workflows/asl/confounds.py index 0e4308d1a..6966456a1 100644 --- a/aslprep/workflows/asl/confounds.py +++ b/aslprep/workflows/asl/confounds.py @@ -74,7 +74,7 @@ def init_asl_confounds_wf( Mask of the skull-stripped template image t1w_tpms List of tissue probability maps in T1w space - anat_to_aslref_xfm + aslref2anat_xfm Affine matrix that maps the T1w space into alignment with the native asl space @@ -110,7 +110,7 @@ def init_asl_confounds_wf( "skip_vols", "t1w_mask", "t1w_tpms", - "anat_to_aslref_xfm", + "aslref2anat_xfm", ], ), name="inputnode", @@ -184,7 +184,7 @@ def init_asl_confounds_wf( # Project T1w mask into BOLD space and merge with BOLD brainmask t1w_mask_tfm = pe.Node( - ApplyTransforms(interpolation="MultiLabel"), + ApplyTransforms(interpolation="MultiLabel", invert_transform_flags=[True]), name="t1w_mask_tfm", ) union_mask = pe.Node(niu.Function(function=_binary_union), name="union_mask") @@ -199,7 +199,7 @@ def init_asl_confounds_wf( (inputnode, t1w_mask_tfm, [ ("t1w_mask", "input_image"), ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), ]), (inputnode, union_mask, [("asl_mask", "mask1")]), (t1w_mask_tfm, union_mask, [("output_image", "mask2")]), @@ -223,7 +223,7 @@ def init_asl_confounds_wf( # Resample probseg maps in BOLD space via T1w-to-BOLD transform acc_msk_tfm = pe.MapNode( - ApplyTransforms(interpolation="Gaussian"), + ApplyTransforms(interpolation="Gaussian", invert_transform_flags=[True]), iterfield=["input_image"], name="acc_msk_tfm", mem_gb=0.1, @@ -231,7 +231,7 @@ def init_asl_confounds_wf( # fmt:off workflow.connect([ (inputnode, acc_msk_tfm, [ - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), ("asl_mask", "reference_image"), ]), (acc_masks, acc_msk_tfm, [("out_masks", "input_image")]), diff --git a/aslprep/workflows/asl/ge_utils.py b/aslprep/workflows/asl/ge_utils.py index b1c48fe84..de57fb595 100644 --- a/aslprep/workflows/asl/ge_utils.py +++ b/aslprep/workflows/asl/ge_utils.py @@ -184,7 +184,7 @@ def init_asl_reg_ge_wf( name="inputnode", ) outputnode = pe.Node( - niu.IdentityInterface(fields=["aslref_to_anat_xfm", "anat_to_aslref_xfm", "fallback"]), + niu.IdentityInterface(fields=["aslref2anat_xfm", "anat2aslref_xfm", "fallback"]), name="outputnode", ) @@ -203,8 +203,8 @@ def init_asl_reg_ge_wf( ("t1w_brain", "inputnode.t1w_brain"), ]), (bbr_wf, outputnode, [ - ("outputnode.aslref_to_anat_xfm", "aslref_to_anat_xfm"), - ("outputnode.anat_to_aslref_xfm", "anat_to_aslref_xfm"), + ("outputnode.aslref2anat_xfm", "aslref2anat_xfm"), + ("outputnode.anat2aslref_xfm", "anat2aslref_xfm"), ("outputnode.fallback", "fallback"), ]), ]) diff --git a/aslprep/workflows/asl/gecbf.py b/aslprep/workflows/asl/gecbf.py index dee435af4..e62a6ce9c 100644 --- a/aslprep/workflows/asl/gecbf.py +++ b/aslprep/workflows/asl/gecbf.py @@ -382,8 +382,8 @@ def init_asl_gepreproc_wf( ]), (t1w_brain, asl_reg_wf, [("out_file", "inputnode.t1w_brain")]), (asl_reg_wf, asl_derivatives_wf, [ - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), - ("outputnode.aslref_to_anat_xfm", "inputnode.aslref_to_anat_xfm"), + ("outputnode.anat2aslref_xfm", "inputnode.anat2aslref_xfm"), + ("outputnode.aslref2anat_xfm", "inputnode.aslref2anat_xfm"), ]), (asl_reg_wf, summary, [("outputnode.fallback", "fallback")]), ]) @@ -414,8 +414,8 @@ def init_asl_gepreproc_wf( ("outputnode.m0tr", "inputnode.m0tr"), ]), (asl_reg_wf, cbf_wf, [ - ("outputnode.aslref_to_anat_xfm", "inputnode.aslref_to_anat_xfm"), - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), + ("outputnode.aslref2anat_xfm", "inputnode.aslref2anat_xfm"), + ("outputnode.anat2aslref_xfm", "inputnode.anat2aslref_xfm"), ]), ]) # fmt:on @@ -452,7 +452,7 @@ def init_asl_gepreproc_wf( # keeping this separate from the top for symmetry with non-GE workflow (asl_split, asl_t1_trans_wf, [("out_files", "inputnode.asl_split")]), (asl_reg_wf, asl_t1_trans_wf, [ - ("outputnode.aslref_to_anat_xfm", "inputnode.aslref_to_anat_xfm"), + ("outputnode.aslref2anat_xfm", "inputnode.aslref2anat_xfm"), ]), ]) # fmt:on @@ -479,7 +479,7 @@ def init_asl_gepreproc_wf( # fmt:off workflow.connect([ (inputnode, refine_mask, [("t1w_mask", "t1w_mask")]), - (asl_reg_wf, refine_mask, [("outputnode.anat_to_aslref_xfm", "transforms")]), + (asl_reg_wf, refine_mask, [("outputnode.anat2aslref_xfm", "transforms")]), (asl_reference_wf, refine_mask, [("outputnode.asl_mask", "asl_mask")]), ]) # fmt:on @@ -502,7 +502,7 @@ def init_asl_gepreproc_wf( ]), (refine_mask, cbf_qc_wf, [("out_mask", "inputnode.asl_mask")]), (asl_reg_wf, cbf_qc_wf, [ - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), + ("outputnode.anat2aslref_xfm", "inputnode.anat2aslref_xfm"), ]), (cbf_qc_wf, asl_derivatives_wf, [("outputnode.qc_file", "inputnode.qc_file")]), (cbf_qc_wf, summary, [("outputnode.qc_file", "qc_file")]), @@ -552,7 +552,7 @@ def init_asl_gepreproc_wf( # fmt:off workflow.connect([ - (asl_reg_wf, aslmask_to_t1w, [("outputnode.aslref_to_anat_xfm", "transforms")]), + (asl_reg_wf, aslmask_to_t1w, [("outputnode.aslref2anat_xfm", "transforms")]), (asl_t1_trans_wf, aslmask_to_t1w, [("outputnode.asl_mask_t1", "reference_image")]), (refine_mask, aslmask_to_t1w, [("out_mask", "input_image")]), (aslmask_to_t1w, asl_derivatives_wf, [("output_image", "inputnode.asl_mask_t1")]), @@ -582,7 +582,7 @@ def init_asl_gepreproc_wf( ("asl_file", "inputnode.name_source"), ]), (asl_reg_wf, asl_std_trans_wf, [ - ("outputnode.aslref_to_anat_xfm", "inputnode.aslref_to_anat_xfm"), + ("outputnode.aslref2anat_xfm", "inputnode.aslref2anat_xfm"), ]), (refine_mask, asl_std_trans_wf, [("out_mask", "inputnode.asl_mask")]), (asl_split, asl_std_trans_wf, [("out_files", "inputnode.asl_split")]), @@ -645,7 +645,7 @@ def init_asl_gepreproc_wf( ]), (asl_reference_wf, plot_cbf_wf, [("outputnode.ref_image_brain", "inputnode.aslref")]), (asl_reg_wf, plot_cbf_wf, [ - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), + ("outputnode.anat2aslref_xfm", "inputnode.anat2aslref_xfm"), ]), (refine_mask, plot_cbf_wf, [("out_mask", "inputnode.asl_mask")]), ]) @@ -674,7 +674,7 @@ def init_asl_gepreproc_wf( ]), (refine_mask, parcellate_cbf_wf, [("out_mask", "inputnode.asl_mask")]), (asl_reg_wf, parcellate_cbf_wf, [ - ("outputnode.anat_to_aslref_xfm", "inputnode.anat_to_aslref_xfm"), + ("outputnode.anat2aslref_xfm", "inputnode.anat2aslref_xfm"), ]), (parcellate_cbf_wf, asl_derivatives_wf, [ ("outputnode.atlas_names", "inputnode.atlas_names"), diff --git a/aslprep/workflows/asl/outputs.py b/aslprep/workflows/asl/outputs.py index f88af453e..e482b05b9 100644 --- a/aslprep/workflows/asl/outputs.py +++ b/aslprep/workflows/asl/outputs.py @@ -834,8 +834,7 @@ def init_asl_derivatives_wf( "asl_mask_native", # Transforms "hmc_xforms", - "aslref_to_anat_xfm", - "anat_to_aslref_xfm", + "aslref2anat_xfm", # Standard CBF outputs "cbf_ts_native", "cbf_ts_cifti", @@ -935,31 +934,6 @@ def init_asl_derivatives_wf( ]) # fmt:on - # write transform matrix file between asl native space and T1w - ds_t1w_to_asl_xform = pe.Node( - DerivativesDataSink( - base_directory=config.execution.aslprep_dir, - to="scanner", - mode="image", - suffix="xfm", - extension=".txt", - dismiss_entities=("echo",), - **{"from": "T1w"}, - ), - name="ds_t1w_to_asl_xform", - run_without_submitting=True, - mem_gb=config.DEFAULT_MEMORY_MIN_GB, - ) - - # fmt:off - workflow.connect([ - (inputnode, ds_t1w_to_asl_xform, [ - ("source_file", "source_file"), - ("anat_to_aslref_xfm", "in_file"), - ]), - ]) - # fmt:on - ds_asl_to_t1w_xform = pe.Node( DerivativesDataSink( base_directory=config.execution.aslprep_dir, @@ -979,7 +953,7 @@ def init_asl_derivatives_wf( workflow.connect([ (inputnode, ds_asl_to_t1w_xform, [ ("source_file", "source_file"), - ("aslref_to_anat_xfm", "in_file"), + ("aslref2anat_xfm", "in_file"), ]), ]) # fmt:on diff --git a/aslprep/workflows/asl/plotting.py b/aslprep/workflows/asl/plotting.py index 973bf1edb..08c01f645 100644 --- a/aslprep/workflows/asl/plotting.py +++ b/aslprep/workflows/asl/plotting.py @@ -44,7 +44,7 @@ def init_plot_cbf_wf( "aslref", "asl_mask", "t1w_dseg", - "anat_to_aslref_xfm", + "aslref2anat_xfm", "std2anat_xfm", # If plot_timeseries is True "crown_mask", @@ -70,18 +70,6 @@ def init_plot_cbf_wf( name="inputnode", ) - # String together transforms from MNI152NLin2009cAsym to ASL reference - mrg_xfms = pe.Node(niu.Merge(2), name="mrg_xfms") - - # fmt:off - workflow.connect([ - (inputnode, mrg_xfms, [ - ("std2anat_xfm", "in1"), - ("anat_to_aslref_xfm", "in2"), - ]), - ]) - # fmt:on - # Warp dseg file from T1w space to ASL reference space warp_t1w_dseg_to_aslref = pe.Node( ApplyTransforms( @@ -89,6 +77,7 @@ def init_plot_cbf_wf( dimension=3, default_value=0, interpolation="MultiLabel", + invert_transform_flags=[True], ), name="warp_t1w_dseg_to_aslref", ) @@ -98,7 +87,7 @@ def init_plot_cbf_wf( (inputnode, warp_t1w_dseg_to_aslref, [ ("asl_mask", "reference_image"), ("t1w_dseg", "input_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), ]), ]) # fmt:on @@ -166,7 +155,7 @@ def init_plot_cbf_wf( ("std2anat_xfm", "inputnode.std2anat_xfm"), ("cbf_ts", "inputnode.bold"), ("asl_mask", "inputnode.bold_mask"), - ("anat_to_aslref_xfm", "inputnode.t1_bold_xform"), + ("aslref2anat_xfm", "inputnode.aslref2anat_xfm"), ("crown_mask", "inputnode.crown_mask"), (("acompcor_masks", _select_last_in_list), "inputnode.acompcor_mask"), ]), diff --git a/aslprep/workflows/asl/qc.py b/aslprep/workflows/asl/qc.py index b8562bdfe..7742675f1 100644 --- a/aslprep/workflows/asl/qc.py +++ b/aslprep/workflows/asl/qc.py @@ -54,8 +54,8 @@ def init_cbf_qc_wf( asl mask NIFTI file t1w_tpms t1w probability maps - anat_to_aslref_xfm - t1w to asl transformation file + aslref2anat_xfm + aslref to t1w transformation file asl_mask_std : list Since ASLPrep always includes MNI152NLin2009cAsym as a standard space, this should always be provided. @@ -79,7 +79,7 @@ def init_cbf_qc_wf( "asl_mask", "t1w_mask", "t1w_tpms", - "anat_to_aslref_xfm", + "aslref2anat_xfm", "asl_mask_std", # CBF inputs "mean_cbf", @@ -108,7 +108,11 @@ def _pick_csf(files): return files[2] gm_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="gm_tfm", mem_gb=0.1, ) @@ -117,14 +121,18 @@ def _pick_csf(files): workflow.connect([ (inputnode, gm_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_gm), "input_image"), ]), ]) # fmt:on wm_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="wm_tfm", mem_gb=0.1, ) @@ -133,14 +141,18 @@ def _pick_csf(files): workflow.connect([ (inputnode, wm_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_wm), "input_image"), ]), ]) # fmt:on csf_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="csf_tfm", mem_gb=0.1, ) @@ -149,14 +161,18 @@ def _pick_csf(files): workflow.connect([ (inputnode, csf_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), (("t1w_tpms", _pick_csf), "input_image"), ]), ]) # fmt:on mask_tfm = pe.Node( - ApplyTransforms(interpolation="NearestNeighbor", float=True), + ApplyTransforms( + interpolation="NearestNeighbor", + float=True, + invert_transform_flags=[True], + ), name="masktonative", mem_gb=0.1, ) @@ -165,7 +181,7 @@ def _pick_csf(files): workflow.connect([ (inputnode, mask_tfm, [ ("asl_mask", "reference_image"), - ("anat_to_aslref_xfm", "transforms"), + ("aslref2anat_xfm", "transforms"), ("t1w_mask", "input_image"), ]), ]) diff --git a/aslprep/workflows/asl/registration.py b/aslprep/workflows/asl/registration.py index de9027712..59a52e140 100644 --- a/aslprep/workflows/asl/registration.py +++ b/aslprep/workflows/asl/registration.py @@ -351,10 +351,10 @@ def init_fsl_bbr_wf(use_bbr, asl2t1w_dof, asl2t1w_init, sloppy=False, name="fsl_ Outputs ------- - aslref_to_anat_xfm + aslref2anat_xfm Affine transform from ``ref_asl_brain`` to T1w space (ITK format) - anat_to_aslref_xfm - Affine transform from T1 space to ASL space (ITK format) + aslref2anat_xfm + Affine transform from ASL space to T1 space (ITK format) out_report Reportlet for assessing registration quality fallback @@ -383,8 +383,8 @@ def init_fsl_bbr_wf(use_bbr, asl2t1w_dof, asl2t1w_init, sloppy=False, name="fsl_ outputnode = pe.Node( niu.IdentityInterface( [ - "aslref_to_anat_xfm", - "anat_to_aslref_xfm", + "aslref2anat_xfm", + "anat2aslref_xfm", "out_report", "fallback", ] @@ -439,8 +439,8 @@ def init_fsl_bbr_wf(use_bbr, asl2t1w_dof, asl2t1w_init, sloppy=False, name="fsl_ ("t1w_brain", "source_file"), ]), (invt_bbr, fsl2itk_inv, [("out_file", "transform_file")]), - (fsl2itk_fwd, outputnode, [("itk_transform", "aslref_to_anat_xfm")]), - (fsl2itk_inv, outputnode, [("itk_transform", "anat_to_aslref_xfm")]), + (fsl2itk_fwd, outputnode, [("itk_transform", "aslref2anat_xfm")]), + (fsl2itk_inv, outputnode, [("itk_transform", "anat2aslref_xfm")]), ]) # fmt:on