import os
DIR = "HTDay01/"
SAMPLES = ["DE01D01","DE01D02","DE01D03","DT01D01","DT01D02","DT01D03"]
FA = "dm6.fasta"
GTF = "dm6.corrected.gtf"

rule all:
	input:
		[os.path.join(DIR, "CrypSplice_UN.csv"),
		os.path.join(DIR, "CrypSplice_KN.csv")]

rule runBBtestUN:
	input:
		csv = os.path.join(DIR, "CrypMatrixUN.csv")
	output:
		os.path.join(DIR, "CrypSplice_UN.csv")
	params:
		ncr = 3,
		ntr = 3,
		paired = "UnPaired",
		cores = 16
	log:
		os.path.join(DIR, "Log_BBTest.txt")
	shell:
		"Rscript BBTest.R {params.ncr} {params.ntr} {input.csv} {output} {params.paired} {params.cores} {log}"

rule runBBtestKN:
	input:
		csv = os.path.join(DIR, "CrypMatrixKN.csv")
	output:
		os.path.join(DIR, "CrypSplice_KN.csv")
	params:
		ncr = 3,
		ntr = 3,
		paired = "UnPaired",
		cores = 16
	log:
		os.path.join(DIR, "Log_BBTest.txt")
	shell:
		"Rscript BBTest.R {params.ncr} {params.ntr} {input.csv} {output} {params.paired} {params.cores} {log}"
		
rule generate_matrix:
	input:
		[ os.path.join(DIR, "Junction_Counts.csv") ] + 
		expand(os.path.join(DIR, "{sample}_ExonCounts.txt"), sample=SAMPLES) +
		[ os.path.join(DIR, "Junction_Annotations.txt") ] 
	params:
		ncr = 3,
		ntr = 3
	output:
		#matrix = os.path.join(DIR, "CrypMatrix.csv"), 
		matrix_un = os.path.join(DIR, "CrypMatrixUN.csv"),
		matrix_kn = os.path.join(DIR, "CrypMatrixKN.csv") 
	shell:
		"python2 makeMatrix.py {params.ncr} {params.ntr} {input}"	

rule get_exon_counts:
	input:
		ja = os.path.join(DIR, "Junction_Annotations.txt"),
		bams = expand(os.path.join(DIR, "{sample}.sorted.bam"), sample=SAMPLES)
	output:
		expand(os.path.join(DIR, "{sample}_ExonCounts.txt"), sample=SAMPLES)
	params:
		cores = 10
	shell:
		"python2 getExonCounts.py {params.cores} {input.ja} {input.bams}"
 
rule annotate_junction:
	input:
		jc = os.path.join(DIR, "Junction_Counts.csv"),
		fa = FA,
		gtf = GTF
	output:
		os.path.join(DIR, "Junction_Annotations.txt")
	shell:
		"python2 annotateJunctions.py {input.jc} {input.fa} {input.gtf}"

		
rule map_bed:
	input:
		expand(os.path.join(DIR, "{sample}.sorted.bed.Ad"), sample=SAMPLES)
	output:
		os.path.join(DIR, "Junction_Counts.csv")
	shell:
		"python2 MapBED.py {output} {input}"


rule adjust_junctions:
	input:
		bed = os.path.join(DIR, "{sample}.sorted.bed")
	output:
		os.path.join(DIR, "{sample}.sorted.bed.Ad")
	params:
		cov = 10
	shell:
		"python2 adjustBED.py {input.bed} {output} {params.cov}"


rule get_junctions:
	input:
		bam = os.path.join(DIR, "{sample}.sorted.bam")
	output:
		os.path.join(DIR, "{sample}.sorted.bed")
	shell:
		"python2 getJunctions.py {input.bam} {output}"
