.. _`bio/bwa-mem2/mem-samblaster`: BWA MEM SAMBLASTER ================== .. image:: https://img.shields.io/github/issues-pr/snakemake/snakemake-wrappers/bio/bwa-mem2/mem-samblaster?label=version%20update%20pull%20requests :target: https://github.com/snakemake/snakemake-wrappers/pulls?q=is%3Apr+is%3Aopen+label%3Abio/bwa-mem2/mem-samblaster Map reads using bwa-mem2, mark duplicates by samblaster and sort and index by sambamba. Example ------- This wrapper can be used in the following way: .. code-block:: python rule bwa_mem: input: reads=["reads/{sample}.1.fastq", "reads/{sample}.2.fastq"], # Index can be a list of (all) files created by bwa, or one of them idx=multiext("genome.fasta", ".amb", ".ann", ".bwt.2bit.64", ".pac"), output: bam="mapped/{sample}.bam", index="mapped/{sample}.bam.bai", log: "logs/bwa_mem2_sambamba/{sample}.log", params: extra=r"-R '@RG\tID:{sample}\tSM:{sample}'", sort_extra="-q", # Extra args for sambamba. threads: 8 wrapper: "v3.0.1/bio/bwa-mem2/mem-samblaster" Note that input, output and log file paths can be chosen freely. When running with .. code-block:: bash snakemake --use-conda the software dependencies will be automatically deployed into an isolated environment before execution. Software dependencies --------------------- * ``bwa-mem2=2.2.1`` * ``sambamba=1.0`` * ``samblaster=0.1.26`` Authors ------- * Christopher Schröder Code ---- .. code-block:: python __author__ = "Christopher Schröder" __copyright__ = "Copyright 2020, Christopher Schröder" __email__ = "christopher.schroeder@tu-dortmund.de" __license__ = "MIT" from os import path from snakemake.shell import shell # Extract arguments. extra = snakemake.params.get("extra", "") sort_extra = snakemake.params.get("sort_extra", "") samblaster_extra = snakemake.params.get("samblaster_extra", "") index = snakemake.input.get("index", "") if isinstance(index, str): index = path.splitext(snakemake.input.idx)[0] else: index = path.splitext(snakemake.input.idx[0])[0] log = snakemake.log_fmt_shell(stdout=False, stderr=True) # Check inputs/arguments. if not isinstance(snakemake.input.reads, str) and len(snakemake.input.reads) not in { 1, 2, }: raise ValueError("input must have 1 (single-end) or 2 (paired-end) elements") shell( "(bwa-mem2 mem" " -t {snakemake.threads}" " {extra}" " {index}" " {snakemake.input.reads}" " | samblaster" " {samblaster_extra}" " | sambamba view -S -f bam /dev/stdin" " -t {snakemake.threads}" " | sambamba sort /dev/stdin" " -t {snakemake.threads}" " -o {snakemake.output.bam}" " {sort_extra}" ") {log}" ) .. |nl| raw:: html