ADAPTERREMOVAL
rapid adapter trimming, identification, and read merging.
URL: https://adapterremoval.readthedocs.io/en/latest/
Example
This wrapper can be used in the following way:
rule adapterremoval_se:
input:
sample=["reads/se/{sample}.fastq"],
output:
fq="trimmed/se/{sample}.fastq.gz", # trimmed reads
discarded="trimmed/se/{sample}.discarded.fastq.gz", # reads that did not pass filters
json="stats/se/{sample}.json", # report
log:
"logs/adapterremoval/se/{sample}.log",
threads: 1
params:
adapters="--adapter1 ACGGCTAGCTA",
extra="",
wrapper:
"v9.17.0/bio/adapterremoval"
rule adapterremoval_pe:
input:
sample=["reads/pe/{sample}.1.fastq", "reads/pe/{sample}.2.fastq"],
output:
fq1="trimmed/pe/{sample}_R1.fastq.gz", # trimmed mate1 reads
fq2="trimmed/pe/{sample}_R2.fastq.gz", # trimmed mate2 reads
merged="trimmed/pe/{sample}.merged.fastq.gz", # overlapping mate-pairs which have been merged into a single read
singleton="trimmed/pe/{sample}.singleton.fastq.gz", # mate-pairs for which the mate has been discarded
discarded="trimmed/pe/{sample}.discarded.fastq.gz", # reads that did not pass filters
html="stats/pe/{sample}.html", # report
log:
"logs/adapterremoval/pe/{sample}.log",
threads: 2
params:
adapters="--adapter1 ACGGCTAGCTA --adapter2 AGATCGGAAGAGCACACGTCTGAACTCCAGTCAC",
extra="--merge",
wrapper:
"v9.17.0/bio/adapterremoval"
Note that input, output and log file paths can be chosen freely.
When running with
snakemake --use-conda
the software dependencies will be automatically deployed into an isolated environment before execution.
Software dependencies
adapterremoval=3.0.2snakemake-wrapper-utils=0.9.0
Input/Output
Input:
sample: [‘raw fastq file with R1 reads’, ‘raw fastq file with R2 reads (PE only)’]
Output:
fq: path to single fastq file (SE only)fq1: path to fastq R1 (PE only)fq2: path to fastq R2 (PE only)singleton: fastq file with singleton reads (PE only; PE reads for which the mate has been discarded)merged: fastq file with merged/collapsed reads (PE only; overlapping mate-pairs which have been merged into a single read)discarded: fastq file with discarded reads (reads that did not pass filters)json: report file in JSON formathtml: report file in HTML format
Params
extra: additional command arguments.
Code
__author__ = "Filipe G. Vieira"
__copyright__ = "Copyright 2020, Filipe G. Vieira"
__license__ = "MIT"
import re
from pathlib import Path
from snakemake.shell import shell
from snakemake_wrapper_utils.snakemake import is_arg
extra = snakemake.params.get("extra", "") + " "
adapters = snakemake.params.get("adapters", "")
log = snakemake.log_fmt_shell(stdout=True, stderr=True)
# Check input files
n = len(snakemake.input.sample)
assert (
n == 1 or n == 2
), "input->sample must have 1 (single-end) or 2 (paired-end) elements."
# Input files
if n == 1 or is_arg("--interleaved", extra) or is_arg("--interleaved-input", extra):
in_reads = f"--in-file1 {snakemake.input.sample}"
else:
in_reads = "--in-file1 {} --in-file2 {}".format(*snakemake.input.sample)
# Output files
if n == 1 or is_arg("--interleaved", extra) or is_arg("--interleaved-output", extra):
out_trimmed = f"--out-file1 {snakemake.output.fq}"
else:
out_trimmed = (
f"--out-file1 {snakemake.output.fq1} --out-file2 {snakemake.output.fq2}"
)
# Output singleton files
singleton = snakemake.output.get("singleton", None)
if singleton:
out_trimmed += f" --out-singleton {singleton}"
# Output merged PE reads
merged = snakemake.output.get("merged", None)
if merged:
if not is_arg("--merge", extra):
raise ValueError(
"output.merged specified but '--merge' option missing from params.extra"
)
out_trimmed += f" --out-merged {merged}"
# Output discarded files
out_discarded = snakemake.output.get("discarded", "")
if out_discarded:
out_discarded = f"--out-discarded {out_discarded}"
# Reports
out_json = snakemake.output.get("json", "")
if out_json:
out_json = f"--out-json {out_json}"
out_html = snakemake.output.get("html", "")
if out_html:
out_html = f"--out-html {out_html}"
shell(
"adapterremoval3"
" --threads {snakemake.threads}"
" {in_reads}"
" {adapters}"
" {extra}"
" {out_trimmed}"
" {out_discarded}"
" {out_json}"
" {out_html}"
" {log}"
)