#!/bin/bash
# ChIP-seq pipeline: ERRg ChIP (WT vs ERRGKO) — human samples
# Steps: align → filter → dedup → peak calling → bigWig

set -euo pipefail

GENOME=/BRC/ref/hg38/bowtie2/hg38          # bowtie2 index prefix
CHROMSIZES=/BRC/ref/hg38/hg38.chrom.sizes
THREADS=8
WORKDIR=/BRC/yan/heart/Chip_GSE113760

mkdir -p ${WORKDIR}/bam ${WORKDIR}/peaks ${WORKDIR}/bigwig ${WORKDIR}/logs

# ─── Align, filter, dedup ───────────────────────────────────────────────────

align_and_process() {
    local SAMPLE=$1
    local FQ=$2
    local OUT=${WORKDIR}/bam/${SAMPLE}

    echo "[$(date)] Processing ${SAMPLE}" | tee -a ${WORKDIR}/logs/${SAMPLE}.log

    bowtie2 -p ${THREADS} -x ${GENOME} \
        -U ${FQ} 2>>${WORKDIR}/logs/${SAMPLE}.log \
    | samtools view -bS -q 30 -F 4 \
    | samtools sort -@ ${THREADS} -o ${OUT}.sorted.bam

    picard MarkDuplicates \
        I=${OUT}.sorted.bam \
        O=${OUT}.dedup.bam \
        M=${WORKDIR}/logs/${SAMPLE}.dup_metrics.txt \
        REMOVE_DUPLICATES=true \
        VALIDATION_STRINGENCY=LENIENT \
        2>>${WORKDIR}/logs/${SAMPLE}.log

    samtools index ${OUT}.dedup.bam
    echo "[$(date)] Done: ${SAMPLE}"
}

# WT
align_and_process WT_ChIP_rep1  ${WORKDIR}/WT/GSM3119070_ERRg_ChIP_WT_rep1_SRR7073311.fastq.gz
align_and_process WT_ChIP_rep2  ${WORKDIR}/WT/GSM3119071_ERRg_ChIP_WT_rep2_SRR7073312.fastq.gz
align_and_process WT_Input_rep1 ${WORKDIR}/WT/GSM3119074_Input_WT_rep1_SRR7073315.fastq.gz
align_and_process WT_Input_rep2 ${WORKDIR}/WT/GSM3119075_Input_WT_rep2_SRR7073316.fastq.gz

# ERRGKO
align_and_process KO_ChIP_rep1  ${WORKDIR}/ERRGKO/GSM3119072_ERRg_ChIP_ERRgKO1_SRR7073313.fastq.gz
align_and_process KO_ChIP_rep2  ${WORKDIR}/ERRGKO/GSM3119073_ERRg_ChIP_ERRgKO2_SRR7073314.fastq.gz
align_and_process KO_Input_rep1 ${WORKDIR}/ERRGKO/GSM3119076_Input_ERRgKO1_SRR7073317.fastq.gz
align_and_process KO_Input_rep2 ${WORKDIR}/ERRGKO/GSM3119077_Input_ERRgKO2_SRR7073318.fastq.gz

# ─── Merge replicates ────────────────────────────────────────────────────────

for GROUP in WT_ChIP WT_Input KO_ChIP KO_Input; do
    samtools merge -f -@ ${THREADS} ${WORKDIR}/bam/${GROUP}_pooled.bam \
        ${WORKDIR}/bam/${GROUP}_rep1.dedup.bam \
        ${WORKDIR}/bam/${GROUP}_rep2.dedup.bam
    samtools index ${WORKDIR}/bam/${GROUP}_pooled.bam
done

# ─── Peak calling: MACS2 (human genome) ─────────────────────────────────────

macs2 callpeak \
    -t ${WORKDIR}/bam/WT_ChIP_pooled.bam \
    -c ${WORKDIR}/bam/WT_Input_pooled.bam \
    -f BAM -g hs -n WT_ERRg \
    --outdir ${WORKDIR}/peaks \
    -q 0.05 --keep-dup all \
    2>${WORKDIR}/logs/macs2_WT.log

macs2 callpeak \
    -t ${WORKDIR}/bam/KO_ChIP_pooled.bam \
    -c ${WORKDIR}/bam/KO_Input_pooled.bam \
    -f BAM -g hs -n KO_ERRg \
    --outdir ${WORKDIR}/peaks \
    -q 0.05 --keep-dup all \
    2>${WORKDIR}/logs/macs2_KO.log

# ─── bigWig: log2(ChIP/Input), RPKM, bin=10bp ───────────────────────────────

for pair in \
    "WT_ChIP_rep1 WT_Input_rep1" \
    "WT_ChIP_rep2 WT_Input_rep2" \
    "KO_ChIP_rep1 KO_Input_rep1" \
    "KO_ChIP_rep2 KO_Input_rep2" \
    "WT_ChIP_pooled WT_Input_pooled" \
    "KO_ChIP_pooled KO_Input_pooled"; do

    CHIP=$(echo $pair | awk '{print $1}')
    INPUT=$(echo $pair | awk '{print $2}')

    bamCompare \
        -b1 ${WORKDIR}/bam/${CHIP}.dedup.bam \
        -b2 ${WORKDIR}/bam/${INPUT}.dedup.bam \
        -o ${WORKDIR}/bigwig/${CHIP}_vs_input.bw \
        --operation log2 --pseudocount 1 \
        --binSize 10 --normalizeUsing RPKM \
        --blackListFileName /BRC/ref/hg38/hg38-blacklist.v2.bed \
        -p ${THREADS} \
        2>${WORKDIR}/logs/bw_${CHIP}.log
done

echo "=== Pipeline complete ==="
echo "Peaks:  ${WORKDIR}/peaks/"
echo "bigWig: ${WORKDIR}/bigwig/"
