diff --git a/macapype/bash/IterREGBET.sh b/macapype/bash/IterREGBET.sh index adf3a79ef..58f7c69c5 100644 --- a/macapype/bash/IterREGBET.sh +++ b/macapype/bash/IterREGBET.sh @@ -278,11 +278,13 @@ 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 - echo "Inverting 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..." + 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 diff --git a/macapype/nodes/register.py b/macapype/nodes/register.py index 3b1fa9d94..31008e339 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,16 @@ 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 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 57f3f8343..035114203 100644 --- a/macapype/nodes/segment.py +++ b/macapype/nodes/segment.py @@ -248,15 +248,16 @@ 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[img_data != 0] += img_data[img_data != 0] + 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) - 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, diff --git a/macapype/pipelines/full_pipelines.py b/macapype/pipelines/full_pipelines.py index f49463fd6..2f4fb1bfd 100644 --- a/macapype/pipelines/full_pipelines.py +++ b/macapype/pipelines/full_pipelines.py @@ -9,6 +9,7 @@ from nipype.interfaces.ants.utils import ImageMath +from nipype.interfaces.niftyreg.reg import RegF3D from nipype.interfaces.niftyreg.regutils import RegResample from ..utils.utils_nodes import NodeParams @@ -30,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 @@ -250,7 +251,7 @@ def create_brain_segment_from_mask_pipe( # creating outputnode outputnode = pe.Node( niu.IdentityInterface( - fields=["segmented_file", + fields=["segmented_file", "parcel", "parcel_gm", "threshold_gm", "threshold_wm", "threshold_csf", "prob_gm", "prob_wm", "prob_csf"]), name='outputnode') @@ -281,9 +282,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', @@ -301,18 +301,19 @@ 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") else: # gm @@ -365,6 +366,87 @@ 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() \ + and "parcel_gm" in params: + + # flirt version + 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( + 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', + reg_f3d, 'flo_file') + + brain_segment_pipe.connect( + inputnode, 'masked_debiased_T1', + reg_f3d, 'fmask_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 + print("**** register split template files \ + is not impremented for template reg_f3d ****") + pass + + if "template_parcel" in params_template.keys() \ + and "parcel_gm" in params: + + 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 @@ -387,6 +469,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) ") @@ -424,6 +511,23 @@ def create_brain_segment_from_mask_pipe( inputnode, 'masked_debiased_T1', 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") + + brain_segment_pipe.connect( + segment_atropos_pipe, 'outputnode.threshold_gm', + 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, 'parcel_gm') + + # outputnode if space == 'native': brain_segment_pipe.connect(segment_atropos_pipe, @@ -438,6 +542,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') @@ -447,73 +552,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 @@ -600,25 +710,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", - '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", @@ -1076,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', @@ -1154,6 +1270,11 @@ def create_full_T1T2_subpipes( seg_pipe.connect(brain_segment_pipe, 'outputnode.prob_csf', outputnode, 'stereo_prob_csf') + if "parcel_gm" in params[seg_pipe_name].keys(): + 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, @@ -1190,6 +1311,21 @@ 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 cad429772..893837d93 100644 --- a/macapype/pipelines/rename.py +++ b/macapype/pipelines/rename.py @@ -360,6 +360,12 @@ 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,6 +431,25 @@ 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[seg_pipe_name]: + + # 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( @@ -445,6 +470,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 params[seg_pipe_name]: + + 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( @@ -835,6 +880,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') # rename 5tt if "export_5tt_pipe" in params.keys(): 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" } } diff --git a/workflows/params_segment_marmo_ants_4animal.json b/workflows/params_segment_marmo_ants_4animal.json index b96d603f4..074dfd0bc 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" @@ -40,11 +37,8 @@ }, "brain_segment_pipe": { - "reg": + "reg_f3d": { - "n": 2, - "m": "ref", - "dof": 12 }, "segment_atropos_pipe": { @@ -59,7 +53,10 @@ "wm": 3, "csf": 4 } - } + }, + "parcel_gm": + {} + }, "export_5tt_pipe": { 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])