#!/usr/bin/env Rscript
suppressPackageStartupMessages({
  library(data.table)
  library(ggplot2)
})
setDTthreads(8)
# ======================
# OUTPUT DIRECTORY
# ======================
outdir <- "/BLUES/eric/ONT_WGBS/Figure_5/Panel_a"
dir.create(outdir, showWarnings = FALSE, recursive = TRUE)
# ======================
# INPUT FILES
# ======================
bg_files <- list(
  "Naive"  = "/BLUES/eric/ONT/5hmC_bg/091724_Naive_W3MECPC2_aln.5hmC.cov30.bg.gz",
  "Primed" = "/BLUES/eric/ONT/5hmC_bg/Primed_W3MECP2_aln.5hmC.cov30.bg.gz",
  "TSC"    = "/BLUES/eric/ONT/5hmC_bg/TSC_GFP_W3MECP2_merged_aln.5hmC.cov30.bg.gz"
)
# ======================
# SETTINGS
# ======================
MIN_KEEP <- 0.01
X_MAX    <- 0.20
# ======================
# READ FUNCTION
# ======================
read_bg <- function(f, group) {
  dt <- fread(
    f,
    header       = FALSE,
    sep          = "\t",
    showProgress = FALSE
  )
  v <- as.numeric(dt[[4]])
  v <- v[is.finite(v)]
  v <- v[v >= MIN_KEEP & v <= X_MAX]
  data.table(group = group, value = v)
}
# ======================
# LOAD
# ======================
dt <- rbindlist(
  lapply(names(bg_files), function(nm) read_bg(bg_files[[nm]], nm)),
  use.names = TRUE
)
# ======================
# FIX PANEL ORDER
# ======================
dt[, group := factor(group, levels = c("Primed", "Naive", "TSC"))]
# ======================
# BINNING
# ======================
dt[, category := fifelse(
  value < 0.05,  "<5%",
  fifelse(value <= 0.10, "5-10%", ">10%")
)]
dt[, category := factor(category, levels = c("<5%", "5-10%", ">10%"))]
# ======================
# SUMMARY
# ======================
pie_dt <- dt[, .N, by = .(group, category)]
pie_dt[, percent := 100 * N / sum(N), by = group]
pie_dt[, label   := paste0(round(percent, 1), "%")]
# ======================
# ADD N LABELS TO STRIP
# ======================
totals <- pie_dt[, .(total = sum(N)), by = group]

group_levels <- c("Primed", "Naive", "TSC")
new_levels   <- paste0(
  group_levels, "\nn = ",
  formatC(
    totals$total[match(group_levels, totals$group)],
    format   = "d",
    big.mark = ","
  )
)

pie_dt[, group_label := factor(
  paste0(group, "\nn = ",
         formatC(totals$total[match(group, totals$group)],
                 format = "d", big.mark = ",")),
  levels = new_levels
)]
# ======================
# COLORS
# ======================
pie_cols <- c(
  "<5%"   = "#4DAF4A",
  "5-10%" = "#FFD92F",
  ">10%"  = "#E41A1C"
)
# ======================
# PIE CHART
# ======================
p <- ggplot(
  pie_dt,
  aes(x = "", y = percent, fill = category)
) +
  geom_bar(
    stat      = "identity",
    width     = 1,
    color     = "white",
    linewidth = 1
  ) +
  coord_polar(theta = "y", start = 0) +
  facet_wrap(~group_label, nrow = 1) +
  geom_text(
    aes(label = label),
    position = position_stack(vjust = 0.5),
    size     = 6
  ) +
  scale_fill_manual(values = pie_cols) +
  labs(
    title = "5hmC fraction distribution in W3 (cov=30)",
    fill  = "5hmC level"
  ) +
  theme_void(base_size = 14) +
  theme(
    plot.title    = element_text(size = 18, hjust = 0.5),
    strip.text    = element_text(size = 14),
    legend.title  = element_text(size = 14),
    legend.text   = element_text(size = 12)
  )
# ======================
# SAVE
# ======================
pdf_out <- file.path(outdir, "Piechart_5hmC_distribution_cov30.pdf")
ggsave(
  pdf_out,
  p,
  width        = 12,
  height       = 4.5,
  useDingbats  = FALSE
)
message("[OK] Wrote: ", pdf_out)