diff --git a/bio/samtools/calmd/environment.yaml b/bio/samtools/calmd/environment.yaml index 2f708e4a3f..9d771f82ec 100644 --- a/bio/samtools/calmd/environment.yaml +++ b/bio/samtools/calmd/environment.yaml @@ -2,4 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.11 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/calmd/meta.yaml b/bio/samtools/calmd/meta.yaml index 5d24bb719e..120aa10429 100644 --- a/bio/samtools/calmd/meta.yaml +++ b/bio/samtools/calmd/meta.yaml @@ -1,4 +1,7 @@ name: samtools calmd -description: Calculates MD and NM tags. For more information see `SAMtools documentation `_. +description: Calculates MD and NM tags. authors: - Filipe G. Vieira +notes: | + * The `extra` param allows for additional program arguments (not `-@/--threads` or `-O/--output-fmt`). + * For more information see, http://www.htslib.org/doc/samtools-calmd.html diff --git a/bio/samtools/calmd/test/Snakefile b/bio/samtools/calmd/test/Snakefile index c1f9049e67..9fbcdbcb7d 100644 --- a/bio/samtools/calmd/test/Snakefile +++ b/bio/samtools/calmd/test/Snakefile @@ -1,11 +1,13 @@ rule samtools_calmd: input: - aln = "{sample}.bam", # Can be 'sam', 'bam', or 'cram' - ref = "genome.fasta" + aln="{sample}.bam", # Can be 'sam', 'bam', or 'cram' + ref="genome.fasta", output: - "{sample}.calmd.bam" + "{sample}.calmd.bam", + log: + "{sample}.calmd.log", params: - "-E" # optional params string + extra="-E", # optional params string threads: 2 wrapper: "master/bio/samtools/calmd" diff --git a/bio/samtools/calmd/wrapper.py b/bio/samtools/calmd/wrapper.py index 730e5b7538..99c7bf5765 100644 --- a/bio/samtools/calmd/wrapper.py +++ b/bio/samtools/calmd/wrapper.py @@ -3,14 +3,15 @@ __license__ = "MIT" -from os import path from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts +samtools_opts = get_samtools_opts( + snakemake, parse_write_index=False, parse_output=False +) +extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=False, stderr=True) -out_name, out_ext = path.splitext(snakemake.output[0]) -out_ext = out_ext[1:].upper() - shell( - "samtools calmd --threads {snakemake.threads} {snakemake.params} --output-fmt {out_ext} {snakemake.input.aln} {snakemake.input.ref} > {snakemake.output[0]} {log}" + "samtools calmd {samtools_opts} {extra} {snakemake.input.aln} {snakemake.input.ref} > {snakemake.output[0]} {log}" ) diff --git a/bio/samtools/depth/environment.yaml b/bio/samtools/depth/environment.yaml index edf1faa8be..9d771f82ec 100644 --- a/bio/samtools/depth/environment.yaml +++ b/bio/samtools/depth/environment.yaml @@ -2,4 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/depth/meta.yaml b/bio/samtools/depth/meta.yaml index 84c1581207..fbfd97edf1 100644 --- a/bio/samtools/depth/meta.yaml +++ b/bio/samtools/depth/meta.yaml @@ -1,4 +1,8 @@ name: samtools depth -description: Compute the read depth at each position or region using samtools. For more information see `SAMtools documentation `_. +description: Compute the read depth at each position or region using samtools. authors: - Dayne Filer + - Filipe G. Vieira +notes: | + * The `extra` param allows for additional program arguments (not `-@/--threads` or `-o`). + * For more information see, http://www.htslib.org/doc/samtools-depth.html diff --git a/bio/samtools/depth/test/Snakefile b/bio/samtools/depth/test/Snakefile index 2c7f99fa51..d8ac50b124 100644 --- a/bio/samtools/depth/test/Snakefile +++ b/bio/samtools/depth/test/Snakefile @@ -1,11 +1,13 @@ rule samtools_depth: input: bams=["mapped/A.bam", "mapped/B.bam"], - bed="regionToCalcDepth.bed", # optional + bed="regionToCalcDepth.bed", # optional output: - "depth.txt" + "depth.txt", + log: + "depth.log", params: # optional bed file passed to -b - extra="" # optional additional parameters as string + extra="", # optional additional parameters as string wrapper: "master/bio/samtools/depth" diff --git a/bio/samtools/depth/wrapper.py b/bio/samtools/depth/wrapper.py index 56bf71a5d1..1aa9f1da4b 100644 --- a/bio/samtools/depth/wrapper.py +++ b/bio/samtools/depth/wrapper.py @@ -6,17 +6,17 @@ __license__ = "MIT" from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts +samtools_opts = get_samtools_opts( + snakemake, parse_write_index=False, parse_output_format=False +) +extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=True, stderr=True) -params = snakemake.params.get("extra", "") - # check for optional bed file bed = snakemake.input.get("bed", "") if bed: bed = "-b " + bed -shell( - "samtools depth {params} {bed} " - "-o {snakemake.output[0]} {snakemake.input.bams} {log}" -) +shell("samtools depth {samtools_opts} {extra} {bed} {snakemake.input.bams} {log}") diff --git a/bio/samtools/faidx/environment.yaml b/bio/samtools/faidx/environment.yaml index edf1faa8be..9d771f82ec 100644 --- a/bio/samtools/faidx/environment.yaml +++ b/bio/samtools/faidx/environment.yaml @@ -2,4 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/faidx/meta.yaml b/bio/samtools/faidx/meta.yaml index c442032aa0..e25655c8c2 100644 --- a/bio/samtools/faidx/meta.yaml +++ b/bio/samtools/faidx/meta.yaml @@ -1,8 +1,12 @@ name: samtools faidx -description: index reference sequence in FASTA format from reference sequence. For more information see `SAMtools documentation `_. +description: index reference sequence in FASTA format from reference sequence. authors: - Michael Chambers + - Filipe G. Vieira input: - reference sequence file (.fa) output: - indexed reference sequence file (.fai) +notes: | + * The `extra` param allows for additional program arguments (not `-o`). + * For more information see, http://www.htslib.org/doc/samtools-faidx.html diff --git a/bio/samtools/faidx/test/Snakefile b/bio/samtools/faidx/test/Snakefile index bba3991686..d9a0cc016d 100644 --- a/bio/samtools/faidx/test/Snakefile +++ b/bio/samtools/faidx/test/Snakefile @@ -1,9 +1,11 @@ rule samtools_index: input: - "{sample}.fa" + "{sample}.fa", output: - "{sample}.fa.fai" + "{sample}.fa.fai", + log: + "{sample}.log", params: - "" # optional params string + extra="", # optional params string wrapper: "master/bio/samtools/faidx" diff --git a/bio/samtools/faidx/wrapper.py b/bio/samtools/faidx/wrapper.py index fc5be8f283..c439ee1a79 100644 --- a/bio/samtools/faidx/wrapper.py +++ b/bio/samtools/faidx/wrapper.py @@ -5,9 +5,12 @@ from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts -log = snakemake.log_fmt_shell(stdout=False, stderr=True) - -shell( - "samtools faidx {snakemake.params} {snakemake.input[0]} > {snakemake.output[0]} {log}" +samtools_opts = get_samtools_opts( + snakemake, parse_threads=False, parse_write_index=False, parse_output_format=False ) +extra = snakemake.params.get("extra", "") +log = snakemake.log_fmt_shell(stdout=True, stderr=True) + +shell("samtools faidx {samtools_opts} {extra} {snakemake.input[0]} {log}") diff --git a/bio/samtools/fastq/interleaved/environment.yaml b/bio/samtools/fastq/interleaved/environment.yaml index de5459dd29..561b29cd22 100644 --- a/bio/samtools/fastq/interleaved/environment.yaml +++ b/bio/samtools/fastq/interleaved/environment.yaml @@ -3,3 +3,4 @@ channels: - bioconda dependencies: - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/fastq/interleaved/meta.yaml b/bio/samtools/fastq/interleaved/meta.yaml index f3b4aa0f03..5768c2a7a0 100644 --- a/bio/samtools/fastq/interleaved/meta.yaml +++ b/bio/samtools/fastq/interleaved/meta.yaml @@ -7,4 +7,5 @@ authors: - Victoria Sack - Filipe G. Vieira notes: | + * The `extra` param allows for additional program arguments (not `-@/--threads` or `-o`). * For more information see, http://www.htslib.org/doc/samtools-fasta.html diff --git a/bio/samtools/fastq/interleaved/wrapper.py b/bio/samtools/fastq/interleaved/wrapper.py index 69757b0b9b..1f7874ff91 100644 --- a/bio/samtools/fastq/interleaved/wrapper.py +++ b/bio/samtools/fastq/interleaved/wrapper.py @@ -6,15 +6,12 @@ import os from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts +samtools_opts = get_samtools_opts( + snakemake, parse_write_index=False, parse_output_format=False +) +extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=False, stderr=True) -prefix = os.path.splitext(snakemake.output[0])[0] - -shell( - "samtools fastq {snakemake.params} " - " -@ {snakemake.threads} " - " {snakemake.input[0]}" - " > {snakemake.output[0]} " - "{log}" -) +shell("samtools fastq {samtools_opts} {extra} {snakemake.input[0]} {log}") diff --git a/bio/samtools/fastq/separate/meta.yaml b/bio/samtools/fastq/separate/meta.yaml index 8c8e429def..3dba348ca4 100644 --- a/bio/samtools/fastq/separate/meta.yaml +++ b/bio/samtools/fastq/separate/meta.yaml @@ -9,5 +9,5 @@ authors: - Victoria Sack - Filipe G. Vieira notes: | - * Samtools -@/--threads takes one integer as input. This is the number of additional threads and not raw threads. + * The `extra` param allows for additional program arguments. * For more information see, http://www.htslib.org/doc/samtools-fasta.html diff --git a/bio/samtools/fastx/environment.yaml b/bio/samtools/fastx/environment.yaml index 495809bb34..a3d9c7ae01 100644 --- a/bio/samtools/fastx/environment.yaml +++ b/bio/samtools/fastx/environment.yaml @@ -4,4 +4,5 @@ channels: - conda-forge - defaults dependencies: - - samtools==1.12 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/fastx/meta.yaml b/bio/samtools/fastx/meta.yaml index 10abca358e..d64d24b47a 100644 --- a/bio/samtools/fastx/meta.yaml +++ b/bio/samtools/fastx/meta.yaml @@ -2,7 +2,11 @@ name: samtools fastx description: Converts a SAM, BAM or CRAM into FASTQ or FASTA format. authors: - William Rowell + - Filipe G. Vieira input: - bam or sam file (.bam, .sam) output: - fastq file (.fastq) or fasta file (.fasta) +notes: | + * The `extra` param allows for additional program arguments (not `-@/--threads` or `-o`). + * For more information see, http://www.htslib.org/doc/samtools-fasta.html diff --git a/bio/samtools/fastx/test/Snakefile b/bio/samtools/fastx/test/Snakefile index 995815ac8f..7ca7c492ab 100644 --- a/bio/samtools/fastx/test/Snakefile +++ b/bio/samtools/fastx/test/Snakefile @@ -7,10 +7,10 @@ rule samtools_fastq: "{prefix}.log", message: "" - threads: # Samtools takes additional threads through its option -@ - 2 # This value - 1 will be sent to -@ + # Samtools takes additional threads through its option -@ + threads: 2 # This value - 1 will be sent to -@ params: - outputtype = "fasta", - extra = "" + outputtype="fasta", + extra="", wrapper: "master/bio/samtools/fastx/" diff --git a/bio/samtools/fastx/wrapper.py b/bio/samtools/fastx/wrapper.py index 8082fe806b..b64a4e8a71 100644 --- a/bio/samtools/fastx/wrapper.py +++ b/bio/samtools/fastx/wrapper.py @@ -5,19 +5,15 @@ from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts -log = snakemake.log_fmt_shell(stdout=False, stderr=True) - +samtools_opts = get_samtools_opts( + snakemake, parse_write_index=False, parse_output_format=False +) extra = snakemake.params.get("extra", "") -# Samtools takes additional threads through its option -@ -# One thread for samtools merge -# Other threads are *additional* threads passed to the '-@' argument -threads = "" if snakemake.threads <= 1 else " -@ {} ".format(snakemake.threads - 1) +log = snakemake.log_fmt_shell(stdout=True, stderr=True) + shell( - """ - (samtools {snakemake.params.outputtype} \ - {threads} {extra} \ - {snakemake.input} > {snakemake.output}) {log} - """ + "samtools {snakemake.params.outputtype} {samtools_opts} {extra} {snakemake.input} {log}" ) diff --git a/bio/samtools/fixmate/environment.yaml b/bio/samtools/fixmate/environment.yaml index d98ce672ee..a3d9c7ae01 100644 --- a/bio/samtools/fixmate/environment.yaml +++ b/bio/samtools/fixmate/environment.yaml @@ -4,4 +4,5 @@ channels: - conda-forge - defaults dependencies: - - samtools ==1.10 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/fixmate/meta.yaml b/bio/samtools/fixmate/meta.yaml index 24d4170363..a8de7b00e6 100644 --- a/bio/samtools/fixmate/meta.yaml +++ b/bio/samtools/fixmate/meta.yaml @@ -1,8 +1,12 @@ name: samtools fixmate -description: Use samtools to correct mate information after BWA mapping. For more information see `SAMtools documentation `_. +description: Use samtools to correct mate information after BWA mapping. authors: - Thibault Dayris + - Filipe G. Vieira input: - bam or sam file (.bam,.sam) output: - bam or sam file (.bam,.sam) +notes: | + * The `extra` param allows for additional program arguments (not `-@/--threads` or `-O/--output-fmt`). + * For more information see, http://www.htslib.org/doc/samtools-fixmate.html diff --git a/bio/samtools/fixmate/test/Snakefile b/bio/samtools/fixmate/test/Snakefile index bd4d835935..93c279c99b 100644 --- a/bio/samtools/fixmate/test/Snakefile +++ b/bio/samtools/fixmate/test/Snakefile @@ -1,13 +1,14 @@ rule samtools_fixmate: input: - "mapped/{input}" + "mapped/{input}", output: - "fixed/{input}" + "fixed/{input}", + log: + "{input}.log", message: "Fixing mate information in {wildcards.input}" - threads: - 1 + threads: 1 params: - extra = "" + extra="", wrapper: "master/bio/samtools/fixmate/" diff --git a/bio/samtools/fixmate/wrapper.py b/bio/samtools/fixmate/wrapper.py index 475501c3bd..0a7567ac50 100644 --- a/bio/samtools/fixmate/wrapper.py +++ b/bio/samtools/fixmate/wrapper.py @@ -5,22 +5,16 @@ __email__ = "thibault.dayris@gustaveroussy.fr" __license__ = "MIT" -import os.path as op - from snakemake.shell import shell from snakemake.utils import makedirs +from snakemake_wrapper_utils.samtools import get_samtools_opts -log = snakemake.log_fmt_shell(stdout=True, stderr=True) - +samtools_opts = get_samtools_opts( + snakemake, parse_write_index=False, parse_output=False +) extra = snakemake.params.get("extra", "") - -# Samtools' threads parameter lists ADDITIONAL threads. -# that is why threads - 1 has to be given to the -@ parameter -threads = "" if snakemake.threads <= 1 else " -@ {} ".format(snakemake.threads - 1) - -makedirs(op.dirname(snakemake.output[0])) +log = snakemake.log_fmt_shell(stdout=True, stderr=True) shell( - "samtools fixmate {extra} {threads}" - " {snakemake.input[0]} {snakemake.output[0]} {log}" + "samtools fixmate {samtools_opts} {extra} {snakemake.input[0]} {snakemake.output[0]} {log}" ) diff --git a/bio/samtools/flagstat/environment.yaml b/bio/samtools/flagstat/environment.yaml index edf1faa8be..9d771f82ec 100644 --- a/bio/samtools/flagstat/environment.yaml +++ b/bio/samtools/flagstat/environment.yaml @@ -2,4 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/flagstat/meta.yaml b/bio/samtools/flagstat/meta.yaml index 1077c77123..cf377147ce 100644 --- a/bio/samtools/flagstat/meta.yaml +++ b/bio/samtools/flagstat/meta.yaml @@ -1,8 +1,12 @@ name: samtools flagstat -description: Use samtools to create a flagstat file from a bam or sam file. For more information see `SAMtools documentation `_. +description: Use samtools to create a flagstat file from a bam or sam file. authors: - Christopher Preusch + - Filipe G. Vieira input: - bam or sam file (.bam,.sam) output: - flagstat file (.flagstat) +notes: | + * The `extra` param allows for additional program arguments (not `-@/--threads`). + * For more information see, http://www.htslib.org/doc/samtools-flagstat.html diff --git a/bio/samtools/flagstat/test/Snakefile b/bio/samtools/flagstat/test/Snakefile index bf04998afa..d6e4718bf6 100644 --- a/bio/samtools/flagstat/test/Snakefile +++ b/bio/samtools/flagstat/test/Snakefile @@ -1,7 +1,11 @@ rule samtools_flagstat: input: - "mapped/{sample}.bam" + "mapped/{sample}.bam", output: - "mapped/{sample}.bam.flagstat" + "mapped/{sample}.bam.flagstat", + log: + "{sample}.log", + params: + extra="", # optional params string wrapper: "master/bio/samtools/flagstat" diff --git a/bio/samtools/flagstat/wrapper.py b/bio/samtools/flagstat/wrapper.py index 43f6cb30d2..824f052a82 100644 --- a/bio/samtools/flagstat/wrapper.py +++ b/bio/samtools/flagstat/wrapper.py @@ -5,7 +5,14 @@ from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts +samtools_opts = get_samtools_opts( + snakemake, parse_write_index=False, parse_output=False, parse_output_format=False +) +extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=False, stderr=True) -shell("samtools flagstat {snakemake.input[0]} > {snakemake.output[0]} {log}") +shell( + "samtools flagstat {samtools_opts} {extra} {snakemake.input[0]} > {snakemake.output[0]} {log}" +) diff --git a/bio/samtools/idxstats/environment.yaml b/bio/samtools/idxstats/environment.yaml index edf1faa8be..9d771f82ec 100644 --- a/bio/samtools/idxstats/environment.yaml +++ b/bio/samtools/idxstats/environment.yaml @@ -2,4 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/idxstats/meta.yaml b/bio/samtools/idxstats/meta.yaml index 022e548b4b..b7e51d9e5f 100644 --- a/bio/samtools/idxstats/meta.yaml +++ b/bio/samtools/idxstats/meta.yaml @@ -1,9 +1,13 @@ name: samtools idxstats -description: Use samtools to retrieve and print stats form indexed bam, sam or cram files. For more information see `SAMtools documentation `_. +description: Use samtools to retrieve and print stats from indexed BAM, SAM or CRAM files. authors: - Antonie Vietor + - Filipe G. Vieira input: - - indexed sam, bam or cram file (.sam, .bam, .cram) + - indexed SAM, BAM or CRAM file (.SAM, .BAM, .CRAM) - corresponding index files output: - idxstat file (.idxstats) +notes: | + * The `extra` param allows for additional program arguments (not `-@/--threads`). + * For more information see, http://www.htslib.org/doc/samtools-idxstats.html diff --git a/bio/samtools/idxstats/test/Snakefile b/bio/samtools/idxstats/test/Snakefile index ee2fc4cb0f..f990e9c953 100644 --- a/bio/samtools/idxstats/test/Snakefile +++ b/bio/samtools/idxstats/test/Snakefile @@ -1,10 +1,12 @@ rule samtools_idxstats: input: bam="mapped/{sample}.bam", - idx="mapped/{sample}.bam.bai" + idx="mapped/{sample}.bam.bai", output: - "mapped/{sample}.bam.idxstats" + "mapped/{sample}.bam.idxstats", log: - "logs/samtools/idxstats/{sample}.log" + "logs/samtools/idxstats/{sample}.log", + params: + extra="", # optional params string wrapper: "master/bio/samtools/idxstats" diff --git a/bio/samtools/idxstats/wrapper.py b/bio/samtools/idxstats/wrapper.py index 0bfc4c546f..0089ad8b48 100644 --- a/bio/samtools/idxstats/wrapper.py +++ b/bio/samtools/idxstats/wrapper.py @@ -5,7 +5,14 @@ from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts +samtools_opts = get_samtools_opts( + snakemake, parse_write_index=False, parse_output=False, parse_output_format=False +) +extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=False, stderr=True) -shell("samtools idxstats {snakemake.input.bam} > {snakemake.output[0]} {log}") +shell( + "samtools idxstats {samtools_opts} {extra} {snakemake.input.bam} > {snakemake.output[0]} {log}" +) diff --git a/bio/samtools/index/environment.yaml b/bio/samtools/index/environment.yaml index edf1faa8be..8de8caf4e2 100644 --- a/bio/samtools/index/environment.yaml +++ b/bio/samtools/index/environment.yaml @@ -2,4 +2,4 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 + - samtools =1.14 diff --git a/bio/samtools/index/meta.yaml b/bio/samtools/index/meta.yaml index 93b7df37ff..7604260160 100644 --- a/bio/samtools/index/meta.yaml +++ b/bio/samtools/index/meta.yaml @@ -1,8 +1,12 @@ name: samtools index -description: Index bam file with samtools. For more information see `SAMtools documentation `_. +description: Index bam file with samtools. authors: - Johannes Köster + - Filipe G. Vieira input: - bam file output: - bam file index (.bai) +notes: | + * The `extra` param allows for additional program arguments. + * For more information see, http://www.htslib.org/doc/samtools-index.html diff --git a/bio/samtools/index/test/Snakefile b/bio/samtools/index/test/Snakefile index c45279a1fb..6b30023c57 100644 --- a/bio/samtools/index/test/Snakefile +++ b/bio/samtools/index/test/Snakefile @@ -1,13 +1,12 @@ rule samtools_index: input: - "mapped/{sample}.sorted.bam" + "mapped/{sample}.sorted.bam", output: - "mapped/{sample}.sorted.bam.bai" + "mapped/{sample}.sorted.bam.bai", log: - "logs/samtools_index/{sample}.log" + "logs/samtools_index/{sample}.log", params: - "" # optional params string - threads: # Samtools takes additional threads through its option -@ - 4 # This value - 1 will be sent to -@ + extra="", # optional params string + threads: 4 # This value - 1 will be sent to -@ wrapper: "master/bio/samtools/index" diff --git a/bio/samtools/index/wrapper.py b/bio/samtools/index/wrapper.py index 40ea5c41e2..f1f878de3c 100644 --- a/bio/samtools/index/wrapper.py +++ b/bio/samtools/index/wrapper.py @@ -6,6 +6,7 @@ from snakemake.shell import shell +extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=True, stderr=True) # Samtools takes additional threads through its option -@ @@ -14,5 +15,5 @@ threads = "" if snakemake.threads <= 1 else " -@ {} ".format(snakemake.threads - 1) shell( - "samtools index {threads} {snakemake.params} {snakemake.input[0]} {snakemake.output[0]} {log}" + "samtools index {threads} {extra} {snakemake.input[0]} {snakemake.output[0]} {log}" ) diff --git a/bio/samtools/merge/environment.yaml b/bio/samtools/merge/environment.yaml index edf1faa8be..9d771f82ec 100644 --- a/bio/samtools/merge/environment.yaml +++ b/bio/samtools/merge/environment.yaml @@ -2,4 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/merge/meta.yaml b/bio/samtools/merge/meta.yaml index 0b908d5192..a6ea6dcd39 100644 --- a/bio/samtools/merge/meta.yaml +++ b/bio/samtools/merge/meta.yaml @@ -1,10 +1,12 @@ name: samtools merge -description: Merge two bam files with samtools. For more information see `SAMtools documentation `_. +description: Merge two bam files with samtools. authors: - Johannes Köster + - Filipe G. Vieira input: - list of bam files to merge output: - merged bam file notes: | - * Samtools -@/--threads takes one integer as input. This is the number of additional threads and not raw threads. + * The `extra` param allows for additional program arguments (not `-@/--threads`, `--write-index`, `-o` or `-O/--output-fmt`). + * For more information see, http://www.htslib.org/doc/samtools-merge.html diff --git a/bio/samtools/merge/test/Snakefile b/bio/samtools/merge/test/Snakefile index c535379a8d..1e7d3e1e21 100644 --- a/bio/samtools/merge/test/Snakefile +++ b/bio/samtools/merge/test/Snakefile @@ -1,11 +1,12 @@ rule samtools_merge: input: - ["mapped/A.bam", "mapped/B.bam"] + ["mapped/A.bam", "mapped/B.bam"], output: - "merged.bam" + "merged.bam", + log: + "merged.log", params: - "" # optional additional parameters as string - threads: # Samtools takes additional threads through its option -@ - 8 # This value - 1 will be sent to -@ + extra="", # optional additional parameters as string + threads: 8 wrapper: "master/bio/samtools/merge" diff --git a/bio/samtools/merge/wrapper.py b/bio/samtools/merge/wrapper.py index 0960ce99e9..a6d066da00 100644 --- a/bio/samtools/merge/wrapper.py +++ b/bio/samtools/merge/wrapper.py @@ -5,16 +5,10 @@ from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts +samtools_opts = get_samtools_opts(snakemake) +extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=True, stderr=True) -# Samtools takes additional threads through its option -@ -# One thread for samtools merge -# Other threads are *additional* threads passed to the '-@' argument -threads = "" if snakemake.threads <= 1 else " -@ {} ".format(snakemake.threads - 1) - -shell( - "samtools merge {threads} {snakemake.params} " - "{snakemake.output[0]} {snakemake.input} " - "{log}" -) +shell("samtools merge {samtools_opts} {extra} {snakemake.input} {log}") diff --git a/bio/samtools/mpileup/environment.yaml b/bio/samtools/mpileup/environment.yaml index 72df783ec1..496ce9a972 100644 --- a/bio/samtools/mpileup/environment.yaml +++ b/bio/samtools/mpileup/environment.yaml @@ -2,5 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 - - pigz ==2.3.4 + - samtools =1.14 + - pigz =2.6 diff --git a/bio/samtools/mpileup/meta.yaml b/bio/samtools/mpileup/meta.yaml index c8ddeb5db7..7321a1d70f 100644 --- a/bio/samtools/mpileup/meta.yaml +++ b/bio/samtools/mpileup/meta.yaml @@ -1,4 +1,8 @@ name: samtools mpileup -description: Generate pileup using samtools. For more information see `SAMtools documentation `_. +description: Generate pileup using samtools. authors: - Patrik Smeds + - Filipe G. Vieira +notes: | + * The `extra` param allows for additional program arguments. + * For more information see, http://www.htslib.org/doc/samtools-mpileup.html diff --git a/bio/samtools/mpileup/test/Snakefile b/bio/samtools/mpileup/test/Snakefile index d691bef069..2179da4476 100644 --- a/bio/samtools/mpileup/test/Snakefile +++ b/bio/samtools/mpileup/test/Snakefile @@ -2,11 +2,11 @@ rule mpilup: input: # single or list of bam files bam="mapped/{sample}.bam", - reference_genome="genome.fasta" + reference_genome="genome.fasta", output: - "mpileup/{sample}.mpileup.gz" + "mpileup/{sample}.mpileup.gz", log: - "logs/samtools/mpileup/{sample}.log" + "logs/samtools/mpileup/{sample}.log", params: extra="-d 10000", # optional wrapper: diff --git a/bio/samtools/mpileup/wrapper.py b/bio/samtools/mpileup/wrapper.py index 732a9a9718..cda2c41990 100644 --- a/bio/samtools/mpileup/wrapper.py +++ b/bio/samtools/mpileup/wrapper.py @@ -8,25 +8,14 @@ from snakemake.shell import shell -log = snakemake.log_fmt_shell(stdout=True, stderr=True) - -bam_input = snakemake.input.bam -reference_genome = snakemake.input.reference_genome - extra = snakemake.params.get("extra", "") +log = snakemake.log_fmt_shell(stdout=False, stderr=True) if not snakemake.output[0].endswith(".gz"): raise Exception( 'output file will be compressed and therefore filename should end with ".gz"' ) -log = snakemake.log_fmt_shell(stdout=False, stderr=True) - shell( - "samtools mpileup " - "{extra} " - "-f {reference_genome} " - "{bam_input} " - " | pigz > {snakemake.output} " - "{log}" + "(samtools mpileup {extra} -f {snakemake.input.reference_genome} {snakemake.input.bam} | pigz > {snakemake.output}) {log}" ) diff --git a/bio/samtools/sort/environment.yaml b/bio/samtools/sort/environment.yaml index edf1faa8be..9d771f82ec 100644 --- a/bio/samtools/sort/environment.yaml +++ b/bio/samtools/sort/environment.yaml @@ -2,4 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/sort/meta.yaml b/bio/samtools/sort/meta.yaml index 0d21999385..6a10943856 100644 --- a/bio/samtools/sort/meta.yaml +++ b/bio/samtools/sort/meta.yaml @@ -1,6 +1,8 @@ name: samtools sort -description: Sort bam file with samtools. For more information see `SAMtools documentation `_. +description: Sort bam file with samtools. authors: - Johannes Köster + - Filipe G. Vieira notes: | - * Samtools -@/--threads takes one integer as input. This is the number of additional threads and not raw threads. + * The `extra` param allows for additional program arguments (not `-@/--threads`, `--write-index`, `-o` or `-O/--output-fmt`). + * For more information see, http://www.htslib.org/doc/samtools-sort.html diff --git a/bio/samtools/sort/test/Snakefile b/bio/samtools/sort/test/Snakefile index 2025c00a22..b8e8f16a96 100644 --- a/bio/samtools/sort/test/Snakefile +++ b/bio/samtools/sort/test/Snakefile @@ -1,12 +1,12 @@ rule samtools_sort: input: - "mapped/{sample}.bam" + "mapped/{sample}.bam", output: - "mapped/{sample}.sorted.bam" + "mapped/{sample}.sorted.bam", + log: + "{sample}.log", params: - extra = "-m 4G", - tmp_dir = "/tmp/" - threads: # Samtools takes additional threads through its option -@ - 8 # This value - 1 will be sent to -@. + extra="-m 4G", + threads: 8 wrapper: "master/bio/samtools/sort" diff --git a/bio/samtools/sort/wrapper.py b/bio/samtools/sort/wrapper.py index 05ac896159..f7e683141e 100644 --- a/bio/samtools/sort/wrapper.py +++ b/bio/samtools/sort/wrapper.py @@ -5,26 +5,20 @@ import os +import tempfile +from pathlib import Path from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts +samtools_opts = get_samtools_opts(snakemake) extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=True, stderr=True) out_name, out_ext = os.path.splitext(snakemake.output[0]) -tmp_dir = snakemake.params.get("tmp_dir", "") -if tmp_dir: - prefix = os.path.join(tmp_dir, os.path.basename(out_name)) -else: - prefix = out_name +with tempfile.TemporaryDirectory() as tmpdir: + tmp_prefix = Path(tmpdir) / "samtools_fastq.sort_" -# Samtools takes additional threads through its option -@ -# One thread for samtools -# Other threads are *additional* threads passed to the argument -@ -threads = "" if snakemake.threads <= 1 else " -@ {} ".format(snakemake.threads - 1) - -shell( - "samtools sort {extra} {threads} -o {snakemake.output[0]} " - "-T {prefix} {snakemake.input[0]} " - "{log}" -) + shell( + "samtools sort {samtools_opts} {extra} -T {tmp_prefix} {snakemake.input[0]} {log}" + ) diff --git a/bio/samtools/stats/environment.yaml b/bio/samtools/stats/environment.yaml index edf1faa8be..9d771f82ec 100644 --- a/bio/samtools/stats/environment.yaml +++ b/bio/samtools/stats/environment.yaml @@ -2,4 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.10 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/stats/meta.yaml b/bio/samtools/stats/meta.yaml index a0eb276ef6..c5fbe170a5 100644 --- a/bio/samtools/stats/meta.yaml +++ b/bio/samtools/stats/meta.yaml @@ -1,4 +1,8 @@ name: samtools stats -description: Generate stats using samtools. For more information see `SAMtools documentation `_. +description: Generate stats using samtools. authors: - Julian de Ruiter + - Filipe G. Vieira +notes: | + * The `extra` param allows for additional program arguments (not `-@/--threads`). + * For more information see, http://www.htslib.org/doc/samtools-stats.html diff --git a/bio/samtools/stats/test/Snakefile b/bio/samtools/stats/test/Snakefile index 1f31956557..c54394523e 100644 --- a/bio/samtools/stats/test/Snakefile +++ b/bio/samtools/stats/test/Snakefile @@ -1,12 +1,12 @@ rule samtools_stats: input: - "mapped/{sample}.bam" + "mapped/{sample}.bam", output: - "samtools_stats/{sample}.txt" + "samtools_stats/{sample}.txt", params: - extra="", # Optional: extra arguments. - region="xx:1000000-2000000" # Optional: region string. + extra="", # Optional: extra arguments. + region="xx:1000000-2000000", # Optional: region string. log: - "logs/samtools_stats/{sample}.log" + "logs/samtools_stats/{sample}.log", wrapper: "master/bio/samtools/stats" diff --git a/bio/samtools/stats/wrapper.py b/bio/samtools/stats/wrapper.py index 5269de23c3..cab9375495 100644 --- a/bio/samtools/stats/wrapper.py +++ b/bio/samtools/stats/wrapper.py @@ -7,11 +7,16 @@ from snakemake.shell import shell +from snakemake_wrapper_utils.samtools import get_samtools_opts - +samtools_opts = get_samtools_opts( + snakemake, parse_write_index=False, parse_output=False, parse_output_format=False +) extra = snakemake.params.get("extra", "") region = snakemake.params.get("region", "") log = snakemake.log_fmt_shell(stdout=False, stderr=True) -shell("samtools stats {extra} {snakemake.input} {region} > {snakemake.output} {log}") +shell( + "samtools stats {samtools_opts} {extra} {snakemake.input} {region} > {snakemake.output} {log}" +) diff --git a/bio/samtools/view/environment.yaml b/bio/samtools/view/environment.yaml index 9324e9faec..9d771f82ec 100644 --- a/bio/samtools/view/environment.yaml +++ b/bio/samtools/view/environment.yaml @@ -2,5 +2,5 @@ channels: - bioconda - conda-forge dependencies: - - samtools ==1.12 - - snakemake-wrapper-utils ==0.2.0 + - samtools =1.14 + - snakemake-wrapper-utils =0.3 diff --git a/bio/samtools/view/meta.yaml b/bio/samtools/view/meta.yaml index fc094c9762..9fef2861ac 100644 --- a/bio/samtools/view/meta.yaml +++ b/bio/samtools/view/meta.yaml @@ -1,5 +1,5 @@ name: samtools view -description: Convert or filter SAM/BAM. For more information see `SAMtools documentation `_. +description: Convert or filter SAM/BAM. authors: - Johannes Köster - Filipe G. Vieira @@ -7,6 +7,7 @@ input: - SAM/BAM/CRAM file output: - SAM/BAM/CRAM file + - SAM/BAM/CRAM index file (optional) notes: | - * The `extra` param allows for additional program arguments (not `-@/--threads` or `-O/--output-fmt`). + * The `extra` param allows for additional program arguments (not `-@/--threads`, `--write-index`, `-o` or `-O/--output-fmt`). * For more information see, http://www.htslib.org/doc/samtools-view.html diff --git a/bio/samtools/view/test/Snakefile b/bio/samtools/view/test/Snakefile index edef3b8a58..bacf178f73 100644 --- a/bio/samtools/view/test/Snakefile +++ b/bio/samtools/view/test/Snakefile @@ -1,11 +1,13 @@ rule samtools_view: input: - "{sample}.sam" + "{sample}.sam", output: - "{sample}.bam" + bam="{sample}.bam", + idx="{sample}.bai", log: - "{sample}.log" + "{sample}.log", params: - extra="" # optional params string + extra="", # optional params string + threads: 2 wrapper: "master/bio/samtools/view" diff --git a/bio/samtools/view/wrapper.py b/bio/samtools/view/wrapper.py index 6c6ff1d0fe..1162d53766 100644 --- a/bio/samtools/view/wrapper.py +++ b/bio/samtools/view/wrapper.py @@ -7,11 +7,9 @@ from snakemake.shell import shell from snakemake_wrapper_utils.samtools import get_samtools_opts - samtools_opts = get_samtools_opts(snakemake) +extra = snakemake.params.get("extra", "") log = snakemake.log_fmt_shell(stdout=True, stderr=True, append=True) -shell( - "samtools view {snakemake.params.extra} {samtools_opts} -o {snakemake.output[0]} {snakemake.input[0]} {log}" -) +shell("samtools view {samtools_opts} {extra} {snakemake.input[0]} {log}")