Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: added samtools wrapper utils #454

Merged
merged 6 commits into from
Feb 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion bio/samtools/calmd/environment.yaml
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ channels:
- bioconda
- conda-forge
dependencies:
- samtools ==1.10
- samtools =1.14
- snakemake-wrapper-utils =0.3
Loading