diff --git a/spimquant/config/snakebids.yml b/spimquant/config/snakebids.yml index 5b603cd..8669c25 100644 --- a/spimquant/config/snakebids.yml +++ b/spimquant/config/snakebids.yml @@ -6,9 +6,9 @@ analysis_levels: &analysis_levels #mapping from analysis_level to set of target rules or files targets_by_analysis_level: participant: - - '' # if '', then the first rule is run + - 'all_participant' # if '', then the first rule is run group: - - 'all_group_stats' + - 'all_group' # Configure components: # Each entry creates a new component that can be retreived within the workflow diff --git a/spimquant/workflow/Snakefile b/spimquant/workflow/Snakefile index 70aed1b..af5247f 100644 --- a/spimquant/workflow/Snakefile +++ b/spimquant/workflow/Snakefile @@ -30,27 +30,29 @@ inputs = generate_inputs( ) -# get stains from first subject (lazy - should use the correct stain for each subject, when defining target rules) -# to do this, would need to get the channel names in the function that gets the target rules -stains = ZarrNii.from_ome_zarr(inputs["spim"].expand()[0]).list_channels() +include: "rules/common.smk" + + +stains = get_stains_all_subjects() + stain_for_reg = None for stain in config["stains_for_reg"]: if stain in stains: stain_for_reg = stain break -if stain_for_reg == None: - raise ValueError( - "a stain for registration was not found in the first OME zarr file" - ) +if stain_for_reg is None: + raise ValueError(f"a stain for registration was not found in {stains}") stains_for_seg = list(set(config["stains_for_seg"]).intersection(set(stains))) +do_coloc = len(stains_for_seg) > 1 + # atlas segmentations to use all_atlas_segs = config["templates"][config["template"]]["atlases"].keys() -if config["atlas_segs"] == None: +if config["atlas_segs"] is None: atlas_segs = all_atlas_segs else: atlas_segs = [] @@ -106,7 +108,7 @@ rule all_templatereg_deform_zooms: space="{template}", stain="{stain}", res="{res}um", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), template=config["template"], @@ -124,7 +126,7 @@ rule all_templatereg_deform: desc="deform", space="{template}", stain="{stain}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), template=config["template"], @@ -156,7 +158,7 @@ rule all_fieldfrac_tune: stain="{stain}", level="{level}", desc="otsu+k{k}i{i}", - suffix="fieldfrac.nii", + suffix="fieldfrac.nii.gz", **inputs["spim"].wildcards, ), stain=stains_for_seg, @@ -175,7 +177,7 @@ rule all_segment: seg="{seg}", space="{template}", desc="{desc}", - suffix="{stain}+{suffix}.nii", + suffix="{stain}+{suffix}.nii.gz", **inputs["spim"].wildcards, ), seg=atlas_segs, @@ -184,21 +186,6 @@ rule all_segment: suffix=config["seg_metrics"], stain=stains_for_seg, ), - inputs["spim"].expand( - bids( - root=root, - datatype="micr", - seg="{seg}", - space="{template}", - desc="{desc}", - suffix="coloc+{suffix}.nii", - **inputs["spim"].wildcards, - ), - seg=atlas_segs, - desc=config["seg_method"], - template=config["template"], - suffix=config["coloc_seg_metrics"], - ), inputs["spim"].expand( bids( root=root, @@ -206,7 +193,7 @@ rule all_segment: stain="{stain}", level="{level}", space="{template}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), stain=stains_for_seg + [stain_for_reg], @@ -221,7 +208,7 @@ rule all_segment: level="{level}", desc="{desc}", space="{template}", - suffix="fieldfrac.nii", + suffix="fieldfrac.nii.gz", **inputs["spim"].wildcards, ), stain=stains_for_seg, @@ -254,7 +241,7 @@ rule all_segment: stain="{stain}", level="{level}", desc="{desc}", - suffix="counts.nii", + suffix="counts.nii.gz", **inputs["spim"].wildcards, ), stain=stains_for_seg, @@ -268,7 +255,7 @@ rule all_segment: stain="{stain}", space="{template}", desc="{desc}", - suffix="counts.nii", + suffix="counts.nii.gz", **inputs["spim"].wildcards, ), stain=stains_for_seg, @@ -279,24 +266,43 @@ rule all_segment: bids( root=root, datatype="micr", - desc="{desc}", + stain="{stain}", + space="{template}", + suffix="regqc.html", + **inputs["spim"].wildcards, + ), + stain=stain_for_reg, + template=config["template"], + ), + + +rule all_segment_coloc: + input: + inputs["spim"].expand( + bids( + root=root, + datatype="micr", + seg="{seg}", space="{template}", - suffix="coloccounts.nii", + desc="{desc}", + suffix="coloc+{suffix}.nii.gz", **inputs["spim"].wildcards, ), + seg=atlas_segs, desc=config["seg_method"], template=config["template"], + suffix=config["coloc_seg_metrics"], ), inputs["spim"].expand( bids( root=root, datatype="micr", - stain="{stain}", + desc="{desc}", space="{template}", - suffix="regqc.html", + suffix="coloccounts.nii.gz", **inputs["spim"].wildcards, ), - stain=stain_for_reg, + desc=config["seg_method"], template=config["template"], ), @@ -375,14 +381,6 @@ rule all_imaris_crops: ), -rule all: - default_target: True - input: - rules.all_segment.input, - rules.all_spim_patches.input, - rules.all_mri_reg.input if config["register_to_mri"] else [], - - rule all_group_stats: """Target rule for group-level statistical analysis.""" input: @@ -421,18 +419,17 @@ rule all_group_stats: bids( root=root, datatype="group", - seg="{seg}", + level="{level}", space="{template}", desc="{desc}", - metric="coloc+{metric}", - suffix="{stat}.nii.gz", + suffix="{stain}+count.nii.gz", ), - seg=atlas_segs, desc=config["seg_method"], template=config["template"], - metric=config["coloc_seg_metrics"], - stat=config["stats_maps"], + level=range(4), + stain=stains_for_seg, ), + # Add contrast-filtered outputs expand( bids( root=root, @@ -440,43 +437,55 @@ rule all_group_stats: level="{level}", space="{template}", desc="{desc}", - suffix="{stain}+count.nii", + contrast="{contrast_column}+{contrast_value}", + suffix="{stain}+count.nii.gz", ), desc=config["seg_method"], template=config["template"], level=range(4), stain=stains_for_seg, + contrast_column=config["contrast_column"], + contrast_value=config["contrast_values"], ), + # Add group-averaged segstats maps by contrast expand( bids( root=root, datatype="group", + seg="{seg}", space="{template}", - level="{level}", desc="{desc}", - suffix="coloccount.nii", + contrast="{contrast_column}+{contrast_value}", + metric="{stain}+{metric}", + suffix="groupavg.nii.gz", ), + seg=atlas_segs, desc=config["seg_method"], template=config["template"], - level=range(4), + stain=stains_for_seg, + metric=config["seg_metrics"], + contrast_column=config["contrast_column"], + contrast_value=config["contrast_values"], ), - # Add contrast-filtered outputs + + +rule all_group_stats_coloc: + input: expand( bids( root=root, datatype="group", - level="{level}", + seg="{seg}", space="{template}", desc="{desc}", - contrast="{contrast_column}+{contrast_value}", - suffix="{stain}+count.nii", + metric="coloc+{metric}", + suffix="{stat}.nii.gz", ), + seg=atlas_segs, desc=config["seg_method"], template=config["template"], - level=range(4), - stain=stains_for_seg, - contrast_column=config["contrast_column"], - contrast_value=config["contrast_values"], + metric=config["coloc_seg_metrics"], + stat=config["stats_maps"], ), expand( bids( @@ -485,32 +494,25 @@ rule all_group_stats: space="{template}", level="{level}", desc="{desc}", - contrast="{contrast_column}+{contrast_value}", - suffix="coloccount.nii", + suffix="coloccount.nii.gz", ), desc=config["seg_method"], template=config["template"], level=range(4), - contrast_column=config["contrast_column"], - contrast_value=config["contrast_values"], ), - # Add group-averaged segstats maps by contrast expand( bids( root=root, datatype="group", - seg="{seg}", space="{template}", + level="{level}", desc="{desc}", contrast="{contrast_column}+{contrast_value}", - metric="{stain}+{metric}", - suffix="groupavg.nii.gz", + suffix="coloccount.nii.gz", ), - seg=atlas_segs, desc=config["seg_method"], template=config["template"], - stain=stains_for_seg, - metric=config["seg_metrics"], + level=range(4), contrast_column=config["contrast_column"], contrast_value=config["contrast_values"], ), @@ -534,7 +536,21 @@ rule all_group_stats: ), -include: "rules/common.smk" +rule all_participant: + default_target: True + input: + rules.all_segment.input, + rules.all_spim_patches.input, + rules.all_mri_reg.input if config["register_to_mri"] else [], + rules.all_segment_coloc.input if do_coloc else [], + + +rule all_group: + input: + rules.all_group_stats.input, + rules.all_group_stats_coloc.input if do_coloc else [], + + include: "rules/import.smk" include: "rules/masking.smk" include: "rules/templatereg.smk" diff --git a/spimquant/workflow/rules/common.smk b/spimquant/workflow/rules/common.smk index 218094e..1bd8be5 100644 --- a/spimquant/workflow/rules/common.smk +++ b/spimquant/workflow/rules/common.smk @@ -34,3 +34,15 @@ def get_template_for_reg(wildcards): return get_template_path(root, wildcards.template, config["template_crop"]) else: return bids_tpl(root=root, template=wildcards.template, suffix="anat.nii.gz") + + +def get_stains_all_subjects(): + + stain_sets = [ + set(ZarrNii.from_ome_zarr(zarr).list_channels()) + for zarr in inputs["spim"].expand() + ] + if all(s == stain_sets[0] for s in stain_sets): + return list(stain_sets[0]) + else: + raise ValueError(f"stains across subjects are not consistent, {stain_sets}") diff --git a/spimquant/workflow/rules/groupstats.smk b/spimquant/workflow/rules/groupstats.smk index e7a7753..93286fa 100644 --- a/spimquant/workflow/rules/groupstats.smk +++ b/spimquant/workflow/rules/groupstats.smk @@ -194,7 +194,7 @@ rule group_counts_per_voxel: space="{template}", level="{level}", desc="{desc}", - suffix="{stain}+count.nii", + suffix="{stain}+count.nii.gz", ), group: "subj" @@ -227,7 +227,7 @@ rule group_coloc_counts_per_voxel: space="{template}", level="{level}", desc="{desc}", - suffix="coloccount.nii", + suffix="coloccount.nii.gz", ), group: "subj" @@ -304,7 +304,7 @@ rule group_counts_per_voxel_contrast: level="{level}", desc="{desc}", contrast="{contrast_column}+{contrast_value}", - suffix="{stain}+count.nii", + suffix="{stain}+count.nii.gz", ), group: "subj" @@ -339,7 +339,7 @@ rule group_coloc_counts_per_voxel_contrast: level="{level}", desc="{desc}", contrast="{contrast_column}+{contrast_value}", - suffix="coloccount.nii", + suffix="coloccount.nii.gz", ), group: "subj" diff --git a/spimquant/workflow/rules/import.smk b/spimquant/workflow/rules/import.smk index 8c6dd02..407ff2b 100644 --- a/spimquant/workflow/rules/import.smk +++ b/spimquant/workflow/rules/import.smk @@ -16,7 +16,7 @@ rule get_downsampled_nii: datatype="micr", stain="{stain}", level="{level}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), group: diff --git a/spimquant/workflow/rules/masking.smk b/spimquant/workflow/rules/masking.smk index 554e2ad..f6d3101 100644 --- a/spimquant/workflow/rules/masking.smk +++ b/spimquant/workflow/rules/masking.smk @@ -5,7 +5,7 @@ rule pre_atropos: datatype="micr", stain="{stain}", level="{level}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), params: @@ -109,7 +109,7 @@ rule post_atropos: datatype="micr", stain="{stain}", level="{level}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), dseg=rules.atropos_seg.output.dseg, @@ -147,7 +147,7 @@ rule init_affine_reg: datatype="micr", stain=stain_for_reg, level=config["registration_level"], - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), params: @@ -204,7 +204,7 @@ rule affine_transform_template_mask_to_subject: datatype="micr", stain=stain_for_reg, level=config["registration_level"], - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), dseg=rules.import_mask.output.mask, @@ -262,7 +262,7 @@ rule create_mask_from_gmm_and_prior: stain="{stain}", level="{level}", desc="brain", - suffix="mask.nii", + suffix="mask.nii.gz", **inputs["spim"].wildcards, ), group: @@ -296,7 +296,7 @@ rule create_mask_from_gmm: stain="{stain}", level="{level}", desc="brain1class", - suffix="mask.nii", + suffix="mask.nii.gz", **inputs["spim"].wildcards, ), group: diff --git a/spimquant/workflow/rules/segmentation.smk b/spimquant/workflow/rules/segmentation.smk index 2238043..32b2f89 100644 --- a/spimquant/workflow/rules/segmentation.smk +++ b/spimquant/workflow/rules/segmentation.smk @@ -312,7 +312,7 @@ rule transform_regionprops_to_template: datatype="warps", from_="{template}", to="subject", - suffix="warp.nii", + suffix="warp.nii.gz", **inputs["spim"].wildcards, ), params: @@ -438,7 +438,7 @@ rule counts_per_voxel: stain="{stain}", level="{level}", desc="{desc}", - suffix="counts.nii", + suffix="counts.nii.gz", **inputs["spim"].wildcards, ), group: @@ -473,7 +473,7 @@ rule counts_per_voxel_template: stain="{stain}", space="{template}", desc="{desc}", - suffix="counts.nii", + suffix="counts.nii.gz", **inputs["spim"].wildcards, ), group: @@ -507,7 +507,7 @@ rule coloc_per_voxel_template: datatype="micr", space="{template}", desc="{desc}", - suffix="coloccounts.nii", + suffix="coloccounts.nii.gz", **inputs["spim"].wildcards, ), group: @@ -546,7 +546,7 @@ rule fieldfrac: stain="{stain}", level="{level}", desc="{desc}", - suffix="fieldfrac.nii", + suffix="fieldfrac.nii.gz", **inputs["spim"].wildcards, ), group: @@ -566,7 +566,7 @@ rule deform_negative_mask_to_subject_nii: datatype="micr", stain=stain_for_reg, level="{level}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), mask=config["template_negative_mask"], @@ -603,7 +603,7 @@ rule map_img_to_roi_tsv: stain="{stain}", level="{level}", desc="{desc}", - suffix="{suffix}.nii", + suffix="{suffix}.nii.gz", **inputs["spim"].wildcards, ), dseg=bids( @@ -871,52 +871,87 @@ rule merge_into_colocsegstats_tsv: "../scripts/merge_into_segstats_tsv.py" -rule merge_indiv_and_coloc_segstats_tsv: - input: - indiv_tsvs=expand( - bids( +if len(stains_for_seg) == 1: + + rule cp_indiv_segstats_tsv: + input: + indiv_tsv=bids( root=root, datatype="micr", seg="{seg}", from_="{template}", - stain="{stain}", + stain=stains_for_seg[0], level=config["registration_level"], desc="{desc}", suffix="segstats.tsv", **inputs["spim"].wildcards, ), - stain=stains_for_seg, - allow_missing=True, - ), - coloc_tsv=bids( - root=root, - datatype="micr", - seg="{seg}", - from_="{template}", - desc="{desc}", - suffix="colocsegstats.tsv", - **inputs["spim"].wildcards, - ), - params: - stains=stains_for_seg, - output: - merged_tsv=bids( - root=root, - datatype="micr", - seg="{seg}", - from_="{template}", - desc="{desc}", - suffix="mergedsegstats.tsv", - **inputs["spim"].wildcards, - ), - group: - "subj" - threads: 1 - resources: - mem_mb=16000, - runtime=5, - script: - "../scripts/merge_indiv_and_coloc_segstats_tsv.py" + output: + merged_tsv=bids( + root=root, + datatype="micr", + seg="{seg}", + from_="{template}", + desc="{desc}", + suffix="mergedsegstats.tsv", + **inputs["spim"].wildcards, + ), + group: + "subj" + threads: 1 + resources: + runtime=5, + shell: + "cp {input} {output}" + +else: + + rule merge_indiv_and_coloc_segstats_tsv: + input: + indiv_tsvs=expand( + bids( + root=root, + datatype="micr", + seg="{seg}", + from_="{template}", + stain="{stain}", + level=config["registration_level"], + desc="{desc}", + suffix="segstats.tsv", + **inputs["spim"].wildcards, + ), + stain=stains_for_seg, + allow_missing=True, + ), + coloc_tsv=bids( + root=root, + datatype="micr", + seg="{seg}", + from_="{template}", + desc="{desc}", + suffix="colocsegstats.tsv", + **inputs["spim"].wildcards, + ), + params: + stains=stains_for_seg, + output: + merged_tsv=bids( + root=root, + datatype="micr", + seg="{seg}", + from_="{template}", + desc="{desc}", + suffix="mergedsegstats.tsv", + **inputs["spim"].wildcards, + ), + group: + "subj" + threads: 1 + resources: + mem_mb=16000, + runtime=5, + script: + "../scripts/merge_indiv_and_coloc_segstats_tsv.py" rule map_segstats_tsv_dseg_to_template_nii: @@ -947,7 +982,7 @@ rule map_segstats_tsv_dseg_to_template_nii: seg="{seg}", space="{template}", desc="{desc}", - suffix="{suffix}.nii", + suffix="{suffix}.nii.gz", **inputs["spim"].wildcards, ), group: @@ -996,7 +1031,7 @@ rule map_segstats_tsv_dseg_to_subject_nii: level="{level}", from_="{template}", desc="{desc}", - suffix="{suffix}.nii", + suffix="{suffix}.nii.gz", **inputs["spim"].wildcards, ), group: @@ -1017,7 +1052,7 @@ rule deform_fieldfrac_nii_to_template_nii: stain="{stain}", level="{level}", desc="{desc}", - suffix="fieldfrac.nii", + suffix="fieldfrac.nii.gz", **inputs["spim"].wildcards, ), ref=rules.import_template_anat.output.anat, @@ -1036,7 +1071,7 @@ rule deform_fieldfrac_nii_to_template_nii: datatype="warps", from_="subject", to="{template}", - suffix="warp.nii", + suffix="warp.nii.gz", **inputs["spim"].wildcards, ), output: @@ -1047,7 +1082,7 @@ rule deform_fieldfrac_nii_to_template_nii: level="{level}", desc="{desc}", space="{template}", - suffix="fieldfrac.nii", + suffix="fieldfrac.nii.gz", **inputs["spim"].wildcards, ), group: diff --git a/spimquant/workflow/rules/templatereg.smk b/spimquant/workflow/rules/templatereg.smk index 28c046c..7e32090 100644 --- a/spimquant/workflow/rules/templatereg.smk +++ b/spimquant/workflow/rules/templatereg.smk @@ -6,7 +6,7 @@ rule n4: datatype="micr", stain="{stain}", level="{level}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), mask=bids( @@ -15,7 +15,7 @@ rule n4: stain="{stain}", level="{level}", desc="brain", - suffix="mask.nii", + suffix="mask.nii.gz", **inputs["spim"].wildcards, ), output: @@ -25,7 +25,7 @@ rule n4: stain="{stain}", level="{level}", desc="N4", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), biasfield=bids( @@ -34,7 +34,7 @@ rule n4: stain="{stain}", level="{level}", desc="N4", - suffix="biasfield.nii", + suffix="biasfield.nii.gz", **inputs["spim"].wildcards, ), group: @@ -60,7 +60,7 @@ rule apply_mask_to_corrected: stain="{stain}", level="{level}", desc="N4", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), mask=bids( @@ -69,7 +69,7 @@ rule apply_mask_to_corrected: stain="{stain}", level="{level}", desc="brain", - suffix="mask.nii", + suffix="mask.nii.gz", **inputs["spim"].wildcards, ), output: @@ -79,7 +79,7 @@ rule apply_mask_to_corrected: stain="{stain}", level="{level}", desc="N4brain", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), group: @@ -123,7 +123,7 @@ rule affine_reg: stain=stain_for_reg, level=config["registration_level"], desc=config["templatereg"]["desc"], - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), params: @@ -145,7 +145,7 @@ rule affine_reg: space="{template}", stain=stain_for_reg, desc="affinewarped", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), group: @@ -214,7 +214,7 @@ rule deform_reg: stain=stain_for_reg, level=config["registration_level"], desc=config["templatereg"]["desc"], - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), xfm_ras=rules.affine_reg.output.xfm_ras, @@ -229,7 +229,7 @@ rule deform_reg: datatype="warps", from_="subject", to="{template}", - suffix="warp.nii", + suffix="warp.nii.gz", **inputs["spim"].wildcards, ), invwarp=bids( @@ -237,7 +237,7 @@ rule deform_reg: datatype="warps", from_="{template}", to="subject", - suffix="warp.nii", + suffix="warp.nii.gz", **inputs["spim"].wildcards, ), warped=temp( @@ -335,7 +335,7 @@ rule affine_zarr_to_template_nii: desc="affine", space="{template}", stain="{stain}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), group: @@ -398,7 +398,7 @@ rule deform_zarr_to_template_nii: desc="deform", space="{template}", stain="{stain}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), group: @@ -437,7 +437,7 @@ rule deform_to_template_nii_zoomed: space="{template}", stain="{stain}", res="{res}um", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), group: @@ -457,7 +457,7 @@ rule deform_spim_nii_to_template_nii: datatype="micr", stain="{stain}", level="{level}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), ref=rules.import_template_anat.output.anat, @@ -476,7 +476,7 @@ rule deform_spim_nii_to_template_nii: datatype="warps", from_="subject", to="{template}", - suffix="warp.nii", + suffix="warp.nii.gz", **inputs["spim"].wildcards, ), output: @@ -486,7 +486,7 @@ rule deform_spim_nii_to_template_nii: stain="{stain}", level="{level}", space="{template}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), group: @@ -512,7 +512,7 @@ rule deform_template_dseg_to_subject_nii: datatype="micr", stain=stain_for_reg, level="{level}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), dseg=bids_tpl( @@ -616,7 +616,7 @@ rule transform_labels_to_zoomed_template: space="{template}", stain=stain_for_reg, res="{res}um", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), output: @@ -625,7 +625,7 @@ rule transform_labels_to_zoomed_template: datatype="micr", space="{template}", res="{res}um", - suffix="dseg.nii", + suffix="dseg.nii.gz", **inputs["spim"].wildcards, ), group: @@ -651,7 +651,7 @@ rule registration_qc_report: stain="{stain}", level=config["registration_level"], desc=config["templatereg"]["desc"], - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), warped_affine=bids( @@ -660,7 +660,7 @@ rule registration_qc_report: space="{template}", stain="{stain}", desc="affinewarped", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), warped_deform=bids( @@ -669,7 +669,7 @@ rule registration_qc_report: stain="{stain}", level=config["registration_level"], space="{template}", - suffix="SPIM.nii", + suffix="SPIM.nii.gz", **inputs["spim"].wildcards, ), warp=bids( @@ -677,7 +677,7 @@ rule registration_qc_report: datatype="warps", from_="subject", to="{template}", - suffix="warp.nii", + suffix="warp.nii.gz", **inputs["spim"].wildcards, ), dseg=lambda wildcards: bids_tpl(