Snakefile "ymp/rules/sickle.rules"

Env(name="sickle", base="bioconda", packages="sickle-trim")


with Stage("trim_sickle") as S:
    S.doc("""
    Perform read trimming using Sickle

    >>> ymp make toy.trim_sickle
    >>> ymp make toy.trim_sickleQ10L10
    >>> ymp make mpic.trim_sickleL20
    """)
    S.add_param("Q", typ="int", name="qual", default=20)
    S.add_param("L", typ="int", name="length", default=20)
    rule sickle:
        message:
            "Sickle: Trimming {wildcards.sample}"
        input:
            "{:prev:}/{sample}.{:pairnames:}.fq.gz"
        output:
            "{:this:}/{sample}.{:pairnames:}.fq.gz",
            "{:this:}/{sample}.unpaired.fq.gz",
        log:
            "{:this:}/{sample}.log"
        params:
            arg_pe="pe",
            inout2="-r {input[1]} -p {output[1]} -s {output[2]}"
        threads:
            1
        conda:
            "sickle"
        shell:"""
        sickle {params.arg_pe} \
            -f {input[0]} \
            -o {output[0]} \
            {params.inout2} \
            --qual-type=sanger \
            --length-threshold={params.length} \
            --qual-threshold={params.qual} \
            --gzip-output \
            --no-fiveprime \
            > {log} 2>&1
        """


    rule sickle_se:  # ymp: extends sickle
        input:
            ["{:prev:}/{sample}.{:pairnames[0]:}.fq.gz"]
        output:
            ["{:this:}/{sample}.{:pairnames[0]:}.fq.gz"]
        params:
            arg_pe = "se",
            inout2 = ""

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