rule MockRef_getVariantFlanking:
    """
    Get the flanking sequences from identified variants.
    """
    input:
        vcf="%s/FASTQ/TRIMMED/GSC.vcf" % (config["project-folder"]),
        genome="%s/FASTQ/TRIMMED/GSC.MR.Genome.fa" % (config["project-folder"])
    output:
        fl="%s/FASTQ/TRIMMED/GSC.vcf.flanking" % (config["project-folder"]),
        fa="%s/FASTQ/TRIMMED/GSC.vcf.fa" % (config["project-folder"])
    params:
        wd="%s/FASTQ/TRIMMED" % config["project-folder"],
        pipefolder=config["pipeline-folder"],
        flanking=config["params"]["step9"]["flanking"]
    log:
        "%s/logs/BASH/MockRef_getVariantFlanking.log" % (config["project-folder"])
    benchmark:
        "%s/benchmark/MockRef_getVariantFlanking.tsv" % (config["project-folder"])
    conda:"envs/gbs.yaml"
    singularity: config["singularity"]["gbs"]
    shell:"""
        cd {params.wd}
        # Prepare the loci file
        {params.pipefolder}/scripts/getFastaFromVCF.sh {input.vcf} {params.flanking} {output.fl} {output.fa} {input.genome} 2> {log}
        cd ../..
  	"""

if config["genome"] == "":
    pass
else:
    rule Ref_getVariantFlanking:
        """
        Get the flanking sequences from identified variants for reference genome.
        """
        input:
            vcf="%s/VCF/FinalSetVariants_referenceGenome.vcf" % (config["project-folder"]),
            genome=config["genome"]
        output:
            fl="%s/MPILEUP/mpileup_reference/GSC.vcf.flanking" % (config["project-folder"]),
            fa="%s/MPILEUP/mpileup_reference/GSC.vcf.fa" % (config["project-folder"])
        params:
            wd="%s/MPILEUP/mpileup_reference" % config["project-folder"],
            pipefolder=config["pipeline-folder"],
            flanking=config["params"]["step9"]["flanking"]
        log:
            "%s/logs/BASH/Ref_getVariantFlanking.log" % (config["project-folder"])
        benchmark:
            "%s/benchmark/Ref_getVariantFlanking.tsv" % (config["project-folder"])
        conda:"envs/gbs.yaml"
        singularity: config["singularity"]["gbs"]
        shell:"""
            cd {params.wd}
            # Prepare the loci file
            {params.pipefolder}/scripts/getFastaFromVCF.sh {input.vcf} {params.flanking} {output.fl} {output.fa} {input.genome} 2> {log}
            cd ../..
      	"""

if config["genome"] == "":
    pass
else:      	
    rule AlignMockFlankingToReference:
        """
        Align the flanking sites from mock referene to reference genome.
        """
        input:
            flanking="%s/FASTQ/TRIMMED/GSC.vcf.fa" % (config["project-folder"]),
            reference="%s" % (config["genome"]),
            refFiles="%s" % (config["genome-bwa-index"]),
        output:
            "%s/SAM/mockVariantsToReference/mockVariantsToReference.sam" % (config["project-folder"])
        log:
            "%s/logs/BWA/AlignMockFlankingToReference.log" % (config["project-folder"])
        benchmark:
            "%s/benchmark/AlignMockFlankingToReference.tsv" % (config["project-folder"])
        threads: 20
        conda:"envs/gbs.yaml"
        singularity: config["singularity"]["gbs"]
        shell:"""
            echo "Number of threads used:" {threads}
            bwa mem -t {threads} -M {input.reference} {input.flanking}> {output} 2> {log}
      	"""

if config["genome"] == "":
    pass
else:  	
    rule MockFlankingToReference_SamToSortedBam:
        """
        Sam to sorted bam for flanking sites mapped toreference genome bam (SAMTOOLS)
        """
        input:
            "%s/SAM/mockVariantsToReference/mockVariantsToReference.sam" % (config["project-folder"])
        output:
            bam="%s/BAM/mockVariantsToReference/mockVariantsToReference.bam" % (config["project-folder"]),
            sorted="%s/BAM/mockVariantsToReference/mockVariantsToReference.sorted.bam" % (config["project-folder"])
        log:
            "%s/logs/Samtools/MockFlankingToReference_SamToSortedBam.log" % (config["project-folder"])
        benchmark:
            "%s/benchmark/MockFlankingToReference_SamToSortedBam.tsv" % (config["project-folder"])
        threads: lambda cores: 20
        params:
            q=config["params"]["step5d"]["q"],
            f=config["params"]["step5d"]["f"],
            F=config["params"]["step5d"]["F"]
        conda:"envs/gbs.yaml"
        singularity: config["singularity"]["gbs"]
        shell:"""
            echo "Number of threads used:" {threads}
            samtools view -b -q {params.q} -f {params.f} -F {params.F} {input} > {output.bam}
            samtools sort {output.bam} -o {output.sorted}
            samtools index -c {output.sorted}
      	"""
