PTRIMMER¶
Tool to trim off the primer sequence from mutiplex amplicon sequencing
Software dependencies¶
- ptrimmer ==1.3.1
Example¶
This wrapper can be used in the following way:
rule ptrimmer_pe:
input:
r1="resources/a.lane1_R1.fastq.gz",
r2="resources/a.lane1_R2.fastq.gz"
output:
r1="results/a.lane1_R1.fq.gz",
r2="results/a.lane1_R2.fq.gz"
params:
primers="resources/primers.txt"
log:
"logs/ptrimmer/a.lane.log"
wrapper:
"0.55.1/bio/ptrimmer"
rule ptrimmer_se:
input:
r1="resources/a.lane1_R1.fastq.gz",
output:
r1="results/a.lane1_R1.fq",
params:
primers="resources/primers.txt"
log:
"logs/ptrimmer/a.lane1.log"
wrapper:
"0.55.1/bio/ptrimmer"
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.
Authors¶
- Felix Mölder
Code¶
__author__ = "Felix Mölder"
__copyright__ = "Copyright 2020, Felix Mölder"
__email__ = "felix.moelder@uni-due.de"
__license__ = "MIT"
from snakemake.shell import shell
from pathlib import Path
import ntpath
reads = "-f {r1}".format(r1=snakemake.input.r1)
read_prefix = ntpath.basename(snakemake.input.r1).split("_R1")[0]
intermediate_output_r1 = snakemake.output.r1.strip(".gz")
if snakemake.input.get("r2", ""):
seqmode = "pair"
reads = "{reads} -r {r2}".format(reads=reads, r2=snakemake.input.r2)
intermediate_output_r2 = snakemake.output.r2.strip(".gz")
else:
seqmode = "single"
primers = snakemake.params.primers
outdir = Path(snakemake.output[0]).parent.resolve()
log = snakemake.log_fmt_shell(stdout=True, stderr=True)
ptrimmer_params = "-s {mode} {reads} -a {primers} -o {out}".format(
mode=seqmode, reads=reads, primers=primers, out=outdir
)
process_r1 = "mv {outdir}/{prefix}_trim_R1.fq {out}".format(
outdir=outdir, prefix=read_prefix, out=intermediate_output_r1
)
if snakemake.output.r1.endswith(".gz"):
process_r1 = "{process_r1} && gzip -9 {out}".format(
process_r1=process_r1, out=intermediate_output_r1
)
process_r2 = ""
if snakemake.input.get("r2", ""):
process_r2 = "&& mv {outdir}/{prefix}_trim_R2.fq {out}".format(
outdir=outdir, prefix=read_prefix, out=intermediate_output_r2
)
if snakemake.output.r2.endswith(".gz"):
process_r2 = "{process_r2} && gzip -9 {out}".format(
process_r2=process_r2, out=intermediate_output_r2
)
shell("(ptrimmer {ptrimmer_params} && {process_r1} {process_r2}) {log}")