Skip to content

Commit

Permalink
feat: added samtools wrapper utils (#454)
Browse files Browse the repository at this point in the history
* Added wrapper_utils, some tempdirs, extra doc, and code clean-up

* Added IDX generation to test

* Fixed missing import and log file

* Added more log files to tests

* Fixed log redirection

* Added author
  • Loading branch information
fgvieira committed Feb 21, 2022
1 parent d93866e commit 23c28bf
Show file tree
Hide file tree
Showing 56 changed files with 236 additions and 179 deletions.
3 changes: 2 additions & 1 deletion bio/samtools/calmd/environment.yaml
Expand Up @@ -2,4 +2,5 @@ channels:
- bioconda
- conda-forge
dependencies:
- samtools ==1.11
- samtools =1.14
- snakemake-wrapper-utils =0.3
5 changes: 4 additions & 1 deletion bio/samtools/calmd/meta.yaml
@@ -1,4 +1,7 @@
name: samtools calmd
description: Calculates MD and NM tags. For more information see `SAMtools documentation <http://www.htslib.org/doc/samtools-calmd.html>`_.
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
10 changes: 6 additions & 4 deletions 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"
11 changes: 6 additions & 5 deletions bio/samtools/calmd/wrapper.py
Expand Up @@ -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}"
)
3 changes: 2 additions & 1 deletion bio/samtools/depth/environment.yaml
Expand Up @@ -2,4 +2,5 @@ channels:
- bioconda
- conda-forge
dependencies:
- samtools ==1.10
- samtools =1.14
- snakemake-wrapper-utils =0.3
6 changes: 5 additions & 1 deletion 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 <http://www.htslib.org/doc/samtools-depth.html>`_.
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
8 changes: 5 additions & 3 deletions 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"
12 changes: 6 additions & 6 deletions bio/samtools/depth/wrapper.py
Expand Up @@ -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}")
3 changes: 2 additions & 1 deletion bio/samtools/faidx/environment.yaml
Expand Up @@ -2,4 +2,5 @@ channels:
- bioconda
- conda-forge
dependencies:
- samtools ==1.10
- samtools =1.14
- snakemake-wrapper-utils =0.3
6 changes: 5 additions & 1 deletion 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 <http://www.htslib.org/doc/samtools-faidx.html>`_.
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
8 changes: 5 additions & 3 deletions 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"
11 changes: 7 additions & 4 deletions bio/samtools/faidx/wrapper.py
Expand Up @@ -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}")
1 change: 1 addition & 0 deletions bio/samtools/fastq/interleaved/environment.yaml
Expand Up @@ -3,3 +3,4 @@ channels:
- bioconda
dependencies:
- samtools =1.14
- snakemake-wrapper-utils =0.3
1 change: 1 addition & 0 deletions bio/samtools/fastq/interleaved/meta.yaml
Expand Up @@ -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
15 changes: 6 additions & 9 deletions bio/samtools/fastq/interleaved/wrapper.py
Expand Up @@ -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}")
2 changes: 1 addition & 1 deletion bio/samtools/fastq/separate/meta.yaml
Expand Up @@ -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
3 changes: 2 additions & 1 deletion bio/samtools/fastx/environment.yaml
Expand Up @@ -4,4 +4,5 @@ channels:
- conda-forge
- defaults
dependencies:
- samtools==1.12
- samtools =1.14
- snakemake-wrapper-utils =0.3
4 changes: 4 additions & 0 deletions bio/samtools/fastx/meta.yaml
Expand Up @@ -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
8 changes: 4 additions & 4 deletions bio/samtools/fastx/test/Snakefile
Expand Up @@ -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/"
18 changes: 7 additions & 11 deletions bio/samtools/fastx/wrapper.py
Expand Up @@ -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}"
)
3 changes: 2 additions & 1 deletion bio/samtools/fixmate/environment.yaml
Expand Up @@ -4,4 +4,5 @@ channels:
- conda-forge
- defaults
dependencies:
- samtools ==1.10
- samtools =1.14
- snakemake-wrapper-utils =0.3
6 changes: 5 additions & 1 deletion 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 <http://www.htslib.org/doc/samtools-fixmate.html>`_.
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
11 changes: 6 additions & 5 deletions 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/"
18 changes: 6 additions & 12 deletions bio/samtools/fixmate/wrapper.py
Expand Up @@ -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}"
)
3 changes: 2 additions & 1 deletion bio/samtools/flagstat/environment.yaml
Expand Up @@ -2,4 +2,5 @@ channels:
- bioconda
- conda-forge
dependencies:
- samtools ==1.10
- samtools =1.14
- snakemake-wrapper-utils =0.3
6 changes: 5 additions & 1 deletion 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 <http://www.htslib.org/doc/samtools-flagstat.html>`_.
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
8 changes: 6 additions & 2 deletions 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"
9 changes: 8 additions & 1 deletion bio/samtools/flagstat/wrapper.py
Expand Up @@ -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}"
)
3 changes: 2 additions & 1 deletion bio/samtools/idxstats/environment.yaml
Expand Up @@ -2,4 +2,5 @@ channels:
- bioconda
- conda-forge
dependencies:
- samtools ==1.10
- samtools =1.14
- snakemake-wrapper-utils =0.3

0 comments on commit 23c28bf

Please sign in to comment.