Skip to content

Commit

Permalink
feat: fixed minimap2 bioconda strict channels, updated version, and a…
Browse files Browse the repository at this point in the history
…dded test (#527)

* Fixed bioconda strict channels, updated version

* Added extra test

* Point to minor version

* Update bio/minimap2/index/environment.yaml

* Update bio/minimap2/aligner/environment.yaml

Co-authored-by: Johannes Köster <johannes.koester@uni-due.de>
  • Loading branch information
fgvieira and johanneskoester committed Aug 16, 2022
1 parent cd68aa5 commit 8f95ddb
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 42 deletions.
5 changes: 3 additions & 2 deletions bio/minimap2/aligner/environment.yaml
Expand Up @@ -3,5 +3,6 @@ channels:
- bioconda
- nodefaults
dependencies:
- minimap2 ==2.17
- samtools ==1.12
- minimap2 =2.24
- samtools
- snakemake-wrapper-utils =0.4
2 changes: 1 addition & 1 deletion bio/minimap2/aligner/meta.yaml
@@ -1,5 +1,6 @@
name: minimap2
description: A versatile pairwise aligner for genomic and spliced nucleotide sequences.
url: https://lh3.github.io/minimap2
authors:
- Tom Poorten
- Michael Hall
Expand All @@ -13,4 +14,3 @@ notes: |
* The `extra` param allows for additional arguments for minimap2.
* The `sort` param allows to enable sorting (if output not PAF), and can be either 'none', 'queryname' or 'coordinate'.
* The `sort_extra` allows for extra arguments for samtools/picard
* For more inforamtion see, https://lh3.github.io/minimap2
63 changes: 41 additions & 22 deletions bio/minimap2/aligner/test/Snakefile
@@ -1,47 +1,66 @@
rule minimap2_paf:
input:
target="target/{input1}.mmi", # can be either genome index or genome fasta
query=["query/reads1.fasta", "query/reads2.fasta"]
target="target/{input1}.mmi", # can be either genome index or genome fasta
query=["query/reads1.fasta", "query/reads2.fasta"],
output:
"aligned/{input1}_aln.paf"
"aligned/{input1}_aln.paf",
log:
"logs/minimap2/{input1}.log"
"logs/minimap2/{input1}.log",
params:
extra="-x map-pb", # optional
sorting="coordinate", # optional: Enable sorting. Possible values: 'none', 'queryname' or 'coordinate'
sort_extra="" # optional: extra arguments for samtools/picard
extra="-x map-pb", # optional
sorting="coordinate", # optional: Enable sorting. Possible values: 'none', 'queryname' or 'coordinate'
sort_extra="", # optional: extra arguments for samtools/picard
threads: 3
wrapper:
"master/bio/minimap2/aligner"


rule minimap2_sam:
input:
target="target/{input1}.mmi", # can be either genome index or genome fasta
query=["query/reads1.fasta", "query/reads2.fasta"]
target="target/{input1}.mmi", # can be either genome index or genome fasta
query=["query/reads1.fasta", "query/reads2.fasta"],
output:
"aligned/{input1}_aln.sam"
"aligned/{input1}_aln.sam",
log:
"logs/minimap2/{input1}.log"
"logs/minimap2/{input1}.log",
params:
extra="-x map-pb", # optional
sorting="none", # optional: Enable sorting. Possible values: 'none', 'queryname' or 'coordinate'
sort_extra="" # optional: extra arguments for samtools/picard
extra="-x map-pb", # optional
sorting="none", # optional: Enable sorting. Possible values: 'none', 'queryname' or 'coordinate'
sort_extra="", # optional: extra arguments for samtools/picard
threads: 3
wrapper:
"master/bio/minimap2/aligner"

rule minimap2_bam:

rule minimap2_sam_sorted:
input:
target="target/{input1}.mmi", # can be either genome index or genome fasta
query=["query/reads1.fasta", "query/reads2.fasta"],
output:
"aligned/{input1}_aln.sorted.sam",
log:
"logs/minimap2/{input1}.log",
params:
extra="-x map-pb", # optional
sorting="queryname", # optional: Enable sorting. Possible values: 'none', 'queryname' or 'coordinate'
sort_extra="", # optional: extra arguments for samtools/picard
threads: 3
wrapper:
"master/bio/minimap2/aligner"


rule minimap2_bam_sorted:
input:
target="target/{input1}.mmi", # can be either genome index or genome fasta
query=["query/reads1.fasta", "query/reads2.fasta"]
target="target/{input1}.mmi", # can be either genome index or genome fasta
query=["query/reads1.fasta", "query/reads2.fasta"],
output:
"aligned/{input1}_aln.bam"
"aligned/{input1}_aln.sorted.bam",
log:
"logs/minimap2/{input1}.log"
"logs/minimap2/{input1}.log",
params:
extra="-x map-pb", # optional
sorting="coordinate", # optional: Enable sorting. Possible values: 'none', 'queryname' or 'coordinate'
sort_extra="" # optional: extra arguments for samtools/picard
extra="-x map-pb", # optional
sorting="coordinate", # optional: Enable sorting. Possible values: 'none', 'queryname' or 'coordinate'
sort_extra="", # optional: extra arguments for samtools/picard
threads: 3
wrapper:
"master/bio/minimap2/aligner"
31 changes: 17 additions & 14 deletions bio/minimap2/aligner/wrapper.py
Expand Up @@ -3,23 +3,20 @@
__email__ = "tom.poorten@gmail.com"
__license__ = "MIT"


from os import path
from snakemake.shell import shell
from snakemake_wrapper_utils.samtools import infer_out_format
from snakemake_wrapper_utils.samtools import get_samtools_opts


inputQuery = " ".join(snakemake.input.query)

# Extract output format
out_name, out_ext = path.splitext(snakemake.output[0])
out_ext = out_ext[1:].upper()

# Extract arguments.
samtools_opts = get_samtools_opts(snakemake, parse_output=False)
extra = snakemake.params.get("extra", "")

log = snakemake.log_fmt_shell(stdout=False, stderr=True)
sort = snakemake.params.get("sorting", "none")
sort_extra = snakemake.params.get("sort_extra", "")

log = snakemake.log_fmt_shell(stdout=False, stderr=True)
out_ext = infer_out_format(snakemake.output[0])

pipe_cmd = ""
if out_ext != "PAF":
Expand All @@ -31,7 +28,7 @@

if out_ext != "SAM":
# Simply convert to output format using samtools view.
pipe_cmd = "| samtools view -h --output-fmt {} -".format(out_ext)
pipe_cmd = f"| samtools view -h {samtools_opts}"

elif sort in ["coordinate", "queryname"]:

Expand All @@ -40,13 +37,19 @@
sort_extra += " -n"

# Sort alignments.
pipe_cmd = "| samtools sort {} --output-fmt {} -".format(sort_extra, out_ext)
pipe_cmd = f"| samtools sort {sort_extra} {samtools_opts}"

else:
raise ValueError("Unexpected value for params.sort ({})".format(sort))
raise ValueError(f"Unexpected value for params.sort: {sort}")


shell(
"(minimap2 -t {snakemake.threads} {extra} "
"{snakemake.input.target} {inputQuery} {pipe_cmd} > {snakemake.output[0]}) {log}"
"(minimap2"
" -t {snakemake.threads}"
" {extra} "
" {snakemake.input.target}"
" {snakemake.input.query}"
" {pipe_cmd}"
" > {snakemake.output[0]}"
") {log}"
)
2 changes: 1 addition & 1 deletion bio/minimap2/index/environment.yaml
Expand Up @@ -3,4 +3,4 @@ channels:
- bioconda
- nodefaults
dependencies:
- minimap2 ==2.17
- minimap2 =2.24
5 changes: 5 additions & 0 deletions bio/minimap2/index/meta.yaml
@@ -1,4 +1,9 @@
name: minimap2 index
description: creates a minimap2 index
url: https://lh3.github.io/minimap2
authors:
- Tom Poorten
input:
- reference genome in FASTA format
output:
- indexed reference genome
12 changes: 10 additions & 2 deletions test.py
Expand Up @@ -2290,10 +2290,18 @@ def test_minimap2_aligner_sam():


@skip_if_not_modified
def test_minimap2_aligner_bam():
def test_minimap2_aligner_sam_sorted():
run(
"bio/minimap2/aligner",
["snakemake", "--cores", "1", "aligned/genome_aln.bam", "--use-conda", "-F"],
["snakemake", "--cores", "1", "aligned/genome_aln.sorted.sam", "--use-conda", "-F"],
)


@skip_if_not_modified
def test_minimap2_aligner_bam_sorted():
run(
"bio/minimap2/aligner",
["snakemake", "--cores", "1", "aligned/genome_aln.sorted.bam", "--use-conda", "-F"],
)


Expand Down

0 comments on commit 8f95ddb

Please sign in to comment.