TRIMMOMATIC PE

https://img.shields.io/badge/wrapper_version-v9.4.2-10785b https://img.shields.io/github/issues-pr/snakemake/snakemake-wrappers/bio/trimmomatic?label=version%20update%20pull%20requests&color=1cb481

Trim reads with Trimmomatic.

URL: http://www.usadellab.org/cms/?page=trimmomatic

Example

This wrapper can be used in the following way:

rule trimmomatic_pe_fq_fq:
    input:
        r1="reads/{sample}.1.fastq",
        r2="reads/{sample}.2.fastq",
    output:
        r1="trimmed/pe/fq_fq/{sample}.1.fastq",
        r2="trimmed/pe/fq_fq/{sample}.2.fastq",
        # reads where trimming entirely removed the mate
        r1_unpaired="trimmed/pe/fq_fq/{sample}.1.unpaired.fastq",
        r2_unpaired="trimmed/pe/fq_fq/{sample}.2.unpaired.fastq",
    log:
        "logs/trimmomatic/pe/fq_fq/{sample}.log",
    params:
        # list of trimmers (see manual)
        trimmer=["TRAILING:3"],
        # optional parameters
        extra="",
    threads: 32
    resources:
        mem_mb=1024,
    wrapper:
        "v9.4.2/bio/trimmomatic"


rule trimmomatic_pe_fq_gz:
    input:
        r1="reads/{sample}.1.fastq",
        r2="reads/{sample}.2.fastq",
    output:
        r1="trimmed/pe/fq_gz/{sample}.1.fastq.gz",
        r2="trimmed/pe/fq_gz/{sample}.2.fastq.gz",
        # reads where trimming entirely removed the mate
        r1_unpaired="trimmed/pe/fq_gz/{sample}.1.unpaired.fastq.gz",
        r2_unpaired="trimmed/pe/fq_gz/{sample}.2.unpaired.fastq.gz",
    log:
        "logs/trimmomatic/pe/fq_gz/{sample}.log",
    params:
        # list of trimmers (see manual)
        trimmer=["TRAILING:3"],
        # optional parameters
        extra="",
        compression_level="-9",
    threads: 32
    resources:
        mem_mb=1024,
    wrapper:
        "v9.4.2/bio/trimmomatic"


rule trimmomatic_pe_gz_fq:
    input:
        r1="reads/{sample}.1.fastq.gz",
        r2="reads/{sample}.2.fastq.gz",
    output:
        r1="trimmed/pe/gz_fq/{sample}.1.fastq",
        r2="trimmed/pe/gz_fq/{sample}.2.fastq",
        # reads where trimming entirely removed the mate
        r1_unpaired="trimmed/pe/gz_fq/{sample}.1.unpaired.fastq",
        r2_unpaired="trimmed/pe/gz_fq/{sample}.2.unpaired.fastq",
    log:
        "logs/trimmomatic/pe/gz_fq/{sample}.log",
    params:
        # list of trimmers (see manual)
        trimmer=["TRAILING:3"],
        # optional parameters
        extra="",
    threads: 32
    resources:
        mem_mb=1024,
    wrapper:
        "v9.4.2/bio/trimmomatic"


rule trimmomatic_pe_gz_gz:
    input:
        r1="reads/{sample}.1.fastq.gz",
        r2="reads/{sample}.2.fastq.gz",
    output:
        r1="trimmed/pe/gz_gz/{sample}.1.fastq.gz",
        r2="trimmed/pe/gz_gz/{sample}.2.fastq.gz",
        # reads where trimming entirely removed the mate
        r1_unpaired="trimmed/pe/gz_gz/{sample}.1.unpaired.fastq.gz",
        r2_unpaired="trimmed/pe/gz_gz/{sample}.2.unpaired.fastq.gz",
    log:
        "logs/trimmomatic/pe/gz_gz/{sample}.log",
    params:
        # list of trimmers (see manual)
        trimmer=["TRAILING:3"],
        # optional parameters
        extra="",
        compression_level="-9",
    threads: 32
    resources:
        mem_mb=1024,
    wrapper:
        "v9.4.2/bio/trimmomatic"


rule trimmomatic_se_fq_fq:
    input:
        "reads/{sample}.fastq",
    output:
        "trimmed/se/fq_fq/{sample}.fastq",
    log:
        "logs/trimmomatic/se/fq_fq/{sample}.log",
    params:
        # list of trimmers (see manual)
        trimmer=["TRAILING:3"],
        # optional parameters
        extra="",
    threads: 32
    resources:
        mem_mb=1024,
    wrapper:
        "v9.4.2/bio/trimmomatic"


rule trimmomatic_se_fq_gz:
    input:
        "reads/{sample}.fastq",
    output:
        "trimmed/se/fq_gz/{sample}.fastq.gz",
    log:
        "logs/trimmomatic/se/fq_gz/{sample}.log",
    params:
        # list of trimmers (see manual)
        trimmer=["TRAILING:3"],
        # compression levels from -0 to -9 and -11
        compression_level="-5",
        # optional parameters
        extra="",
    threads: 32
    resources:
        mem_mb=1024,
    wrapper:
        "v9.4.2/bio/trimmomatic"


rule trimmomatic_se_gz_fq:
    input:
        "reads/{sample}.fastq.gz",
    output:
        "trimmed/se/gz_fq/{sample}.fastq",
    log:
        "logs/trimmomatic/se/gz_fq/{sample}.log",
    params:
        # list of trimmers (see manual)
        trimmer=["TRAILING:3"],
        # optional parameters
        extra="",
    threads: 32
    resources:
        mem_mb=1024,
    wrapper:
        "v9.4.2/bio/trimmomatic"


rule trimmomatic_se_gz_gz:
    input:
        "reads/{sample}.fastq.gz",
    output:
        "trimmed/se/gz_gz/{sample}.fastq.gz",
    log:
        "logs/trimmomatic/se/gz_gz/{sample}.log",
    params:
        # list of trimmers (see manual)
        trimmer=["TRAILING:3"],
        # optional parameters
        extra="",
        # optional compression levels from -0 to -9 and -11
        compression_level="-9",
    threads: 32
    resources:
        mem_mb=1024,
    wrapper:
        "v9.4.2/bio/trimmomatic"

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.

Notes

For PE (paired-end) trimming, all output files need to be specified.

Software dependencies

  • trimmomatic=0.40

  • snakemake-wrapper-utils=0.8.0

Input/Output

Input:

  • r1: fastq(gz) file

  • r2: fastq(gz) file (if PE)

Output:

  • r1: trimmed R1 fastq(gz) file

  • r2: trimmed R2 fastq(gz) file (if PE)

  • r1_unpaired: unpaired R1 fastq(gz) file (if PE)

  • r2_unpaired: unpaired R2 fastq(gz) file (if PE)

Params

  • trimmer: trimming steps

  • extra: additional program arguments

Authors

  • Johannes Köster

  • Jorge Langa

  • Filipe G. Vieira

Code

__author__ = "Johannes Köster, Jorge Langa"
__copyright__ = "Copyright 2016, Johannes Köster"
__email__ = "koester@jimmy.harvard.edu"
__license__ = "MIT"


from snakemake.shell import shell
from snakemake_wrapper_utils.java import get_java_opts

extra = snakemake.params.get("extra", "")
java_opts = get_java_opts(snakemake)
log = snakemake.log_fmt_shell(stdout=True, stderr=True)
compression_level = snakemake.params.get("compression_level", "-5")
trimmer = " ".join(snakemake.params.trimmer)


if snakemake.input.get("r2", False):
    trim_mode = "PE"
    in_files = [snakemake.input.r1, snakemake.input.r2]
    out_files = [
        snakemake.output.r1,
        snakemake.output.r1_unpaired,
        snakemake.output.r2,
        snakemake.output.r2_unpaired,
    ]
else:
    trim_mode = "SE"
    in_files = [snakemake.input[0]]
    out_files = [snakemake.output[0]]


shell(
    "trimmomatic {trim_mode}"
    " -threads {snakemake.threads}"
    " {java_opts}"
    " {extra}"
    " {in_files}"
    " {out_files}"
    " {trimmer}"
    " {log}"
)