From 4d91287a0434d90bce89460786bab619c05770f4 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 15 Dec 2025 15:46:32 +0100 Subject: [PATCH 01/47] parcel for marmo --- macapype/pipelines/full_pipelines.py | 20 +++++++++++++++++++ .../params_segment_marmo_ants_4animal.json | 2 ++ workflows/segment_pnh.py | 12 +++++++++++ 3 files changed, 34 insertions(+) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index f49463fd6..4cc8e9748 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -365,6 +365,26 @@ def create_brain_segment_from_mask_pipe( brain_segment_pipe.connect( reg, 'inv_transfo_file', register_csf_to_nat, "in_matrix_file") + + + if "template_parcel" in params_template.keys(): + + # seg + register_parcel_to_nat = pe.Node( + fsl.ApplyXFM(), name="register_parcel_to_nat") + register_parcel_to_nat.inputs.interp = "nearestneighbour" + + register_parcel_to_nat.inputs.in_file = params_template[ + "template_parcel"] + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + register_parcel_to_nat, 'reference') + + brain_segment_pipe.connect( + reg, 'inv_transfo_file', + register_parcel_to_nat, "in_matrix_file") + + else: print("##### Error, no coregistration method is defined") return brain_segment_pipe diff --git a/workflows/params_segment_marmo_ants_4animal.json b/workflows/params_segment_marmo_ants_4animal.json index b96d603f4..4775608c0 100644 --- a/workflows/params_segment_marmo_ants_4animal.json +++ b/workflows/params_segment_marmo_ants_4animal.json @@ -42,6 +42,8 @@ { "reg": { + "nonlin_reg":{}, + "n": 2, "m": "ref", "dof": 12 diff --git a/workflows/segment_pnh.py b/workflows/segment_pnh.py index f38433c6b..6904164e6 100644 --- a/workflows/segment_pnh.py +++ b/workflows/segment_pnh.py @@ -305,6 +305,18 @@ def create_main_workflow(cmd, data_dir, process_dir, soft, species, datatypes, "Could not find template_seg {}".format(template_seg) params_template["template_seg"] = template_seg + elif len(template_files) == 4: + + template_seg = os.path.join(template_path, template_files[2]) + assert os.path.exists(template_seg), \ + "Could not find template_seg {}".format(template_seg) + params_template["template_seg"] = template_seg + + template_parcel = os.path.join(template_path, template_files[3]) + assert os.path.exists(template_parcel), \ + "Could not find template_parcel {}".format(template_parcel) + params_template["template_parcel"] = template_parcel + elif len(template_files) == 5: template_gm = os.path.join(template_path, template_files[2]) From 475d1ac385e0bb7ec7141edb4692edd483d7a838 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 15 Dec 2025 15:50:08 +0100 Subject: [PATCH 02/47] reg / nonlinreg --- macapype/pipelines/full_pipelines.py | 5 ++--- workflows/params_segment_marmo_ants_4animal.json | 2 -- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 4cc8e9748..25651d106 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -281,9 +281,8 @@ def create_brain_segment_from_mask_pipe( reg.inputs.refb_file = params_template["template_brain"] - if "nonlin_reg" in params["reg"]: - reg.inputs.refw_file = params_template["template_head"] - reg.inputs.k = True + reg.inputs.refw_file = params_template["template_head"] + reg.inputs.k = True brain_segment_pipe.connect( inputnode, 'debiased_T1', diff --git a/workflows/params_segment_marmo_ants_4animal.json b/workflows/params_segment_marmo_ants_4animal.json index 4775608c0..b96d603f4 100644 --- a/workflows/params_segment_marmo_ants_4animal.json +++ b/workflows/params_segment_marmo_ants_4animal.json @@ -42,8 +42,6 @@ { "reg": { - "nonlin_reg":{}, - "n": 2, "m": "ref", "dof": 12 From b1990c2ddb7040666716035360a695218ec75155 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 15 Dec 2025 17:07:10 +0100 Subject: [PATCH 03/47] added nonlin_warp_file and nonlin_invwarp_file as non mandatory outputs --- macapype/nodes/register.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/macapype/nodes/register.py b/macapype/nodes/register.py index 3b1fa9d94..9e1670b5d 100644 --- a/macapype/nodes/register.py +++ b/macapype/nodes/register.py @@ -221,6 +221,12 @@ class IterREGBETOutputSpec(TraitedSpec): exists=True, desc="inv_transfo_file") + nonlin_warp_file = File( + desc="nonlin_warp_file") + + nonlin_invwarp_file = File( + desc="nonlin_invwarp_file") + class IterREGBET(CommandLine): """ @@ -334,8 +340,14 @@ def _list_outputs(self): outfile = self._gen_outfilename() outputs["warp_file"] = os.path.abspath(outfile + ".nii.gz") + outputs["transfo_file"] = os.path.abspath(outfile + ".xfm") outputs["inv_transfo_file"] = os.path.abspath(outfile + "_inverse.xfm") + + if isdefined(self.inputs.refw_file) and self.inputs.k==True: + outputs["nonlin_warp_file"] = os.path.abspath(outfile + "_Warp.nii.gz") + outputs["nonlin_invwarp_file"] = os.path.abspath(outfile + "_InverseWarp.nii.gz") + return outputs From b78bd018909e354c67f175ecaeb31733ffa3b7bf Mon Sep 17 00:00:00 2001 From: David Meunier Date: Wed, 17 Dec 2025 10:11:52 +0100 Subject: [PATCH 04/47] using nonlin version --- macapype/bash/IterREGBET.sh | 3 +- macapype/pipelines/full_pipelines.py | 57 ++++++++++++++++++++++------ 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/macapype/bash/IterREGBET.sh b/macapype/bash/IterREGBET.sh index adf3a79ef..b8f0a3e4a 100644 --- a/macapype/bash/IterREGBET.sh +++ b/macapype/bash/IterREGBET.sh @@ -279,7 +279,8 @@ for ((i = 1 ; i <= $NITER ; i++)); do # Extra whole-head non-linear registration, if wanted if [[ -n $REF_WHOLE ]] && [[ $i == $NITER ]]; then echo "FNIRT..." - "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} # compute warp + #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} # compute warp + "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=1,1 --subsamp=4,2 --infwhm=6,6 --reffwhm=4,4 --estint=false --applyrefmask=false --applyinmask=false # compute warp echo "Inverting warp..." "${FSLPREFIX}invwarp" -r $IN_WHOLE -w ${WARP[WH_WARP]} -o ${WARP[WH_INVWARP]} echo "Applying inverse warp..." diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 25651d106..295a921d1 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -300,18 +300,34 @@ def create_brain_segment_from_mask_pipe( # seg register_seg_to_nat = pe.Node( - fsl.ApplyXFM(), name="register_seg_to_nat") - register_seg_to_nat.inputs.interp = "nearestneighbour" + fsl.ApplyWarp(), name="register_seg_to_nat") + + register_seg_to_nat.inputs.interp = "nn" register_seg_to_nat.inputs.in_file = params_template[ "template_seg"] brain_segment_pipe.connect( inputnode, 'masked_debiased_T1', - register_seg_to_nat, 'reference') + register_seg_to_nat, 'ref_file') brain_segment_pipe.connect( - reg, 'inv_transfo_file', - register_seg_to_nat, "in_matrix_file") + reg, 'nonlin_invwarp_file', + register_seg_to_nat, "field_file") + # + # # seg + # register_seg_to_nat = pe.Node( + # fsl.ApplyXFM(), name="register_seg_to_nat") + # register_seg_to_nat.inputs.interp = "nearestneighbour" + # + # register_seg_to_nat.inputs.in_file = params_template[ + # "template_seg"] + # brain_segment_pipe.connect( + # inputnode, 'masked_debiased_T1', + # register_seg_to_nat, 'reference') + # + # brain_segment_pipe.connect( + # reg, 'inv_transfo_file', + # register_seg_to_nat, "in_matrix_file") else: # gm @@ -370,19 +386,38 @@ def create_brain_segment_from_mask_pipe( # seg register_parcel_to_nat = pe.Node( - fsl.ApplyXFM(), name="register_parcel_to_nat") - register_parcel_to_nat.inputs.interp = "nearestneighbour" + fsl.ApplyWarp(), name="register_parcel_to_nat") + + register_parcel_to_nat.inputs.interp = "nn" register_parcel_to_nat.inputs.in_file = params_template[ "template_parcel"] brain_segment_pipe.connect( inputnode, 'masked_debiased_T1', - register_parcel_to_nat, 'reference') + register_parcel_to_nat, 'ref_file') brain_segment_pipe.connect( - reg, 'inv_transfo_file', - register_parcel_to_nat, "in_matrix_file") - + reg, 'nonlin_invwarp_file', + register_parcel_to_nat, "field_file") + +# +# +# +# # seg +# register_parcel_to_nat = pe.Node( +# fsl.ApplyXFM(), name="register_parcel_to_nat") +# register_parcel_to_nat.inputs.interp = "nearestneighbour" +# +# register_parcel_to_nat.inputs.in_file = params_template[ +# "template_parcel"] +# brain_segment_pipe.connect( +# inputnode, 'masked_debiased_T1', +# register_parcel_to_nat, 'reference') +# +# brain_segment_pipe.connect( +# reg, 'inv_transfo_file', +# register_parcel_to_nat, "in_matrix_file") +# else: print("##### Error, no coregistration method is defined") From 99e76ad0c89c970408daf76204dd0618f194f967 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Wed, 17 Dec 2025 11:15:08 +0100 Subject: [PATCH 05/47] modif params lower3 --- macapype/bash/IterREGBET.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/bash/IterREGBET.sh b/macapype/bash/IterREGBET.sh index b8f0a3e4a..5c0c2acd1 100644 --- a/macapype/bash/IterREGBET.sh +++ b/macapype/bash/IterREGBET.sh @@ -280,7 +280,7 @@ for ((i = 1 ; i <= $NITER ; i++)); do if [[ -n $REF_WHOLE ]] && [[ $i == $NITER ]]; then echo "FNIRT..." #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} # compute warp - "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=1,1 --subsamp=4,2 --infwhm=6,6 --reffwhm=4,4 --estint=false --applyrefmask=false --applyinmask=false # compute warp + "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=3,3 --subsamp=4,2 --infwhm=6,4 --reffwhm=4,2 --estint=false --applyrefmask=false --applyinmask=false # compute warp echo "Inverting warp..." "${FSLPREFIX}invwarp" -r $IN_WHOLE -w ${WARP[WH_WARP]} -o ${WARP[WH_INVWARP]} echo "Applying inverse warp..." From da270fb4bfd8cbff3dd51b380b59ab2821e65ee7 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Wed, 17 Dec 2025 11:17:53 +0100 Subject: [PATCH 06/47] stderr --- macapype/bash/IterREGBET.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/macapype/bash/IterREGBET.sh b/macapype/bash/IterREGBET.sh index 5c0c2acd1..e5d98dc7b 100644 --- a/macapype/bash/IterREGBET.sh +++ b/macapype/bash/IterREGBET.sh @@ -278,12 +278,12 @@ for ((i = 1 ; i <= $NITER ; i++)); do # Extra whole-head non-linear registration, if wanted if [[ -n $REF_WHOLE ]] && [[ $i == $NITER ]]; then - echo "FNIRT..." + echo "FNIRT..." 1>&2 #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} # compute warp "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=3,3 --subsamp=4,2 --infwhm=6,4 --reffwhm=4,2 --estint=false --applyrefmask=false --applyinmask=false # compute warp - echo "Inverting warp..." + echo "Inverting warp..." 1>&2 "${FSLPREFIX}invwarp" -r $IN_WHOLE -w ${WARP[WH_WARP]} -o ${WARP[WH_INVWARP]} - echo "Applying inverse warp..." + echo "Applying inverse warp..." 1>&2 "${FSLPREFIX}applywarp" --ref=$IN_WHOLE --in=${TMP[REF_MASK]} --out=$IN_OUT_MASK --warp=${WARP[WH_INVWARP]} --interp=nn else "${FSLPREFIX}flirt" -in ${TMP[REF_MASK]} -ref $IN_WHOLE -out $IN_OUT_MASK -interp nearestneighbour -applyxfm -init $R2I_XFM # move brain mask to in_file From 8e19afe101987a08dd880dd16cce740011b99282 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Wed, 17 Dec 2025 14:34:07 +0100 Subject: [PATCH 07/47] removed denoise for ants_4animal --- workflows/params_segment_marmo_ants_4animal.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/workflows/params_segment_marmo_ants_4animal.json b/workflows/params_segment_marmo_ants_4animal.json index b96d603f4..c27d63ed9 100644 --- a/workflows/params_segment_marmo_ants_4animal.json +++ b/workflows/params_segment_marmo_ants_4animal.json @@ -17,9 +17,6 @@ "rig_only_flag":true } }, - "denoise": - { - }, "fast": { "args": "-l 3" From aef3f248421a486abec41199a024d2afd1a706bd Mon Sep 17 00:00:00 2001 From: David Meunier Date: Wed, 17 Dec 2025 16:05:08 +0100 Subject: [PATCH 08/47] reg_f3d --- macapype/pipelines/full_pipelines.py | 140 +++++++++++++++++- .../params_segment_marmo_ants_4animal.json | 5 +- 2 files changed, 140 insertions(+), 5 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 295a921d1..1d4ed33f5 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -9,7 +9,8 @@ from nipype.interfaces.ants.utils import ImageMath -from nipype.interfaces.niftyreg.regutils import RegResample +from nipype.interfaces.niftyreg.reg import RegF3D +from nipype.interfaces.niftyreg.regutils import RegResample, RegTransform from ..utils.utils_nodes import NodeParams @@ -419,6 +420,143 @@ def create_brain_segment_from_mask_pipe( # register_parcel_to_nat, "in_matrix_file") # + elif "reg_f3d" in params: + # Iterative registration to the template + reg_f3d = pe.Node( + RegF3D, + name='reg_f3d') + + reg_f3d.inputs.rmask_file= params_template["template_brain"] + + reg_f3d.inputs.ref_file = params_template["template_head"] + + brain_segment_pipe.connect( + inputnode, 'debiased_T1', + flo_file, 'inw_file') + + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + fmask_file, 'inb_file') +# +# # merge_tuple +# merge_tuple = pe.Node( +# Merge(3), name="merge_tuple") +# +# brain_segment_pipe.connect( +# reg_f3d, 'masked_debiased_T1', +# merge_tuple, 'in1') +# +# brain_segment_pipe.connect( +# reg, 'nonlin_invwarp_file', +# merge_tuple, "in2") +# +# # inv_transfo +# inv_transfo = pe.Node( +# RegTransform(), name="inv_transfo") +# +# inv_transfo.inputs.interp = "nn" +# +# inv_transfo.inputs.in_file = params_template[ +# "template_seg"] +# +# inv_transfo.connect( +# merge_tuple, 'out', +# register_seg_to_nat, 'inv_nrr_input') +# +# brain_segment_pipe.connect( +# reg, 'nonlin_invwarp_file', +# register_seg_to_nat, "field_file") +# + if "template_seg" in params_template.keys(): + + # seg + register_seg_to_nat = pe.Node( + RegResample(), name="register_seg_to_nat") + + register_seg_to_nat.inputs.inter_val = "NN" + + register_seg_to_nat.inputs.flo_file = params_template[ + "template_seg"] + + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + register_seg_to_nat, 'ref_file') + + brain_segment_pipe.connect( + reg_f3d, 'invcpp_file', + register_seg_to_nat, "trans_file") + else: + #TODO + # gm + register_gm_to_nat = pe.Node( + fsl.ApplyXFM(), name="register_gm_to_nat") + register_gm_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM + register_gm_to_nat.inputs.interp = "nearestneighbour" + + register_gm_to_nat.inputs.in_file = \ + params_template["template_gm"] + + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + register_gm_to_nat, 'reference') + + brain_segment_pipe.connect( + reg, 'inv_transfo_file', + register_gm_to_nat, "in_matrix_file") + + # wm + register_wm_to_nat = pe.Node( + fsl.ApplyXFM(), name="register_wm_to_nat") + register_wm_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM + register_wm_to_nat.inputs.interp = "nearestneighbour" + + register_wm_to_nat.inputs.in_file = \ + params_template["template_wm"] + + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + register_wm_to_nat, 'reference') + + brain_segment_pipe.connect( + reg, 'inv_transfo_file', + register_wm_to_nat, "in_matrix_file") + + # csf + register_csf_to_nat = pe.Node( + fsl.ApplyXFM(), name="register_csf_to_nat") + register_csf_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM + register_csf_to_nat.inputs.interp = "nearestneighbour" + + register_csf_to_nat.inputs.in_file = \ + params_template["template_csf"] + + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + register_csf_to_nat, 'reference') + + brain_segment_pipe.connect( + reg, 'inv_transfo_file', + register_csf_to_nat, "in_matrix_file") + + + if "template_parcel" in params_template.keys(): + + register_parcel_to_nat = pe.Node( + RegResample(), name="register_parcel_to_nat") + + register_parcel_to_nat.inputs.inter_val = "NN" + + register_parcel_to_nat.inputs.flo_file = params_template[ + "template_parcel"] + + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + register_parcel_to_nat, 'ref_file') + + brain_segment_pipe.connect( + reg_f3d, 'invcpp_file', + register_parcel_to_nat, "trans_file") + else: print("##### Error, no coregistration method is defined") return brain_segment_pipe diff --git a/workflows/params_segment_marmo_ants_4animal.json b/workflows/params_segment_marmo_ants_4animal.json index c27d63ed9..746083da6 100644 --- a/workflows/params_segment_marmo_ants_4animal.json +++ b/workflows/params_segment_marmo_ants_4animal.json @@ -37,11 +37,8 @@ }, "brain_segment_pipe": { - "reg": + "reg_f3d": { - "n": 2, - "m": "ref", - "dof": 12 }, "segment_atropos_pipe": { From 80120d6414133f68b7903639193f5088b0e818f3 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Wed, 17 Dec 2025 16:06:10 +0100 Subject: [PATCH 09/47] () --- macapype/pipelines/full_pipelines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 1d4ed33f5..b88b12d52 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -423,7 +423,7 @@ def create_brain_segment_from_mask_pipe( elif "reg_f3d" in params: # Iterative registration to the template reg_f3d = pe.Node( - RegF3D, + RegF3D(), name='reg_f3d') reg_f3d.inputs.rmask_file= params_template["template_brain"] From 4f96bbbad2bb1a15afdb357861e7309b295c893f Mon Sep 17 00:00:00 2001 From: David Meunier Date: Wed, 17 Dec 2025 16:07:32 +0100 Subject: [PATCH 10/47] reg_f3d --- macapype/pipelines/full_pipelines.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index b88b12d52..e17b6cf9a 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -432,11 +432,11 @@ def create_brain_segment_from_mask_pipe( brain_segment_pipe.connect( inputnode, 'debiased_T1', - flo_file, 'inw_file') + reg_f3d, 'flo_file') brain_segment_pipe.connect( inputnode, 'masked_debiased_T1', - fmask_file, 'inb_file') + reg_f3d, 'fmask_file') # # # merge_tuple # merge_tuple = pe.Node( From 49fafb53393acd27aa47bf22d2add2c5b699909c Mon Sep 17 00:00:00 2001 From: David Meunier Date: Wed, 17 Dec 2025 16:13:06 +0100 Subject: [PATCH 11/47] reg_f3d --- macapype/pipelines/full_pipelines.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index e17b6cf9a..eb4b86f7f 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -579,6 +579,11 @@ def create_brain_segment_from_mask_pipe( brain_segment_pipe.connect( register_seg_to_nat, 'out_file', segment_atropos_pipe, "inputnode.seg_file") + + elif "reg_f3d" in params: + brain_segment_pipe.connect( + register_seg_to_nat, 'out_file', + segment_atropos_pipe, "inputnode.seg_file") else: print("#### create_segment_atropos_pipe (3 tissues) ") From 585a7f9868c6fc0f6f8c5e189878b35945abb472 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 13:49:39 +0100 Subject: [PATCH 12/47] parcel and parcel_gm --- macapype/pipelines/full_pipelines.py | 213 ++++++++++++--------------- 1 file changed, 95 insertions(+), 118 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index eb4b86f7f..8dbff6a41 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -251,7 +251,7 @@ def create_brain_segment_from_mask_pipe( # creating outputnode outputnode = pe.Node( niu.IdentityInterface( - fields=["segmented_file", + fields=["segmented_file", "stereo_parcel", "stereo_parcel_gm", "threshold_gm", "threshold_wm", "threshold_csf", "prob_gm", "prob_wm", "prob_csf"]), name='outputnode') @@ -401,25 +401,6 @@ def create_brain_segment_from_mask_pipe( reg, 'nonlin_invwarp_file', register_parcel_to_nat, "field_file") -# -# -# -# # seg -# register_parcel_to_nat = pe.Node( -# fsl.ApplyXFM(), name="register_parcel_to_nat") -# register_parcel_to_nat.inputs.interp = "nearestneighbour" -# -# register_parcel_to_nat.inputs.in_file = params_template[ -# "template_parcel"] -# brain_segment_pipe.connect( -# inputnode, 'masked_debiased_T1', -# register_parcel_to_nat, 'reference') -# -# brain_segment_pipe.connect( -# reg, 'inv_transfo_file', -# register_parcel_to_nat, "in_matrix_file") -# - elif "reg_f3d" in params: # Iterative registration to the template reg_f3d = pe.Node( @@ -437,36 +418,7 @@ def create_brain_segment_from_mask_pipe( brain_segment_pipe.connect( inputnode, 'masked_debiased_T1', reg_f3d, 'fmask_file') -# -# # merge_tuple -# merge_tuple = pe.Node( -# Merge(3), name="merge_tuple") -# -# brain_segment_pipe.connect( -# reg_f3d, 'masked_debiased_T1', -# merge_tuple, 'in1') -# -# brain_segment_pipe.connect( -# reg, 'nonlin_invwarp_file', -# merge_tuple, "in2") -# -# # inv_transfo -# inv_transfo = pe.Node( -# RegTransform(), name="inv_transfo") -# -# inv_transfo.inputs.interp = "nn" -# -# inv_transfo.inputs.in_file = params_template[ -# "template_seg"] -# -# inv_transfo.connect( -# merge_tuple, 'out', -# register_seg_to_nat, 'inv_nrr_input') -# -# brain_segment_pipe.connect( -# reg, 'nonlin_invwarp_file', -# register_seg_to_nat, "field_file") -# + if "template_seg" in params_template.keys(): # seg @@ -538,7 +490,6 @@ def create_brain_segment_from_mask_pipe( reg, 'inv_transfo_file', register_csf_to_nat, "in_matrix_file") - if "template_parcel" in params_template.keys(): register_parcel_to_nat = pe.Node( @@ -561,6 +512,9 @@ def create_brain_segment_from_mask_pipe( print("##### Error, no coregistration method is defined") return brain_segment_pipe + brain_segment_pipe.connect(register_parcel_to_nat, 'out_file', + outputnode, 'stereo_parcel') + # ants Atropos if "template_seg" in params_template.keys(): @@ -621,6 +575,24 @@ def create_brain_segment_from_mask_pipe( inputnode, 'masked_debiased_T1', segment_atropos_pipe, "inputnode.brain_file") + if "template_parcel" in params_template: + + mult_gm_parcel = pe.Node(fsl.BinaryMaths(), name = "mult_gm_parcel") + + brain_segment_pipe.connect( + segment_atropos_pipe, 'outputnode.segmented_file', + mult_gm_parcel, 'in_file') + + brain_segment_pipe.connect( + register_parcel_to_nat, 'out_file', + mult_gm_parcel, 'operand_file') + + mult_gm_parcel.inputs.operation = "mul" + + brain_segment_pipe.connect(mult_gm_parcel, 'out_file', + outputnode, 'stereo_parcel_gm') + + #outputnode if space == 'native': brain_segment_pipe.connect(segment_atropos_pipe, @@ -644,73 +616,78 @@ def create_brain_segment_from_mask_pipe( brain_segment_pipe.connect(segment_atropos_pipe, 'outputnode.prob_csf', outputnode, 'prob_csf') - - elif space == "template": - reg_seg_pipe = create_reg_seg_pipe() - - brain_segment_pipe.connect(segment_atropos_pipe, - 'outputnode.segmented_file', - reg_seg_pipe, - 'inputnode.native_seg') - brain_segment_pipe.connect(segment_atropos_pipe, - 'outputnode.threshold_gm', - reg_seg_pipe, - 'inputnode.native_threshold_gm') - brain_segment_pipe.connect(segment_atropos_pipe, - 'outputnode.threshold_wm', - reg_seg_pipe, - 'inputnode.native_threshold_wm') - brain_segment_pipe.connect(segment_atropos_pipe, - 'outputnode.threshold_csf', - reg_seg_pipe, - 'inputnode.native_threshold_csf') - brain_segment_pipe.connect(segment_atropos_pipe, - 'outputnode.prob_gm', - reg_seg_pipe, - 'inputnode.native_prob_gm') - brain_segment_pipe.connect(segment_atropos_pipe, - 'outputnode.prob_wm', - reg_seg_pipe, - 'inputnode.native_prob_wm') - brain_segment_pipe.connect(segment_atropos_pipe, - 'outputnode.prob_csf', - reg_seg_pipe, - 'inputnode.native_prob_csf') - - # other inputs - if "reg" in params: - brain_segment_pipe.connect( - reg, 'transfo_file', - reg_seg_pipe, 'inputnode.transfo_file') - - elif "register_NMT_pipe" in params: - brain_segment_pipe.connect( - register_NMT_pipe, - 'NMT_subject_align.transfo_file', - reg_seg_pipe, 'inputnode.transfo_file') - - reg_seg_pipe.inputs.inputnode.ref_image = \ - params_template['template_head'] - - # output node - brain_segment_pipe.connect(reg_seg_pipe, 'outputnode.norm_seg', - outputnode, 'segmented_file') - brain_segment_pipe.connect(reg_seg_pipe, - 'outputnode.norm_threshold_gm', - outputnode, 'threshold_gm') - brain_segment_pipe.connect(reg_seg_pipe, - 'outputnode.norm_threshold_wm', - outputnode, 'threshold_wm') - brain_segment_pipe.connect(reg_seg_pipe, - 'outputnode.norm_threshold_csf', - outputnode, 'threshold_csf') - # outputnodes - brain_segment_pipe.connect(reg_seg_pipe, 'outputnode.norm_prob_gm', - outputnode, 'prob_gm') - brain_segment_pipe.connect(reg_seg_pipe, 'outputnode.norm_prob_wm', - outputnode, 'prob_wm') - brain_segment_pipe.connect(reg_seg_pipe, 'outputnode.norm_prob_csf', - outputnode, 'prob_csf') + # + # elif space == "template": + # reg_seg_pipe = create_reg_seg_pipe() + # + # brain_segment_pipe.connect(segment_atropos_pipe, + # 'outputnode.segmented_file', + # reg_seg_pipe, + # 'inputnode.native_seg') + # brain_segment_pipe.connect(segment_atropos_pipe, + # 'outputnode.threshold_gm', + # reg_seg_pipe, + # 'inputnode.native_threshold_gm') + # brain_segment_pipe.connect(segment_atropos_pipe, + # 'outputnode.threshold_wm', + # reg_seg_pipe, + # 'inputnode.native_threshold_wm') + # brain_segment_pipe.connect(segment_atropos_pipe, + # 'outputnode.threshold_csf', + # reg_seg_pipe, + # 'inputnode.native_threshold_csf') + # brain_segment_pipe.connect(segment_atropos_pipe, + # 'outputnode.prob_gm', + # reg_seg_pipe, + # 'inputnode.native_prob_gm') + # brain_segment_pipe.connect(segment_atropos_pipe, + # 'outputnode.prob_wm', + # reg_seg_pipe, + # 'inputnode.native_prob_wm') + # brain_segment_pipe.connect(segment_atropos_pipe, + # 'outputnode.prob_csf', + # reg_seg_pipe, + # 'inputnode.native_prob_csf') + # + # # other inputs + # if "reg" in params: + # brain_segment_pipe.connect( + # reg, 'transfo_file', + # reg_seg_pipe, 'inputnode.transfo_file') + # + # elif "register_NMT_pipe" in params: + # brain_segment_pipe.connect( + # register_NMT_pipe, + # 'NMT_subject_align.transfo_file', + # reg_seg_pipe, 'inputnode.transfo_file') + # + # elif "reg_f3d" in params: + # #TODO + # print("Error, not implemented space=template and reg_f3d") + # return brain_segment_pipe + # + # reg_seg_pipe.inputs.inputnode.ref_image = \ + # params_template['template_head'] + # + # # output node + # brain_segment_pipe.connect(reg_seg_pipe, 'outputnode.norm_seg', + # outputnode, 'segmented_file') + # brain_segment_pipe.connect(reg_seg_pipe, + # 'outputnode.norm_threshold_gm', + # outputnode, 'threshold_gm') + # brain_segment_pipe.connect(reg_seg_pipe, + # 'outputnode.norm_threshold_wm', + # outputnode, 'threshold_wm') + # brain_segment_pipe.connect(reg_seg_pipe, + # 'outputnode.norm_threshold_csf', + # outputnode, 'threshold_csf') + # # outputnodes + # brain_segment_pipe.connect(reg_seg_pipe, 'outputnode.norm_prob_gm', + # outputnode, 'prob_gm') + # brain_segment_pipe.connect(reg_seg_pipe, 'outputnode.norm_prob_wm', + # outputnode, 'prob_wm') + # brain_segment_pipe.connect(reg_seg_pipe, 'outputnode.norm_prob_csf', + # outputnode, 'prob_csf') return brain_segment_pipe From 5ad7648d28fd6124980f743cfee1c8cd7761e10e Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 13:53:25 +0100 Subject: [PATCH 13/47] 'outputnode.threshold_gm', --- macapype/pipelines/full_pipelines.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 8dbff6a41..17cbbcfc9 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -512,7 +512,9 @@ def create_brain_segment_from_mask_pipe( print("##### Error, no coregistration method is defined") return brain_segment_pipe - brain_segment_pipe.connect(register_parcel_to_nat, 'out_file', + # output + if "template_parcel" in params_template.keys(): + brain_segment_pipe.connect(register_parcel_to_nat, 'out_file', outputnode, 'stereo_parcel') # ants Atropos @@ -575,12 +577,12 @@ def create_brain_segment_from_mask_pipe( inputnode, 'masked_debiased_T1', segment_atropos_pipe, "inputnode.brain_file") - if "template_parcel" in params_template: + if "template_parcel" in params_template.keys(): mult_gm_parcel = pe.Node(fsl.BinaryMaths(), name = "mult_gm_parcel") brain_segment_pipe.connect( - segment_atropos_pipe, 'outputnode.segmented_file', + 'outputnode.threshold_gm', mult_gm_parcel, 'in_file') brain_segment_pipe.connect( From 89c80229bd5ee14e326553f244dca04465ab4eb0 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 13:54:14 +0100 Subject: [PATCH 14/47] 'outputnode.threshold_gm', --- macapype/pipelines/full_pipelines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 17cbbcfc9..ec290393b 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -582,7 +582,7 @@ def create_brain_segment_from_mask_pipe( mult_gm_parcel = pe.Node(fsl.BinaryMaths(), name = "mult_gm_parcel") brain_segment_pipe.connect( - 'outputnode.threshold_gm', + segment_atropos_pipe, 'outputnode.segmented_file', mult_gm_parcel, 'in_file') brain_segment_pipe.connect( From be94b112edeeb9247a52aa6eb695a1fd7c455cc1 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 14:23:20 +0100 Subject: [PATCH 15/47] merge dseg dtype --- macapype/nodes/segment.py | 2 +- macapype/pipelines/full_pipelines.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/macapype/nodes/segment.py b/macapype/nodes/segment.py index 57f3f8343..6ebfd33e4 100644 --- a/macapype/nodes/segment.py +++ b/macapype/nodes/segment.py @@ -248,7 +248,7 @@ def merge_imgs(list_img_files): path, fname, ext = split_f(img_file) img = nib.load(img_file) img_data = img.get_fdata() - new_img_data = np.zeros(shape=img_data.shape) + new_img_data = np.zeros(shape=img_data.shape, dtype = img_data.dtype) new_img_data[img_data != 0] += img_data[img_data != 0] else: diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index ec290393b..d4a02a26e 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -609,6 +609,7 @@ def create_brain_segment_from_mask_pipe( brain_segment_pipe.connect(segment_atropos_pipe, 'outputnode.threshold_csf', outputnode, 'threshold_csf') + brain_segment_pipe.connect(segment_atropos_pipe, 'outputnode.prob_gm', outputnode, 'prob_gm') From f35aae417e417ba3e37f39c4fedddfd12eb0e6bf Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 14:27:12 +0100 Subject: [PATCH 16/47] dtype --- macapype/nodes/segment.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macapype/nodes/segment.py b/macapype/nodes/segment.py index 6ebfd33e4..88a838a10 100644 --- a/macapype/nodes/segment.py +++ b/macapype/nodes/segment.py @@ -249,14 +249,14 @@ def merge_imgs(list_img_files): img = nib.load(img_file) img_data = img.get_fdata() new_img_data = np.zeros(shape=img_data.shape, dtype = img_data.dtype) - new_img_data[img_data != 0] += img_data[img_data != 0] + new_img_data[img_data != 0] = 1 else: img_data = nib.load(img_file).get_fdata() assert img_data.shape == new_img_data.shape, \ "Error, shapes {} != {}".format(img_data.shape, new_img_data.shape) - new_img_data[img_data != 0] += img_data[img_data != 0] + new_img_data[img_data != 0] = 1 # creating indexed_mask merged_img = nib.Nifti1Image(dataobj=new_img_data, From a19d6acbe77a1ae6c6e84ac164cef2d77dc6f70c Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 14:32:32 +0100 Subject: [PATCH 17/47] np.int --- macapype/nodes/segment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/nodes/segment.py b/macapype/nodes/segment.py index 88a838a10..3c4be299c 100644 --- a/macapype/nodes/segment.py +++ b/macapype/nodes/segment.py @@ -248,7 +248,7 @@ def merge_imgs(list_img_files): path, fname, ext = split_f(img_file) img = nib.load(img_file) img_data = img.get_fdata() - new_img_data = np.zeros(shape=img_data.shape, dtype = img_data.dtype) + new_img_data = np.zeros(shape=img_data.shape, dtype = np.int) new_img_data[img_data != 0] = 1 else: From 38c2e2f86f503fc5f482a356c7ca84a7056a8e51 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 14:34:50 +0100 Subject: [PATCH 18/47] np.int32 --- macapype/nodes/segment.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/macapype/nodes/segment.py b/macapype/nodes/segment.py index 3c4be299c..b78e1d1d4 100644 --- a/macapype/nodes/segment.py +++ b/macapype/nodes/segment.py @@ -248,11 +248,12 @@ def merge_imgs(list_img_files): path, fname, ext = split_f(img_file) img = nib.load(img_file) img_data = img.get_fdata() - new_img_data = np.zeros(shape=img_data.shape, dtype = np.int) + new_img_data = np.zeros(shape=img_data.shape, dtype = np.int32) new_img_data[img_data != 0] = 1 else: img_data = nib.load(img_file).get_fdata() + assert img_data.shape == new_img_data.shape, \ "Error, shapes {} != {}".format(img_data.shape, new_img_data.shape) From 1793066ddb45d2b186713b79f1d1eaf62e468dfe Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 14:39:11 +0100 Subject: [PATCH 19/47] threshold gm --- macapype/pipelines/full_pipelines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index d4a02a26e..15fe53a85 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -582,7 +582,7 @@ def create_brain_segment_from_mask_pipe( mult_gm_parcel = pe.Node(fsl.BinaryMaths(), name = "mult_gm_parcel") brain_segment_pipe.connect( - segment_atropos_pipe, 'outputnode.segmented_file', + segment_atropos_pipe, 'outputnode.threshold_gm', mult_gm_parcel, 'in_file') brain_segment_pipe.connect( From 4f66d084ae86b799ceebc458098b54d020e829df Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 14:54:19 +0100 Subject: [PATCH 20/47] parcel_gm --- macapype/pipelines/full_pipelines.py | 34 ++++++------------- macapype/pipelines/rename.py | 20 +++++++++++ .../params_segment_marmo_ants_4animal.json | 5 ++- 3 files changed, 34 insertions(+), 25 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 15fe53a85..a310f1723 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -251,7 +251,7 @@ def create_brain_segment_from_mask_pipe( # creating outputnode outputnode = pe.Node( niu.IdentityInterface( - fields=["segmented_file", "stereo_parcel", "stereo_parcel_gm", + fields=["segmented_file", "parcel_gm", "threshold_gm", "threshold_wm", "threshold_csf", "prob_gm", "prob_wm", "prob_csf"]), name='outputnode') @@ -314,21 +314,6 @@ def create_brain_segment_from_mask_pipe( brain_segment_pipe.connect( reg, 'nonlin_invwarp_file', register_seg_to_nat, "field_file") - # - # # seg - # register_seg_to_nat = pe.Node( - # fsl.ApplyXFM(), name="register_seg_to_nat") - # register_seg_to_nat.inputs.interp = "nearestneighbour" - # - # register_seg_to_nat.inputs.in_file = params_template[ - # "template_seg"] - # brain_segment_pipe.connect( - # inputnode, 'masked_debiased_T1', - # register_seg_to_nat, 'reference') - # - # brain_segment_pipe.connect( - # reg, 'inv_transfo_file', - # register_seg_to_nat, "in_matrix_file") else: # gm @@ -490,7 +475,8 @@ def create_brain_segment_from_mask_pipe( reg, 'inv_transfo_file', register_csf_to_nat, "in_matrix_file") - if "template_parcel" in params_template.keys(): + if "template_parcel" in params_template.keys() \ + and "parcel_gm" in params: register_parcel_to_nat = pe.Node( RegResample(), name="register_parcel_to_nat") @@ -512,11 +498,6 @@ def create_brain_segment_from_mask_pipe( print("##### Error, no coregistration method is defined") return brain_segment_pipe - # output - if "template_parcel" in params_template.keys(): - brain_segment_pipe.connect(register_parcel_to_nat, 'out_file', - outputnode, 'stereo_parcel') - # ants Atropos if "template_seg" in params_template.keys(): @@ -577,7 +558,7 @@ def create_brain_segment_from_mask_pipe( inputnode, 'masked_debiased_T1', segment_atropos_pipe, "inputnode.brain_file") - if "template_parcel" in params_template.keys(): + if "parcel_gm" in params and "template_parcel" in params_template.keys(): mult_gm_parcel = pe.Node(fsl.BinaryMaths(), name = "mult_gm_parcel") @@ -592,7 +573,7 @@ def create_brain_segment_from_mask_pipe( mult_gm_parcel.inputs.operation = "mul" brain_segment_pipe.connect(mult_gm_parcel, 'out_file', - outputnode, 'stereo_parcel_gm') + outputnode, 'parcel_gm') #outputnode if space == 'native': @@ -788,6 +769,7 @@ def create_full_T1T2_subpipes( 'stereo_padded_segmented_brain_mask', 'stereo_prob_gm', 'stereo_prob_wm', 'stereo_prob_csf', "stereo_gen_5tt", + "stereo_parcel_gm" 'native_segmented_brain_mask', 'native_prob_gm', 'native_prob_wm', 'native_prob_csf', @@ -1331,6 +1313,10 @@ def create_full_T1T2_subpipes( seg_pipe.connect(brain_segment_pipe, 'outputnode.prob_csf', outputnode, 'stereo_prob_csf') + seg_pipe.connect(brain_segment_pipe, 'outputnode.parcel_gm', + outputnode, 'stereo_parcel_gm') + + if pad and space == "native": pad_back( seg_pipe, data_preparation_pipe, diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index cad429772..4f5d376c0 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -425,6 +425,26 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, rename_stereo_segmented_brain_mask, 'out_file', datasink, '@stereo_segmented_brain_mask') + if "parcel_gm" in params: + + # rename parcel_gm + rename_stereo_parcel_gm = pe.Node( + niu.Rename(), + name="rename_stereo_parcel_gm") + rename_stereo_parcel_gm.inputs.format_string = \ + pref_deriv + "_space-stereo_desc-parcelgm_dseg" + rename_stereo_parcel_gm.inputs.parse_string = parse_str + rename_stereo_parcel_gm.inputs.keep_ext = True + + main_workflow.connect( + segment_pnh_pipe, 'outputnode.stereo_parcel_gm', + rename_stereo_parcel_gm, 'in_file') + + main_workflow.connect( + rename_stereo_parcel_gm, 'out_file', + datasink, '@stereo_parcel_gm') + + if "pad_template" in params["short_preparation_pipe"].keys(): rename_stereo_padded_segmented_brain_mask = pe.Node( diff --git a/workflows/params_segment_marmo_ants_4animal.json b/workflows/params_segment_marmo_ants_4animal.json index 746083da6..074dfd0bc 100644 --- a/workflows/params_segment_marmo_ants_4animal.json +++ b/workflows/params_segment_marmo_ants_4animal.json @@ -53,7 +53,10 @@ "wm": 3, "csf": 4 } - } + }, + "parcel_gm": + {} + }, "export_5tt_pipe": { From b80f079d4be347fd659bd4f257a155337736abc0 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 15:01:19 +0100 Subject: [PATCH 21/47] params["brain_segment_pipe"]: --- macapype/pipelines/full_pipelines.py | 40 +++++++++++++++++++++++----- macapype/pipelines/rename.py | 22 ++++++++++++++- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index a310f1723..51ff397d5 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -758,26 +758,30 @@ def create_full_T1T2_subpipes( 'stereo_brain_mask', 'stereo_padded_brain_mask', + 'native_brain_mask', + 'stereo_masked_debiased_T1', 'stereo_masked_debiased_T2', - - 'native_brain_mask', "native_masked_debiased_T1", "native_masked_debiased_T2", 'stereo_segmented_brain_mask', 'stereo_padded_segmented_brain_mask', - 'stereo_prob_gm', 'stereo_prob_wm', 'stereo_prob_csf', - "stereo_gen_5tt", - "stereo_parcel_gm" - 'native_segmented_brain_mask', + + 'stereo_prob_gm', 'stereo_prob_wm', 'stereo_prob_csf', 'native_prob_gm', 'native_prob_wm', 'native_prob_csf', + + "stereo_gen_5tt", "native_gen_5tt", + "stereo_parcel_gm", + "stereo_padded_parcel_gm" + "native_parcel_gm", + "stereo_wmgm_mask", - "native_wmgm_mask", "stereo_padded_wmgm_mask", + "native_wmgm_mask", "wmgm_stl", "csf_stl", @@ -1337,6 +1341,12 @@ def create_full_T1T2_subpipes( brain_segment_pipe, "outputnode.prob_csf", outputnode, "native_prob_csf", params, inter_val="LIN") + pad_back( + seg_pipe, data_preparation_pipe, + brain_segment_pipe, "outputnode.parcel_gm", + outputnode, "native_parcel_gm", params, + inter_val="NN") + if "pad_template" in params["short_preparation_pipe"].keys(): pad_stereo_stereo_brain_mask = NodeParams( @@ -1353,6 +1363,22 @@ def create_full_T1T2_subpipes( pad_stereo_stereo_brain_mask, "output_image", outputnode, "stereo_padded_segmented_brain_mask") + + if "pad_template" in params["short_preparation_pipe"].keys(): + pad_stereo_parcel_gm = NodeParams( + ImageMath(), + params=parse_key(params["short_preparation_pipe"], + "pad_template"), + name="pad_stereo_parcel_gm") + + seg_pipe.connect( + brain_segment_pipe, "outputnode.segmented_file", + pad_stereo_parcel_gm, "op1") + + seg_pipe.connect( + pad_stereo_parcel_gm, "output_image", + outputnode, "stereo_padded_parcel_gm") + # ############################################## export 5tt if "export_5tt_pipe" in params.keys(): diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 4f5d376c0..26e7a200c 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -425,7 +425,7 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, rename_stereo_segmented_brain_mask, 'out_file', datasink, '@stereo_segmented_brain_mask') - if "parcel_gm" in params: + if "parcel_gm" in params["brain_segment_pipe"]: # rename parcel_gm rename_stereo_parcel_gm = pe.Node( @@ -465,6 +465,26 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, rename_stereo_padded_segmented_brain_mask, 'out_file', datasink, '@stereo_padded_segmented_brain_mask') + if "parcel_gm" in in params["brain_segment_pipe"]: + + rename_stereo_padded_parcel_gm = pe.Node( + niu.Rename(), + name="rename_stereo_padded_parcel_gm") + rename_stereo_padded_parcel_gm.inputs.format_string = \ + pref_deriv + "_space-stereo_desc-pad_desc-parcelgm_dseg" + rename_stereo_padded_parcel_gm.inputs.parse_string = \ + parse_str + rename_stereo_padded_parcel_gm.inputs.keep_ext = True + + main_workflow.connect( + segment_pnh_pipe, + 'outputnode.stereo_padded_parcel_gm', + rename_stereo_padded_parcel_gm, 'in_file') + + main_workflow.connect( + rename_stereo_padded_parcel_gm, 'out_file', + datasink, '@stereo_padded_parcel_gm') + # rename 5tt if "export_5tt_pipe" in params.keys(): rename_stereo_gen_5tt = pe.Node( From 416b441b0fa949425b83b07dd83ece16c45cb947 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 15:02:03 +0100 Subject: [PATCH 22/47] in params["brain_segment_pipe"]: --- macapype/pipelines/rename.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 26e7a200c..f9c7385ab 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -427,22 +427,22 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, if "parcel_gm" in params["brain_segment_pipe"]: - # rename parcel_gm - rename_stereo_parcel_gm = pe.Node( - niu.Rename(), - name="rename_stereo_parcel_gm") - rename_stereo_parcel_gm.inputs.format_string = \ - pref_deriv + "_space-stereo_desc-parcelgm_dseg" - rename_stereo_parcel_gm.inputs.parse_string = parse_str - rename_stereo_parcel_gm.inputs.keep_ext = True + # rename parcel_gm + rename_stereo_parcel_gm = pe.Node( + niu.Rename(), + name="rename_stereo_parcel_gm") + rename_stereo_parcel_gm.inputs.format_string = \ + pref_deriv + "_space-stereo_desc-parcelgm_dseg" + rename_stereo_parcel_gm.inputs.parse_string = parse_str + rename_stereo_parcel_gm.inputs.keep_ext = True - main_workflow.connect( - segment_pnh_pipe, 'outputnode.stereo_parcel_gm', - rename_stereo_parcel_gm, 'in_file') + main_workflow.connect( + segment_pnh_pipe, 'outputnode.stereo_parcel_gm', + rename_stereo_parcel_gm, 'in_file') - main_workflow.connect( - rename_stereo_parcel_gm, 'out_file', - datasink, '@stereo_parcel_gm') + main_workflow.connect( + rename_stereo_parcel_gm, 'out_file', + datasink, '@stereo_parcel_gm') if "pad_template" in params["short_preparation_pipe"].keys(): From f896dc686a44d3add3dc60edb420ff68845e57a6 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Thu, 18 Dec 2025 15:02:43 +0100 Subject: [PATCH 23/47] in params["brain_segment_pipe"]: --- macapype/pipelines/rename.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index f9c7385ab..01629ed44 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -465,7 +465,7 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, rename_stereo_padded_segmented_brain_mask, 'out_file', datasink, '@stereo_padded_segmented_brain_mask') - if "parcel_gm" in in params["brain_segment_pipe"]: + if "parcel_gm" in params["brain_segment_pipe"]: rename_stereo_padded_parcel_gm = pe.Node( niu.Rename(), From 29475578d561a05ad406bf5d5323e4e0f28633d1 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 19 Dec 2025 10:41:19 +0100 Subject: [PATCH 24/47] parcel --- macapype/pipelines/full_pipelines.py | 10 +++++++++- macapype/pipelines/rename.py | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 51ff397d5..e4f36944f 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -251,7 +251,7 @@ def create_brain_segment_from_mask_pipe( # creating outputnode outputnode = pe.Node( niu.IdentityInterface( - fields=["segmented_file", "parcel_gm", + fields=["segmented_file", "parcel", "parcel_gm", "threshold_gm", "threshold_wm", "threshold_csf", "prob_gm", "prob_wm", "prob_csf"]), name='outputnode') @@ -498,6 +498,10 @@ def create_brain_segment_from_mask_pipe( print("##### Error, no coregistration method is defined") return brain_segment_pipe + + #outputnode + brain_segment_pipe.connect(register_parcel_to_nat, 'out_file', + outputnode, 'parcel') # ants Atropos if "template_seg" in params_template.keys(): @@ -775,6 +779,7 @@ def create_full_T1T2_subpipes( "stereo_gen_5tt", "native_gen_5tt", + "stereo_parcel", "stereo_parcel_gm", "stereo_padded_parcel_gm" "native_parcel_gm", @@ -1320,6 +1325,9 @@ def create_full_T1T2_subpipes( seg_pipe.connect(brain_segment_pipe, 'outputnode.parcel_gm', outputnode, 'stereo_parcel_gm') + seg_pipe.connect(brain_segment_pipe, 'outputnode.parcel', + outputnode, 'stereo_parcel') + if pad and space == "native": pad_back( diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 01629ed44..69ba42137 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -427,6 +427,23 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, if "parcel_gm" in params["brain_segment_pipe"]: + # rename parcel + rename_stereo_parcel = pe.Node( + niu.Rename(), + name="rename_stereo_parcel") + rename_stereo_parcel.inputs.format_string = \ + pref_deriv + "_space-stereo_desc-parcelgm_dseg" + rename_stereo_parcel.inputs.parse_string = parse_str + rename_stereo_parcel.inputs.keep_ext = True + + main_workflow.connect( + segment_pnh_pipe, 'outputnode.stereo_parcel', + rename_stereo_parcel, 'in_file') + + main_workflow.connect( + rename_stereo_parcel, 'out_file', + datasink, '@stereo_parcel') + # rename parcel_gm rename_stereo_parcel_gm = pe.Node( niu.Rename(), From b4840298f0bef157505cb19a040f3ee5e689b069 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 19 Dec 2025 10:45:02 +0100 Subject: [PATCH 25/47] parcel --- macapype/pipelines/rename.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 69ba42137..ee6e8793f 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -449,7 +449,7 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, niu.Rename(), name="rename_stereo_parcel_gm") rename_stereo_parcel_gm.inputs.format_string = \ - pref_deriv + "_space-stereo_desc-parcelgm_dseg" + pref_deriv + "_space-stereo_desc-parcel_dseg" rename_stereo_parcel_gm.inputs.parse_string = parse_str rename_stereo_parcel_gm.inputs.keep_ext = True From 8b49c22970945563e4f59381f568f35ae9f82528 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 19 Dec 2025 11:07:57 +0100 Subject: [PATCH 26/47] sub --- macapype/pipelines/rename.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index ee6e8793f..f24a25d58 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -432,7 +432,7 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, niu.Rename(), name="rename_stereo_parcel") rename_stereo_parcel.inputs.format_string = \ - pref_deriv + "_space-stereo_desc-parcelgm_dseg" + pref_deriv + "_space-stereo_desc-parcel_dseg" rename_stereo_parcel.inputs.parse_string = parse_str rename_stereo_parcel.inputs.keep_ext = True @@ -449,7 +449,7 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, niu.Rename(), name="rename_stereo_parcel_gm") rename_stereo_parcel_gm.inputs.format_string = \ - pref_deriv + "_space-stereo_desc-parcel_dseg" + pref_deriv + "_space-stereo_desc-parcelgm_dseg" rename_stereo_parcel_gm.inputs.parse_string = parse_str rename_stereo_parcel_gm.inputs.keep_ext = True From 5f7c6aa3b357b12d1173ad9fb71976896805fe25 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 19 Dec 2025 11:17:37 +0100 Subject: [PATCH 27/47] removed --- macapype/pipelines/rename.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index f24a25d58..01629ed44 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -427,23 +427,6 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, if "parcel_gm" in params["brain_segment_pipe"]: - # rename parcel - rename_stereo_parcel = pe.Node( - niu.Rename(), - name="rename_stereo_parcel") - rename_stereo_parcel.inputs.format_string = \ - pref_deriv + "_space-stereo_desc-parcel_dseg" - rename_stereo_parcel.inputs.parse_string = parse_str - rename_stereo_parcel.inputs.keep_ext = True - - main_workflow.connect( - segment_pnh_pipe, 'outputnode.stereo_parcel', - rename_stereo_parcel, 'in_file') - - main_workflow.connect( - rename_stereo_parcel, 'out_file', - datasink, '@stereo_parcel') - # rename parcel_gm rename_stereo_parcel_gm = pe.Node( niu.Rename(), From bd16077d962f72d4515823da8dc76a901dce3788 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 19 Dec 2025 11:30:12 +0100 Subject: [PATCH 28/47] stereo_parcel --- macapype/pipelines/rename.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 01629ed44..69ba42137 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -427,6 +427,23 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, if "parcel_gm" in params["brain_segment_pipe"]: + # rename parcel + rename_stereo_parcel = pe.Node( + niu.Rename(), + name="rename_stereo_parcel") + rename_stereo_parcel.inputs.format_string = \ + pref_deriv + "_space-stereo_desc-parcelgm_dseg" + rename_stereo_parcel.inputs.parse_string = parse_str + rename_stereo_parcel.inputs.keep_ext = True + + main_workflow.connect( + segment_pnh_pipe, 'outputnode.stereo_parcel', + rename_stereo_parcel, 'in_file') + + main_workflow.connect( + rename_stereo_parcel, 'out_file', + datasink, '@stereo_parcel') + # rename parcel_gm rename_stereo_parcel_gm = pe.Node( niu.Rename(), From 4c7918d8eb30542b280947a5e4f84785c8a15fb5 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 19 Dec 2025 12:03:15 +0100 Subject: [PATCH 29/47] removed parcl changed json --- macapype/pipelines/full_pipelines.py | 8 -------- macapype/pipelines/rename.py | 17 ----------------- 2 files changed, 25 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index e4f36944f..4ef8c2ed4 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -498,10 +498,6 @@ def create_brain_segment_from_mask_pipe( print("##### Error, no coregistration method is defined") return brain_segment_pipe - - #outputnode - brain_segment_pipe.connect(register_parcel_to_nat, 'out_file', - outputnode, 'parcel') # ants Atropos if "template_seg" in params_template.keys(): @@ -779,7 +775,6 @@ def create_full_T1T2_subpipes( "stereo_gen_5tt", "native_gen_5tt", - "stereo_parcel", "stereo_parcel_gm", "stereo_padded_parcel_gm" "native_parcel_gm", @@ -1325,9 +1320,6 @@ def create_full_T1T2_subpipes( seg_pipe.connect(brain_segment_pipe, 'outputnode.parcel_gm', outputnode, 'stereo_parcel_gm') - seg_pipe.connect(brain_segment_pipe, 'outputnode.parcel', - outputnode, 'stereo_parcel') - if pad and space == "native": pad_back( diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 69ba42137..01629ed44 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -427,23 +427,6 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, if "parcel_gm" in params["brain_segment_pipe"]: - # rename parcel - rename_stereo_parcel = pe.Node( - niu.Rename(), - name="rename_stereo_parcel") - rename_stereo_parcel.inputs.format_string = \ - pref_deriv + "_space-stereo_desc-parcelgm_dseg" - rename_stereo_parcel.inputs.parse_string = parse_str - rename_stereo_parcel.inputs.keep_ext = True - - main_workflow.connect( - segment_pnh_pipe, 'outputnode.stereo_parcel', - rename_stereo_parcel, 'in_file') - - main_workflow.connect( - rename_stereo_parcel, 'out_file', - datasink, '@stereo_parcel') - # rename parcel_gm rename_stereo_parcel_gm = pe.Node( niu.Rename(), From b012dc7830a5bbda9d6b0d58dad27c5ee7fd25b2 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 22 Dec 2025 11:32:40 +0100 Subject: [PATCH 30/47] native parcel_gm --- macapype/bash/IterREGBET.sh | 3 ++- macapype/pipelines/rename.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/macapype/bash/IterREGBET.sh b/macapype/bash/IterREGBET.sh index e5d98dc7b..11c504192 100644 --- a/macapype/bash/IterREGBET.sh +++ b/macapype/bash/IterREGBET.sh @@ -280,7 +280,8 @@ for ((i = 1 ; i <= $NITER ; i++)); do if [[ -n $REF_WHOLE ]] && [[ $i == $NITER ]]; then echo "FNIRT..." 1>&2 #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} # compute warp - "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=3,3 --subsamp=4,2 --infwhm=6,4 --reffwhm=4,2 --estint=false --applyrefmask=false --applyinmask=false # compute warp + #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=3,3 --subsamp=4,2 --infwhm=6,4 --reffwhm=4,2 --estint=false --applyrefmask=false --applyinmask=false # compute warp + "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=1 --subsamp=4 --infwhm=6 --reffwhm=4 --estint=false --applyrefmask=false --applyinmask=false # compute warp echo "Inverting warp..." 1>&2 "${FSLPREFIX}invwarp" -r $IN_WHOLE -w ${WARP[WH_WARP]} -o ${WARP[WH_INVWARP]} echo "Applying inverse warp..." 1>&2 diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 01629ed44..591054cfa 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -876,6 +876,26 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, rename_native_segmented_brain_mask, 'out_file', datasink, '@native_segmented_brain_mask') + if "parcel_gm" in params["brain_segment_pipe"]: + + rename_native_padded_parcel_gm = pe.Node( + niu.Rename(), + name="rename_native_padded_parcel_gm") + rename_native_padded_parcel_gm.inputs.format_string = \ + pref_deriv + "_space-native_desc-pad_desc-parcelgm_dseg" + rename_native_padded_parcel_gm.inputs.parse_string = \ + parse_str + rename_native_padded_parcel_gm.inputs.keep_ext = True + + main_workflow.connect( + segment_pnh_pipe, + 'outputnode.native_padded_parcel_gm', + rename_native_padded_parcel_gm, 'in_file') + + main_workflow.connect( + rename_native_padded_parcel_gm, 'out_file', + datasink, '@native_padded_parcel_gm') + # rename 5tt if "export_5tt_pipe" in params.keys(): rename_native_gen_5tt = pe.Node( From a1c7037c4d2e36fbde797c8d9af4c76a6b9cfa6b Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 22 Dec 2025 11:35:27 +0100 Subject: [PATCH 31/47] native_parcel_gm --- macapype/pipelines/rename.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 591054cfa..9b730aacb 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -878,23 +878,23 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, if "parcel_gm" in params["brain_segment_pipe"]: - rename_native_padded_parcel_gm = pe.Node( + rename_native_parcel_gm = pe.Node( niu.Rename(), - name="rename_native_padded_parcel_gm") - rename_native_padded_parcel_gm.inputs.format_string = \ + name="rename_native_parcel_gm") + rename_native_parcel_gm.inputs.format_string = \ pref_deriv + "_space-native_desc-pad_desc-parcelgm_dseg" - rename_native_padded_parcel_gm.inputs.parse_string = \ + rename_native_parcel_gm.inputs.parse_string = \ parse_str - rename_native_padded_parcel_gm.inputs.keep_ext = True + rename_native_parcel_gm.inputs.keep_ext = True main_workflow.connect( segment_pnh_pipe, - 'outputnode.native_padded_parcel_gm', - rename_native_padded_parcel_gm, 'in_file') + 'outputnode.native_parcel_gm', + rename_native_parcel_gm, 'in_file') main_workflow.connect( - rename_native_padded_parcel_gm, 'out_file', - datasink, '@native_padded_parcel_gm') + rename_native_parcel_gm, 'out_file', + datasink, '@native_parcel_gm') # rename 5tt if "export_5tt_pipe" in params.keys(): From 6fa7b46613a6461a20ba6127a962d6c9091efb90 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 22 Dec 2025 11:40:33 +0100 Subject: [PATCH 32/47] no native_parcel_gm --- macapype/pipelines/full_pipelines.py | 11 ++++---- macapype/pipelines/rename.py | 40 ++++++++++++++-------------- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 4ef8c2ed4..7e7bbbf8f 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -1341,11 +1341,12 @@ def create_full_T1T2_subpipes( brain_segment_pipe, "outputnode.prob_csf", outputnode, "native_prob_csf", params, inter_val="LIN") - pad_back( - seg_pipe, data_preparation_pipe, - brain_segment_pipe, "outputnode.parcel_gm", - outputnode, "native_parcel_gm", params, - inter_val="NN") +# +# pad_back( +# seg_pipe, data_preparation_pipe, +# brain_segment_pipe, "outputnode.parcel_gm", +# outputnode, "native_parcel_gm", params, +# inter_val="NN") if "pad_template" in params["short_preparation_pipe"].keys(): diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 9b730aacb..a8c012eab 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -875,26 +875,26 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, main_workflow.connect( rename_native_segmented_brain_mask, 'out_file', datasink, '@native_segmented_brain_mask') - - if "parcel_gm" in params["brain_segment_pipe"]: - - rename_native_parcel_gm = pe.Node( - niu.Rename(), - name="rename_native_parcel_gm") - rename_native_parcel_gm.inputs.format_string = \ - pref_deriv + "_space-native_desc-pad_desc-parcelgm_dseg" - rename_native_parcel_gm.inputs.parse_string = \ - parse_str - rename_native_parcel_gm.inputs.keep_ext = True - - main_workflow.connect( - segment_pnh_pipe, - 'outputnode.native_parcel_gm', - rename_native_parcel_gm, 'in_file') - - main_workflow.connect( - rename_native_parcel_gm, 'out_file', - datasink, '@native_parcel_gm') + # + # if "parcel_gm" in params["brain_segment_pipe"]: + # + # rename_native_parcel_gm = pe.Node( + # niu.Rename(), + # name="rename_native_parcel_gm") + # rename_native_parcel_gm.inputs.format_string = \ + # pref_deriv + "_space-native_desc-pad_desc-parcelgm_dseg" + # rename_native_parcel_gm.inputs.parse_string = \ + # parse_str + # rename_native_parcel_gm.inputs.keep_ext = True + # + # main_workflow.connect( + # segment_pnh_pipe, + # 'outputnode.native_parcel_gm', + # rename_native_parcel_gm, 'in_file') + # + # main_workflow.connect( + # rename_native_parcel_gm, 'out_file', + # datasink, '@native_parcel_gm') # rename 5tt if "export_5tt_pipe" in params.keys(): From 4ea26c80e231dc34bde49d1c27061aca22f81bfa Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 22 Dec 2025 12:02:29 +0100 Subject: [PATCH 33/47] testing premat --- macapype/pipelines/full_pipelines.py | 110 ++++++++++++++------------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 7e7bbbf8f..966c4d35e 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -368,7 +368,8 @@ def create_brain_segment_from_mask_pipe( register_csf_to_nat, "in_matrix_file") - if "template_parcel" in params_template.keys(): + if "template_parcel" in params_template.keys() \ + and "parcel_gm" in params: # seg register_parcel_to_nat = pe.Node( @@ -386,6 +387,11 @@ def create_brain_segment_from_mask_pipe( reg, 'nonlin_invwarp_file', register_parcel_to_nat, "field_file") + + brain_segment_pipe.connect( + reg, 'inv_transfo_file', + register_parcel_to_nat, "premat") + elif "reg_f3d" in params: # Iterative registration to the template reg_f3d = pe.Node( @@ -423,57 +429,57 @@ def create_brain_segment_from_mask_pipe( reg_f3d, 'invcpp_file', register_seg_to_nat, "trans_file") else: - #TODO - # gm - register_gm_to_nat = pe.Node( - fsl.ApplyXFM(), name="register_gm_to_nat") - register_gm_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM - register_gm_to_nat.inputs.interp = "nearestneighbour" - - register_gm_to_nat.inputs.in_file = \ - params_template["template_gm"] - - brain_segment_pipe.connect( - inputnode, 'masked_debiased_T1', - register_gm_to_nat, 'reference') - - brain_segment_pipe.connect( - reg, 'inv_transfo_file', - register_gm_to_nat, "in_matrix_file") - - # wm - register_wm_to_nat = pe.Node( - fsl.ApplyXFM(), name="register_wm_to_nat") - register_wm_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM - register_wm_to_nat.inputs.interp = "nearestneighbour" - - register_wm_to_nat.inputs.in_file = \ - params_template["template_wm"] - - brain_segment_pipe.connect( - inputnode, 'masked_debiased_T1', - register_wm_to_nat, 'reference') - - brain_segment_pipe.connect( - reg, 'inv_transfo_file', - register_wm_to_nat, "in_matrix_file") - - # csf - register_csf_to_nat = pe.Node( - fsl.ApplyXFM(), name="register_csf_to_nat") - register_csf_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM - register_csf_to_nat.inputs.interp = "nearestneighbour" - - register_csf_to_nat.inputs.in_file = \ - params_template["template_csf"] - - brain_segment_pipe.connect( - inputnode, 'masked_debiased_T1', - register_csf_to_nat, 'reference') - - brain_segment_pipe.connect( - reg, 'inv_transfo_file', - register_csf_to_nat, "in_matrix_file") + # #TODO + # # gm + # register_gm_to_nat = pe.Node( + # fsl.ApplyXFM(), name="register_gm_to_nat") + # register_gm_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM + # register_gm_to_nat.inputs.interp = "nearestneighbour" + # + # register_gm_to_nat.inputs.in_file = \ + # params_template["template_gm"] + # + # brain_segment_pipe.connect( + # inputnode, 'masked_debiased_T1', + # register_gm_to_nat, 'reference') + # + # brain_segment_pipe.connect( + # reg, 'inv_transfo_file', + # register_gm_to_nat, "in_matrix_file") + # + # # wm + # register_wm_to_nat = pe.Node( + # fsl.ApplyXFM(), name="register_wm_to_nat") + # register_wm_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM + # register_wm_to_nat.inputs.interp = "nearestneighbour" + # + # register_wm_to_nat.inputs.in_file = \ + # params_template["template_wm"] + # + # brain_segment_pipe.connect( + # inputnode, 'masked_debiased_T1', + # register_wm_to_nat, 'reference') + # + # brain_segment_pipe.connect( + # reg, 'inv_transfo_file', + # register_wm_to_nat, "in_matrix_file") + # + # # csf + # register_csf_to_nat = pe.Node( + # fsl.ApplyXFM(), name="register_csf_to_nat") + # register_csf_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM + # register_csf_to_nat.inputs.interp = "nearestneighbour" + # + # register_csf_to_nat.inputs.in_file = \ + # params_template["template_csf"] + # + # brain_segment_pipe.connect( + # inputnode, 'masked_debiased_T1', + # register_csf_to_nat, 'reference') + # + # brain_segment_pipe.connect( + # reg, 'inv_transfo_file', + # register_csf_to_nat, "in_matrix_file") if "template_parcel" in params_template.keys() \ and "parcel_gm" in params: From c5e43a8a6c530e4114285db3c9bef7efdaa1e208 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 22 Dec 2025 12:02:48 +0100 Subject: [PATCH 34/47] intermediate params --- macapype/bash/IterREGBET.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macapype/bash/IterREGBET.sh b/macapype/bash/IterREGBET.sh index 11c504192..a89edf5d1 100644 --- a/macapype/bash/IterREGBET.sh +++ b/macapype/bash/IterREGBET.sh @@ -280,8 +280,8 @@ for ((i = 1 ; i <= $NITER ; i++)); do if [[ -n $REF_WHOLE ]] && [[ $i == $NITER ]]; then echo "FNIRT..." 1>&2 #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} # compute warp - #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=3,3 --subsamp=4,2 --infwhm=6,4 --reffwhm=4,2 --estint=false --applyrefmask=false --applyinmask=false # compute warp - "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=1 --subsamp=4 --infwhm=6 --reffwhm=4 --estint=false --applyrefmask=false --applyinmask=false # compute warp + "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=5,3 --subsamp=4,2 --infwhm=6,4 --reffwhm=4,2 --estint=false --applyrefmask=false --applyinmask=false # compute warp + #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=1 --subsamp=4 --infwhm=6 --reffwhm=4 --estint=false --applyrefmask=false --applyinmask=false # compute warp echo "Inverting warp..." 1>&2 "${FSLPREFIX}invwarp" -r $IN_WHOLE -w ${WARP[WH_WARP]} -o ${WARP[WH_INVWARP]} echo "Applying inverse warp..." 1>&2 From 2673ea9ce35c6340d1ab8dfe0073a3525d88c23a Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 22 Dec 2025 12:03:54 +0100 Subject: [PATCH 35/47] pass --- macapype/pipelines/full_pipelines.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 966c4d35e..f57ebfb04 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -429,7 +429,9 @@ def create_brain_segment_from_mask_pipe( reg_f3d, 'invcpp_file', register_seg_to_nat, "trans_file") else: - # #TODO + + #TODO + pass # # gm # register_gm_to_nat = pe.Node( # fsl.ApplyXFM(), name="register_gm_to_nat") From a9f86808bffef175c7fc3a6cd374f9eb979bf701 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 22 Dec 2025 13:36:38 +0100 Subject: [PATCH 36/47] no premat --- macapype/pipelines/full_pipelines.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index f57ebfb04..c5270208c 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -387,10 +387,10 @@ def create_brain_segment_from_mask_pipe( reg, 'nonlin_invwarp_file', register_parcel_to_nat, "field_file") - - brain_segment_pipe.connect( - reg, 'inv_transfo_file', - register_parcel_to_nat, "premat") + # + # brain_segment_pipe.connect( + # reg, 'inv_transfo_file', + # register_parcel_to_nat, "premat") elif "reg_f3d" in params: # Iterative registration to the template From 9d2b90fddadeb01a71276b0ab6d5de18ef30d16c Mon Sep 17 00:00:00 2001 From: David Meunier Date: Mon, 22 Dec 2025 13:46:45 +0100 Subject: [PATCH 37/47] full reg --- macapype/bash/IterREGBET.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macapype/bash/IterREGBET.sh b/macapype/bash/IterREGBET.sh index a89edf5d1..58f7c69c5 100644 --- a/macapype/bash/IterREGBET.sh +++ b/macapype/bash/IterREGBET.sh @@ -279,8 +279,8 @@ for ((i = 1 ; i <= $NITER ; i++)); do # Extra whole-head non-linear registration, if wanted if [[ -n $REF_WHOLE ]] && [[ $i == $NITER ]]; then echo "FNIRT..." 1>&2 - #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} # compute warp - "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=5,3 --subsamp=4,2 --infwhm=6,4 --reffwhm=4,2 --estint=false --applyrefmask=false --applyinmask=false # compute warp + "${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} # compute warp + #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=5,3 --subsamp=4,2 --infwhm=6,4 --reffwhm=4,2 --estint=false --applyrefmask=false --applyinmask=false # compute warp #"${FSLPREFIX}fnirt" --in=$IN_WHOLE --ref=$REF_WHOLE --aff=$I2R_XFM --iout=${WARP[WH_OUT]} --cout=${WARP[WH_WARP]} --miter=1 --subsamp=4 --infwhm=6 --reffwhm=4 --estint=false --applyrefmask=false --applyinmask=false # compute warp echo "Inverting warp..." 1>&2 "${FSLPREFIX}invwarp" -r $IN_WHOLE -w ${WARP[WH_WARP]} -o ${WARP[WH_INVWARP]} From 2e6302fe45320fdc36ab3bb5562683336aa0da68 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Tue, 23 Dec 2025 00:26:59 +0100 Subject: [PATCH 38/47] using linear flirt and checking --- macapype/pipelines/full_pipelines.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index c5270208c..2e54615b6 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -282,8 +282,9 @@ def create_brain_segment_from_mask_pipe( reg.inputs.refb_file = params_template["template_brain"] - reg.inputs.refw_file = params_template["template_head"] - reg.inputs.k = True +# +# reg.inputs.refw_file = params_template["template_head"] +# reg.inputs.k = True brain_segment_pipe.connect( inputnode, 'debiased_T1', @@ -371,6 +372,7 @@ def create_brain_segment_from_mask_pipe( if "template_parcel" in params_template.keys() \ and "parcel_gm" in params: + # nonlin flirt # seg register_parcel_to_nat = pe.Node( fsl.ApplyWarp(), name="register_parcel_to_nat") @@ -392,6 +394,23 @@ def create_brain_segment_from_mask_pipe( # reg, 'inv_transfo_file', # register_parcel_to_nat, "premat") + + register_parcel_to_nat = pe.Node( + fsl.ApplyXFM(), name="register_parcel_to_nat") + + register_parcel_to_nat.inputs.interp = "nn" + + register_parcel_to_nat.inputs.in_file = params_template[ + "template_parcel"] + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + register_parcel_to_nat, 'ref_file') + + brain_segment_pipe.connect( + reg, 'inv_transfo_file', + register_parcel_to_nat, "in_matrix_file") + + elif "reg_f3d" in params: # Iterative registration to the template reg_f3d = pe.Node( From a8f42dad4ce69d9335732965f761475b746f0331 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Tue, 23 Dec 2025 00:27:46 +0100 Subject: [PATCH 39/47] nn --- macapype/pipelines/full_pipelines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 2e54615b6..56f8c9624 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -398,7 +398,7 @@ def create_brain_segment_from_mask_pipe( register_parcel_to_nat = pe.Node( fsl.ApplyXFM(), name="register_parcel_to_nat") - register_parcel_to_nat.inputs.interp = "nn" + register_parcel_to_nat.inputs.interp = "nearestneighbour" register_parcel_to_nat.inputs.in_file = params_template[ "template_parcel"] From 7329d84fcbbb432808229e3b76f4228cc761ff2c Mon Sep 17 00:00:00 2001 From: David Meunier Date: Tue, 23 Dec 2025 00:28:33 +0100 Subject: [PATCH 40/47] comment --- macapype/pipelines/full_pipelines.py | 42 ++++++++++++++-------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 56f8c9624..bea5012cb 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -371,30 +371,30 @@ def create_brain_segment_from_mask_pipe( if "template_parcel" in params_template.keys() \ and "parcel_gm" in params: - - # nonlin flirt - # seg - register_parcel_to_nat = pe.Node( - fsl.ApplyWarp(), name="register_parcel_to_nat") - - register_parcel_to_nat.inputs.interp = "nn" - - register_parcel_to_nat.inputs.in_file = params_template[ - "template_parcel"] - brain_segment_pipe.connect( - inputnode, 'masked_debiased_T1', - register_parcel_to_nat, 'ref_file') - - brain_segment_pipe.connect( - reg, 'nonlin_invwarp_file', - register_parcel_to_nat, "field_file") - # + # # nonlin flirt + # # seg + # register_parcel_to_nat = pe.Node( + # fsl.ApplyWarp(), name="register_parcel_to_nat") + # + # register_parcel_to_nat.inputs.interp = "nn" + # + # register_parcel_to_nat.inputs.in_file = params_template[ + # "template_parcel"] # brain_segment_pipe.connect( - # reg, 'inv_transfo_file', - # register_parcel_to_nat, "premat") - + # inputnode, 'masked_debiased_T1', + # register_parcel_to_nat, 'ref_file') + # + # brain_segment_pipe.connect( + # reg, 'nonlin_invwarp_file', + # register_parcel_to_nat, "field_file") + # + # # + # # brain_segment_pipe.connect( + # # reg, 'inv_transfo_file', + # # register_parcel_to_nat, "premat") + # flirt version register_parcel_to_nat = pe.Node( fsl.ApplyXFM(), name="register_parcel_to_nat") From dc9e80b3b8c1f5f1dc8f7826555f60d2927f959d Mon Sep 17 00:00:00 2001 From: David Meunier Date: Tue, 23 Dec 2025 00:29:13 +0100 Subject: [PATCH 41/47] reference --- macapype/pipelines/full_pipelines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index bea5012cb..34fb3507f 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -404,7 +404,7 @@ def create_brain_segment_from_mask_pipe( "template_parcel"] brain_segment_pipe.connect( inputnode, 'masked_debiased_T1', - register_parcel_to_nat, 'ref_file') + register_parcel_to_nat, 'reference') brain_segment_pipe.connect( reg, 'inv_transfo_file', From d0e09afa5548144780c64afbccf2b3b0b62d2cc7 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Tue, 6 Jan 2026 11:49:25 +0100 Subject: [PATCH 42/47] template_MBM_space-stereoINTv2 --- macapype/utils/data_test_servers.json | 1 + macapype/utils/templates.json | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/macapype/utils/data_test_servers.json b/macapype/utils/data_test_servers.json index ab6c81677..ac6ba7cb0 100644 --- a/macapype/utils/data_test_servers.json +++ b/macapype/utils/data_test_servers.json @@ -40,6 +40,7 @@ "MBM_v3.0.1_6seg": "yop65ARqHKMdfrP", "MBM_v3.0.1_6seg_stereoINT": "PREL3NDPrrcytPT", "MBM_v3.0.1_6seg_stereoINT_largeFOV": "PREL3NDPrrcytPT", + "template_MBM_space-stereoINTv2":"pxqTmsEHDnAkmBC", "bma-1": "29qRZrnHnBxtCGB", "bma-1_0p2mm": "YoLAFawKMTi7FqR", diff --git a/macapype/utils/templates.json b/macapype/utils/templates.json index a732b6a58..3225e4426 100644 --- a/macapype/utils/templates.json +++ b/macapype/utils/templates.json @@ -232,5 +232,11 @@ "template_head": "template_space-stereoINT_largeFOV_T1w.nii.gz", "template_brain": "template_space-stereoINT_largeFOV_T1w_brain.nii.gz", "template_seg": "segmentation_six_types_seg_largeFOV_space-stereoINT.nii.gz" + }, + "template_MBM_space-stereoINTv2":{ + "template_head": "template_T1w_resampled_largeFOV_reorient_space-stereoINTv2.nii.gz", + "template_brain": "template_T1w_brain_resampled_largeFOV_reorient_space-stereoINTv2.nii.gz", + "template_seg": "segmentation_six_types_seg_resampled_largeFOV_reorient_space-stereoINTv2.nii.gz", + "template_parcel": "atlas_RikenBMA_cortex_largeFOV_resampled_reorient_space-stereoINTv2.nii.gz" } } From b8d807132ba574ea90c82d09f83cbef512cfaa76 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Tue, 6 Jan 2026 17:24:49 +0100 Subject: [PATCH 43/47] flake8 --- macapype/nodes/register.py | 8 +- macapype/nodes/segment.py | 2 +- macapype/pipelines/full_pipelines.py | 110 ++++----------------------- macapype/pipelines/rename.py | 1 - 4 files changed, 19 insertions(+), 102 deletions(-) diff --git a/macapype/nodes/register.py b/macapype/nodes/register.py index 9e1670b5d..31008e339 100644 --- a/macapype/nodes/register.py +++ b/macapype/nodes/register.py @@ -344,9 +344,11 @@ def _list_outputs(self): outputs["transfo_file"] = os.path.abspath(outfile + ".xfm") outputs["inv_transfo_file"] = os.path.abspath(outfile + "_inverse.xfm") - if isdefined(self.inputs.refw_file) and self.inputs.k==True: - outputs["nonlin_warp_file"] = os.path.abspath(outfile + "_Warp.nii.gz") - outputs["nonlin_invwarp_file"] = os.path.abspath(outfile + "_InverseWarp.nii.gz") + if isdefined(self.inputs.refw_file) and self.inputs.k is True: + outputs["nonlin_warp_file"] = \ + os.path.abspath(outfile + "_Warp.nii.gz") + outputs["nonlin_invwarp_file"] = \ + os.path.abspath(outfile + "_InverseWarp.nii.gz") return outputs diff --git a/macapype/nodes/segment.py b/macapype/nodes/segment.py index b78e1d1d4..035114203 100644 --- a/macapype/nodes/segment.py +++ b/macapype/nodes/segment.py @@ -248,7 +248,7 @@ def merge_imgs(list_img_files): path, fname, ext = split_f(img_file) img = nib.load(img_file) img_data = img.get_fdata() - new_img_data = np.zeros(shape=img_data.shape, dtype = np.int32) + new_img_data = np.zeros(shape=img_data.shape, dtype=np.int32) new_img_data[img_data != 0] = 1 else: diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 34fb3507f..9452e9499 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -10,7 +10,7 @@ from nipype.interfaces.ants.utils import ImageMath from nipype.interfaces.niftyreg.reg import RegF3D -from nipype.interfaces.niftyreg.regutils import RegResample, RegTransform +from nipype.interfaces.niftyreg.regutils import RegResample from ..utils.utils_nodes import NodeParams @@ -31,7 +31,7 @@ from .correct_bias import create_masked_correct_bias_pipe -from .register import (create_register_NMT_pipe, create_reg_seg_pipe) +from .register import (create_register_NMT_pipe) from .extract_brain import create_extract_pipe @@ -282,9 +282,8 @@ def create_brain_segment_from_mask_pipe( reg.inputs.refb_file = params_template["template_brain"] -# -# reg.inputs.refw_file = params_template["template_head"] -# reg.inputs.k = True + # reg.inputs.refw_file = params_template["template_head"] + # reg.inputs.k = True brain_segment_pipe.connect( inputnode, 'debiased_T1', @@ -368,31 +367,8 @@ def create_brain_segment_from_mask_pipe( reg, 'inv_transfo_file', register_csf_to_nat, "in_matrix_file") - if "template_parcel" in params_template.keys() \ - and "parcel_gm" in params: - # - # # nonlin flirt - # # seg - # register_parcel_to_nat = pe.Node( - # fsl.ApplyWarp(), name="register_parcel_to_nat") - # - # register_parcel_to_nat.inputs.interp = "nn" - # - # register_parcel_to_nat.inputs.in_file = params_template[ - # "template_parcel"] - # brain_segment_pipe.connect( - # inputnode, 'masked_debiased_T1', - # register_parcel_to_nat, 'ref_file') - # - # brain_segment_pipe.connect( - # reg, 'nonlin_invwarp_file', - # register_parcel_to_nat, "field_file") - # - # # - # # brain_segment_pipe.connect( - # # reg, 'inv_transfo_file', - # # register_parcel_to_nat, "premat") + and "parcel_gm" in params: # flirt version register_parcel_to_nat = pe.Node( @@ -410,16 +386,15 @@ def create_brain_segment_from_mask_pipe( reg, 'inv_transfo_file', register_parcel_to_nat, "in_matrix_file") - elif "reg_f3d" in params: # Iterative registration to the template reg_f3d = pe.Node( RegF3D(), name='reg_f3d') - reg_f3d.inputs.rmask_file= params_template["template_brain"] + reg_f3d.inputs.rmask_file = params_template["template_brain"] - reg_f3d.inputs.ref_file = params_template["template_head"] + reg_f3d.inputs.ref_file = params_template["template_head"] brain_segment_pipe.connect( inputnode, 'debiased_T1', @@ -448,62 +423,13 @@ def create_brain_segment_from_mask_pipe( reg_f3d, 'invcpp_file', register_seg_to_nat, "trans_file") else: - - #TODO + # TODO + print("**** register split template files \ + is not impremented for template reg_f3d ****") pass - # # gm - # register_gm_to_nat = pe.Node( - # fsl.ApplyXFM(), name="register_gm_to_nat") - # register_gm_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM - # register_gm_to_nat.inputs.interp = "nearestneighbour" - # - # register_gm_to_nat.inputs.in_file = \ - # params_template["template_gm"] - # - # brain_segment_pipe.connect( - # inputnode, 'masked_debiased_T1', - # register_gm_to_nat, 'reference') - # - # brain_segment_pipe.connect( - # reg, 'inv_transfo_file', - # register_gm_to_nat, "in_matrix_file") - # - # # wm - # register_wm_to_nat = pe.Node( - # fsl.ApplyXFM(), name="register_wm_to_nat") - # register_wm_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM - # register_wm_to_nat.inputs.interp = "nearestneighbour" - # - # register_wm_to_nat.inputs.in_file = \ - # params_template["template_wm"] - # - # brain_segment_pipe.connect( - # inputnode, 'masked_debiased_T1', - # register_wm_to_nat, 'reference') - # - # brain_segment_pipe.connect( - # reg, 'inv_transfo_file', - # register_wm_to_nat, "in_matrix_file") - # - # # csf - # register_csf_to_nat = pe.Node( - # fsl.ApplyXFM(), name="register_csf_to_nat") - # register_csf_to_nat.inputs.output_type = "NIFTI_GZ" # for SPM - # register_csf_to_nat.inputs.interp = "nearestneighbour" - # - # register_csf_to_nat.inputs.in_file = \ - # params_template["template_csf"] - # - # brain_segment_pipe.connect( - # inputnode, 'masked_debiased_T1', - # register_csf_to_nat, 'reference') - # - # brain_segment_pipe.connect( - # reg, 'inv_transfo_file', - # register_csf_to_nat, "in_matrix_file") if "template_parcel" in params_template.keys() \ - and "parcel_gm" in params: + and "parcel_gm" in params: register_parcel_to_nat = pe.Node( RegResample(), name="register_parcel_to_nat") @@ -586,8 +512,7 @@ def create_brain_segment_from_mask_pipe( segment_atropos_pipe, "inputnode.brain_file") if "parcel_gm" in params and "template_parcel" in params_template.keys(): - - mult_gm_parcel = pe.Node(fsl.BinaryMaths(), name = "mult_gm_parcel") + mult_gm_parcel = pe.Node(fsl.BinaryMaths(), name="mult_gm_parcel") brain_segment_pipe.connect( segment_atropos_pipe, 'outputnode.threshold_gm', @@ -602,7 +527,7 @@ def create_brain_segment_from_mask_pipe( brain_segment_pipe.connect(mult_gm_parcel, 'out_file', outputnode, 'parcel_gm') - #outputnode + # outputnode if space == 'native': brain_segment_pipe.connect(segment_atropos_pipe, @@ -1347,7 +1272,6 @@ def create_full_T1T2_subpipes( seg_pipe.connect(brain_segment_pipe, 'outputnode.parcel_gm', outputnode, 'stereo_parcel_gm') - if pad and space == "native": pad_back( seg_pipe, data_preparation_pipe, @@ -1368,13 +1292,6 @@ def create_full_T1T2_subpipes( brain_segment_pipe, "outputnode.prob_csf", outputnode, "native_prob_csf", params, inter_val="LIN") -# -# pad_back( -# seg_pipe, data_preparation_pipe, -# brain_segment_pipe, "outputnode.parcel_gm", -# outputnode, "native_parcel_gm", params, -# inter_val="NN") - if "pad_template" in params["short_preparation_pipe"].keys(): pad_stereo_stereo_brain_mask = NodeParams( @@ -1391,7 +1308,6 @@ def create_full_T1T2_subpipes( pad_stereo_stereo_brain_mask, "output_image", outputnode, "stereo_padded_segmented_brain_mask") - if "pad_template" in params["short_preparation_pipe"].keys(): pad_stereo_parcel_gm = NodeParams( ImageMath(), diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index a8c012eab..6f480685c 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -444,7 +444,6 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, rename_stereo_parcel_gm, 'out_file', datasink, '@stereo_parcel_gm') - if "pad_template" in params["short_preparation_pipe"].keys(): rename_stereo_padded_segmented_brain_mask = pe.Node( From 3e4fe35e971e2bf05d3e2447e63eb305c22e4e92 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 9 Jan 2026 12:00:04 +0100 Subject: [PATCH 44/47] brain_segment_pipe --- macapype/pipelines/full_pipelines.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index 9452e9499..ca90b8447 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -1191,6 +1191,7 @@ def create_full_T1T2_subpipes( seg_pipe_name = "brain_old_segment_pipe" else: + print("No segmentation will be performed, skipping") return seg_pipe seg_pipe.connect(inputnode, 'indiv_params', @@ -1269,8 +1270,10 @@ def create_full_T1T2_subpipes( seg_pipe.connect(brain_segment_pipe, 'outputnode.prob_csf', outputnode, 'stereo_prob_csf') - seg_pipe.connect(brain_segment_pipe, 'outputnode.parcel_gm', - outputnode, 'stereo_parcel_gm') + if "parcel_gm" in params["brain_segment_pipe"]: + seg_pipe.connect( + brain_segment_pipe, 'outputnode.parcel_gm', + outputnode, 'stereo_parcel_gm') if pad and space == "native": pad_back( From d46cc01ea9012bff3940c22c84cc723379237b22 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 9 Jan 2026 12:42:17 +0100 Subject: [PATCH 45/47] seg_pipe_name --- macapype/pipelines/full_pipelines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index ca90b8447..2f4fb1bfd 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -1270,7 +1270,7 @@ def create_full_T1T2_subpipes( seg_pipe.connect(brain_segment_pipe, 'outputnode.prob_csf', outputnode, 'stereo_prob_csf') - if "parcel_gm" in params["brain_segment_pipe"]: + if "parcel_gm" in params[seg_pipe_name].keys(): seg_pipe.connect( brain_segment_pipe, 'outputnode.parcel_gm', outputnode, 'stereo_parcel_gm') From 100c992906ca9a212be84f39791a6f72337116b0 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 9 Jan 2026 12:49:05 +0100 Subject: [PATCH 46/47] rename --- macapype/pipelines/rename.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 6f480685c..99db29708 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -360,6 +360,13 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, if "brain_segment_pipe" in params or "brain_old_segment_pipe" in params: + if "brain_segment_pipe" in params.keys(): + seg_pipe_name = "brain_segment_pipe" + + elif "brain_old_segment_pipe" in params.keys(): + seg_pipe_name = "brain_old_segment_pipe" + + # rename prob_wm rename_stereo_prob_wm = pe.Node(niu.Rename(), name="rename_stereo_prob_wm") @@ -425,7 +432,7 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, rename_stereo_segmented_brain_mask, 'out_file', datasink, '@stereo_segmented_brain_mask') - if "parcel_gm" in params["brain_segment_pipe"]: + if "parcel_gm" in params[seg_pipe_name]: # rename parcel_gm rename_stereo_parcel_gm = pe.Node( @@ -464,7 +471,7 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, rename_stereo_padded_segmented_brain_mask, 'out_file', datasink, '@stereo_padded_segmented_brain_mask') - if "parcel_gm" in params["brain_segment_pipe"]: + if "parcel_gm" in params[seg_pipe_name]: rename_stereo_padded_parcel_gm = pe.Node( niu.Rename(), From e1d13f07ec44bd1d22fe38a5d9403cd7e41df911 Mon Sep 17 00:00:00 2001 From: David Meunier Date: Fri, 9 Jan 2026 12:56:48 +0100 Subject: [PATCH 47/47] flake8 --- macapype/pipelines/rename.py | 1 - 1 file changed, 1 deletion(-) diff --git a/macapype/pipelines/rename.py b/macapype/pipelines/rename.py index 99db29708..893837d93 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -366,7 +366,6 @@ def rename_all_brain_derivatives(params, main_workflow, segment_pnh_pipe, elif "brain_old_segment_pipe" in params.keys(): seg_pipe_name = "brain_old_segment_pipe" - # rename prob_wm rename_stereo_prob_wm = pe.Node(niu.Rename(), name="rename_stereo_prob_wm")