Skip to content

Commit

Permalink
fix: log file handling and other small improvements for bcftools wrap…
Browse files Browse the repository at this point in the history
…pers (#429)

* Added logs to several bcftools modules

* Added bcftools_opts to norm

* Added snakemake-wrapper-utils

* Added params extra, to be consistent with other modules

* Disabled parsing of memory and temp_dir

* Formatting with snakefmt

* Added test

* Fixed typo

* Added missing extra param
  • Loading branch information
fgvieira committed Jan 17, 2022
1 parent f6eba4a commit 961edb8
Show file tree
Hide file tree
Showing 11 changed files with 44 additions and 13 deletions.
5 changes: 4 additions & 1 deletion bio/bcftools/call/wrapper.py
Expand Up @@ -6,6 +6,8 @@

from snakemake.shell import shell

log = snakemake.log_fmt_shell(stdout=True, stderr=True)


class CallerOptionError(Exception):
pass
Expand All @@ -24,5 +26,6 @@ class CallerOptionError(Exception):

shell(
"bcftools call {options} {caller_opt} --threads {snakemake.threads} "
"-o {snakemake.output.calls} {snakemake.input.pileup} 2> {snakemake.log}"
"-o {snakemake.output.calls} {snakemake.input.pileup} "
"{log}"
)
4 changes: 3 additions & 1 deletion bio/bcftools/index/wrapper.py
Expand Up @@ -6,7 +6,9 @@

from snakemake.shell import shell

log = snakemake.log_fmt_shell(stdout=True, stderr=True)

## Extract arguments
extra = snakemake.params.get("extra", "")

shell("bcftools index" " {extra}" " {snakemake.input[0]}")
shell("bcftools index {extra} {snakemake.input[0]} {log}")
5 changes: 4 additions & 1 deletion bio/bcftools/merge/wrapper.py
Expand Up @@ -6,7 +6,10 @@

from snakemake.shell import shell

log = snakemake.log_fmt_shell(stdout=True, stderr=True)

shell(
"bcftools merge {snakemake.params} -o {snakemake.output[0]} "
"{snakemake.input.calls}"
"{snakemake.input.calls} "
"{log}"
)
5 changes: 4 additions & 1 deletion bio/bcftools/mpileup/wrapper.py
Expand Up @@ -6,6 +6,8 @@

from snakemake.shell import shell

log = snakemake.log_fmt_shell(stdout=True, stderr=True)


class MissingReferenceError(Exception):
pass
Expand All @@ -26,5 +28,6 @@ class MissingReferenceError(Exception):
shell(
"bcftools mpileup {options} --threads {snakemake.threads} "
"--output {snakemake.output.pileup} "
"{snakemake.input.alignments} 2> {snakemake.log}"
"{snakemake.input.alignments} "
"{log}"
)
3 changes: 2 additions & 1 deletion bio/bcftools/norm/environment.yaml
Expand Up @@ -2,4 +2,5 @@ channels:
- bioconda
- conda-forge
dependencies:
- bcftools =1.11
- bcftools =1.11
- snakemake-wrapper-utils =0.2
1 change: 1 addition & 0 deletions bio/bcftools/norm/meta.yaml
Expand Up @@ -2,3 +2,4 @@ name: bcftools norm
description: Left-align and normalize indels, check if REF alleles match the reference, split multiallelic sites into multiple rows; recover multiallelics from multiple rows. For more information see `BCFtools documentation <https://www.htslib.org/doc/bcftools.html#norm>`_.
authors:
- Dayne Filer
- Filipe G. Vieira
8 changes: 5 additions & 3 deletions bio/bcftools/norm/test/Snakefile
@@ -1,9 +1,11 @@
rule norm_vcf:
input:
"{prefix}.vcf"
"{prefix}.bcf",
output:
"{prefix}.vcf"
"{prefix}.norm.vcf",
log:
"{prefix}.norm.log",
params:
"" # optional parameters for bcftools norm (except -o)
extra="--rm-dup none", # optional
wrapper:
"master/bio/bcftools/norm"
Binary file added bio/bcftools/norm/test/a.bcf
Binary file not shown.
7 changes: 6 additions & 1 deletion bio/bcftools/norm/wrapper.py
Expand Up @@ -5,8 +5,13 @@


from snakemake.shell import shell
from snakemake_wrapper_utils.bcftools import get_bcftools_opts

bcftools_opts = get_bcftools_opts(snakemake, parse_memory=False, parse_temp_dir=False)
extra = snakemake.params.get("extra", "")
log = snakemake.log_fmt_shell(stdout=True, stderr=True)


shell(
"bcftools norm {snakemake.params} {snakemake.input[0]} " "-o {snakemake.output[0]}"
"bcftools norm {bcftools_opts} {extra} {snakemake.input[0]} -o {snakemake.output[0]} {log}"
)
5 changes: 4 additions & 1 deletion bio/bcftools/reheader/wrapper.py
Expand Up @@ -6,6 +6,8 @@

from snakemake.shell import shell

log = snakemake.log_fmt_shell(stdout=False, stderr=True)

## Extract arguments
header = snakemake.input.get("header", "")
if header:
Expand All @@ -30,5 +32,6 @@
"{snakemake.input.vcf} "
"| bcftools view "
"{view_extra} "
"> {snakemake.output}"
"> {snakemake.output} "
"{log}"
)
14 changes: 11 additions & 3 deletions test.py
Expand Up @@ -773,10 +773,18 @@ def test_bcftools_reheader():


@skip_if_not_modified
def test_bcftools_view_sample_vcf():
def test_bcftools_reheader():
run(
"bio/bcftools/view",
["snakemake", "--cores", "1", "a.view_sample.vcf", "--use-conda", "-F"],
"bio/bcftools/reheader",
["snakemake", "--cores", "1", "a.reheader.bcf", "--use-conda", "-F"],
)


@skip_if_not_modified
def test_bcftools_norm():
run(
"bio/bcftools/norm",
["snakemake", "--cores", "1", "a.norm.vcf", "--use-conda", "-F"],
)


Expand Down

0 comments on commit 961edb8

Please sign in to comment.