rule name_sort_for_genrich:
	input: "04_bam_files/{sample}.sorted.dedup.bam"
	output: "04_bam_files/{sample}.namesorted_for_genrich.bam"
	log: "00_logs/{sample}_bam_namesort.log"
	shell: "samtools sort -n -@ THREADS -O BAM '{input}' > '{output}' 2> '{log}'"

def sample_group(wildcards):
	group = Samples[wildcards.sample]
	return expand("04_bam_files/{sample}.namesorted_for_genrich.bam", sample = group)

def control_group(wildcards):
	group = Controls[wildcards.control]
	return expand("04_bam_files/{sample}.namesorted_for_genrich.bam", sample = group)

rule call_peaks:
	input:
		s = sample_group,
		c = control_group
	output:
		peak   = "06_genrich_peaks/{sample}_{control}_peak.narrowPeak",
		reads  = "06_genrich_peaks/{sample}_{control}_reads.bed",
		pileup = "06_genrich_peaks/{sample}_{control}_pileup"
	log: "00_logs/{sample}_{control}_genrich_peaks.log"
	run:
		sample_list = []
		control_list = []
		for input_file in input.s: sample_list.append(f'\'{input_file}\'')
		for control_file in input.c: control_list.append(f'\'{control_file}\'')
		sample_input = ','.join(sample_list)
		control_input = ','.join(control_list)
		shell("mkdir -p 06_genrich_peaks")
		shell("Genrich -t {sample_input} -c {control_input} GENRICH_READ_TYPE "
			"-o '{output.peak}' -f '{output.pileup}' -b '{output.reads}' 2> '{log}'")
