}
) %>%
group_by(chrom, cluster) %>%
summarise(
rep_pos = round(mean(pos)),  # Representative position
ndc_peaks = sum(set == "KsgNDC"),
q3_peaks  = sum(set == "Ksg3Q"),
.groups = "drop"
)
return(clustered)
}
# --- Get clustered peaks ---
clusters <- cluster_peaks(ndc_filt, q3_filt, tolerance = 5)
# --- Create UpSetR lists (using representative positions) ---
ndc_clusters <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$ndc_peaks > 0]
q3_clusters  <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$q3_peaks > 0]
peak_list <- list(KsgNDC = ndc_clusters, Ksg3Q = q3_clusters)
# --- Stats ---
cat("Original filtered peaks:", nrow(ndc_filt), "KsgNDC,", nrow(q3_filt), "Ksg3Q\n")
cat("Unique clusters:", length(unique(c(ndc_clusters, q3_clusters))), "\n")
cat("Overlap:", length(intersect(ndc_clusters, q3_clusters)), "\n")
# --- Plot ---
upset(
fromList(peak_list),
sets = c("KsgNDC", "Ksg3Q"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#800040"),
point.size = 4, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
rm(list = ls())
library(UpSetR)
library(dplyr)
# --- Load data ---
ndc <- read.csv("~/Desktop/Spn/Chl/ChlNDC/Utrack-FFE10/output_file_ChlNDC.csv")
q3  <- read.csv("~/Desktop/Spn/Chl/3Q/Utrack-FFE10/output_file_Chl3Q.csv")
# --- Filter ---
ndc_filt <- ndc[ndc$Utrack == "yes" & ndc$FreefoldingEnergy <= -10, ]
q3_filt  <- q3[q3$Utrack  == "yes" & q3$FreefoldingEnergy  <= -10, ]
# --- Cluster peaks within ±5bp (same chrom) ---
cluster_peaks <- function(df1, df2, tolerance = 5) {
all_peaks <- rbind(
data.frame(chrom = df1$chrom, pos = df1$PeakCoord, set = "ChlNDC"),
data.frame(chrom = df2$chrom, pos = df2$PeakCoord, set = "Chl3Q")
)
# For each chromosome, cluster positions within tolerance
clustered <- all_peaks %>%
group_by(chrom) %>%
arrange(pos) %>%
mutate(
cluster = {
clusters <- rep(NA, n())
current_cluster <- 1
clusters[1] <- current_cluster
for(i in 2:n()) {
if(pos[i] <= max(pos[1:(i-1)]) + tolerance) {
clusters[i] <- current_cluster
} else {
current_cluster <- current_cluster + 1
clusters[i] <- current_cluster
}
}
clusters
}
) %>%
group_by(chrom, cluster) %>%
summarise(
rep_pos = round(mean(pos)),  # Representative position
ndc_peaks = sum(set == "ChlNDC"),
q3_peaks  = sum(set == "Chl3Q"),
.groups = "drop"
)
return(clustered)
}
# --- Get clustered peaks ---
clusters <- cluster_peaks(ndc_filt, q3_filt, tolerance = 5)
# --- Create UpSetR lists (using representative positions) ---
ndc_clusters <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$ndc_peaks > 0]
q3_clusters  <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$q3_peaks > 0]
peak_list <- list(ChlNDC = ndc_clusters, Chl3Q = q3_clusters)
# --- Stats ---
cat("Original filtered peaks:", nrow(ndc_filt), "ChlNDC,", nrow(q3_filt), "Chl3Q\n")
cat("Unique clusters:", length(unique(c(ndc_clusters, q3_clusters))), "\n")
cat("Overlap:", length(intersect(ndc_clusters, q3_clusters)), "\n")
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#108080"),
point.size = 4, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
rm(list = ls())
library(UpSetR)
library(dplyr)
# --- Load data ---
ndc <- read.csv("~/Desktop/Spn/Chl/ChlNDC/Utrack-FFE10/output_file_ChlNDC.csv")
# --- Load data ---
ndc <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Spn/Chl/ChlNDC/Utrack-FFE10/output_file_ChlNDC.csv")
# --- Load data ---
ndc <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Chl/ChlNDC/Utrack-FFE10/output_file_ChlNDC.csv")
rm(list = ls())
library(UpSetR)
library(dplyr)
# --- Load data ---
ndc <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Chl/ChlNDC/Utrack-FFE10/output_file_ChlNDC.csv")
q3  <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Chl/3Q/Utrack-FFE10/output_file_Chl3Q.csv")
q1 <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Chl/1Q/Utrack-FFE10/output_file_1Q.csv")
# --- Filter ---
ndc_filt <- ndc[ndc$Utrack == "yes" & ndc$FreefoldingEnergy <= -10, ]
q3_filt  <- q3[q3$Utrack  == "yes" & q3$FreefoldingEnergy  <= -10, ]
q1_filt <- q1[q1$Utrack == "yes" & q1$FreefoldingEnergy <= -10, ]
# --- Cluster peaks within ±5bp (same chrom) ---
cluster_peaks <- function(df1, df2, df3, tolerance = 5) {
all_peaks <- rbind(
data.frame(chrom = df1$chrom, pos = df1$PeakCoord, set = "ChlNDC"),
data.frame(chrom = df2$chrom, pos = df2$PeakCoord, set = "Chl3Q"),
data.frame(chrom = df3$chrom, pos = df3$PeakCoord, set = "Chl1/4xMIC")
)
# For each chromosome, cluster positions within tolerance
clustered <- all_peaks %>%
group_by(chrom) %>%
arrange(pos) %>%
mutate(
cluster = {
clusters <- rep(NA, n())
current_cluster <- 1
clusters[1] <- current_cluster
for(i in 2:n()) {
if(pos[i] <= max(pos[1:(i-1)]) + tolerance) {
clusters[i] <- current_cluster
} else {
current_cluster <- current_cluster + 1
clusters[i] <- current_cluster
}
}
clusters
}
) %>%
group_by(chrom, cluster) %>%
summarise(
rep_pos = round(mean(pos)),  # Representative position
ndc_peaks = sum(set == "ChlNDC"),
q3_peaks  = sum(set == "Chl3Q"),
q1_peaks = sum(set == "Chl1/4xMIC"),
.groups = "drop"
)
return(clustered)
}
# --- Get clustered peaks ---
clusters <- cluster_peaks(ndc_filt, q3_filt, q1_filt, tolerance = 5)
# --- Create UpSetR lists (using representative positions) ---
ndc_clusters <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$ndc_peaks > 0]
q3_clusters  <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$q3_peaks > 0]
q1_clusters <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$q1_peaks > 0]
peak_list <- list(ChlNDC = ndc_clusters, Chl3Q = q3_clusters, "Chl1/4xMIC" = q1_clusters)
# --- Stats ---
cat("Original filtered peaks:\n")
cat("  ChlNDC:", nrow(ndc_filt), "\n")
cat("  Chl3Q:", nrow(q3_filt), "\n")
cat("  Chl1/4xMIC:", nrow(q1_filt), "\n")
cat("\nUnique clusters:", length(unique(c(ndc_clusters, q3_clusters, q1_clusters))), "\n")
cat("Pairwise overlaps:\n")
cat("  ChlNDC ∩ Chl3Q:", length(intersect(ndc_clusters, q3_clusters)), "\n")
cat("  ChlNDC ∩ Chl1/4xMIC:", length(intersect(ndc_clusters, q1_clusters)), "\n")
cat("  Chl3Q ∩ Chl1/4xMIC:", length(intersect(q3_clusters, q1_clusters)), "\n")
cat("  All three:", length(Reduce(intersect, list(ndc_clusters, q3_clusters, q1_clusters))), "\n")
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#8B3A62", "#F0D4E0"),
point.size = 4, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
upset(
fromList(tss_list),
sets = c("NDCUtrack", "Ksg3QUtrack"),
order.by = "freq",
keep.order = TRUE,
sets.bar.color = c("grey", "#800040"),
main.bar.color = "grey30",
text.scale = 1.4,
point.size = 5,
line.size = 1,
mainbar.y.label = "Intersection Size",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
rm(list=ls())
lapply(c("dplyr", "UpSetR"), library, character.only=T)
df <- read.csv("~/Desktop/Stuff/AMeyer_Lab/Experiment_results/3seq/RNAFOLD/RNAfold_DRIVE/Spn/Ksg/Nofilter/outputresults.csv")
NDC         <- df %>% filter(Sig_Control == 1)
Ksg3Q       <- df %>% filter(Sig_Cond2 == 1)
NDCUtrack   <- NDC %>% filter(FreefoldingEnergy <= -10 & Utrack == "yes")
Ksg3QUtrack <- Ksg3Q %>% filter(FreefoldingEnergy <= -10 & Utrack == "yes")
# Give every row a unique key first
NDCUtrack   <- NDCUtrack   %>% mutate(key = paste0(PeakCoord, "_NDC_", row_number()))
Ksg3QUtrack <- Ksg3QUtrack %>% mutate(key = paste0(PeakCoord, "_KSG_", row_number()))
# Find shared PeakCoords
shared_coords <- intersect(NDCUtrack$PeakCoord, Ksg3QUtrack$PeakCoord)
# For shared PeakCoords, assign matching keys per occurrence
# e.g. first occurrence of "chr1:100-200" in NDC matches first in Ksg, second matches second, etc.
for (coord in shared_coords) {
ndc_idx <- which(NDCUtrack$PeakCoord == coord)
Ksg_idx <- which(Ksg3QUtrack$PeakCoord == coord)
# Pair them up occurrence by occurrence
n_pairs <- min(length(ndc_idx), length(Ksg_idx))
for (j in seq_len(n_pairs)) {
shared_key <- paste0(coord, "_SHARED_", j)
NDCUtrack$key[ndc_idx[j]]   <- shared_key
Ksg3QUtrack$key[Ksg_idx[j]] <- shared_key
}
# Any extra occurrences beyond the pairs keep their unique keys
}
cat("NDCUtrack total keys:", length(NDCUtrack$key), "\n")
cat("Ksg3QUtrack total keys:", length(Ksg3QUtrack$key), "\n")
cat("Shared pairs:", length(intersect(NDCUtrack$key, Ksg3QUtrack$key)), "\n")
tss_list <- list(
NDCUtrack   = NDCUtrack$key,
Ksg3QUtrack = Ksg3QUtrack$key
)
upset(
fromList(tss_list),
sets = c("NDCUtrack", "Ksg3QUtrack"),
order.by = "freq",
keep.order = TRUE,
sets.bar.color = c("grey", "#800040"),
main.bar.color = "grey30",
text.scale = 1.4,
point.size = 5,
line.size = 1,
mainbar.y.label = "Intersection Size",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
rm(list = ls())
library(UpSetR)
library(dplyr)
# --- Load data ---
ndc <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Chl/ChlNDC/Utrack-FFE10/output_file_ChlNDC.csv")
q3  <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Chl/3Q/Utrack-FFE10/output_file_Chl3Q.csv")
q1 <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Chl/1Q/Utrack-FFE10/output_file_1Q.csv")
# --- Filter ---
ndc_filt <- ndc[ndc$Utrack == "yes" & ndc$FreefoldingEnergy <= -10, ]
q3_filt  <- q3[q3$Utrack  == "yes" & q3$FreefoldingEnergy  <= -10, ]
q1_filt <- q1[q1$Utrack == "yes" & q1$FreefoldingEnergy <= -10, ]
# --- Cluster peaks within ±5bp (same chrom) ---
cluster_peaks <- function(df1, df2, df3, tolerance = 5) {
all_peaks <- rbind(
data.frame(chrom = df1$chrom, pos = df1$PeakCoord, set = "ChlNDC"),
data.frame(chrom = df2$chrom, pos = df2$PeakCoord, set = "Chl3Q"),
data.frame(chrom = df3$chrom, pos = df3$PeakCoord, set = "Chl1/4xMIC")
)
# For each chromosome, cluster positions within tolerance
clustered <- all_peaks %>%
group_by(chrom) %>%
arrange(pos) %>%
mutate(
cluster = {
clusters <- rep(NA, n())
current_cluster <- 1
clusters[1] <- current_cluster
for(i in 2:n()) {
if(pos[i] <= max(pos[1:(i-1)]) + tolerance) {
clusters[i] <- current_cluster
} else {
current_cluster <- current_cluster + 1
clusters[i] <- current_cluster
}
}
clusters
}
) %>%
group_by(chrom, cluster) %>%
summarise(
rep_pos = round(mean(pos)),  # Representative position
ndc_peaks = sum(set == "ChlNDC"),
q3_peaks  = sum(set == "Chl3Q"),
q1_peaks = sum(set == "Chl1/4xMIC"),
.groups = "drop"
)
return(clustered)
}
# --- Get clustered peaks ---
clusters <- cluster_peaks(ndc_filt, q3_filt, q1_filt, tolerance = 5)
# --- Create UpSetR lists (using representative positions) ---
ndc_clusters <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$ndc_peaks > 0]
q3_clusters  <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$q3_peaks > 0]
q1_clusters <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$q1_peaks > 0]
peak_list <- list(ChlNDC = ndc_clusters, Chl3Q = q3_clusters, "Chl1/4xMIC" = q1_clusters)
# --- Stats ---
cat("Original filtered peaks:\n")
cat("  ChlNDC:", nrow(ndc_filt), "\n")
cat("  Chl3Q:", nrow(q3_filt), "\n")
cat("  Chl1/4xMIC:", nrow(q1_filt), "\n")
cat("\nUnique clusters:", length(unique(c(ndc_clusters, q3_clusters, q1_clusters))), "\n")
cat("Pairwise overlaps:\n")
cat("  ChlNDC ∩ Chl3Q:", length(intersect(ndc_clusters, q3_clusters)), "\n")
cat("  ChlNDC ∩ Chl1/4xMIC:", length(intersect(ndc_clusters, q1_clusters)), "\n")
cat("  Chl3Q ∩ Chl1/4xMIC:", length(intersect(q3_clusters, q1_clusters)), "\n")
cat("  All three:", length(Reduce(intersect, list(ndc_clusters, q3_clusters, q1_clusters))), "\n")
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#8B3A62", "#F0D4E0"),
point.size = 4, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#8B3A62", "#F0D4E0"),
point.size = 6, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#2A8F7F", "#6FD4C8"),
point.size = 6, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#2A8F7F", "#7EDCC8"),
point.size = 6, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = F,
sets.bar.color = c("gray", "#2A8F7F", "#7EDCC8"),
point.size = 6, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = F,
sets.bar.color = c("gray", "#7EDCC8","#2A8F7F"),
point.size = 6, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#2A8F7F", "#7EDCC8"),
point.size = 6, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#2A8F7F", "#a8e6dcff"),
point.size = 6, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("ChlNDC", "Chl3Q", "Chl1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#2A8F7F", "#a8e6dcff"),
point.size = 10, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
rm(list = ls())
library(UpSetR)
library(dplyr)
# --- Load data ---
ndc <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Ksg/KsgNDC/Utrack-FFE10/output_file_KsgNDC.csv")
q3  <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Ksg/3Q/Utrack-FFE10/output_file_Ksg3Q.csv")
q1 <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Ksg/1Q/Utrack-FFE10/output_file_1Q.csv")
q1 <- read.csv("~/Desktop/Manuscript/AnalysisFiles/Spn_3endIntrinsicTerminator/Ksg/1Q/Utrack-FFE10/output_file_Ksg1Q.csv")
# --- Filter ---
ndc_filt <- ndc[ndc$Utrack == "yes" & ndc$FreefoldingEnergy <= -10, ]
q3_filt  <- q3[q3$Utrack  == "yes" & q3$FreefoldingEnergy  <= -10, ]
q1_filt <- q1[q1$Utrack == "yes" & q1$FreefoldingEnergy <= -10, ]
# --- Cluster peaks within ±5bp (same chrom) ---
cluster_peaks <- function(df1, df2, df3, tolerance = 5) {
all_peaks <- rbind(
data.frame(chrom = df1$chrom, pos = df1$PeakCoord, set = "KsgNDC"),
data.frame(chrom = df2$chrom, pos = df2$PeakCoord, set = "Ksg3Q"),
data.frame(chrom = df3$chrom, pos = df3$PeakCoord, set = "Ksg1/4xMIC")
)
# For each chromosome, cluster positions within tolerance
clustered <- all_peaks %>%
group_by(chrom) %>%
arrange(pos) %>%
mutate(
cluster = {
clusters <- rep(NA, n())
current_cluster <- 1
clusters[1] <- current_cluster
for(i in 2:n()) {
if(pos[i] <= max(pos[1:(i-1)]) + tolerance) {
clusters[i] <- current_cluster
} else {
current_cluster <- current_cluster + 1
clusters[i] <- current_cluster
}
}
clusters
}
) %>%
group_by(chrom, cluster) %>%
summarise(
rep_pos = round(mean(pos)),  # Representative position
ndc_peaks = sum(set == "KsgNDC"),
q3_peaks  = sum(set == "Ksg3Q"),
q1_peaks = sum(set == "Ksg1/4xMIC"),
.groups = "drop"
)
return(clustered)
}
# --- Get clustered peaks ---
clusters <- cluster_peaks(ndc_filt, q3_filt, q1_filt, tolerance = 5)
# --- Create UpSetR lists (using representative positions) ---
ndc_clusters <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$ndc_peaks > 0]
q3_clusters  <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$q3_peaks > 0]
q1_clusters <- paste(clusters$chrom, clusters$rep_pos, sep="_")[clusters$q1_peaks > 0]
peak_list <- list(KsgNDC = ndc_clusters, Ksg3Q = q3_clusters, "Ksg1/4xMIC" = q1_clusters)
# --- Stats ---
cat("Original filtered peaks:\n")
cat("  KsgNDC:", nrow(ndc_filt), "\n")
cat("  Ksg3Q:", nrow(q3_filt), "\n")
cat("  Ksg1/4xMIC:", nrow(q1_filt), "\n")
cat("\nUnique clusters:", length(unique(c(ndc_clusters, q3_clusters, q1_clusters))), "\n")
cat("Pairwise overlaps:\n")
cat("  KsgNDC ∩ Ksg3Q:", length(intersect(ndc_clusters, q3_clusters)), "\n")
cat("  KsgNDC ∩ Ksg1/4xMIC:", length(intersect(ndc_clusters, q1_clusters)), "\n")
cat("  Ksg3Q ∩ Ksg1/4xMIC:", length(intersect(q3_clusters, q1_clusters)), "\n")
cat("  All three:", length(Reduce(intersect, list(ndc_clusters, q3_clusters, q1_clusters))), "\n")
# --- Plot ---
upset(
fromList(peak_list),
sets = c("KsgNDC", "Ksg3Q", "Ksg1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#2A8F7F", "#a8e6dcff"),
point.size = 10, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
# --- Plot ---
upset(
fromList(peak_list),
sets = c("KsgNDC", "Ksg3Q", "Ksg1/4xMIC"),
order.by = "freq", keep.order = TRUE,
sets.bar.color = c("gray", "#8b3a62ff", "#f0d4e0ff"),
point.size = 10, line.size = 1,
text.scale = c(1.4, 1.2, 1.2, 1, 1.4, 1.2),
mainbar.y.label = "Peak Overlap (±5bp)",
sets.x.label = "Set Size",
mb.ratio = c(0.6, 0.4)
)
