Snakefile "ymp/rules/trimmomatic.rules"

Env(name="trimmomatic", base="bioconda", packages="trimmomatic")

with Stage("trim_trimmomatic") as S:
    S.doc("""
    Adapter trim reads using trimmomatic

    >>> ymp make toy.trim_trimmomaticT32
    >>> ymp make mpic.trim_trimmomatic
    """)
    S.add_param(key="",typ="choice", name="adapter",
                value=['N', 'T2', 'T3', 'T32'], default="N")
    rule trimmomatic_adapter:
        """Trimming with Trimmomatic"""
        message:
            "Trimmomatic: trimming {input}"
        input:
            "{:prev:}/{target}.{:pairnames:}.fq.gz"
        output:
            "{:this:}/{target}.{:pairnames[0]:}.fq.gz",
            "{:this:}/{target}.unpaired.{:pairnames[0]:}.fq.gz",
            "{:this:}/{target}.{:pairnames[1]:}.fq.gz",
            "{:this:}/{target}.unpaired.{:pairnames[1]:}.fq.gz"
        log:
            "{:this:}/{target}.log"
        params:
            seed_mismatches = 2,
            palindrome_clip_thresh = 30,
            simple_clip_thresh = 10,
            min_adapter_len = 8,
            keep_both_reads = "true",
            arg_pe="PE"
        conda:
            "trimmomatic"
        threads:
            1
        shell:"""
        case {params.adapter} in
          N)   ADAPTER=NexteraPE-PE.fa ;;
          T2)  ADAPTER=TruSeq2-PE.fa ;;
          T3)  ADAPTER=TruSeq3-PE.fa ;;
          T32) ADAPTER=TruSeq3-PE-2.fa ;;
        esac

        ADAPTER_DIR="$(dirname $(which trimmomatic))/../share/trimmomatic/adapters"

        CLIPARG="ILLUMINACLIP:$ADAPTER_DIR/$ADAPTER"
        CLIPARG="$CLIPARG:{params.seed_mismatches}"
        CLIPARG="$CLIPARG:{params.palindrome_clip_thresh}"
        CLIPARG="$CLIPARG:{params.simple_clip_thresh}"
        CLIPARG="$CLIPARG:{params.min_adapter_len}"
        CLIPARG="$CLIPARG:{params.keep_both_reads}"

        trimmomatic {params.arg_pe} \
            -threads {threads} \
            -phred33 \
            {input} {output} \
            $CLIPARG >{log} 2>&1
        """

    rule trimmomatic_adapter_se:  # ymp: extends trimmomatic_adapter
        input:  "{:prev:}/{target}.{:pairnames[0]:}.fq.gz"
        output: "{:this:}/{target}.{:pairnames[0]:}.fq.gz"
        params: arg_pe  = "SE"

    rule trimmomatic_adapter_all:
        message:
            "Trimmomatic: complete"
        output:
            touch("{:this:}/all_targets.stamp")
        input:
            "{:this:}/{:fq_names:}.fq.gz"