|
|
|
library(ggplot2) |
|
library(patchwork) |
|
library(bio3d) |
|
genes <- c("P60484") |
|
af2.seqs <- read.csv('genes.full.seq.csv', row.names = 1) |
|
aa.dict <- c('L', 'A', 'G', 'V', 'S', 'E', 'R', 'T', 'I', 'D', |
|
'P', 'K', 'Q', 'N', 'F', 'Y', 'M', 'H', 'W', 'C') |
|
log.dir <- '5genes.all.mut/PreMode/' |
|
folds <- c(-1, 0:4) |
|
source('~/Pipeline/plot.genes.scores.heatmap.R') |
|
for (gene in genes) { |
|
prot_data <- drawProteins::get_features(gene) |
|
prot_data <- drawProteins::feature_to_dataframe(prot_data) |
|
secondary <- prot_data[prot_data$type %in% c("HELIX", "STRAND", "TURN"),] |
|
secondary.df <- data.frame() |
|
for (i in 1:dim(secondary)[1]) { |
|
sec.df <- data.frame(pos.orig = secondary$begin[i]:secondary$end[i], |
|
alt = ".anno_secondary", |
|
ANNO_secondary = secondary$type[i]) |
|
secondary.df <- dplyr::bind_rows(secondary.df, sec.df) |
|
} |
|
|
|
gene.af2.file <- paste0("../data.files/af2.files/AF-", |
|
gene, '-F', 1, |
|
'-model_v4.pdb.gz') |
|
dssp.res <- dssp(read.pdb(gene.af2.file), |
|
exefile='/share/vault/Users/gz2294/miniconda3/bin/mkdssp') |
|
pdb.res <- read.pdb(gene.af2.file) |
|
plddt.res <- pdb.res$atom$b[pdb.res$calpha] |
|
af2.secondary <- rbind(cbind(as.data.frame(dssp.res$helix)[,1:4], type="HELIX"), |
|
cbind(as.data.frame(dssp.res$sheet), type="STRAND"), |
|
cbind(as.data.frame(dssp.res$turn), type="TURN")) |
|
for (i in 1:dim(af2.secondary)[1]) { |
|
sec.df <- data.frame(pos.orig = af2.secondary$start[i]:af2.secondary$end[i], |
|
alt = ".anno_af2_secondary", |
|
ANNO_secondary = af2.secondary$type[i]) |
|
secondary.df <- dplyr::bind_rows(secondary.df, sec.df) |
|
} |
|
rsa.df <- data.frame(pos.orig=1:length(dssp.res$acc), alt = ".anno_af2_rsa", |
|
ANNO_RSA=(dssp.res$acc)/max(dssp.res$acc)) |
|
plddt.df <- data.frame(pos.orig=1:length(plddt.res), alt = ".anno_af2_pLDDT", |
|
ANNO_pLDDT=plddt.res) |
|
|
|
others <- prot_data[prot_data$description != "NONE",] |
|
others <- others[!others$type %in% c("VARIANT", "MUTAGEN", "CONFLICT", "VAR_SEQ", "CHAIN"),] |
|
others$type[others$type=="MOD_RES"] <- "post transl. mod." |
|
others$type[others$type=="DOMAIN"] <- others$description[others$type=="DOMAIN"] |
|
others$type <- tolower(others$type) |
|
unique.df <- data.frame() |
|
for (i in 1:dim(others)[1]) { |
|
if(i==1){ |
|
if(!identical(others$type[i],others$type[i+1])){ |
|
unq.df <- data.frame(pos.orig = others$begin[i]:others$end[i], |
|
alt = paste0(".", others$type[i]), |
|
ANNO_domain_type = others$type[i]) |
|
unique.df <- dplyr::bind_rows(unique.df, unq.df) |
|
} |
|
}else{ |
|
if(!identical(others$type[i],others$type[i+1]) && !identical(others$type[i],others$type[i-1])){ |
|
unq.df <- data.frame(pos.orig = others$begin[i]:others$end[i], |
|
alt = paste0(".", others$type[i]), |
|
ANNO_domain_type = others$type[i]) |
|
unique.df <- dplyr::bind_rows(unique.df, unq.df) |
|
} |
|
} |
|
} |
|
|
|
multiple.df <- data.frame() |
|
for (i in 1:dim(others)[1]) { |
|
if(identical(others$type[i],others$type[i+1]) | identical(others$type[i],others$type[i-1])){ |
|
mult.df <- data.frame(pos.orig = others$begin[i]:others$end[i], |
|
alt = paste0(".", others$type[i]), |
|
ANNO_domain_type = others$description[i]) |
|
multiple.df <- dplyr::bind_rows(multiple.df, mult.df) |
|
} |
|
} |
|
|
|
gene.seq <- af2.seqs$seq[af2.seqs$uniprotID==gene] |
|
xlabs <- strsplit(gene.seq, "")[[1]] |
|
xlabs <- paste0(1:nchar(gene.seq), ":", xlabs) |
|
assemble.logits <- 0 |
|
all.training <- data.frame() |
|
all.pretrain <- data.frame() |
|
patch.plot <- list() |
|
fold <- 0 |
|
for (subset in c(1,2,4,6)) { |
|
gene.result <- read.csv(paste0(log.dir, gene, '.subset.', subset, '.fold.', fold, '.csv'), row.names = 1) |
|
pretrain.result <- read.csv(paste0(log.dir, gene, '.pretrain.csv'), row.names = 1) |
|
training.file <- read.csv(paste0('../data.files/PTEN.bin/training.', subset, '.', fold, '.csv'))[,c("HGNC", "pos.orig", "ref", "alt", "score.1", "score.2")] |
|
training.file$score <- NA |
|
testing.file <- read.csv(paste0('../data.files/PTEN.bin/test.seed.0.csv'))[,c("HGNC", "pos.orig", "ref", "alt", "score.1", "score.2")] |
|
testing.file$score <- NA |
|
|
|
logits <- cbind(pretrain.result$logits, gene.result$logits.0, gene.result$logits.1) |
|
gene.result$logits.2 <- gene.result$logits.1 |
|
gene.result$logits.1 <- gene.result$logits.0 |
|
gene.result$logits.0 <- pretrain.result$logits |
|
ps <- list() |
|
col.to.plot <- paste0("logits.", c(0:2)) |
|
score.to.plot <- c('score', 'score.1', 'score.2') |
|
pretrain.training.file <- read.csv(paste0('../data.files/pretrain/training.csv'))[,c("HGNC", "uniprotID", "pos.orig", "ref", "alt", "score", "data_source")] |
|
pretrain.training.file$score[pretrain.training.file$score!=0] <- 1 |
|
pretrain.training.file <- pretrain.training.file[pretrain.training.file$uniprotID == gene,] |
|
data.train <- list(pretrain.training.file, training.file, training.file) |
|
for (j in 1:3) { |
|
ps[[j]] <- ggplot() + |
|
geom_tile(data=gene.result, aes_string(x="pos.orig", y="alt", fill=col.to.plot[j])) + |
|
scale_fill_gradientn(colors = c("light blue", "white", "pink"), na.value = 'grey') + labs(fill=col.to.plot[j]) + |
|
scale_x_continuous(breaks=seq(0, nchar(gene.seq), 50), minor_breaks = seq(0, nchar(gene.seq), 10)) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=data.train[[j]], aes_string(x="pos.orig", y="alt", fill=score.to.plot[j])) + |
|
scale_fill_gradientn(colors = c("blue", "white", "red")) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=secondary.df, aes(x=pos.orig, y=alt, fill=ANNO_secondary, width=1)) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=unique.df, aes(x=pos.orig, y=alt, fill=ANNO_domain_type, width=1),show.legend = F) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=multiple.df, aes(x=pos.orig, y=alt, fill=ANNO_domain_type, width=1),show.legend = F) + |
|
theme_bw() + |
|
ggtitle("PTEN") + ggeasy::easy_center_title() |
|
} |
|
p <- ps[[1]] + ps[[2]] + ps[[3]] + plot_layout(nrow = 1) |
|
|
|
gene.result$logits.diff <- gene.result$logits.2 - gene.result$logits.1 |
|
gene.result.to.plot <- gene.result |
|
all.training.to.plot <- training.file |
|
secondary.df.to.plot <- secondary.df |
|
unique.df.to.plot <- unique.df |
|
multiple.df.to.plot <- multiple.df |
|
ps <- list() |
|
col.to.plot <- c(paste0("logits.", c(0:2)), 'logits.diff') |
|
all.training.to.plot$score.diff <- 0 |
|
all.training.to.plot$score.diff[all.training.to.plot$score.1==0 & all.training.to.plot$score.2==1] <- 1 |
|
all.training.to.plot$score.diff[all.training.to.plot$score.1==1 & all.training.to.plot$score.2==0] <- -1 |
|
all.training.to.plot$score.diff[all.training.to.plot$score.1==1 & all.training.to.plot$score.2==1] <- NA |
|
score.to.plot <- c('score', 'score.1', 'score.2', 'score.diff') |
|
score.name <- c('Patho', 'Stability', 'Enzyme', 'Enzyme-Stability') |
|
for (j in 1:4) { |
|
if (j %in% c(1)) { |
|
all.training.to.plot.plot <- pretrain.training.file |
|
} else { |
|
all.training.to.plot.plot <- all.training.to.plot |
|
} |
|
ps[[j]] <- ggplot() + |
|
geom_tile(data=gene.result, aes_string(x="pos.orig", y="alt", fill=col.to.plot[j])) + labs(fill=col.to.plot[j]) + |
|
scale_fill_gradientn(colors = c("light blue", "white", "pink"), na.value = 'grey', |
|
values = c(0, (0-min(gene.result[,col.to.plot[j]], na.rm = T))/(max(gene.result[,col.to.plot[j]], na.rm = T)-min(gene.result[,col.to.plot[j]], na.rm = T)), 1)) + |
|
scale_x_continuous(breaks=seq(0, nchar(gene.seq), 50), minor_breaks = seq(0, nchar(gene.seq), 10)) + labs(fill=score.name[j]) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=all.training.to.plot.plot, aes_string(x="pos.orig", y="alt", fill=score.to.plot[j], width=1, height=1)) + |
|
scale_fill_gradientn(colors = c("blue", "white", "red"), limits = c(0,1)) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=secondary.df.to.plot, aes(x=pos.orig, y=alt, fill=ANNO_secondary, width=1, height=1)) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=rsa.df, aes(x=pos.orig, y=alt, fill=ANNO_RSA, width=1, height=1)) + |
|
scale_fill_gradientn(colors = c("grey", "blue")) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=plddt.df, aes(x=pos.orig, y=alt, fill=ANNO_pLDDT, width=1, height=1)) + |
|
scale_fill_gradientn(colors = c("orange", "yellow", "lightblue", "blue")) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=unique.df.to.plot, aes(x=pos.orig, y=alt, fill=ANNO_domain_type, width=1, height=1),show.legend = F) + |
|
ggnewscale::new_scale_fill() + |
|
geom_tile(data=multiple.df.to.plot, aes(x=pos.orig, y=alt, fill=ANNO_domain_type, width=1, height=1),show.legend = F) + |
|
theme_bw() + theme(legend.position="bottom") + |
|
ggtitle("PTEN") + ggeasy::easy_center_title() |
|
} |
|
p <- ps[[4]] |
|
ggsave(paste0(log.dir, gene, '.subset.', subset, '.fold.', fold, '.part.pdf'), p, width = max(25, min(nchar(gene.seq)/70, 49.9)), height = 5) |
|
} |
|
} |
|
system('mv 5genes.all.mut/PreMode/P60484.subset.1.fold.0.part.pdf figs/fig.sup.13a.pdf') |
|
system('mv 5genes.all.mut/PreMode/P60484.subset.2.fold.0.part.pdf figs/fig.sup.13b.pdf') |
|
system('mv 5genes.all.mut/PreMode/P60484.subset.4.fold.0.part.pdf figs/fig.sup.13c.pdf') |
|
system('mv 5genes.all.mut/PreMode/P60484.subset.6.fold.0.part.pdf figs/fig.sup.13d.pdf') |
|
|