diff --git a/Others/plot_stellare_function.R b/Others/plot_stellare_function.R new file mode 100644 index 0000000000000000000000000000000000000000..9c21dc6d3481563d6ed2415683b7835f7b7eac15 --- /dev/null +++ b/Others/plot_stellare_function.R @@ -0,0 +1,60 @@ +library(Seurat) + + +########################################################## +####DOTPLOT WITH STATISTIC FROM LIVER#### +# Create function +PlotStellare <- function(obs1=obs1, features1=features1, valueG="NewlablesG", + i="CD8 T cells", group.by0 ="Clonetype2.Group", controGroup="SIINFEKL", noCtrlvsAll=T){ + obs1 <- SetIdent(obs1, value = valueG) + pa1 <- DotPlot(obs1, features = features1, idents = i, dot.scale=15, split.by = group.by0, + cols="RdBu", scale=T)+RotatedAxis() + df1 <- pa1$data + contro0<- paste0(i,"_",controGroup) + a1 <- sub(paste0(i,"_"),"",unique(df1$id)) + + dfcombo <- NULL + for (ix in a1){if(ix!=controGroup){ + m.Combo <- FindMarkers(obs1, ident.1 = ix,ident.2=controGroup, group.by = group.by0, + subset.ident = i,features = features1, + min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) + }else{ + m.Combo <- FindMarkers(obs1, ident.1 = ix, group.by = group.by0, + subset.ident = i,features = features1, + min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) + if(noCtrlvsAll){m.Combo$p_val_adj <- 1} + } + m.Combo <- m.Combo[match(features1,rownames(m.Combo)),] + m.Combo$ix <- ix + dfcombo <- rbind(dfcombo,m.Combo)} + + df2 <- cbind(df1,dfcombo) + data.frame(df2$id,df2$ix) + df2$stars <- ifelse(df2$p_val_adj< 0.001,"***", + ifelse(df2$p_val_adj< 0.01,"**", + ifelse(df2$p_val_adj< 0.05,"*",""))) + + df2$id <- factor(x = df2$id, levels = paste0(i,"_",rev(a1))) + + a <- ggplot(df2, aes(y=id, x=features.plot, size=pct.exp ,color=avg.exp.scaled)) + + geom_point() + + scale_size_area(max_size=15) + + scale_colour_gradient2(low="blue",mid="darkgrey",high="darkred") + #"#CCCCFF" + labs(y='',x='')+ + geom_text(aes(label=stars,vjust=0.8),col="black",size=4)+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"))+ + theme(axis.text.x = element_text(angle=45, hjust=1, color = "Black"))+ + theme(axis.line.x=element_line(color="Black"))+ + theme(axis.line.y=element_line(color="Black"))+ + ggtitle(paste0(unique(obs1$Tissue),".",i," vs ",controGroup)) + return(a)} + + +plotRadar <- function(i){ + ploTData<- rbind(max1,min1,get(i)) + id <- sub(".db","",i) + radarchart(ploTData, title = id, pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty = 1, cglwd=0.8) +} #function to plot radarplot + + diff --git a/TAD012/001_TAD012_APCs_analysis_liver.R b/TAD012/001_TAD012_APCs_analysis_liver.R new file mode 100644 index 0000000000000000000000000000000000000000..7f2c998114f8e1b2759a3ef70aae657ad9463f61 --- /dev/null +++ b/TAD012/001_TAD012_APCs_analysis_liver.R @@ -0,0 +1,119 @@ +library(Seurat) +library(openxlsx) +library(readxl) +library(tidyr) +library("RColorBrewer") +library(dplyr) +library(reshape2) +library(fgsea) +library(patchwork) +library(presto) +library(ggplot2) +library(matrixStats) +library(fmsb) + +cluster_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-856756828_scRNAseq_Notaro/Analysis_MM3/results2" + +wdir <- paste0(cluster_dir, "/Result2_MNOT") +ldir <- paste0(cluster_dir, "/Liver_APCs/") +pdir <- paste0(cluster_dir, "/Result2_MNOT/Plots") + + +# Custom functions +#PlotStellare <-readRDS(paste0(username,"Dropbox (HSR Global)/CancerGeneTherapy/Cancer Gene Therapy/MS/Notaro et al/Scripts/Functions/PlotStellare.rds")) +source(file = "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/last_scripts_MNOT/TAD018/plot_stellare_function.R") + +############################################################################# +##########################LIVER MACS ANALYSIS################################ +############################################################################# +apcs.liver <- readRDS(paste0(ldir, "Liver_APCs_final.rds")) + +#assign groups +#name and order groups +apcs.liver@meta.data$RNA_Group[apcs.liver@meta.data$PROP.Condition=="li.OVA"] <- "liOVA" +apcs.liver@meta.data$RNA_Group[apcs.liver@meta.data$PROP.Condition=="li.OVA.Combo"] <- "OVA.Combo" +apcs.liver@meta.data$RNA_Group[apcs.liver@meta.data$PROP.Condition=="li.Stop"] <- "SIINFEKL" +apcs.liver@meta.data$RNA_Group[apcs.liver@meta.data$PROP.Condition=="li.Stop.Combo"] <- "SIINFEKL.Combo" +apcs.liver@meta.data$RNA_Group <- factor(x = apcs.liver@meta.data$RNA_Group, levels = c("liOVA", "OVA.Combo","SIINFEKL", "SIINFEKL.Combo")) +apcs.liver@meta.data$Tissue <- "Liver" + + +#######Figure S4L- PLOT STELLARE################ +features1 <- c("H2-Q7", "H2-T22", "H2-Q4", "H2-K1", "H2-T23", "H2-M3", "H2-D1","Tap1","Tap2", #MHCI + "H2-Eb1", "H2-Ab1", "H2-Aa", "H2-DMb1", "H2-DMa", "Ciita", #MHCII + "Ifi44", "Oasl1","Irf7","Isg15", "Isg20","Oas1a","Oas1g", #IFNa + "Ccl5", "Upp1", "Slamf7", "Cxcl9", "Gbp4","Cd74", #IFNg + "Vav2","Tgfb1","Il10","Ccl24","Mmp8","Tmem176b","Trem2","Fn1") #protumor + + +apcs.liver<-SetIdent(apcs.liver, value = "RNA_Group") + +pdf(paste0(ldir, "/Dotplot_stellare_APCs_FigS4L.pdf"), width=13, height=3) +PlotStellare(obs1 = apcs.liver,features1 = features1, valueG = "NewlablesM_12_clu", i="CD8 cDC1", group.by0="RNA_Group" , noCtrlvsAll=T, controGroup="SIINFEKL") +dev.off() + +##################################################################### +############Figure S4M - RADAR PLOT MACROCLASSES#################### +##################################################################### +apcs.liver@meta.data$Shortlables<-apcs.liver@meta.data$NewlablesM_12_clu +#DCs<-c("CD8 cDC1","moDCs", "Ccr7 DCs","pDCs","pre DCs") +#apcs.liver@meta.data$Shortlables[apcs.liver@meta.data$NewlablesM_12_clu%in%DCs]<- "DCs" +#granu<-c("Neutrophils","Basophils") +#apcs.liver@meta.data$Shortlables[apcs.liver@meta.data$NewlablesM_12_clu%in%granu]<- "Granulocytes" + +plotRadar <- function(i){ + ploTData<- rbind(max1,min1,get(i)) + id <- sub(".db","",i) + radarchart(ploTData, title = id, pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty = 1,cglwd=0.8) +} #function to plot radarplot + +##############LIVER RADARPLOT########################## +MHCI_genes <- list(c("H2-Q7", "H2-T22", "H2-Q4", "H2-K1", "H2-T23", "H2-M3", "H2-D1","Tap1","Tap2")) +MHCII_genes <- list( c("H2-Eb1", "H2-Ab1", "H2-Aa", "H2-DMb1", "H2-DMa", "Ciita")) +Protumoral_genes <- list(c("Vav2","Tgfb1","Il10","Ccl24","Mmp8","Tmem176b","Trem2","Fn1")) +IFNa_genes <- list(c("Ifi44", "Oasl1","Irf7","Isg15", "Isg20","Oas1a","Oas1g")) +IFNg_genes <-list(c("Ccl5", "Upp1", "Slamf7", "Cxcl9", "Gbp4","Cd74")) + + +apcs.liver <- AddModuleScore(apcs.liver, features = MHCI_genes, name = "MHCI_genes") +apcs.liver <- AddModuleScore(apcs.liver, features = MHCII_genes, name = "MHCII_genes") +apcs.liver <- AddModuleScore(apcs.liver, features = Protumoral_genes, name = "Protumoral_genes") +apcs.liver <- AddModuleScore(apcs.liver, features = IFNa_genes, name = "IFNa_genes") +apcs.liver <- AddModuleScore(apcs.liver, features = IFNg_genes, name = "IFNg_genes") + +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. + +M1<-apcs.liver@meta.data[,c("Shortlables", "RNA_Group", "MHCI_genes1","MHCII_genes1","Protumoral_genes1","IFNa_genes1","IFNg_genes1")] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(apcs.liver$RNA_Group) +CellType<-unique(M1$Shortlables) + +for (i in CellType){ + M2<-M1[M1$Shortlables%in%i,] + M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) + M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) + M3c<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[3],3:7]),na.rm=T) + M3d<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[4],3:7]),na.rm=T) + M4<-rbind(M3a,M3b,M3c,M3d) + rownames(M4)<-Groups + colnames(M4)<-colnames(M2[,3:7]) + x<-as.data.frame(M4) + assign(paste0(i,".db"),x)} + +lsCells <- grep(".db",ls(),value=T) +MinMax<-lapply(lsCells,get) +max1 <- rep(do.call("max", MinMax),5) +min1 <- rep(do.call("min", MinMax),5) + +colors_border=c(rgb(0,0,1,0.9), rgb(0,0.8,0,0.9), rgb(0,0.5,0.5,0.9), rgb(0,0,0,0.9)) +colors_in=c(rgb(0,0,0.6,0.1), rgb(0,0.6,0,0.1), rgb(0,0.1,0.1,0.1), rgb(0.1,0.1,0.1,0.1)) + +pdf(paste0(pdir, "/Radar_plot_liverAPCs_shorterlables_FigS4M_new2.pdf"), width=17, height=6) +par(mfrow=c(2,5)) +for (i in 1:length(unique(apcs.liver$Shortlables))){ + plotRadar(lsCells[i]) +} +dev.off() + diff --git a/TAD012/002_TAD012_Liver_Tetramer_and_CD4_GSEA_DOTPLOT.R b/TAD012/002_TAD012_Liver_Tetramer_and_CD4_GSEA_DOTPLOT.R new file mode 100644 index 0000000000000000000000000000000000000000..ff1d890287cfbd396ed46a678091f2efa5763343 --- /dev/null +++ b/TAD012/002_TAD012_Liver_Tetramer_and_CD4_GSEA_DOTPLOT.R @@ -0,0 +1,642 @@ +library(Seurat) +library(openxlsx) +library(readxl) +library(tidyr) +library("RColorBrewer") +library(dplyr) +library(reshape2) +library(fgsea) +library(patchwork) +library(presto) +library(ggplot2) +library(matrixStats) +library(fmsb) + +cluster_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-856756828_scRNAseq_Notaro/Analysis_MM3/results2" + +wdir <- paste0(cluster_dir, "/Result2_MNOT") +ldir <- paste0(cluster_dir, "/Liver_TandNK/") +pdir <- paste0(cluster_dir, "/Result2_MNOT/Plots") + +############################################################################# +##########################LIVER MACS ANALYSIS################################ +############################################################################# +obs1 <- readRDS(paste0(ldir, "Liver_TandNK_final.rds")) + +#assign groups +#name and order groups +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="li.OVA"] <- "liOVA" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="li.OVA.Combo"] <- "OVA.Combo" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="li.Stop"] <- "SIINFEKL" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="li.Stop.Combo"] <- "SIINFEKL.Combo" + +obs1@meta.data$RNA_Group <- factor(x = obs1@meta.data$RNA_Group, levels = c("SIINFEKL.Combo","SIINFEKL", "OVA.Combo","liOVA")) +obs1@meta.data$Tissue <- "Liver" + + +obs1@meta.data$NewlablesM<-as.numeric(obs1@meta.data$RNA_snn_h.orig.ident_res.3.2) +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(1)] <- "Naive CD4" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(8,2)] <- "Naive CD8" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(27)] <- "Th17 CD4" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(20)] <- "CD4 Treg" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(13)] <- "IFNg CD4" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(4)] <- "Il4 CD4" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(7)] <- "gd T" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(23)] <- "Act gd T" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(11)] <- "CD8 Teff2" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(0,3,10)] <- "CD8 Teff3" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(14,28)] <- "Early CD8" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(16)] <- "CD8 Teff1" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(5)] <- "CD8 prol" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(17)] <- "Cytotoxic NK" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(18,21,22,24,25)] <- "ILC-like" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(6,9,15)] <- "ILCs" +obs1@meta.data$NewlablesM[obs1@meta.data$RNA_snn_h.orig.ident_res.3.2%in%c(12)] <- "NK" + +#create lables for all CD8 and cd4 t cells +obs1@meta.data$NewlablesG <- obs1@meta.data$NewlablesM +obs1@meta.data$NewlablesG[grep("CD4",obs1@meta.data$NewlablesM) ] <- "CD4 T cells" +obs1@meta.data$NewlablesG[grep("CD8",obs1@meta.data$NewlablesM)] <- "CD8 T cells" + +#create lables CD4 and CD8 clusters wothout naive +obs1@meta.data$NewlablesS <- obs1@meta.data$NewlablesM +indCd4<- grepl("CD4",obs1@meta.data$NewlablesM) & !grepl("Naive",obs1@meta.data$NewlablesM) +indCd8<- grepl("CD8",obs1@meta.data$NewlablesM) & !grepl("Naive",obs1@meta.data$NewlablesM) +obs1@meta.data$NewlablesS[indCd4] <- "CD4 T cells" +obs1@meta.data$NewlablesS[indCd8] <- "CD8 T cells" +obs1@meta.data$NewlablesST <- paste0(obs1@meta.data$Tissue,".",obs1@meta.data$NewlablesS) + + +################################################ +###Calculating hyperexpanded T cels############# +################################################ +obs1$aa3.Tube <- paste0(obs1$cdr3_aa2,".",obs1$RNA_Group) +obs1$aa3.Tube[is.na(obs1$cdr3_aa2)] <- NA +obs1@meta.data$ClonoFreq <- obs1@meta.data %>% group_by(aa3.Tube) %>% mutate(count = n()) %>% ungroup() %>% + as.data.frame() %>% select (count) +obs1@meta.data$ClonoFreq[is.na(obs1$cdr3_aa2),] <- NA + +obs1@meta.data$Clonetype <- NA +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq==1] <- "unique" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 1 & obs1@meta.data$ClonoFreq <= 5] <- "small" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 5 & obs1@meta.data$ClonoFreq <= 30] <- "large" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 30] <- "hyperexpanded" +obs1$Clonetype <- factor(x = obs1$Clonetype, levels = c("unique", "small", "large", "hyperexpanded"))#order clonotype variable + +obs1@meta.data$Clonetype2 <- "Expand" +obs1@meta.data$Clonetype2[obs1@meta.data$ClonoFreq==1] <- "Other" +obs1@meta.data$Clonetype2[is.na(obs1@meta.data$ClonoFreq)] <- "Other" + +obs1@meta.data$Clonetype2.Group <- paste0(obs1@meta.data$Clonetype2,".",obs1@meta.data$RNA_Group) +obs1@meta.data$Clonetype2.Group[obs1@meta.data$RNA_Group=="liOVA"] <- "liOVA" +obs1@meta.data$Clonetype2.Group[obs1@meta.data$RNA_Group=="SIINFEKL"] <- "SIINFEKL" +obs1@meta.data$Clonetype2.Group <- factor(x = obs1@meta.data$Clonetype2.Group, levels = c("liOVA", + "SIINFEKL", "Unique.OVA.Combo", + "Unique.SIINFEKL.Combo","Expand.OVA.Combo", + "Expand.SIINFEKL.Combo" ))#order clonotype variable + +obs1@meta.data$Clonetype2.cells <- paste0(obs1@meta.data$Clonetype2,".",obs1@meta.data$NewlablesG) +obs1@meta.data$New_division2 <- "Other" +ind<- grepl("Expand.CD4 T cells",obs1@meta.data$Clonetype2.cells) +obs1@meta.data$New_division2[ind] <- "Expanded CD4" +obs1@meta.data$New_division3<-paste0(obs1@meta.data$RNA_Group, ".",obs1@meta.data$New_division2) + +obs1@meta.data$New_division3[obs1@meta.data$New_division3 =="liOVA.Expanded CD4"] <- "liOVA" +obs1@meta.data$New_division3[obs1@meta.data$New_division3 == "liOVA.Other"] <- "liOVA" +obs1@meta.data$New_division3[obs1@meta.data$New_division3 =="SIINFEKL.Expanded CD4"] <- "SIINFEKL" +obs1@meta.data$New_division3[obs1@meta.data$New_division3 =="SIINFEKL.Other"] <- "SIINFEKL" + +unique(obs1@meta.data$New_division3) + +############################################ +######FINDING Tetramer reactive TCRs######## +############################################ +obs1@meta.data$TetramerT <- "Other" +obs1@meta.data$TetramerT[obs1@meta.data$ADT.Tetramer>315] <- "OVA.TCR" +df1 <- data.frame(obs1$cdr3_aa2, obs1$TetramerT,obs1$ClonoFreq,obs1$Tissue) +df1$aa3.OVA <- paste0(obs1$cdr3_aa2,".",obs1$TetramerT) +df1 <- na.omit(df1) +df1l <- df1[df1$obs1.Tissue=="Liver",] +df2 <- df1l %>% group_by(aa3.OVA) %>% mutate(count = n()) %>% ungroup() %>% as.data.frame() +df3 <- df2 %>% select(obs1.cdr3_aa2,obs1.TetramerT,obs1.ClonoFreq,count) %>% unique() %>% + pivot_wider(names_from = obs1.TetramerT, values_from = count) %>% as.data.frame() +df3[is.na(df3)] <- 0 +OVA.TCRs <- df3$obs1.cdr3_aa2[df3[,4]/df3[,3]>1] +obs1$OVA.reactive <- ifelse(obs1$cdr3_aa2 %in% OVA.TCRs, "OVA", "Other")######Indicating Tetramer OVA in obs1 +obs1@meta.data$Tetramer.CD8 <- ifelse(obs1$OVA.reactive == "OVA" & obs1$NewlablesG== "CD8 T cells", "OVA.TCR.CD8", "Other") + + +############DimPlot####################### + +# Save UMAP plots + +pdf(paste0(pdir, "/TAD12_TandNK_umap_FigS7I.pdf"), width=7, height=6) # Figure FigS7I +DimPlot(obs1, reduction = "umap.harmony.orig.ident",group.by = "NewlablesM", pt.size = 0.5, label = T, label.size = 3, repel = T) +dev.off() +pdf(paste0(pdir, "/TAD12_tetramer_umap_FigS7J.pdf"), width=7, height=6) # Figure FigS7J +DimPlot(obs1, reduction = "umap.harmony.orig.ident",group.by = "OVA.reactive", pt.size = 0.5, label = F, order = c("OVA","Other"), cols = c("lightgrey","blue")) +dev.off() +pdf(paste0(pdir, "/TAD12_CD4_expanded_umap_FigS7K.pdf"), width=7, height=6) # Figure FigS7K +DimPlot(obs1, reduction = "umap.harmony.orig.ident", group.by = "New_division2", pt.size = 0.5, label = F, order = c("Expanded CD4","Other"), cols = c("lightgrey","blue")) +dev.off() + +# Export DimPlot as excel +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.1.2","NewlablesM","OVA.reactive","New_division2") +TandNK_df <- FetchData(obs1, vars = var_list) +TandNK_df$cell_ID <- rownames(TandNK_df) +write.xlsx(TandNK_df, file=paste0(pdir, "/TAD12_TandNK_umap_FigS7I_S7J_S7K.xlsx"), overwrite=T) + + +#############Dotplot stellare############ +#load function +PlotStellare <- function(obs1=obs1,features1=features1,valueG="NewlablesG", + i="CD8 T cells",group.by0 ="Clonetype2.Group",controGroup="SIINFEKL",noCtrlvsAll=T){ + obs1<-SetIdent(obs1, value = valueG) + pa1 <- DotPlot(obs1, features = features1,idents = i, dot.scale = 15,split.by = group.by0, + cols="RdBu")+RotatedAxis() + df1 <- pa1$data + contro0<- paste0(i,"_",controGroup) + a1<- sub(paste0(i,"_"),"",unique(df1$id)) + + dfcombo <- NULL + for (ix in a1){if(ix!=controGroup){ + m.Combo <- FindMarkers(obs1, ident.1 = ix,ident.2=controGroup, group.by = group.by0, + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) + }else{ + m.Combo <- FindMarkers(obs1, ident.1 = ix, group.by = group.by0, + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) + if(noCtrlvsAll){m.Combo$p_val_adj <- 1} + } + m.Combo <- m.Combo[match(features1,rownames(m.Combo)),] + m.Combo$ix <- ix + dfcombo <- rbind(dfcombo,m.Combo)} + + df2 <- cbind(df1,dfcombo) + data.frame(df2$id,df2$ix) + df2$stars <- ifelse(df2$p_val_adj< 0.001,"***", + ifelse(df2$p_val_adj< 0.01,"**", + ifelse(df2$p_val_adj< 0.05,"*",""))) + + df2$id <- factor(x = df2$id, levels = paste0(i,"_",rev(a1))) + + a <- ggplot(df2, aes(y=id, x=features.plot, size=pct.exp ,color=avg.exp.scaled)) + + geom_point() + + scale_size_area(max_size = 15) + + scale_colour_gradient2(low= "blue",mid = "darkgrey",high="darkred") + ####"#CCCCFF" + labs(y='',x='')+ + geom_text(aes(label=stars,vjust=0.8),col="black",size = 4)+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"))+ + theme(axis.text.x = element_text(angle = 45, hjust= 1, color = "Black"))+ + theme(axis.line.x=element_line(color="Black"))+ + theme(axis.line.y=element_line(color="Black"))+ + ggtitle(paste0(unique(obs1$Tissue),".",i," vs ",controGroup)) + return(a)} + + +featuresCD8<-c("Stat1","Ly6c2","Oas1a","Irf8","Ifitm3", #IFNa genes + "Il18rap","Il18r1","Ifngas1","Il12rb1","Gbp2", #IL12/IFNg genes + "Tbx21","Klrg1","Cx3cr1","Tcf7","Klf2","Sell", #pex + "Gzmb","Gzma","Prf1","Ifng","Tnf","Fasl",#effector + "Pdcd1","Lag3","Ctla4","Havcr2","Tigit","Il10ra","Tox")#exhaustion + +featuresCD4<-c("Ly6c2","Oas1a","Irf8","Ifitm3",#Ifna + "Il18rap","Il18r1","Il12rb1","Gbp2", #Ifng genes + "Ifng","Tbx21","Gzmk","Stat1","Tnf","Cxcr3","Il2", #Th1/effector genes + "Gata3","Il4","Il5","Lima1","Auh","Runx2","Smad2", #Th2 + "Rorc","Il17a","Palld","Basp1","Tnfrsf8","Apoe") #Th17 +############ +#Figure 4I +pdf(file=paste0(pdir, "/TAD12.tetramer.dotplot_Fig4I.pdf"), width=13, height=3) +PlotStellare(obs1, featuresCD8, "Tetramer.CD8","OVA.TCR.CD8","RNA_Group",controGroup="SIINFEKL",noCtrlvsAll=T) +dev.off() + +# Figure 4J +pdf(file=paste0(pdir, "/TAD12.CD4T.featuresCD4_Fig4J.pdf"), width=13, height=3) +PlotStellare(obs1,featuresCD4,"NewlablesG","CD4 T cells","RNA_Group",controGroup="SIINFEKL",noCtrlvsAll=T) +dev.off() + + +# Create subsets for further analysis +tetramer.t<-subset(obs1, subset = TetramerT== "OVA.TCR" & + NewlablesG =="CD8 T cells") +CD8<-subset(obs1, subset = NewlablesG =="CD8 T cells") +CD4<-subset(obs1, subset = NewlablesG =="CD4 T cells") + +###################################################### +##########Figure 4M, Clonotye by group CD4########### +##################################################### +table(CD4$RNA_Group, CD4$Clonetype) + + + +#####RADAR PLOTS############################################ + +############################################################### +############Figure S4H- RADADR PLOT OVA SPECIFIC############## +################################################################ + +Effector <- list(c("Gzmb","Gzma","Prf1","Ifng","Tnf","Fasl")) +Pex <- list(c("Tbx21","Klrg1","Cx3cr1","Tcf7","Klf2","Sell")) +Exhaustion <- list(c("Pdcd1","Lag3","Ctla4","Havcr2","Tigit","Il10ra","Tox")) +IFNa_genes <- list(c("Stat1","Ly6c2","Oas1a","Irf8","Ifitm3") ) +IFNg_genes <- list(c("Il18rap","Il18r1","Ifngas1","Il12rb1","Gbp2")) + + +tetramer.t <- AddModuleScore(tetramer.t, features = Effector, name = "Effector") +tetramer.t <- AddModuleScore(tetramer.t, features = Pex, name = "Pex") +tetramer.t <- AddModuleScore(tetramer.t, features = Exhaustion, name = "Exhaustion") +tetramer.t <- AddModuleScore(tetramer.t, features = IFNa_genes, name = "IFNa_genes") +tetramer.t <- AddModuleScore(tetramer.t, features = IFNg_genes, name = "IFNg_genes") + + +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. +#41 is "NewlablesM_clu" +#42 is "RNA_Group" +#45:49 are the module scores + +M1<-tetramer.t@meta.data[,c("NewlablesM", "RNA_Group", "Effector1","Pex1","Exhaustion1","IFNa_genes1","IFNg_genes1")] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(tetramer.t$RNA_Group) +CellType<-unique(M1$NewlablesM_clu) + +#with Median +#TAMs +#Groups are OVA.IL12 OVA.IFNa OVA Combo +M2<-M1 +M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) +M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) +M3c<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[3],3:7]),na.rm=T) +M3d<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[4],3:7]),na.rm=T) +M4<-rbind(M3a,M3b,M3c,M3d) +rownames(M4)<-Groups +colnames(M4)<-colnames(M2[,3:7]) +x<-as.data.frame(M4) + + +max1 <- rep(do.call("max", x),5) +min1 <- rep(do.call("min", x),5) + +ploTData<- rbind(max1,min1,x) +colors_border=c(rgb(0,0,1,0.9), rgb(0,0.8,0,0.9), rgb(0,0.5,0.5,0.9), rgb(0,0,0,0.9)) +colors_in=c(rgb(0,0,0.6,0.1), rgb(0,0.6,0,0.1), rgb(0,0.1,0.1,0.1), rgb(0.1,0.1,0.1,0.1)) + +pdf(file=paste0(pdir, "/radar.plot.liver.tetramer_FigS4H.pdf"),width=5, height=5) +radarchart(ploTData, title = "OVA-reactive", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty = 1,cglwd=0.8) +dev.off() + + +###################################################### +##################Figure 4K- RADAR PLOT CD4########## +###################################################### + +IFNa_genes<- list(c("Ly6c2","Oas1a","Irf8","Ifitm3") ) +IFNg_genes<-list(c("Il18rap","Il18r1","Il12rb1","Gbp2")) +Th1<-list(c("Ifng","Tbx21","Gzmk","Stat1","Tnf","Cxcr3","Il2")) +Th2<-list(c("Gata3","Il4","Il5","Lima1","Auh","Runx2","Smad2")) +Th17<-list(c("Rorc","Il17a","Palld","Basp1","Tnfrsf8","Apoe")) + + +CD4 <- AddModuleScore(CD4, features = Th1, name = "Th1") +CD4 <- AddModuleScore(CD4, features = Th2, name = "Th2") +CD4 <- AddModuleScore(CD4, features = Th17, name = "Th17") +CD4 <- AddModuleScore(CD4, features = IFNa_genes, name = "IFNa_genes") +CD4 <- AddModuleScore(CD4, features = IFNg_genes, name = "IFNg_genes") + + +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. +#41 is "NewlablesM_clu" +#42 is "RNA_Group" +#45:49 are the module scores + +names(CD4@meta.data) +M1<-CD4@meta.data[,c("NewlablesM", "RNA_Group", "Th11","Th21","Th171","IFNa_genes1","IFNg_genes1")] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(CD4$RNA_Group) +CellType<-unique(M1$NewlablesM_clu) + +#with Median +#TAMs +#Groups are OVA.IL12 OVA.IFNa OVA Combo +M2<-M1 +M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) +M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) +M3c<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[3],3:7]),na.rm=T) +M3d<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[4],3:7]),na.rm=T) +M4<-rbind(M3a,M3b,M3c,M3d) +rownames(M4)<-Groups +colnames(M4)<-colnames(M2[,3:7]) +x<-as.data.frame(M4) + + +max1 <- rep(do.call("max", x), 5) +min1 <- rep(do.call("min", x), 5) + +ploTData<- rbind(max1,min1,x) +colors_border=c(rgb(0,0,1,0.9), rgb(0,0.8,0,0.9), rgb(0,0.5,0.5,0.9), rgb(0,0,0,0.9)) +colors_in=c(rgb(0,0,0.6,0.1), rgb(0,0.6,0,0.1), rgb(0,0.1,0.1,0.1), rgb(0.1,0.1,0.1,0.1)) + +pdf(file=paste0(pdir, "/radar.plot.All.CD4T.cells2_Fig4K.pdf"), width=5, height=5) +radarchart(ploTData, title = "All CD4 T cells", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty = 1,cglwd=0.8) +dev.off() + + +###########################################GSEA########################################################## +#miDB_sig4.MLS <- readRDS(paste0(username, "Dropbox (HSR Global)/90-756142658_RNAseq_Squadrito/05-DGE-Tumor/miDB_sig4.MLS.rds")) +miDB_sig4.MLS <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/reference/miDB_sig4.MLS.rds") + + +############################################################ +###############Figure 4L - GSEA CD4######################### +############################################################# + +CD4<-SetIdent(CD4, value = "RNA_Group") + +OVA.combo<-FindMarkers(CD4, ident.1="OVA.Combo", ident.2="SIINFEKL", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +stop.combo<-FindMarkers(CD4, ident.1="SIINFEKL.Combo", ident.2="SIINFEKL", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) + +OVA.combo.ranks <- OVA.combo$avg_log2FC +stop.combo.ranks <- stop.combo$avg_log2FC + +names(OVA.combo.ranks) <- rownames(OVA.combo) +names(stop.combo.ranks) <- rownames(stop.combo) + + +res.OVA.combo <- fgsea(pathways=miDB_sig4.MLS, stats=OVA.combo.ranks, minSize=0, maxSize=500, eps=0, nPermSimple=25000) +res.stop.combo <- fgsea(pathways=miDB_sig4.MLS, stats=stop.combo.ranks, minSize=0, maxSize=500, eps=0, nPermSimple=25000) + +# Select columns of interest +res.OVA.combo2<-res.OVA.combo[,c(1,3,6,8)] +res.stop.combo2<-res.stop.combo[,c(1,3,6,8)] + +# Merge in a single file and save xlsx +merge3 <- merge(x=res.OVA.combo2,y=res.stop.combo2,by="pathway", suffixes = c("-Combo", "-stopcombo")) + +res.OVA.combo$origin<-"OVA.Combo" +res.stop.combo$origin<-"SIINFEKL.Combo" +merge.results<-rbind(res.OVA.combo,res.stop.combo) +#create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + + +# Manually selected pathways +a1<-c("HALLMARK_INTERFERON_ALPHA_RESPONSE", + "HALLMARK_INTERFERON_GAMMA_RESPONSE", + "HALLMARK_IL2_STAT5_SIGNALING", + "LPS_RO", + "GOBP_INTERLEUKIN_18_PRODUCTION", + "GOBP_INTERFERON_GAMMA_PRODUCTION", + "GOBP_CELL_DIVISION", + "HALLMARK_G2M_CHECKPOINT", + "GOBP_NEGATIVE_REGULATION_OF_MACROPHAGE_ACTIVATION", + "IL4_RO", + "GOBP_RESPONSE_TO_INTERLEUKIN_17") + +# Subset selected pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# Rename pathways +merge.results1[merge.results1 == "HALLMARK_INTERFERON_ALPHA_RESPONSE"] <- "Response to IFNa" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Response to IFNg" +merge.results1[merge.results1 == "HALLMARK_IL2_STAT5_SIGNALING"] <- "IL-2/STAT5 signalling" +merge.results1[merge.results1 == "LPS_RO"] <- "LPS signature (Cilenti et al)" +merge.results1[merge.results1 == "GOBP_INTERLEUKIN_18_PRODUCTION"] <- "IL-18 production" +merge.results1[merge.results1 == "GOBP_INTERFERON_GAMMA_PRODUCTION"] <- "Ifng production" +merge.results1[merge.results1 == "GOBP_CELL_DIVISION"] <- "Cell division" +merge.results1[merge.results1 == "HALLMARK_G2M_CHECKPOINT"] <- "Hallmark G2M checkpoint" +merge.results1[merge.results1 == "GOBP_NEGATIVE_REGULATION_OF_MACROPHAGE_ACTIVATION"] <- "Negative regulation of Macrophages activation" +merge.results1[merge.results1 == "IL4_RO"] <- "IL-4 Signature (Cilenti et al)" +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_INTERLEUKIN_17"] <- "Response to IL-17" + + +# Order in the way we want to see +merge.results1$pathway<- factor(merge.results1$pathway, levels = rev(c("Response to IFNa", + "Response to IFNg", + "IL-2/STAT5 signalling", + "LPS signature (Cilenti et al)", + "IL-18 production", + "Ifng production", + "Cell division", + "Hallmark G2M checkpoint", + "Negative regulation of Macrophages activation", + "IL-4 Signature (Cilenti et al)", + "Response to IL-17"))) + +# Heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette="RdBu") + + geom_text(aes(label = stats), vjust=0.75, angle=0, size=4) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color="Black"), + axis.text.x = element_text(angle=45, hjust=1, color="Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + + ggtitle("GSEA CD4 vs SIINFEKL") +ggsave(filename = paste0(pdir, "/GSEA_CD4_T_cells_vs_SIINFEKL_Fig4L.pdf"), plot=y, width=5, height=3) +ggsave(filename = paste0(pdir, "/GSEA_CD4_T_cells_vs_SIINFEKL_Fig4L.png"), plot=y, width=5, height=3, dpi=200) + +# a1_new_not_used<-c("GOBP_RESPONSE_TO_VIRUS", +# "HALLMARK_INTERFERON_ALPHA_RESPONSE", +# "GOBP_CHROMOSOME_SEGREGATION", +# "HALLMARK_INTERFERON_GAMMA_RESPONSE", +# "HALLMARK_IL2_STAT5_SIGNALING", +# "LPS_RO", +# "HALLMARK_G2M_CHECKPOINT", +# "GOBP_CELL_DIVISION", +# "Exhaustion_Wherry") + +# Rename pathways +# merge.results1[merge.results1 == "GOBP_RESPONSE_TO_VIRUS"] <- "Response to virus" +# merge.results1[merge.results1 == "HALLMARK_INTERFERON_ALPHA_RESPONSE"] <- "Response to IFNa" +# merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Response to IFNg" +# merge.results1[merge.results1 == "HALLMARK_IL2_STAT5_SIGNALING"] <- "IL-2/STAT5 signalling" +# merge.results1[merge.results1 == "LPS_RO"] <- "LPS signature (Cilenti et al)" +# merge.results1[merge.results1 == "HALLMARK_G2M_CHECKPOINT"] <- "G2M checkpoint" +# merge.results1[merge.results1 == "GOBP_CHROMOSOME_SEGREGATION"] <- "Chromosome segregation" +# merge.results1[merge.results1 == "GOBP_CELL_DIVISION"] <- "Cell division" +# merge.results1[merge.results1 == "Exhaustion_Wherry"] <- "Exhaustion signature (Wherry)" + +# merge.results1$pathway<- factor(merge.results1$pathway, levels = rev(c("Response to virus", +# "Response to IFNa", +# "Response to IFNg", +# "IL-2/STAT5 signalling", +# "LPS signature (Cilenti et al)", +# "G2M checkpoint", +# "Cell division", +# "Chromosome segregation", +# "Exhaustion signature (Wherry)"))) + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.05,] +filter_in <- head(unique(merge.results_temp$pathway), 100) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("OVA.Combo","SIINFEKL.Combo")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) +ggtitle("GSEA_CD4 vs SIINFEKL") +ggsave(filename = paste0(pdir, "/GSEA_CD4_T_cells_vs_SIINFEKL_unbias.pdf"), plot=y, width=15, height=30) + + +############################################################ +###############Figure xxx-OLD - GSEA CD4######################### +############################################################# + +CD4<-SetIdent(CD4, value = "RNA_Group") + +OVA.combo<-FindMarkers(CD4, ident.1="OVA.Combo", ident.2 ="liOVA", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +stop.combo<-FindMarkers(CD4, ident.1="SIINFEKL.Combo", ident.2= "liOVA", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +STOP<-FindMarkers(CD4, ident.1="SIINFEKL", ident.2= "liOVA", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +liOVA<-FindMarkers(CD4, ident.1="liOVA", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) + +OVA.combo.ranks <- OVA.combo$avg_log2FC +stop.combo.ranks <- stop.combo$avg_log2FC +STOP.ranks <- STOP$avg_log2FC +liOVA.ranks <- liOVA$avg_log2FC + +names(OVA.combo.ranks) <- rownames(OVA.combo) +names(stop.combo.ranks) <- rownames(stop.combo) +names(STOP.ranks) <- rownames(STOP) +names(liOVA.ranks) <- rownames(liOVA) + +res.OVA.combo <- fgsea(pathways=miDB_sig4.MLS, stats=OVA.combo.ranks, minSize=0, maxSize=500, eps=0, nPermSimple=25000) +res.stop.combo <- fgsea(pathways=miDB_sig4.MLS, stats=stop.combo.ranks, minSize=0, maxSize=500, eps=0, nPermSimple=25000) +res.STOP <- fgsea(pathways=miDB_sig4.MLS, stats=STOP.ranks, minSize=0, maxSize=500, eps=0, nPermSimple=25000) +res.liOVA <- fgsea(pathways=miDB_sig4.MLS, stats=liOVA.ranks, minSize=0, maxSize=500, eps=0, nPermSimple=25000) + +# Select columns of interest +res.OVA.combo2<-res.OVA.combo[,c(1,3,6,8)] +res.stop.combo2<-res.stop.combo[,c(1,3,6,8)] +res.STOP2<-res.STOP[,c(1,3,6,8)] +res.liOVA2<-res.liOVA[,c(1,3,6,8)] + +# Merge in a single file and save xlsx +merge1 <- merge(x=res.OVA.combo2,y=res.stop.combo2,by="pathway", suffixes = c("-Combo", "-stopcombo")) +merge2<-merge(x=res.STOP2,y=res.liOVA2,by="pathway", suffixes = c("-STOP", "-liOVA")) +merge3<-merge(merge1,merge2) + +# setwd(pdir) +# write.xlsx(merge3,"GSEA_CD4_vsliOVA_OVA-vsall.xlsx",asTable = TRUE,rowNames=T) ####save file + +# merge2<-merge1[merge1$`padj-Combo`<0.05,] +# merge3<-merge2[merge2$`padj-stopcombo`<0.05,] +# write.xlsx(merge3,"GSEA_CD4_vsSIINFEKL_only signifi.xlsx",asTable = TRUE,rowNames=T) ####save file + + +res.OVA.combo$origin<-"OVA.Combo" +res.stop.combo$origin<-"SIINFEKL.Combo" +res.STOP$origin<-"SIINFEKL" +res.liOVA$origin<-"li.OVA" +merge.results<-rbind(res.OVA.combo,res.stop.combo,res.STOP,res.liOVA) +#create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + + +# Manually selected pathways +a1_OLD<-c("HALLMARK_INTERFERON_ALPHA_RESPONSE", + "HALLMARK_INTERFERON_GAMMA_RESPONSE", + "HALLMARK_IL2_STAT5_SIGNALING", + "LPS_RO", + "GOBP_INTERLEUKIN_18_PRODUCTION", + "GOBP_INTERFERON_GAMMA_PRODUCTION", + "GOBP_T_CELL_DIFFERENTIATION_INVOLVED_IN_IMMUNE_RESPONSE", + "HALLMARK_E2F_TARGETS", + "HALLMARK_G2M_CHECKPOINT", + "GOBP_NEGATIVE_REGULATION_OF_MACROPHAGE_ACTIVATION", + "IL4_RO", + "GOBP_RESPONSE_TO_INTERLEUKIN_17") + +a1<-c("GOBP_RESPONSE_TO_VIRUS", + "HALLMARK_INTERFERON_ALPHA_RESPONSE", + "GOCC_T_CELL_RECEPTOR_COMPLEX", + "GOBP_PHAGOCYTOSIS", + "HALLMARK_INTERFERON_GAMMA_RESPONSE", + "HALLMARK_IL2_STAT5_SIGNALING", + "LPS_RO", + "GOBP_INTERFERON_GAMMA_PRODUCTION", + "GOBP_T_CELL_DIFFERENTIATION_INVOLVED_IN_IMMUNE_RESPONSE", + "Exhaustion_Wherry") + +# Subset selected pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# Rename pathways +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_VIRUS"] <- "Response to virus" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_ALPHA_RESPONSE"] <- "Response to IFNa" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Response to IFNg" +merge.results1[merge.results1 == "HALLMARK_IL2_STAT5_SIGNALING"] <- "IL-2/STAT5 signalling" +merge.results1[merge.results1 == "LPS_RO"] <- "LPS signature (Cilenti et al)" +merge.results1[merge.results1 == "GOBP_INTERFERON_GAMMA_PRODUCTION"] <- "Ifng production" +merge.results1[merge.results1 == "GOCC_T_CELL_RECEPTOR_COMPLEX"] <- "T cell receptor complex" +merge.results1[merge.results1 == "GOBP_PHAGOCYTOSIS"] <- "Phagocytosis" +merge.results1[merge.results1 == "GOBP_T_CELL_DIFFERENTIATION_INVOLVED_IN_IMMUNE_RESPONSE"] <- "T cell differentiation" +merge.results1[merge.results1 == "Exhaustion_Wherry"] <- "Exhaustion signature (Wherry)" + + +# Order in the way we want to see +merge.results1$pathway<- factor(merge.results1$pathway, levels = rev(c("Response to virus", + "Response to IFNa", + "Response to IFNg", + "IL-2/STAT5 signalling", + "LPS signature (Cilenti et al)", + "Ifng production", + "T cell differentiation", + "T cell receptor complex", + "Phagocytosis", + "Exhaustion signature (Wherry)"))) + +# Heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette="RdBu") + + geom_text(aes(label = stats), vjust=0.7, angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color="Black"), + axis.text.x = element_text(angle=45, hjust=1, color="Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + + ggtitle("GSEA CD4 vs liOVA") +ggsave(filename = paste0(pdir, "/GSEA_CD4_T_cells_vs_liOVA_Fig4.pdf"), plot=y, width=5, height=3) + + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.01,] +filter_in <- head(unique(merge.results_temp$pathway), 100) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("li.OVA","SIINFEKL","OVA.Combo","SIINFEKL.Combo")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) +ggtitle("GSEA_CD4 vs liOVA") +ggsave(filename = paste0(pdir, "/GSEA_CD4_T_cells_vs_liOVA_unbias.pdf"), plot=y, width=15, height=30) diff --git a/TAD018/000_TAD018_liver_tumor_dot_plot_markers.R b/TAD018/000_TAD018_liver_tumor_dot_plot_markers.R new file mode 100644 index 0000000000000000000000000000000000000000..9272c029cb3f76b2037f3f7297a3d49114b281cb --- /dev/null +++ b/TAD018/000_TAD018_liver_tumor_dot_plot_markers.R @@ -0,0 +1,132 @@ +suppressPackageStartupMessages(library(Seurat)) +suppressPackageStartupMessages(library(harmony)) +suppressPackageStartupMessages(library(openxlsx)) +suppressPackageStartupMessages(library(readxl)) +suppressPackageStartupMessages(library(tidyr)) +suppressPackageStartupMessages(library(ggplot2)) +suppressPackageStartupMessages(library(RColorBrewer)) # Color palettes for visualization +suppressPackageStartupMessages(library(dplyr)) + + +############################################################################## +################Figure S4D - Liver clusters dotplot markers################### + +dataset <- "18" +Tissue <- "Liver" # "Liver" or "Tumor" + +wd <- paste0("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM") +setwd(wd) + +# Plot dir +plot_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/results3/Result3_MNOT/Plots" +dir.create(plot_dir, showWarnings = FALSE) + +# Load the RDS +obs1 <- readRDS(paste0(wd, "/results2/", Tissue, "/", Tissue, "_final.rds")) + +# Assign groups + +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="liOVA_IL12"] <- "OVA.IL12" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="liOVA_IFNa"] <- "OVA.IFNa" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="liOVA"] <- "OVA" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="Combo3x"] <- "Combo" + +#sample origin +obs1$Tube <- paste0(obs1$RNA_Group,obs1$hash.ID) +obs1@meta.data$RNA_Group<- factor(x = obs1@meta.data$RNA_Group, levels = c("OVA","OVA.IFNa","OVA.IL12","Combo")) + +obs1@meta.data$Tissue <- obs1@meta.data$PROP.Source + + +# Liver +obs1 <- SetIdent(obs1, value = "Newlables2") +obs1@meta.data$Newlables2 <- factor(x = obs1@meta.data$Newlables2, levels = c("APCs","TandNK","B cells","Hepatocytes","Endothelial cells","Others")) + +obs1_subset <- subset(obs1, Newlables2 != "Others") + + +# Dot Plot +features_to_plot_manual_liver_MNOT <- unique(c("Cd86", "Itgax", "Clec9a", "Flt3", "Clec4f", "Adgre1", "Lyz2", "Marco", "Cd14", # APCs + "Cd3e", "Cd8a", "Cd4", "Nkg7", "Gzmb", "Cd3g", "Klrb1c", # TandNK + "Cd79a", "Ms4a1", "Cd19", "Ighm", "Cd22", "Ebf1", "Pax5", # B cells + "Alb", "Adh1", "Cyp3a11", "Serpina1a", "Apoa1", "Fgb", "Hamp", # Hepatocytes + "Cdh5", "Pecam1", "Kdr", "Eng", "Nos3", "Esam", "Vwf" # Endothelial cells +)) + + +paletteLength <- 100 +myColor <- colorRampPalette(c("blue", "darkgrey", "darkred"))(paletteLength) + + +pdf(paste0(plot_dir, "/TAD018_", Tissue, "_dotplot.markers.Newlables2_FigS4D.pdf"), width=11, height=4) +dotplot1<-scCustomize::Clustered_DotPlot(obs1_subset, + features = features_to_plot_manual_liver_MNOT, + plot_km_elbow=F, + row_label_size=10, + flip=T, colors_use_exp = myColor, + cluster_feature=F, cluster_ident=F) +dev.off() + + + +############################################################################## +################Figure S4E - Tumor clusters dotplot markers################### + + +dataset <- "18" +Tissue <- "Tumor" # "Liver" or "Tumor" + +wd <- paste0("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A0", dataset, "/Analysis_MM") +setwd(wd) + +# Plot dir +plot_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/results3/Result3_MNOT/Plots" +dir.create(plot_dir, showWarnings = FALSE) + +# Load the RDS +obs1 <- readRDS(paste0(wd, "/results2/", Tissue, "/", Tissue, "_final.rds")) + +# Assign groups + +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="liOVA_IL12"] <- "OVA.IL12" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="liOVA_IFNa"] <- "OVA.IFNa" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="liOVA"] <- "OVA" +obs1@meta.data$RNA_Group[obs1@meta.data$PROP.Condition=="Combo3x"] <- "Combo" + +#sample origin +obs1$Tube <- paste0(obs1$RNA_Group,obs1$hash.ID) +obs1@meta.data$RNA_Group<- factor(x = obs1@meta.data$RNA_Group, levels = c("OVA","OVA.IFNa","OVA.IL12","Combo")) + +obs1@meta.data$Tissue <- obs1@meta.data$PROP.Source + +# Tumor +obs1 <- SetIdent(obs1, value = "Newlables2") +obs1@meta.data$Newlables2 <- factor(x = obs1@meta.data$Newlables2, levels = c("APCs","TandNK","B cells","Cancer cells","Others")) + +obs1_subset <- subset(obs1, Newlables2 != "Others") + + + +# Dot Plot +features_to_plot_manual_tumor_MNOT <- unique(c("Cd86", "Itgax", "Adgre1", "Lyz2", "Cd14", "Cd68", "Fcgr1", # APCs + "Cd3e", "Cd8a", "Cd4", "Nkg7", "Gzmb", "Cd3g", # TandNK + "Cd79a", "Ms4a1", "Cd19", "Ighm", "Cd22", "Ebf1", "Pax5", # B cells + "Cd34", "Serpinf1", "Sparc", "Mxra7", "Fstl1" # Cancer cells +)) + +paletteLength <- 100 +myColor <- colorRampPalette(c("blue", "darkgrey", "darkred"))(paletteLength) + + +pdf(paste0(plot_dir, "/TAD018_", Tissue, "_dotplot.markers.Newlables2_FigS4E.pdf"), width=10, height=3) +dotplot1<-scCustomize::Clustered_DotPlot(obs1_subset, + features = features_to_plot_manual_tumor_MNOT, + plot_km_elbow=F, + row_label_size=10, + flip=T, colors_use_exp = myColor, + cluster_feature=F, cluster_ident=F) +dev.off() + + + + diff --git a/TAD018/001_TAD018_liver_tumor_APCs_MLS_dotplot_stellari_radarplot.R b/TAD018/001_TAD018_liver_tumor_APCs_MLS_dotplot_stellari_radarplot.R new file mode 100644 index 0000000000000000000000000000000000000000..9b1b00e726711de3a444b9991423b468a5867979 --- /dev/null +++ b/TAD018/001_TAD018_liver_tumor_APCs_MLS_dotplot_stellari_radarplot.R @@ -0,0 +1,656 @@ +library(Seurat) +library(openxlsx) +library(readxl) +library(tidyr) +library("RColorBrewer") +library(dplyr) +library(reshape2) +library(fgsea) +library(patchwork) +library(presto) +library(matrixStats) +library(fmsb) +library(ggplot2) + +cluster_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/results3" +wdir<- paste0(cluster_dir, "/Result3_MNOT") +tdir<- paste0(cluster_dir, "/Tumor_APCs/") +ldir<- paste0(cluster_dir, "/Liver_APCs/") +pdir<- paste0(cluster_dir, "/Result3_MNOT/Plots") + +plotRadar <- function(i){ + ploTData<- rbind(max1,min1,get(i)) + id <- sub(".db","",i) + radarchart(ploTData, title = id, pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty = 1, cglwd=0.8) +} #function to plot radarplot + +############################################################################# +##########################LIVER MACS######################################### +############################################################################# +apcs.liver <- readRDS(paste0(ldir, "/Liver_APCs_final.rds")) + +# Assigning groups +apcs.liver@meta.data$Tissue <- apcs.liver@meta.data$PROP.Source +apcs.liver@meta.data$RNA_Group <- apcs.liver@meta.data$PROP.Condition + +apcs.liver@meta.data$RNA_Group[apcs.liver@meta.data$RNA_Group == "liOVA_IL12"] <- "OVA.Il12" +apcs.liver@meta.data$RNA_Group[apcs.liver@meta.data$RNA_Group == "liOVA_IFNa"] <- "OVA.Ifna" +apcs.liver@meta.data$RNA_Group[apcs.liver@meta.data$RNA_Group == "Combo3x"] <- "OVA.Combo" +apcs.liver@meta.data$RNA_Group <- factor(x = apcs.liver@meta.data$RNA_Group, levels = c("liOVA","OVA.Ifna","OVA.Il12","OVA.Combo")) + +apcs.liver@meta.data$Tube <- paste0(apcs.liver@meta.data$hash.ID, apcs.liver@meta.data$RNA_Group) + + +######################################################################## +#######################TUMOR########################################### +######################################################################### + + +# Load the RDS file +apcs.tumor <- readRDS(paste0(tdir, "Tumor_APCs_final.rds")) + + +# Assigning tissue, origin, and ordering +apcs.tumor@meta.data$Tissue <- apcs.tumor@meta.data$PROP.Source +apcs.tumor@meta.data$RNA_Group <- apcs.tumor@meta.data$PROP.Condition + +apcs.tumor@meta.data$RNA_Group[apcs.tumor@meta.data$RNA_Group == "liOVA_IL12"] <- "OVA.Il12" +apcs.tumor@meta.data$RNA_Group[apcs.tumor@meta.data$RNA_Group == "liOVA_IFNa"] <- "OVA.Ifna" +apcs.tumor@meta.data$RNA_Group[apcs.tumor@meta.data$RNA_Group == "Combo3x"] <- "OVA.Combo" +apcs.tumor@meta.data$RNA_Group <- factor(x = apcs.tumor@meta.data$RNA_Group, levels = c("liOVA","OVA.Ifna","OVA.Il12","OVA.Combo")) + +apcs.tumor@meta.data$Tube <- paste0(apcs.tumor@meta.data$hash.ID, apcs.tumor@meta.data$RNA_Group) + + +# Refining labels +apcs.tumor$NewlablesM_clu[apcs.tumor$NewlablesM_clu == "pre DCs2"] <- "Macrophages" + + +############DimPlots + +pdf(paste0(pdir, "/Liver_umapAPC_Fig2C.pdf"), width = 8, height = 6) +DimPlot(apcs.liver, reduction = "umap.harmony.orig.ident", group.by = "NewlablesM_clu", label = T, label.size = 6, repel = T) +dev.off() + +# Export DimPlot as excel +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.1.2","NewlablesM_clu") +apcs.liver_df <- FetchData(apcs.liver, vars = var_list) +apcs.liver_df$cell_ID <- rownames(apcs.liver_df) +write.xlsx(apcs.liver_df, file=paste0(pdir, "/Liver_umapAPC_Fig2C.xlsx"), overwrite=T) + +pdf(paste0(pdir, "/Tumor_umapAPC_Fig2D.pdf"), width = 8, height = 6) +DimPlot(apcs.tumor, reduction = "umap.harmony.orig.ident", group.by = "NewlablesM_clu", label = T, label.size = 6, repel = T) +dev.off() + +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.1.2","NewlablesM_clu") +apcs.tumor_df <- FetchData(apcs.tumor, vars = var_list) +apcs.tumor_df$cell_ID <- rownames(apcs.tumor_df) +write.xlsx(apcs.tumor_df, file=paste0(pdir, "/Tumor_umapAPC_Fig2D.xlsx"), overwrite=T) + +# All Liver +ALL_liver <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/results2/Liver/Liver_final.rds") + +ALL_liver@meta.data$Tissue <- ALL_liver@meta.data$PROP.Source +ALL_liver@meta.data$RNA_Group <- ALL_liver@meta.data$PROP.Condition +ALL_liver@meta.data$RNA_Group[ALL_liver@meta.data$RNA_Group == "liOVA_IL12"] <- "OVA.Il12" +ALL_liver@meta.data$RNA_Group[ALL_liver@meta.data$RNA_Group == "liOVA_IFNa"] <- "OVA.Ifna" +ALL_liver@meta.data$RNA_Group[ALL_liver@meta.data$RNA_Group == "Combo3x"] <- "OVA.Combo" +ALL_liver@meta.data$RNA_Group <- factor(x = ALL_liver@meta.data$RNA_Group, levels = c("liOVA","OVA.Ifna","OVA.Il12","OVA.Combo")) +ALL_liver@meta.data$Tube <- paste0(ALL_liver@meta.data$hash.ID, ALL_liver@meta.data$RNA_Group) + +pdf(paste0(pdir, "/Liver_umap_Fig2A.pdf"), width = 8, height = 6) +DimPlot(ALL_liver, reduction = "umap.harmony.orig.ident", group.by = "Newlables2", label = T, label.size = 6, repel = T) +dev.off() + +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.0.6","Newlables2") +ALL_liver_df <- FetchData(ALL_liver, vars = var_list) +ALL_liver_df$cell_ID <- rownames(ALL_liver_df) +write.xlsx(ALL_liver_df, file=paste0(pdir, "/Liver_umap_Fig2A_FigS4B.xlsx"), overwrite=T) + +# All Tumor +ALL_tumor <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/results2/Tumor/Tumor_final.rds") + +ALL_tumor@meta.data$Tissue <- ALL_tumor@meta.data$PROP.Source +ALL_tumor@meta.data$RNA_Group <- ALL_tumor@meta.data$PROP.Condition +ALL_tumor@meta.data$RNA_Group[ALL_tumor@meta.data$RNA_Group == "liOVA_IL12"] <- "OVA.Il12" +ALL_tumor@meta.data$RNA_Group[ALL_tumor@meta.data$RNA_Group == "liOVA_IFNa"] <- "OVA.Ifna" +ALL_tumor@meta.data$RNA_Group[ALL_tumor@meta.data$RNA_Group == "Combo3x"] <- "OVA.Combo" +ALL_tumor@meta.data$RNA_Group <- factor(x = ALL_tumor@meta.data$RNA_Group, levels = c("liOVA","OVA.Ifna","OVA.Il12","OVA.Combo")) +ALL_tumor@meta.data$Tube <- paste0(ALL_tumor@meta.data$hash.ID, ALL_tumor@meta.data$RNA_Group) + +pdf(paste0(pdir, "/Tumor_umap_Fig2B.pdf"), width = 8, height = 6) +DimPlot(ALL_tumor, reduction = "umap.harmony.orig.ident", group.by = "Newlables2", label = T, label.size = 6, repel = T) +dev.off() + +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.0.6","Newlables2") +ALL_tumor_df <- FetchData(ALL_tumor, vars = var_list) +ALL_tumor_df$cell_ID <- rownames(ALL_tumor_df) +write.xlsx(ALL_tumor_df, file=paste0(pdir, "/Tumor_umap_Fig2B_FigS4C.xlsx"), overwrite=T) + +# Macrophages Tumor +macrophages_tumor <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/results3/macrophages_tumor/macrophages_tumor_final.rds") + +macrophages_tumor@meta.data$Tissue <- macrophages_tumor@meta.data$PROP.Source +macrophages_tumor@meta.data$RNA_Group <- macrophages_tumor@meta.data$PROP.Condition +macrophages_tumor@meta.data$RNA_Group[macrophages_tumor@meta.data$RNA_Group == "liOVA_IL12"] <- "OVA.Il12" +macrophages_tumor@meta.data$RNA_Group[macrophages_tumor@meta.data$RNA_Group == "liOVA_IFNa"] <- "OVA.Ifna" +macrophages_tumor@meta.data$RNA_Group[macrophages_tumor@meta.data$RNA_Group == "Combo3x"] <- "OVA.Combo" +macrophages_tumor@meta.data$RNA_Group <- factor(x = macrophages_tumor@meta.data$RNA_Group, levels = c("liOVA","OVA.Ifna","OVA.Il12","OVA.Combo")) +macrophages_tumor@meta.data$Tube <- paste0(macrophages_tumor@meta.data$hash.ID, macrophages_tumor@meta.data$RNA_Group) + +pdf(paste0(pdir, "/macrophages_tumor_umap_res.0.3_FigS5C.pdf"), width = 8, height = 6) +DimPlot(macrophages_tumor, reduction = "umap.harmony.orig.ident", group.by = "RNA_snn_h.orig.ident_res.0.3", label = T, label.size = 6, repel = T) +dev.off() + +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.0.3") +macrophages_tumor_df <- FetchData(macrophages_tumor, vars = var_list) +macrophages_tumor_df$cell_ID <- rownames(macrophages_tumor_df) +write.xlsx(macrophages_tumor_df, file=paste0(pdir, "/macrophages_tumor_umap_res.0.3_FigS5C.xlsx"), overwrite=T) + +##############DOTPLOT STELLARI##################################### +# Selected genes for dotplot +features1 = c("H2-Q7", "H2-T22", "H2-Q4", "H2-K1", "H2-T23", "H2-M3", "H2-D1","Tap1","Tap2", #MHCI + "H2-Eb1", "H2-Ab1", "H2-Aa", "H2-DMb1", "H2-DMa", "Ciita", #MHCII + "Ifi44", "Oasl1","Irf7","Isg15", "Isg20","Oas1a","Oas1g", #IFNa + "Ccl5", "Upp1", "Slamf7", "Cxcl9", "Gbp4","Cd74", #IFNg + "Vav2","Tgfb1","Il10","Ccl24","Mmp8","Tmem176b","Trem2","Fn1") #protumor + +###########Figure 2E############ +############################### +apcs.liver<-SetIdent(apcs.liver, value = "Tissue") + +pa1 <- DotPlot(apcs.liver, features = features1,idents = "Liver", dot.scale = 15, split.by = "RNA_Group", + cols="RdBu") + RotatedAxis() +i<-"Liver" # Is subset.ident = i necessary? +df1 <- pa1$data +df1$id <- factor(x = df1$id, levels = unique(df1$id)[c(4,1,2,3)]) + +m.Combo <- FindMarkers(apcs.liver, ident.1 = "OVA.Combo", ident.2 = "liOVA", group.by = "RNA_Group", + subset.ident = i, features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +m.Combo <- m.Combo[match(features1, rownames(m.Combo)),] +m.IL12 <- FindMarkers(apcs.liver, ident.1 = "OVA.Il12", ident.2 = "liOVA", group.by = "RNA_Group", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +m.IL12 <- m.IL12[match(features1,rownames(m.IL12)),] +m.IFNa <- FindMarkers(apcs.liver, ident.1 = "OVA.Ifna", ident.2 = "liOVA", group.by = "RNA_Group", + subset.ident = i, features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +m.IFNa <- m.IFNa[match(features1,rownames(m.IFNa)),] +m.OVA <- FindMarkers(apcs.liver, ident.1 = "liOVA", group.by = "RNA_Group", + subset.ident = i, features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +m.OVA <- m.OVA[match(features1,rownames(m.OVA)),] +m.OVA$p_val_adj<-1 +markers1 <- rbind(m.IL12,m.IFNa,m.OVA,m.Combo) +df2 <- cbind(df1,markers1) +df2$stars <- ifelse(df2$p_val_adj< 0.001,"***", + ifelse(df2$p_val_adj< 0.01,"**", + ifelse(df2$p_val_adj< 0.05,"*",""))) + +a<-ggplot(df2, aes(x=features.plot, y=id, size=pct.exp ,color=avg.exp.scaled)) + + geom_point() + + scale_size_area(max_size = 10) + + scale_colour_gradient2(low= "blue",mid = "darkgrey",high="darkred") + ####"#CCCCFF" + labs(y='',x='')+ + geom_text(aes(label=stars,vjust=0.8),col="black",size = 4)+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"))+ + theme(axis.text.x = element_text(angle = 45, hjust= 1, color = "Black"))+ + theme(axis.line.x=element_line(color="Black"))+ + theme(axis.line.y=element_line(color="Black"))+ + ggtitle("Dotplot liver APCs") +ggsave(filename = paste0(pdir, "/Dotplot_stellare_liverAPCs_Fig2E.pdf"), plot=1, width=11, height=3) + +#############TUMOR################################# +#####################Figure 2F#################### + +apcs.tumor<-SetIdent(apcs.tumor, value = "Tissue") +pa1 <- DotPlot(apcs.tumor, features = features1,idents = "Tumor", dot.scale = 15, split.by = "RNA_Group", + cols="RdBu") + RotatedAxis() + +i<-"Tumor" +df1 <- pa1$data +df1$id <- factor(x = df1$id, levels = unique(df1$id)[c(4,1,2,3)]) + +m.Combo <- FindMarkers(apcs.tumor, ident.1 = "OVA.Combo",ident.2 = "liOVA", group.by = "RNA_Group", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +m.Combo <- m.Combo[match(features1,rownames(m.Combo)),] +m.IL12 <- FindMarkers(apcs.tumor, ident.1 = "OVA.Il12",ident.2 = "liOVA", group.by = "RNA_Group", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +m.IL12 <- m.IL12[match(features1,rownames(m.IL12)),] +m.IFNa <- FindMarkers(apcs.tumor, ident.1 = "OVA.Ifna",ident.2 = "liOVA", group.by = "RNA_Group", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +m.IFNa <- m.IFNa[match(features1,rownames(m.IFNa)),] +m.OVA <- FindMarkers(apcs.tumor, ident.1 = "liOVA", group.by = "RNA_Group", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +m.OVA <- m.OVA[match(features1,rownames(m.OVA)),] +m.OVA$p_val_adj<-1 +markers1 <- rbind(m.IL12,m.IFNa,m.OVA,m.Combo) +df2 <- cbind(df1,markers1) +df2$stars <- ifelse(df2$p_val_adj< 0.001,"***", + ifelse(df2$p_val_adj< 0.01,"**", + ifelse(df2$p_val_adj< 0.05,"*",""))) + +a<-ggplot(df2, aes(x=features.plot, y=id, size=pct.exp ,color=avg.exp.scaled)) + + geom_point() + + scale_size_area(max_size = 10) + + scale_colour_gradient2(low= "blue",mid = "darkgrey",high="darkred") + ####"#CCCCFF" + labs(y='',x='')+ + geom_text(aes(label=stars,vjust=0.8),col="black",size = 4)+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"))+ + theme(axis.text.x = element_text(angle = 45, hjust= 1, color = "Black"))+ + theme(axis.line.x=element_line(color="Black"))+ + theme(axis.line.y=element_line(color="Black"))+ + ggtitle("Dotplot tumor APCs") +ggsave(filename = paste0(pdir, "/Dotplot_stellare_tumorAPCs_Fig2F.pdf"), plot=1, width=11, height=3) + +###############RADAR PLOT WITH MACROCLASS LIVER AND TUMOR################################# +###############Figure 2G################################################################# + +####Create a new label to cluster DCs and Granulocytes together +apcs.liver@meta.data$Shortlables <- apcs.liver@meta.data$NewlablesM_clu +apcs.tumor@meta.data$Shortlables <- apcs.tumor@meta.data$NewlablesM_clu + +DCs<-c("CD8 cDC1", "moDCs", "Ccr7 DCs", "pDCs", "pre DCs") +apcs.liver@meta.data$Shortlables[apcs.liver@meta.data$NewlablesM_clu%in%DCs] <- "DCs" +apcs.tumor@meta.data$Shortlables[apcs.tumor@meta.data$NewlablesM_clu%in%DCs] <- "DCs" + +granu<-c("Neutrophils", "Basophils") +apcs.liver@meta.data$Shortlables[apcs.liver@meta.data$NewlablesM_clu%in%granu] <- "Granulocytes" +apcs.tumor@meta.data$Shortlables[apcs.tumor@meta.data$NewlablesM_clu%in%granu] <- "Granulocytes" + +table(apcs.liver@meta.data$NewlablesM_clu) +table(apcs.tumor@meta.data$NewlablesM_clu) + +##############LIVER RADARPLOT########################## +MHCI_genes <- list(c("H2-Q7", "H2-T22", "H2-Q4", "H2-K1", "H2-T23", "H2-M3", "H2-D1","Tap1","Tap2")) +MHCII_genes <- list( c("H2-Eb1", "H2-Ab1", "H2-Aa", "H2-DMb1", "H2-DMa", "Ciita")) +Protumoral_genes <- list(c("Vav2","Tgfb1","Il10","Ccl24","Mmp8","Tmem176b","Trem2","Fn1") ) +IFNa_genes <- list(c("Ifi44", "Oasl1","Irf7","Isg15", "Isg20","Oas1a","Oas1g") ) +IFNg_genes <-list(c("Ccl5", "Upp1", "Slamf7", "Cxcl9", "Gbp4","Cd74")) + +apcs.liver <- AddModuleScore(apcs.liver, features = MHCI_genes, name = "MHCI_genes") +apcs.liver <- AddModuleScore(apcs.liver, features = MHCII_genes, name = "MHCII_genes") +apcs.liver <- AddModuleScore(apcs.liver, features = Protumoral_genes, name = "Protumoral_genes") +apcs.liver <- AddModuleScore(apcs.liver, features = IFNa_genes, name = "IFNa_genes") +apcs.liver <- AddModuleScore(apcs.liver, features = IFNg_genes, name = "IFNg_genes") + +names(apcs.liver@meta.data) +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. +#41 is "Shortlables" +#42 is "RNA_Group" +#45:49 are the module scores + +M1<-apcs.liver@meta.data[,c("NewlablesM_clu", "RNA_Group", "MHCI_genes1","MHCII_genes1","Protumoral_genes1","IFNa_genes1","IFNg_genes1")] +#M1<-apcs.liver@meta.data[,c(45, 42, 46:50)] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(apcs.liver$RNA_Group) +CellType<-unique(M1$NewlablesM_clu) + +for (i in CellType){ + M2<-M1[M1$NewlablesM_clu%in%i,] + M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) + M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) + M3c<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[3],3:7]),na.rm=T) + M3d<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[4],3:7]),na.rm=T) + M4<-rbind(M3a,M3b,M3c,M3d) + rownames(M4)<-Groups + colnames(M4)<-colnames(M2[,3:7]) + x<-as.data.frame(M4) + assign(paste0(i,".db"),x)} + +lsCells <- grep(".db",ls(),value=T) +MinMax<-lapply(lsCells,get) +max1 <- rep(do.call("max", MinMax),5) +min1 <- rep(do.call("min", MinMax),5) + +colors_border=c(rgb(0,0,0,0.9), rgb(0.1,0.6,0.2,0.9), rgb(0.8,0.1,0.1,0.9), rgb(0.1,0.2,1,0.9)) +colors_in=c(rgb(0,0,0,0.1), rgb(0.1,0.6,0.2,0.1), rgb(0.8,0.1,0.1,0.1), rgb(0.1,0.2,1,0.1)) + +pdf(paste0(pdir, "/Radar_plot_liverAPCs_NewlablesM_clu_Fig.2G_part1.pdf"), width=18, height=6) +par(mfrow=c(2,5)) +for (i in 1:length(unique(apcs.liver$NewlablesM_clu))){ + plotRadar(lsCells[i]) +} +dev.off() + +################TUMOR RADARPLOT##################### +rm(list = grep(".db", ls(), value = TRUE)) +MHCI_genes <- list(c("H2-Q7", "H2-T22", "H2-Q4", "H2-K1", "H2-T23", "H2-M3", "H2-D1","Tap1","Tap2")) +MHCII_genes <- list( c("H2-Eb1", "H2-Ab1", "H2-Aa", "H2-DMb1", "H2-DMa", "Ciita")) +Protumoral_genes <- list(c("Vav2","Tgfb1","Il10","Ccl24","Mmp8","Tmem176b","Trem2","Fn1") ) +IFNa_genes <- list(c("Ifi44", "Oasl1","Irf7","Isg15", "Isg20","Oas1a","Oas1g") ) +IFNg_genes <- list(c("Ccl5", "Upp1", "Slamf7", "Cxcl9", "Gbp4","Cd74")) + +apcs.tumor <- AddModuleScore(apcs.tumor, features = MHCI_genes, name = "MHCI_genes") +apcs.tumor <- AddModuleScore(apcs.tumor, features = MHCII_genes, name = "MHCII_genes") +apcs.tumor <- AddModuleScore(apcs.tumor, features = Protumoral_genes, name = "Protumoral_genes") +apcs.tumor <- AddModuleScore(apcs.tumor, features = IFNa_genes, name = "IFNa_genes") +apcs.tumor <- AddModuleScore(apcs.tumor, features = IFNg_genes, name = "IFNg_genes") + +M1<-apcs.tumor@meta.data[,c("NewlablesM_clu", "RNA_Group", "MHCI_genes1","MHCII_genes1","Protumoral_genes1","IFNa_genes1","IFNg_genes1")] +#M1<-apcs.tumor@meta.data[,c(46, 43, 47:51)] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(apcs.tumor$RNA_Group) +CellType<-unique(M1$NewlablesM_clu) + +for (i in CellType){ + M2<-M1[M1$NewlablesM_clu%in%i,] + M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) + M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) + M3c<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[3],3:7]),na.rm=T) + M3d<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[4],3:7]),na.rm=T) + M4<-rbind(M3a,M3b,M3c,M3d) + rownames(M4)<-Groups + colnames(M4)<-colnames(M2[,3:7]) + x<-as.data.frame(M4) + assign(paste0(i,".db"),x)} + +lsCells <- grep(".db",ls(),value=T) +MinMax<-lapply(lsCells,get) +max1 <- rep(do.call("max", MinMax),5) +min1 <- rep(do.call("min", MinMax),5) + +colors_border=c(rgb(0,0,0,0.9), rgb(0.1,0.6,0.2,0.9), rgb(0.8,0.1,0.1,0.9), rgb(0.1,0.2,1,0.9)) +colors_in=c(rgb(0,0,0,0.1), rgb(0.1,0.6,0.2,0.1), rgb(0.8,0.1,0.1,0.1), rgb(0.1,0.2,1,0.1)) + +pdf(paste0(pdir, "/Radar_plot_tumorAPCs_NewlablesM_clu_Fig.2G_part2.pdf"), width=18, height=6) +par(mfrow=c(2,5)) +for (i in 1:length(unique(apcs.tumor$NewlablesM_clu))){ + plotRadar(lsCells[i]) +} +dev.off() + + +#############GSEA################### +########Create a single file with all the NES and Pvalue_adj, PLOT HEATMAP############################### +################################Only liver macs########################################################## +#miDB_sig4.MLS <- readRDS("C:/Users/notaro.marco/Dropbox (HSR Global)/90-756142658_RNAseq_Squadrito/05-DGE-Tumor/miDB_sig4.MLS.rds") +miDB_sig4.MLS <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/reference/miDB_sig4.MLS.rds") + +#################Figure S2C Liver####################################### + +macrophage.L<-subset(apcs.liver, subset = NewlablesM_clu== "Monocytes" | + NewlablesM_clu== "Macrophages" | + NewlablesM_clu== "KCs") + +macrophage.L<-SetIdent(macrophage.L, value = "RNA_Group") + +# Here there is some discussions about what parameters to use to rank genes for fgsea: https://github.com/ctlab/fgsea/issues/50 + +combo<-FindMarkers(macrophage.L, ident.1="OVA.Combo",ident.2 ="liOVA", min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) # used min.pct = -Inf or 0.01 +IL12<-FindMarkers(macrophage.L, ident.1="OVA.Il12",ident.2 ="liOVA", min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +IFNa<-FindMarkers(macrophage.L, ident.1="OVA.Ifna",ident.2 ="liOVA", min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +OVA<-FindMarkers(macrophage.L, ident.1="liOVA", min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) + +combo.ranks <- combo$avg_log2FC +IL12.ranks <- IL12$avg_log2FC +IFNa.ranks <- IFNa$avg_log2FC +OVA.ranks <- OVA$avg_log2FC + +names(combo.ranks) <- rownames(combo) +names(IL12.ranks) <- rownames(IL12) +names(IFNa.ranks) <- rownames(IFNa) +names(OVA.ranks) <- rownames(OVA) + +#summary(combo.ranks) +#n_occur <- data.frame(table(combo.ranks)) + +res.combo<-fgsea(pathways = miDB_sig4.MLS, stats = combo.ranks, minSize=0, maxSize=500, eps=0) # I added eps=0 +res.IL12<-fgsea(pathways = miDB_sig4.MLS, stats = IL12.ranks, minSize=0, maxSize=500, eps=0) +res.IFNa<-fgsea(pathways = miDB_sig4.MLS, stats = IFNa.ranks, minSize=0, maxSize=500, eps=0) +res.OVA<-fgsea(pathways = miDB_sig4.MLS, stats = OVA.ranks, minSize=0, maxSize=500, eps=0) # nPermSimple=500000 long calculation, saved RDS, needed because it cant calculate pval for some pathways due to high variability +#saveRDS(res.OVA, paste0(pdir, "FGSEA_KCmonoMacs_liver_OVAvsAll_nperm500000.rds")) + +# Select the columns of interest +res.combo2<-res.combo[,c(1,3,6,8)] +res.IL122<-res.IL12[,c(1,3,6,8)] +res.IFNa2<-res.IFNa[,c(1,3,6,8)] +res.OVA2<-res.OVA[,c(1,3,6,8)] + +# Merge in a single file and save as xlsx +merge1 <- merge(x=res.combo2,y=res.IL122,by="pathway", suffixes = c("-Combo", "-Il12")) +merge2 <- merge(x=res.IFNa2,y=res.OVA2,by="pathway", suffixes = c("-IFna", "-OVA")) +merge3<-merge(x=merge1,y=merge2,by="pathway") +write.xlsx(merge3, paste0(pdir, "/GSEA_L_monomackc_vsOVA_min.pct0.01.xlsx"), asTable=T, rowNames=T) + + +#################GSEA Heatmap of selected################################### +# Rearrange data to plot heatmap +res.combo$origin<-"OVA.Combo" +res.IL12$origin<-"OVA.Il12" +res.IFNa$origin<-"OVA.IFNa" +res.OVA$origin<-"liOVA" + +merge.results<-rbind(res.combo,res.IL12,res.IFNa,res.OVA) + +# Create a variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + +#merge.results$origin <- factor(x = merge.results$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + +# Manually selected pathways +a1<-c("IFNa_RO", +"HALLMARK_INTERFERON_GAMMA_RESPONSE", +"GOMF_ANTIGEN_BINDING", +"GOBP_POSITIVE_REGULATION_OF_LEUKOCYTE_CELL_CELL_ADHESION", +"GOBP_POSITIVE_REGULATION_OF_CELL_KILLING", +"GOCC_MHC_PROTEIN_COMPLEX", +"GOMF_MHC_CLASS_II_RECEPTOR_ACTIVITY", +"GOCC_MHC_CLASS_II_PROTEIN_COMPLEX", +"GOBP_ANTIGEN_PROCESSING_AND_PRESENTATION_OF_EXOGENOUS_PEPTIDE_ANTIGEN_VIA_MHC_CLASS_I_TAP_INDEPENDENT") + +# Subset pathways +merge.results1 <- merge.results[merge.results$pathway %in% a1,] + +# Rename pathways +merge.results1[merge.results1 == "IFNa_RO"] <- "IFNa response (Cilenti et all)" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Hallmark_IFNg response" +merge.results1[merge.results1 == "GOMF_ANTIGEN_BINDING"] <- "Antigen Binding" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_LEUKOCYTE_CELL_CELL_ADHESION"] <- "Positive regulation of cell adhesion" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_CELL_KILLING"] <- "Positive regulation of cell killing" +merge.results1[merge.results1 == "GOCC_MHC_PROTEIN_COMPLEX"] <- "MHC protein complex" +merge.results1[merge.results1 == "GOMF_MHC_CLASS_II_RECEPTOR_ACTIVITY"] <- "MHC-II activity" +merge.results1[merge.results1 == "GOCC_MHC_CLASS_II_PROTEIN_COMPLEX"] <- "MHC-II protein complex" +merge.results1[merge.results1 == "GOBP_ANTIGEN_PROCESSING_AND_PRESENTATION_OF_EXOGENOUS_PEPTIDE_ANTIGEN_VIA_MHC_CLASS_I_TAP_INDEPENDENT"] <- "Antigen processing and presentation" + +# Order in the way we want to see +merge.results1$pathway <- factor(merge.results1$pathway, levels = c("IFNa response (Cilenti et all)", + "Hallmark_IFNg response", + "Positive regulation of cell adhesion", + "Positive regulation of cell killing", + "Antigen processing and presentation", + "Antigen Binding", + "MHC protein complex", + "MHC-II protein complex", + "MHC-II activity")) + + +#saveRDS(merge.results1, paste0(pdir, "/merge.results.for.GSEA.rds")) +# Load saved GSEA FILE --> KC, Monocytes and Macrophages vs OVA and OVA vs all with iterations 500.000 +#merge.results1 <- readRDS(paste0(pdir, "/merge.results.for.GSEA.rds")) + +merge.results1$origin <- factor(x = merge.results1$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + +# Heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette="RdBu") + + geom_text(aes(label = stats), vjust=0.7, angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color="Black"), + axis.text.x = element_text(angle=90, vjust=0.5, hjust=1, color="Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black"))+ + ggtitle("GSEA_MacroKCandmono vs OVA_Liver") +ggsave(filename = paste0(pdir, "/Liver_MacroKCsMonovsOVA_FigS2C.pdf"), + plot=y, width=5, height=3) + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.00001,] +filter_in <- head(unique(merge.results$pathway), 50) +filter_in <- unique(merge.results_temp$pathway) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) +ggtitle("GSEA_MacroKCandmono vs OVA_Tumor") +ggsave(filename = paste0(pdir, "/Liver_MacroKCsMonovsOVA_unbias.pdf"), plot=y, width=15, height=30) # limitsize = FALSE + + +##############TUMOR##################### +##############Figure S2D############### + +macrophage.T<-subset(apcs.tumor, subset = NewlablesM_clu == "Monocytes" | + NewlablesM_clu == "Macrophages" | + NewlablesM_clu == "KCs") + +macrophage.T<-SetIdent(macrophage.T, value = "RNA_Group") + +combo<-FindMarkers(macrophage.T, ident.1="OVA.Combo", ident.2 ="liOVA", min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) # used min.pct = -Inf or 0.01 +IL12<-FindMarkers(macrophage.T, ident.1="OVA.Il12", ident.2 ="liOVA", min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +IFNa<-FindMarkers(macrophage.T, ident.1="OVA.Ifna", ident.2 ="liOVA", min.pct = 0.01, logfc.threshold = 0, min.cells.feature = 1, min.cells.group = 1) +OVA<-FindMarkers(macrophage.T, ident.1="liOVA", min.pct = 0.01, logfc.threshold = -0, min.cells.feature = 1, min.cells.group = 1) + +combo.ranks <- combo$avg_log2FC +IL12.ranks <- IL12$avg_log2FC +IFNa.ranks <- IFNa$avg_log2FC +OVA.ranks <- OVA$avg_log2FC + +names(combo.ranks) <- rownames(combo) +names(IL12.ranks) <- rownames(IL12) +names(IFNa.ranks) <- rownames(IFNa) +names(OVA.ranks) <- rownames(OVA) + +res.combo<-fgsea(pathways = miDB_sig4.MLS, stats = combo.ranks, minSize=0, maxSize=500, eps=0) # I added eps=0, before was nPermSimple=50000 +res.IL12<-fgsea(pathways = miDB_sig4.MLS, stats = IL12.ranks, minSize=0, maxSize=500, eps=0) +res.IFNa<-fgsea(pathways = miDB_sig4.MLS, stats = IFNa.ranks, minSize=0, maxSize=500, eps=0) +res.OVA<-fgsea(pathways = miDB_sig4.MLS, stats = OVA.ranks, minSize=0, maxSize=500, eps=0) # before was nPermSimple=500000 + +#saveRDS(res.OVA, paste0(pdir, "FGSEA_KCmonoMacs_tumor_OVAvsAll_nperm500000.rds")) + + +# select the columns of interest +res.combo2<-res.combo[,c(1,3,6,8)] +res.IL122<-res.IL12[,c(1,3,6,8)] +res.IFNa2<-res.IFNa[,c(1,3,6,8)] +res.OVA2<-res.OVA[,c(1,3,6,8)] + +# merge in a single file and save xlsx +merge1 <- merge(x=res.combo2,y=res.IL122,by="pathway", suffixes = c("-Combo", "-Il12")) +merge2 <- merge(x=res.IFNa2,y=res.OVA2,by="pathway", suffixes = c("-IFna", "-OVA")) +merge3 <- merge(x=merge1,y=merge2,by="pathway") + +write.xlsx(merge3, paste0(pdir, "/GSEA_T_monomackc_vsOVA.xlsx"), asTable=T, rowNames=T) #save file + + +##################GSEA Heatmap of selected####################################### +# Rearrange data to plot heatmap +res.combo$origin<-"OVA.Combo" +res.IL12$origin<-"OVA.Il12" +res.IFNa$origin<-"OVA.IFNa" +res.OVA$origin<-"liOVA" + +merge.results<-rbind(res.combo,res.IL12,res.IFNa,res.OVA) + +# Create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + +# Manually selected pathways +a1<-c("IFNa_RO", +"HALLMARK_INTERFERON_GAMMA_RESPONSE", +"GOMF_ANTIGEN_BINDING", +"GOBP_POSITIVE_REGULATION_OF_LEUKOCYTE_CELL_CELL_ADHESION", +"GOBP_POSITIVE_REGULATION_OF_CELL_KILLING", +"GOCC_MHC_PROTEIN_COMPLEX", +"GOMF_MHC_CLASS_II_RECEPTOR_ACTIVITY", +"GOCC_MHC_CLASS_II_PROTEIN_COMPLEX", +"GOBP_ANTIGEN_PROCESSING_AND_PRESENTATION_OF_EXOGENOUS_PEPTIDE_ANTIGEN_VIA_MHC_CLASS_I_TAP_INDEPENDENT") + +# Subset selected pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# Rename the pathways +merge.results1[merge.results1 == "IFNa_RO"] <- "IFNa response (Cilenti et all)" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Hallmark_IFNg response" +merge.results1[merge.results1 == "GOMF_ANTIGEN_BINDING"] <- "Antigen Binding" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_LEUKOCYTE_CELL_CELL_ADHESION"] <- "Positive regulation of cell adhesion" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_CELL_KILLING"] <- "Positive regulation of cell killing" +merge.results1[merge.results1 == "GOCC_MHC_PROTEIN_COMPLEX"] <- "MHC protein complex" +merge.results1[merge.results1 == "GOMF_MHC_CLASS_II_RECEPTOR_ACTIVITY"] <- "MHC-II activity" +merge.results1[merge.results1 == "GOCC_MHC_CLASS_II_PROTEIN_COMPLEX"] <- "MHC-II protein complex" +merge.results1[merge.results1 == "GOBP_ANTIGEN_PROCESSING_AND_PRESENTATION_OF_EXOGENOUS_PEPTIDE_ANTIGEN_VIA_MHC_CLASS_I_TAP_INDEPENDENT"] <- "Antigen processing and presentation" + +# Order in the way we want to see +merge.results1$pathway <- factor(merge.results1$pathway, levels = c("IFNa response (Cilenti et all)", + "Hallmark_IFNg response", + "Positive regulation of cell adhesion", + "Positive regulation of cell killing", + "Antigen processing and presentation", + "Antigen Binding", + "MHC protein complex", + "MHC-II protein complex", + "MHC-II activity")) + +merge.results1$origin<- factor(x = merge.results1$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + + +# Heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + + ggtitle("GSEA_MacroKCandmono vs OVA_Tumor") +ggsave(filename = paste0(pdir, "/Tumor_MacroKCsMonovsOVA_FigS2D.pdf"), plot=y, width=5, height=3) + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.00001,] +filter_in <- head(unique(merge.results_temp$pathway), 100) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust=0.7, angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle=90, vjust=0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + ggtitle("GSEA_MacroKCandmono vs OVA_Tumor") +ggsave(filename = paste0(pdir, "/Tumor_MacroKCsMonovsOVA_unbias.pdf"), plot=y, width=20, height=30) # limitsize = FALSE + + +##############ENDS here##################################### \ No newline at end of file diff --git a/TAD018/002_TAD018_Liver_Tumor_TNK_dotplot_radar_GSEA.R b/TAD018/002_TAD018_Liver_Tumor_TNK_dotplot_radar_GSEA.R new file mode 100644 index 0000000000000000000000000000000000000000..f85f27e43ed0b790405b8efe8fd7d337d0b27a1e --- /dev/null +++ b/TAD018/002_TAD018_Liver_Tumor_TNK_dotplot_radar_GSEA.R @@ -0,0 +1,774 @@ +library(Seurat) +library(openxlsx) +library(readxl) +library(tidyr) +library("RColorBrewer") +library(dplyr) +library(scRepertoire) +library(reshape2) +library(fgsea) +library(ggplot2) +library(matrixStats) +library(fmsb) + +cluster_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/results3" +wdir<- paste0(cluster_dir, "/Result3_MNOT") +ldir<- paste0(cluster_dir, "/Liver_TandNK/") +tdir<- paste0(cluster_dir, "/Tumor_TandNK/") +pdir<- paste0(cluster_dir, "/Result3_MNOT/Plots") + + +#############################UPLOAD AND LABELLING LIVER############### +############Load LIVER object and add annotations################### +obs1 <- readRDS(paste0(ldir, "Liver_TandNK_final.rds")) +# Remove undefined +obs1 <- subset(obs1, subset=NewlablesM_clu != "undefined") + +# Assign groups +a1 <- grep(pattern = "Liver3",x = unique(obs1@meta.data$orig.ident),value=T) +obs1@meta.data$RNA_Group [obs1@meta.data$orig.ident%in%a1]<- "OVA.IL12" +a1 <- grep(pattern = "Liver10",x = unique(obs1@meta.data$orig.ident),value=T) +obs1@meta.data$RNA_Group [obs1@meta.data$orig.ident%in%a1]<- "OVA.IFNa" +a1 <- grep(pattern = "Liver11",x = unique(obs1@meta.data$orig.ident),value=T) +obs1@meta.data$RNA_Group [obs1@meta.data$orig.ident%in%a1]<- "OVA" +a1 <- grep(pattern = "Liver9",x = unique(obs1@meta.data$orig.ident),value=T) +obs1@meta.data$RNA_Group [obs1@meta.data$orig.ident%in%a1]<- "Combo" +#Tissue assign +a1 <- grep(pattern = "Liver",x = unique(obs1@meta.data$orig.ident),value=T) +obs1@meta.data$Tissue [obs1@meta.data$orig.ident%in%a1]<- "Liver" +#sample origin +obs1$Tube <- paste0(obs1$RNA_Group,obs1$hash.ID) +obs1@meta.data$RNA_Group<- factor(x = obs1@meta.data$RNA_Group, levels = c("OVA","OVA.IFNa","OVA.IL12","Combo")) + +# Create lables for all CD8 and CD4 T cells +obs1@meta.data$NewlablesG <- obs1@meta.data$NewlablesM_clu +obs1@meta.data$NewlablesG[grep("CD4",obs1@meta.data$NewlablesM_clu) ] <- "CD4 T cells" +obs1@meta.data$NewlablesG[grep("CD8",obs1@meta.data$NewlablesM_clu)] <- "CD8 T cells" + +#create lables CD4 and CD8 clusters wothout naive +obs1@meta.data$NewlablesS <- obs1@meta.data$NewlablesM_clu +indCd4<- grepl("CD4",obs1@meta.data$NewlablesM_clu) & !grepl("Naive",obs1@meta.data$NewlablesM_clu) +indCd8<- grepl("CD8",obs1@meta.data$NewlablesM_clu) & !grepl("Naive",obs1@meta.data$NewlablesM_clu) +obs1@meta.data$NewlablesS[indCd4] <- "CD4 T cells" +obs1@meta.data$NewlablesS[indCd8] <- "CD8 T cells" +obs1@meta.data$NewlablesST <- paste0(obs1@meta.data$Tissue,".",obs1@meta.data$NewlablesS) + +###################UPLOADING AND LABELLING TUMOR OBJECT############################# +#################################################################################### +#Load +Tobs<- readRDS(paste0(tdir, "Tumor_TandNK_final.rds")) + +a1 <- grep(pattern = "Tumor3",x = unique(Tobs@meta.data$orig.ident),value=T) +Tobs@meta.data$RNA_Group [Tobs@meta.data$orig.ident%in%a1]<- "OVA.IL12" +a1 <- grep(pattern = "Tumor10",x = unique(Tobs@meta.data$orig.ident),value=T) +Tobs@meta.data$RNA_Group [Tobs@meta.data$orig.ident%in%a1]<- "OVA.IFNa" +a1 <- grep(pattern = "Tumor11",x = unique(Tobs@meta.data$orig.ident),value=T) +Tobs@meta.data$RNA_Group [Tobs@meta.data$orig.ident%in%a1]<- "OVA" +a1 <- grep(pattern = "Tumor34|Tumor29",x = unique(Tobs@meta.data$orig.ident),value=T) +Tobs@meta.data$RNA_Group [Tobs@meta.data$orig.ident%in%a1]<- "Combo" +#Tissue Sample assign +Tobs$Tube <- paste0(Tobs$hash.ID,Tobs$RNA_Group) +#Ordering RNA_Group +Tobs@meta.data$RNA_Group<- factor(x = Tobs@meta.data$RNA_Group, levels = c("OVA","OVA.IFNa","OVA.IL12","Combo")) +Tobs@meta.data$Tissue<- "Tumor" + +#create lables for all CD8 and CD4 t cells +Tobs@meta.data$NewlablesG <- Tobs@meta.data$NewlablesM_clu +Tobs@meta.data$NewlablesG[grep("CD4",Tobs@meta.data$NewlablesM_clu) ] <- "CD4 T cells" +Tobs@meta.data$NewlablesG[grep("CD8",Tobs@meta.data$NewlablesM_clu)] <- "CD8 T cells" + +#create labels CD4 and CD8 clusters without naive +Tobs@meta.data$NewlablesS <- Tobs@meta.data$NewlablesM_clu +indCd4<- grepl("CD4",Tobs@meta.data$NewlablesM_clu) & !grepl("Naive",Tobs@meta.data$NewlablesM_clu) +indCd8<- grepl("CD8",Tobs@meta.data$NewlablesM_clu) & !grepl("Naive",Tobs@meta.data$NewlablesM_clu) +Tobs@meta.data$NewlablesS[indCd4] <- "CD4 T cells" +Tobs@meta.data$NewlablesS[indCd8] <- "CD8 T cells" +Tobs@meta.data$NewlablesST <- paste0(Tobs@meta.data$Tissue,".",Tobs@meta.data$NewlablesS) + + +###Calculating hyperexpanded T cells############# +##########LIVER############################## +obs1$aa3.Tube <- paste0(obs1$cdr3_aa2,".",obs1$Tube) +obs1$aa3.Tube[is.na(obs1$cdr3_aa2)] <- NA +obs1@meta.data$ClonoFreq <- obs1@meta.data %>% group_by(aa3.Tube) %>% mutate(count = n()) %>% ungroup() %>% + as.data.frame() %>% select (count) +obs1@meta.data$ClonoFreq[is.na(obs1$cdr3_aa2),] <- NA + +obs1@meta.data$Clonetype <- NA +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq==1] <- "unique" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 1 & obs1@meta.data$ClonoFreq <= 5] <- "small" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 5 & obs1@meta.data$ClonoFreq <= 30] <- "large" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 30] <- "hyperexpanded" + +obs1$Clonetype <- factor(x = obs1$Clonetype, levels = c("unique", "small", "large", "hyperexpanded")) #order clonotype variable + +##########TUMOR############################## +Tobs$aa3.Tube <- paste0(Tobs$cdr3_aa2,".",Tobs$Tube) +Tobs$aa3.Tube[is.na(Tobs$cdr3_aa2)] <- NA +Tobs@meta.data$ClonoFreq <- Tobs@meta.data %>% group_by(aa3.Tube) %>% mutate(count = n()) %>% ungroup() %>% + as.data.frame() %>% select (count) +Tobs@meta.data$ClonoFreq[is.na(Tobs$cdr3_aa2),] <- NA + +Tobs@meta.data$Clonetype <- NA +Tobs@meta.data$Clonetype[Tobs@meta.data$ClonoFreq==1] <- "unique" +Tobs@meta.data$Clonetype[Tobs@meta.data$ClonoFreq > 1 & Tobs@meta.data$ClonoFreq <= 5] <- "small" +Tobs@meta.data$Clonetype[Tobs@meta.data$ClonoFreq > 5 & Tobs@meta.data$ClonoFreq <= 30] <- "large" +Tobs@meta.data$Clonetype[Tobs@meta.data$ClonoFreq > 30] <- "hyperexpanded" + +Tobs$Clonetype <- factor(x = Tobs$Clonetype, levels = c("unique", "small", "large", "hyperexpanded")) #order clonotype variable + + +############################################ +######FINDING Tetramer reactive TCRs######## +############################################ +ind1 <- obs1$ADT.Tetramer +ind1 <- ind1[order(ind1)] + +TetramerCount <- obs1@meta.data$ADT.Tetramer[!is.na(obs1@meta.data$ADT.Tetramer)] +TetramerCount <-TetramerCount[TetramerCount > 0] + +obs1@meta.data$TetramerT <- "Other" +obs1@meta.data$TetramerT[obs1@meta.data$ADT.Tetramer>2] <- "OVA.TCR" + +df1 <- data.frame(obs1$cdr3_aa2, obs1$TetramerT, obs1$ClonoFreq, obs1$Tissue) +df1$aa3.OVA <- paste0(obs1$cdr3_aa2,".",obs1$TetramerT) +df1 <- na.omit(df1) +df1l <- df1[df1$obs1.Tissue=="Liver",] +df2 <- df1l %>% group_by(aa3.OVA) %>% mutate(count = n()) %>% ungroup() %>% as.data.frame() +df3 <- df2 %>% select(obs1.cdr3_aa2,obs1.TetramerT,obs1.ClonoFreq,count) %>% unique() %>% + pivot_wider(names_from = obs1.TetramerT, values_from = count) %>% as.data.frame() +df3[is.na(df3)] <- 0 +df3$Tumor <- df3[,2]-df3[,3]-df3[,4] +OVA.TCRs <- df3$obs1.cdr3_aa2[df3[,4]/df3[,3]>1] + +df1 <- data.frame(obs1$cdr3_aa2, obs1$TetramerT,obs1$ClonoFreq,obs1$Tissue,obs1$Tube) +df1$aa3.Tube <-paste0(obs1$cdr3_aa2,".",obs1$TetramerT,".",obs1$Tube) +df1 <- na.omit(df1) +df1l <- df1[df1$obs1.Tissue=="Liver",] +df2 <- df1l %>% group_by(aa3.Tube) %>% mutate(count = n()) %>% ungroup() %>% as.data.frame() +df3T <- df2 %>% select(obs1.cdr3_aa2,obs1.TetramerT,obs1.Tube,obs1.ClonoFreq,count) %>% unique() %>% + pivot_wider(names_from = obs1.TetramerT, values_from = count) %>% as.data.frame() +df3T[is.na(df3T)] <- 0 + +######Indicating Tetramer OVA in liver +obs1$OVA.reactive <- ifelse(obs1$cdr3_aa2 %in% OVA.TCRs, "OVA", "Other") +obs1@meta.data$TetramerTS <- paste0(obs1@meta.data$OVA.reactive,".",obs1@meta.data$NewlablesS) +obs1$OVA.reactive.CD8 <- ifelse(obs1$OVA.reactive=="OVA" & obs1$NewlablesG=="CD8 T cells", "OVA", "Other") + +######Indicating Tetramer OVA in tumor +Tobs$OVA.reactive <- ifelse(Tobs$cdr3_aa2 %in% OVA.TCRs, "OVA", "Other") +Tobs@meta.data$TetramerTS <- paste0(Tobs@meta.data$OVA.reactive,".",Tobs@meta.data$NewlablesS) +Tobs$OVA.reactive.CD8 <- ifelse(Tobs$OVA.reactive=="OVA" & Tobs$NewlablesG=="CD8 T cells", "OVA", "Other") + + +######TISSUE SHARED CLONOTYPES with tumors######## +# clonotypes in Liver +df1<-data.frame(obs1@meta.data$cdr3_aa2,obs1@meta.data$hash.ID,obs1@meta.data$RNA_Group, obs1@meta.data$Tissue) +df2<-na.omit(df1) +df2$cdr3_mouse<-paste0(df2$obs1.meta.data.cdr3_aa2,".",df2$obs1.meta.data.hash.ID,".",df2$obs1.meta.data.RNA_Group) + +# clonotypes in Tumor +df3<-data.frame(Tobs@meta.data$cdr3_aa2,Tobs@meta.data$hash.ID,Tobs@meta.data$RNA_Group, Tobs@meta.data$Tissue) +df4<-na.omit(df3) +df4$cdr3_mouse<-paste0(df4$Tobs.meta.data.cdr3_aa2,".",df4$Tobs.meta.data.hash.ID,".",df4$Tobs.meta.data.RNA_Group) + +# List of Shared clonotypes +shared_cdr3aa <- intersect(df2$cdr3_mouse, df4$cdr3_mouse) + +# Add variable shared in liver +obs1$cdr3_mouse<-paste0(obs1$cdr3_aa2,".",obs1$hash.ID,".",obs1$RNA_Group) +obs1$Shared <- ifelse(obs1$cdr3_mouse %in% shared_cdr3aa, "Shared", "Unique") + +# Add variable shared in tumor +Tobs$cdr3_mouse<-paste0(Tobs$cdr3_aa2,".",Tobs$hash.ID,".",Tobs$RNA_Group) +Tobs$Shared <- ifelse(Tobs$cdr3_mouse %in% shared_cdr3aa, "Shared", "Unique") + + +# Add new variables in liver +obs1@meta.data$New_division <- obs1@meta.data$NewlablesM_clu +ind<- grepl("CD4",obs1@meta.data$NewlablesM_clu) & grepl("Shared",obs1@meta.data$Shared) +obs1@meta.data$New_division[ind] <- "Shared CD4" +ind<- grepl("CD8",obs1@meta.data$NewlablesM_clu) & grepl("Shared",obs1@meta.data$Shared) +obs1@meta.data$New_division[ind] <- "Shared CD8" +ind<- grepl("CD8",obs1@meta.data$NewlablesM_clu) & grepl("OVA",obs1@meta.data$OVA.reactive) +obs1@meta.data$New_division[ind] <- "OVA.reactive" +obs1@meta.data$New_division2 <- "Other" +ind<- grepl("CD4",obs1@meta.data$NewlablesM_clu) & grepl("Shared",obs1@meta.data$Shared) +obs1@meta.data$New_division2[ind] <- "Shared CD4" + +# Variable with shared CD4 only in selected groups +obs1$New_division3<-paste0(obs1$New_division2,".",obs1$RNA_Group) +obs1@meta.data$New_division3[obs1@meta.data$New_division3 %in% "Shared CD4.OVA.IFNa"] <- "Other.OVA.IFNa" +obs1@meta.data$New_division3[obs1@meta.data$New_division3 %in% "Shared CD4.OVA"] <- "Other.OVA" + + +# Add new variables in tumor +Tobs@meta.data$New_division <- Tobs@meta.data$NewlablesM_clu +ind<- grepl("CD4",Tobs@meta.data$NewlablesM_clu) & grepl("Shared",Tobs@meta.data$Shared) +Tobs@meta.data$New_division[ind] <- "Shared CD4" +ind<- grepl("CD8",Tobs@meta.data$NewlablesM_clu) & grepl("Shared",Tobs@meta.data$Shared) +Tobs@meta.data$New_division[ind] <- "Shared CD8" +ind<- grepl("CD8",Tobs@meta.data$NewlablesM_clu) & grepl("OVA",Tobs@meta.data$OVA.reactive) +Tobs@meta.data$New_division[ind] <- "OVA.reactive" +Tobs@meta.data$New_division2 <- "Other" +ind<- grepl("CD4",Tobs@meta.data$NewlablesM_clu) & grepl("Shared",Tobs@meta.data$Shared) +Tobs@meta.data$New_division2[ind] <- "Shared CD4" + + +#######################Plot UMAP################ + +table(obs1$OVA.reactive.CD8, obs1$NewlablesG) + +# Save plot +pdf(paste0(pdir, "/TandNK_umap_Fig3A.pdf"), width=7, height=6) # Figure 3A +DimPlot(obs1, reduction = "umap.harmony.orig.ident",group.by = "NewlablesM_clu", pt.size = 0.5, label = T, label.size = 3, repel = T) +dev.off() +pdf(paste0(pdir, "/tetramer_umap_Fig3E.pdf"), width=7, height=6) # Figure 3E +DimPlot(obs1, reduction = "umap.harmony.orig.ident",group.by = "OVA.reactive.CD8", pt.size = 0.5, label = F, order = c("OVA", "Others"), cols = c("lightgrey", "blue")) +dev.off() +pdf(paste0(pdir, "/shared_cd4_umap_Fig3I.pdf"), width=7, height=6) # Figure 3I +DimPlot(obs1, reduction = "umap.harmony.orig.ident",group.by = "New_division2", pt.size = 0.5, label = F, order = c("Shared CD4", "Others"), cols = c("lightgrey", "blue")) +dev.off() + +# Export DimPlot as excel +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.1.2","NewlablesM_clu","Shared","OVA.reactive.CD8","New_division2") +TandNK_df <- FetchData(obs1, vars = var_list) +TandNK_df$cell_ID <- rownames(TandNK_df) +write.xlsx(TandNK_df, file=paste0(pdir, "/TandNK_umap_Fig3A_3E_3I.xlsx"), overwrite=T) + +#######################Plot UMAP################ + +# # NO_TCR +# # Save plot +# pdf(paste0(pdir, "/TandNK_umap_NO_TCR_FigS13C-1.pdf"), width=7, height=6) # Figure S13C-1 +# DimPlot(obs1, reduction = "umap.harmony.orig.ident",group.by = "NewlablesM_clu", pt.size = 0.5, label = T, label.size = 3, repel = T) +# dev.off() +# pdf(paste0(pdir, "/tetramer_umap_NO_TCR_FigS13C-2.pdf"), width=7, height=6) # Figure S13C-2 +# DimPlot(obs1, reduction = "umap.harmony.orig.ident",group.by = "OVA.reactive.CD8", pt.size = 0.5, label = F, order = c("OVA", "Others"), cols = c("lightgrey", "blue")) +# dev.off() +# +# # Export DimPlot as excel +# var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.1.2","NewlablesM_clu","Shared","OVA.reactive.CD8","New_division2") +# TandNK_df <- FetchData(obs1, vars = var_list) +# TandNK_df$cell_ID <- rownames(TandNK_df) +# write.xlsx(TandNK_df, file=paste0(pdir, "/TandNK_umap_NO_TCR_FigS13C.xlsx"), overwrite=T) + + +############################################################################## +################Figure S3A - Cluster dotplot markers########################## +obs1@meta.data$NewlablesM_clu_temp <- obs1@meta.data$NewlablesM_clu +new_order <- c("Naive CD8","Naive CD4","CD4 Treg","Th17 CD4","NK","Cytotox NK", + "Early CD8","CD8 prol","CD8 Teff1","CD8 Teff2","CD8 Teff3", + "Act gd T ","gd T","ILC-like","ILCs","IFNg CD4","Il4 CD4") +obs1@meta.data$NewlablesM_clu <- factor(x = obs1@meta.data$NewlablesM_clu, levels = new_order) + +#t<-as.matrix(table(obs1$NewlablesM_clu)) +#as.vector(unique(Idents(obs1))) +#setdiff(new_order, as.vector(unique(Idents(obs1)))) + +#Code to select top scoring and selective genes for each cluster +obs1<-SetIdent(obs1, value = "NewlablesM_clu") +markers<- FindAllMarkers(obs1) +#write.xlsx(markers, file=paste0(pdir, "/Markers_Newlables_clu.xlsx"),asTable=T,rowNames=T) # save file +markers$diff<-markers$pct.1-markers$pct.2 #add diff variable to select most selective genes +top_genes_per_cluster <- c() +for (i in unique(markers$cluster)) { + cluster_genes <- markers[markers$cluster == i,] # select cluster i + cluster_genes<-cluster_genes[rev(order(cluster_genes$diff)),] #order by diff ptc1-ptc2 + top_genes <- cluster_genes$gene[(1:3)] #select top scoring 1:n + top_genes_per_cluster <- c(top_genes_per_cluster,top_genes) +} + +manual_genes<-c("Il4","Tbx21","Rorc","Il17a","Foxp3","Ifng","Mki67", + "Gzmb","Tox","Pdcd1") + +features_to_plot <- unique(c(top_genes_per_cluster, manual_genes)) +print(features_to_plot) + +paletteLength <- 100 +myColor <- colorRampPalette(c("blue", "darkgrey", "darkred"))(paletteLength) + +pdf(paste0(pdir, "/dotplot.markers.clusters.livercd8_not_clustered_Fig.S3A.pdf"), width=10, height=5) +a5<-scCustomize::Clustered_DotPlot(obs1, + features = features_to_plot, + plot_km_elbow=F, + row_label_size=10, + flip=T, colors_use_exp = myColor, + cluster_feature=F, cluster_ident=F) +dev.off() + +pdf(paste0(pdir, "/dotplot.markers.clusters.livercd8_Fig.S3A.pdf"), width=10, height=5) +a5<-scCustomize::Clustered_DotPlot(obs1, + features = features_to_plot, + plot_km_elbow=F, + row_label_size=10, + flip=T, colors_use_exp = myColor, + cluster_feature=T, cluster_ident=T) +dev.off() + +########################################################## +####DOTPLOT WITH STATISTIC FROM LIVER#### + +# The function PlotStellare is in the script plot_stellare_function.R +# Figures 3D and S3C +pdf(paste0(pdir, "/Dotplot_stellare_CD8_liver_Fig3D.pdf"), width=12, height=3) # Figure 3D +PlotStellare(obs1=obs1, features1=featuresCD8, valueG="NewlablesG", i="CD8 T cells", group.by0 ="RNA_Group", controGroup="OVA") +dev.off() + +pdf(paste0(pdir, "/Dotplot_stellare_tetramer_liver_FigS3C.pdf"), width=12, height=3) # Figure S3C +PlotStellare(obs1=obs1, features1=featuresCD8, valueG="OVA.reactive.CD8", i="OVA", group.by0 ="RNA_Group", controGroup="OVA") +dev.off() + + +######################################## +####Figure 3J - TABLE POP PERCENTAGE CD4 +CD4 <- subset(obs1, subset = NewlablesG=="CD4 T cells") + +liver.CD4_cells <- table(CD4$Tube, CD4$NewlablesM_clu) +liver.CD4_percentage <- round(prop.table(table(CD4$Tube, CD4$NewlablesM_clu), 1)*100, 2) +write.xlsx(liver.CD4_cells, file=paste0(pdir, "/liver.CD4.prop.number.xlsx")) +write.xlsx(liver.CD4_percentage, file=paste0(pdir, "/liver.CD4.prop.percentage.tube.xlsx")) + +####Figure 3K - clonal expansion CD4 +liver.CD4_group_cells <- table(CD4$RNA_Group, CD4$Clonetype) +liver.CD4_group_percentage <- round(prop.table(table(CD4$RNA_Group, CD4$Clonetype), 1)*100, 2) +write.xlsx(liver.CD4_group_percentage, file=paste0(pdir, "/liver.CD4.clonotypes.xlsx")) + + +#####################Figure S3D - Plot of shared CD4 in different groups############# +features1<-c("Stat1","Ly6c2","Oas1a","Irf8","Ifitm3", #Ifna + "Il18rap","Il18r1","Il12rb1","Gbp2", #Ifng genes + "Ifng","Tnf","Il21","Gzmk","Fasl","Cd40lg","Slamf1", #Th1/effector genes + "Il10","Foxp3","Pdcd1","Ctla4","Tnfrsf18","Tigit","Tox") #immune suppression + +CD4$New_division3<- factor(x = CD4$New_division3, levels = c("Other.OVA","Other.OVA.IFNa","Other.OVA.IL12","Shared CD4.OVA.IL12","Other.Combo","Shared CD4.Combo")) +CD4_shared<-subset(CD4, subset= RNA_Group == "Combo"| + RNA_Group =="OVA.IL12") + +CD4_shared<-SetIdent(CD4_shared, value = "New_division3") + +CD4_shared<-SetIdent(CD4_shared, value = "Tissue") +i <- unique(CD4_shared$Tissue)[1] + +pa1 <- DotPlot(CD4_shared, features = features1,idents = i, dot.scale=15,split.by = "New_division3", + cols="RdBu")+RotatedAxis() +df1 <- pa1$data +df1$id <- factor(x = df1$id, levels = unique(df1$id)[c(4,1,2,3)]) + +m.Combo <- FindMarkers(CD4_shared, ident.1 = "Shared CD4.Combo", ident.2="Other.Combo", group.by = "New_division3", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature=1, min.cells.group=1) +m.Combo <- m.Combo[match(features1,rownames(m.Combo)),] + +other.Combo <- FindMarkers(CD4_shared, ident.1 = "Other.Combo", ident.2="Shared CD4.Combo", group.by = "New_division3", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature=1, min.cells.group=1) +other.Combo <- other.Combo[match(features1,rownames(other.Combo)),] + +m.IL12 <- FindMarkers(CD4_shared, ident.1 = "Shared CD4.OVA.IL12", ident.2 = "Other.OVA.IL12", group.by = "New_division3", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature=1, min.cells.group=1) +m.IL12 <- m.IL12[match(features1,rownames(m.IL12)),] +other.IL12 <- FindMarkers(CD4_shared, ident.1 = "Other.OVA.IL12", ident.2 = "Shared CD4.OVA.IL12", group.by = "New_division3", + subset.ident = i,features = features1, + min.pct = 0.01, logfc.threshold = 0, min.cells.feature=1, min.cells.group=1) +other.IL12 <- other.IL12[match(features1,rownames(other.IL12)),] + +other.IL12$p_val_adj<-1 +other.Combo$p_val_adj<-1 + +markers1 <- rbind(other.IL12,m.IL12,other.Combo,m.Combo) + +df2 <- cbind(df1,markers1) +df2$stars <- ifelse(df2$p_val_adj< 0.001,"***", + ifelse(df2$p_val_adj< 0.01,"**", + ifelse(df2$p_val_adj< 0.05,"*",""))) + + +df2$id <- factor(x = df2$id, levels = c("Liver_Other.OVA.IL12","Liver_Shared CD4.OVA.IL12","Liver_Other.Combo","Liver_Shared CD4.Combo")) + +a<-ggplot(df2, aes(y=id, x=features.plot, size=pct.exp ,color=avg.exp.scaled)) + + geom_point() + + scale_size_area(max_size=15) + + scale_colour_gradient2(low= "blue",mid = "darkgrey",high="darkred") + ####"#CCCCFF" + labs(y='',x='')+ + geom_text(aes(label=stars, vjust=0.8), col="black", size=4)+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), + axis.text.x = element_text(angle = 45, hjust= 1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black"))+ + ggtitle("Dotplot Shared CD4") +ggsave(filename = paste0(pdir, "/Dotplot_stellare_CD4.shared_FigS3D.pdf"), + plot=a, width=11, height=3) # Figure S3D + + +##########################GSEA######################################### +##################Figure 3B FGSEA on all TandNK######################## +# Load signature +#miDB_sig4.MLS <- readRDS(paste0(username, "90-756142658_RNAseq_Squadrito/05-DGE-Tumor/miDB_sig4.MLS.rds")) +miDB_sig4.MLS <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/reference/miDB_sig4.MLS.rds") + +obs1<-SetIdent(obs1, value = "RNA_Group") +combo<-FindMarkers(obs1, ident.1="Combo", ident.2 ="OVA", min.pct=0.01, logfc.threshold=0) +IL12<-FindMarkers(obs1, ident.1="OVA.IL12", ident.2 ="OVA", min.pct=0.01, logfc.threshold=0) +IFNa<-FindMarkers(obs1, ident.1="OVA.IFNa", ident.2 ="OVA", min.pct=0.01, logfc.threshold=0) +OVA<-FindMarkers(obs1, ident.1="OVA", min.pct=0.01, logfc.threshold=0) + +combo.ranks <- combo$avg_log2FC +IL12.ranks <- IL12$avg_log2FC +IFNa.ranks <- IFNa$avg_log2FC +OVA.ranks <- OVA$avg_log2FC + +names(combo.ranks) <- rownames(combo) +names(IL12.ranks) <- rownames(IL12) +names(IFNa.ranks) <- rownames(IFNa) +names(OVA.ranks) <- rownames(OVA) + +res.combo<-fgsea(pathways = miDB_sig4.MLS, stats = combo.ranks, minSize=0, maxSize=500, eps=0) +res.IL12<-fgsea(pathways = miDB_sig4.MLS, stats = IL12.ranks, minSize=0, maxSize=500, eps=0) +res.OVA<-fgsea(pathways = miDB_sig4.MLS, stats = OVA.ranks, minSize=0, maxSize=500, eps=0) #nPermSimple = 500000 +res.IFNa<-fgsea(pathways = miDB_sig4.MLS, stats = IFNa.ranks, minSize=0, maxSize=500, eps=0) + +#select columns of interest +res.combo2<-res.combo[,c(1,3,6,8)] +res.IL122<-res.IL12[,c(1,3,6,8)] +res.IFNa2<-res.IFNa[,c(1,3,6,8)] +res.OVA2<-res.OVA[,c(1,3,6,8)] + +# merge in a single file and save xlsx +# merge1 <- merge(x=res.combo2,y=res.IL122,by="pathway", suffixes = c("-Combo", "-Il12")) +# merge2 <- merge(x=res.IFNa2,y=res.OVA2,by="pathway", suffixes = c("-IFna", "-OVA")) +# merge3<-merge(x=merge1,y=merge2,by="pathway") +# write.xlsx(merge3,paste0(pdir "/GSEA_L_allTnK.xlsx"),asTable = TRUE,rowNames=T) ####save file + +#rearrange data to plot heatmap +res.combo$origin<-"OVA.Combo" +res.IL12$origin<-"OVA.Il12" +res.IFNa$origin<-"OVA.IFNa" +res.OVA$origin<-"liOVA" + +merge.results<-rbind(res.combo,res.IL12,res.IFNa,res.OVA) + +#create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + + +#pathway manually selected +a1<-c("GOBP_NEGATIVE_REGULATION_OF_VIRAL_GENOME_REPLICATION", + "GOBP_RESPONSE_TO_TYPE_I_INTERFERON", + "GOBP_CELL_DIVISION", + "GOBP_RESPONSE_TO_INTERFERON_GAMMA", + "GOBP_POSITIVE_REGULATION_OF_CELL_CYCLE_PROCESS") + +# Subset selected pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# Rename pathways +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_TYPE_I_INTERFERON"] <- "Response to IFNa" +merge.results1[merge.results1 == "GOBP_CELL_DIVISION"] <- "Cell division" +merge.results1[merge.results1 == "GOBP_NEGATIVE_REGULATION_OF_VIRAL_GENOME_REPLICATION"] <- "Negative regulation of viral replication" +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_INTERFERON_GAMMA"] <- "Response to IFNg" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_CELL_CYCLE_PROCESS"] <- "Positive regulation of proliferation" + +# Order in the way we want to see +merge.results1$pathway<- factor(merge.results1$pathway, levels = rev(c("Response to IFNa", + "Response to IFNg", + "Negative regulation of viral replication", + "Positive regulation of proliferation", + "Cell division"))) + +merge.results1$origin<- factor(x = merge.results1$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + +#Heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust=0.7,angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), + axis.text.x = element_text(angle = 45, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + + ggtitle("GSEA_TandNK_Specific") +ggsave(filename = paste0(pdir, "/GSEA_heatmap_TandNK_Fig3B.pdf"), plot=y, width=5, height=3) + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.00001,] +filter_in <- head(unique(merge.results$pathway), 50) +filter_in <- unique(merge.results_temp$pathway) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + +ggtitle("GSEA_TandNK_Specific") +ggsave(filename = paste0(pdir, "/GSEA_heatmap_TandNK_unbias.pdf"), plot=y, width=15, height=30) # limitsize = FALSE + + +###############Figure 3F Only OVA Specific##### +tetramer.t<-subset(obs1, subset = OVA.reactive== "OVA" & + NewlablesG =="CD8 T cells") +tetramer.t<-SetIdent(tetramer.t, value = "RNA_Group") + +combo<-FindMarkers(tetramer.t, ident.1="Combo", ident.2 ="OVA", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +IL12<-FindMarkers(tetramer.t, ident.1="OVA.IL12", ident.2 ="OVA", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +IFNa<-FindMarkers(tetramer.t, ident.1="OVA.IFNa", ident.2 ="OVA", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +OVA<-FindMarkers(tetramer.t, ident.1="OVA", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) + +combo.ranks <- combo$avg_log2FC +IL12.ranks <- IL12$avg_log2FC +IFNa.ranks <- IFNa$avg_log2FC +OVA.ranks <- OVA$avg_log2FC + +names(combo.ranks) <- rownames(combo) +names(IL12.ranks) <- rownames(IL12) +names(IFNa.ranks) <- rownames(IFNa) +names(OVA.ranks) <- rownames(OVA) +res.combo <- fgsea(pathways = miDB_sig4.MLS, stats = combo.ranks, minSize=0, maxSize=500, eps=0) # I added eps=0 +res.IL12 <- fgsea(pathways = miDB_sig4.MLS, stats = IL12.ranks, minSize=0, maxSize=500, eps=0) # nPermSimple = 500000 +res.OVA <- fgsea(pathways = miDB_sig4.MLS, stats = OVA.ranks, minSize=0, maxSize=500, eps=0) # nPermSimple = 500000 +res.IFNa <- fgsea(pathways = miDB_sig4.MLS, stats = IFNa.ranks, minSize=0, maxSize=500, eps=0) + +# saveRDS(res.OVA, paste0(pdir, "/FGSEA_L_tetramer_OVA-vsALL_nperm500000.rds")) +# saveRDS(res.IL12, paste0(pdir, "/FGSEA_L_tetramer_IL12-vsOVA_nperm500000.rds")) + +# Select colums of interest +res.combo2<-res.combo[,c(1,3,6,8)] +res.IL122<-res.IL12[,c(1,3,6,8)] +res.IFNa2<-res.IFNa[,c(1,3,6,8)] +res.OVA2<-res.OVA[,c(1,3,6,8)] + +# Merge in a single file and save xlsx +merge1 <- merge(x=res.combo2,y=res.IL122,by="pathway", suffixes = c("-Combo", "-Il12")) +merge2 <- merge(x=res.IFNa2,y=res.OVA2,by="pathway", suffixes = c("-IFna", "-OVA")) +merge3<-merge(x=merge1,y=merge2,by="pathway") +# write.xlsx(merge3,"GSEA_L_tetramer.immunedb.xlsx",asTable = TRUE,rowNames=T) ####save file + +####rearrange to plot +res.combo$origin<-"OVA.Combo" +res.IL12$origin<-"OVA.Il12" +res.IFNa$origin<-"OVA.IFNa" +res.OVA$origin<-"liOVA" + +merge.results<-rbind(res.combo,res.IL12,res.IFNa,res.OVA) + +#create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + +#merge.results2 <- merge.results[order(merge.results$padj, decreasing = F)] +#filter_in <- head(unique(merge.results2$pathway), 40) +#merge.results1 <-merge.results[merge.results$pathway %in% filter_in,] + +# Manually selected pathways +a1_OLD<-c("Exhaustion_Wherry", +"GOBP_RESPONSE_TO_TYPE_I_INTERFERON", +"GOBP_POSITIVE_REGULATION_OF_RESPONSE_TO_INTERFERON_GAMMA", +"GOCC_IMMUNOLOGICAL_SYNAPSE", +"GOBP_POSITIVE_REGULATION_OF_CELL_KILLING", +"GOBP_ALPHA_BETA_T_CELL_PROLIFERATION", +"GOBP_RESPONSE_TO_INTERLEUKIN_15") + +a1<-c("Exhaustion_Wherry", + "HALLMARK_INTERFERON_ALPHA_RESPONSE", + "HALLMARK_INTERFERON_GAMMA_RESPONSE", + "GOBP_RESPONSE_TO_TYPE_I_INTERFERON", + "GOBP_RESPONSE_TO_VIRUS", + "LPS_RO") + +# Subset selected pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# Rename pathways +merge.results1[merge.results1 == "HALLMARK_INTERFERON_ALPHA_RESPONSE"] <- "Response to IFNa" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Response to IFNg" +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_TYPE_I_INTERFERON"] <- "Response to type-I interferon" +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_VIRUS"] <- "Response to virus" +merge.results1[merge.results1 == "Exhaustion_Wherry"] <- "Exhaustion signature (Wherry)" +merge.results1[merge.results1 == "LPS_RO"] <- "LPS signature from Cilenti et al" +#merge.results1[merge.results1 == "GOBP_TISSUE_MIGRATION"] <- "Tissue migration" +#merge.results1[merge.results1 == "GOBP_CELLULAR_AMINO_ACID_CATABOLIC_PROCESS"] <- "Amino acid catabolic process" +#merge.results1[merge.results1 == "GOBP_MESENCHYMAL_CELL_DIFFERENTIATION"] <- "Mesenchymal cell differentiation" +#merge.results1[merge.results1 == "GOBP_REGULATION_OF_VASCULATURE_DEVELOPMENT"] <- "regulation of vasculature development" + +# Order in the way we want to see +merge.results1$pathway <- factor(merge.results1$pathway, levels = rev(c("Response to virus", + "Response to IFNa", + "Response to IFNg", + "Response to type-I interferon", + "LPS signature from Cilenti et al", + "Exhaustion signature (Wherry)"))) + +merge.results1$origin <- factor(x = merge.results1$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + +# saveRDS(merge.results1, paste0(pdir, "/GSEA_Tetramer_vsOVA.rds")) +# merge.results1<-readRDS(paste0(pdir, "/GSEA_Tetramer_vsOVA.rds")) + +# GSEA heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + # y=reorder(pathway, pval, decreasing=T) + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label=stats), vjust=0.7,angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y=element_text(color = "Black"), + axis.text.x=element_text(angle=45, hjust=1, color="Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + + ggtitle("GSEA_OVA_Specific") +ggsave(filename = paste0(pdir, "/GSEA_heatmap_OVA_Specific_Fig3F_new.pdf"), plot=y, width=5.5, height=4) # width=5, height=3) + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.00001,] +filter_in <- head(unique(merge.results$pathway), 50) +#filter_in <- unique(merge.results_temp$pathway) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("liOVA","OVA.IFNa","OVA.Il12","OVA.Combo")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust=0.7, angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + +ggtitle("GSEA_OVA_Specific") +ggsave(filename = paste0(pdir, "/GSEA_heatmap_OVA_Specific_unbias.pdf"), plot=y, width=15, height=30) # limitsize = FALSE + + + +########################RADAR PLOT###################### +##################Figure 3C RADAR PLOT CD8######################## + +CD8 <- subset(obs1, subset = NewlablesG=="CD8 T cells") + +Effector <- list(c("Gzmb","Gzma","Prf1","Ifng","Tnf","Fasl")) +Pex <- list( c("Tbx21","Klrg1","Cx3cr1","Tcf7","Klf2","Sell")) +Exhaustion <- list(c("Pdcd1","Lag3","Ctla4","Havcr2","Tigit","Il10ra","Tox")) +IFNa_genes <- list(c("Stat1","Ly6c2","Oas1a","Irf8","Ifitm3") ) +IFNg_genes <-list(c("Il18rap","Il18r1","Ifngas1","Il12rb1","Gbp2")) + + +CD8 <- AddModuleScore(CD8, features = Effector, name = "Effector") +CD8 <- AddModuleScore(CD8, features = Pex, name = "Pex") +CD8 <- AddModuleScore(CD8, features = Exhaustion, name = "Exhaustion") +CD8 <- AddModuleScore(CD8, features = IFNa_genes, name = "IFNa_genes") +CD8 <- AddModuleScore(CD8, features = IFNg_genes, name = "IFNg_genes") + +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. + +M1<-CD8@meta.data[,c("NewlablesM_clu", "RNA_Group", "Effector1","Pex1","Exhaustion1","IFNa_genes1","IFNg_genes1")] +#M1<-CD8@meta.data[,c(41, 42, 60:64)] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(CD8$RNA_Group) +CellType<-unique(M1$NewlablesM_clu) + + +lsCells <- grep(".db",ls(),value=T) +MinMax<-lapply(lsCells,get) +max1 <- rep(do.call("max", MinMax),5) +min1 <- rep(do.call("min", MinMax),5) + +colors_border=c(rgb(0,0,0,0.9), rgb(0.1,0.6,0.2,0.9), rgb(0.8,0.1,0.1,0.9), rgb(0.1,0.2,1,0.9)) +colors_in=c(rgb(0,0,0,0.1), rgb(0.1,0.6,0.2,0.1), rgb(0.8,0.1,0.1,0.1), rgb(0.1,0.2,1,0.1)) + + +M2<-M1 +M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) +M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) +M3c<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[3],3:7]),na.rm=T) +M3d<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[4],3:7]),na.rm=T) +M4<-rbind(M3a,M3b,M3c,M3d) +rownames(M4)<-Groups +colnames(M4)<-colnames(M2[,3:7]) +x<-as.data.frame(M4) + + +max1 <- rep(do.call("max", x),5) +min1 <- rep(do.call("min", x),5) + +ploTData<- rbind(max1,min1,x) +colors_border=c(rgb(0,0,0,0.9), rgb(0.1,0.6,0.2,0.9), rgb(0.8,0.1,0.1,0.9), rgb(0.1,0.2,1,0.9)) +colors_in=c(rgb(0,0,0,0.1), rgb(0.1,0.6,0.2,0.1), rgb(0.8,0.1,0.1,0.1), rgb(0.1,0.2,1,0.1)) + +pdf(paste0(pdir, "/radar.plot.liver.CD8_Fig3C.pdf"), width=5, height=5) +radarchart(ploTData, title = "CD8 T cells", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty=1,cglwd=0.8) +dev.off() + +##################Figure 3G RADAR PLOT tetramer######################## + +# Pex<- list( c(sig1,sig2,sig3,sig4)) +# Exhaustion<- list(c("Tox","Coch", "Crygb", "Cpa2", "Gdf3", "Klk6", "Myh4", "Scin", "Nptxr", "Cxcl10", "Spp1", "Dock7", "Trim47", "Spock2", "Tcea2", "Car2", "Chl1", "Rgs16", "Cpt2", "Ctla4", "Pdcd1", +# "Ptger2", "Plscr1", "Lag3", "Casp3", "Cd9", "Pawr", "Sh2d2a", "Gpd2", "Ndfip1", "Cd7", "Itgav", "Gas2", "Tcrg-V4", "Atf1", "Tor3a", "Tnfrsf1a")) + +Effector<- list(c("Gzmb","Gzma","Prf1","Ifng","Tnf","Fasl")) +Pex<- list( c("Tbx21","Klrg1","Cx3cr1","Tcf7","Klf2","Sell")) +Exhaustion<- list(c("Pdcd1","Lag3","Ctla4","Havcr2","Tigit","Il10ra","Tox")) +IFNa_genes<- list(c("Stat1","Ly6c2","Oas1a","Irf8","Ifitm3") ) +IFNg_genes<-list(c("Il18rap","Il18r1","Ifngas1","Il12rb1","Gbp2")) + + +tetramer.t<- AddModuleScore(tetramer.t, features = Effector, name = "Effector") +tetramer.t<- AddModuleScore(tetramer.t, features = Pex, name = "Pex") +tetramer.t<- AddModuleScore(tetramer.t, features = Exhaustion, name = "Exhaustion") +tetramer.t<- AddModuleScore(tetramer.t, features = IFNa_genes, name = "IFNa_genes") +tetramer.t<- AddModuleScore(tetramer.t, features = IFNg_genes, name = "IFNg_genes") + + +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. + +M1<-tetramer.t@meta.data[,c("NewlablesM_clu", "RNA_Group", "Effector1","Pex1","Exhaustion1","IFNa_genes1","IFNg_genes1")] +#M1<-tetramer.t@meta.data[,c(41, 42, 60:64)] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(tetramer.t$RNA_Group) +CellType<-unique(M1$NewlablesM_clu) + +#with Median +#TAMs +#Groups are OVA.IL12 OVA.IFNa OVA Combo + M2<-M1 + M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) + M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) + M3c<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[3],3:7]),na.rm=T) + M3d<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[4],3:7]),na.rm=T) + M4<-rbind(M3a,M3b,M3c,M3d) + rownames(M4)<-Groups + colnames(M4)<-colnames(M2[,3:7]) + x<-as.data.frame(M4) + + +max1 <- rep(do.call("max", x),5) +min1 <- rep(do.call("min", x),5) + +ploTData<- rbind(max1,min1,x) +colors_border=c(rgb(0,0,0,0.9), rgb(0.1,0.6,0.2,0.9), rgb(0.8,0.1,0.1,0.9), rgb(0.1,0.2,1,0.9)) +colors_in=c(rgb(0,0,0,0.1), rgb(0.1,0.6,0.2,0.1), rgb(0.8,0.1,0.1,0.1), rgb(0.1,0.2,1,0.1)) + + +pdf(paste0(pdir, "/radar.plot.liver.tetramer_Fig3G.pdf"), width=5, height=5) +radarchart(ploTData, title = "OVA-reactive", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty=1, cglwd=0.8) +dev.off() + + diff --git a/TAD018/003_TAD018_Alluvial_plot.R b/TAD018/003_TAD018_Alluvial_plot.R new file mode 100644 index 0000000000000000000000000000000000000000..f023a7660b0f17bb3561379db24ebce35f5adae3 --- /dev/null +++ b/TAD018/003_TAD018_Alluvial_plot.R @@ -0,0 +1,202 @@ +#####Fluvial +library(Seurat) +library(openxlsx) +library(readxl) +library(tidyr) +library("RColorBrewer") +library(dplyr) +library(reshape2) +library(fgsea) +library(ggalluvial) +library("gridExtra") + +cluster_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/results3" +wdir<- paste0(cluster_dir, "/Result3_MNOT") +ddir<- paste0(cluster_dir, "/Liver_Tumor_TnK/") +pdir<- paste0(cluster_dir, "/Result3_MNOT/Plots") + +# Load the RDS +obs1 <- readRDS(paste0(ddir, "Liver_Tumor_TnK_final.rds")) + +obs1@meta.data$Tissue <- obs1@meta.data$PROP.Source +obs1@meta.data$RNA_Group <- obs1@meta.data$PROP.Condition + +obs1@meta.data$RNA_Group[obs1@meta.data$RNA_Group == "liOVA"] <- "OVA" +obs1@meta.data$RNA_Group[obs1@meta.data$RNA_Group == "liOVA_IL12"] <- "OVA.IL12" +obs1@meta.data$RNA_Group[obs1@meta.data$RNA_Group == "liOVA_IFNa"] <- "OVA.IFNa" +obs1@meta.data$RNA_Group[obs1@meta.data$RNA_Group == "Combo3x"] <- "Combo" +obs1@meta.data$RNA_Group <- factor(x = obs1@meta.data$RNA_Group, levels = c("OVA","OVA.IFNa","OVA.IL12","Combo")) + + +# Sample origin +obs1$Tube <- paste0(obs1$RNA_Group, obs1$hash.ID) +obs1@meta.data$Orig<-paste0(obs1@meta.data$Tissue, ".", obs1@meta.data$RNA_Group) + +obs1@meta.data$RNA_Group <- factor(x = obs1@meta.data$RNA_Group, levels = c("OVA","OVA.IFNa","OVA.IL12","Combo")) + + + +#################Create labels for all CD8 and CD4 T cells############# +obs1@meta.data$NewlablesG <- obs1@meta.data$NewlablesM +obs1@meta.data$NewlablesG[grep("CD4",obs1@meta.data$NewlablesM) ] <- "CD4 T cells" +obs1@meta.data$NewlablesG[grep("CD8",obs1@meta.data$NewlablesM)] <- "CD8 T cells" + + +###############create labels CD4 and CD8 clusters without naive#################### +obs1@meta.data$NewlablesS <- obs1@meta.data$NewlablesM +indCd4<- grepl("CD4",obs1@meta.data$NewlablesM) & !grepl("Naive",obs1@meta.data$NewlablesM) +indCd8<- grepl("CD8",obs1@meta.data$NewlablesM) & !grepl("Naive",obs1@meta.data$NewlablesM) +obs1@meta.data$NewlablesS[indCd4] <- "CD4 T cells" +obs1@meta.data$NewlablesS[indCd8] <- "CD8 T cells" +obs1@meta.data$NewlablesST <- paste0(obs1@meta.data$Tissue, ".", obs1@meta.data$NewlablesS) + + +################################################ +###Calculating hyperexpanded T cells############# +################################################ +obs1$aa3.Tube <- paste0(obs1$cdr3_aa2,".",obs1$Tube) +obs1$aa3.Tube[is.na(obs1$cdr3_aa2)] <- NA +obs1@meta.data$ClonoFreq <- obs1@meta.data %>% group_by(aa3.Tube) %>% mutate(count = n()) %>% ungroup() %>% + as.data.frame() %>% select (count) +obs1@meta.data$ClonoFreq[is.na(obs1$cdr3_aa2),] <- NA + +obs1@meta.data$Clonetype <- NA +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq==1] <- "unique" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 1 & obs1@meta.data$ClonoFreq <= 5] <- "small" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 5 & obs1@meta.data$ClonoFreq <= 30] <- "large" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 30] <- "hyperexpanded" + +obs1$Clonetype <- factor(x = obs1$Clonetype, levels = c("unique", "small", "large", "hyperexpanded")) #order clonotype variable + + + +############################################ +######FINDING Tetramer reactive TCRs########## +############################################ +ind1 <- obs1$ADT.Tetramer +ind1 <- ind1[order(ind1)] +ind1 <- ind1[order(ind1)] + +TetramerCount <- obs1@meta.data$ADT.Tetramer[!is.na(obs1@meta.data$ADT.Tetramer)] +TetramerCount <- TetramerCount[TetramerCount > 0] + +obs1@meta.data$TetramerT <- "Other" +obs1@meta.data$TetramerT[obs1@meta.data$ADT.Tetramer>2] <- "OVA.TCR" + +df1 <- data.frame(obs1$cdr3_aa2, obs1$TetramerT,obs1$ClonoFreq,obs1$Tissue) +df1$aa3.OVA <- paste0(obs1$cdr3_aa2,".",obs1$TetramerT) +df1 <- na.omit(df1) +df1l <- df1[df1$obs1.Tissue=="Liver",] +df2 <- df1l %>% group_by(aa3.OVA) %>% mutate(count = n()) %>% ungroup() %>% as.data.frame() +df3 <- df2 %>% select(obs1.cdr3_aa2,obs1.TetramerT,obs1.ClonoFreq,count) %>% unique() %>% + pivot_wider(names_from = obs1.TetramerT, values_from = count) %>% as.data.frame() +df3[is.na(df3)] <- 0 +df3$Tumor <- df3[,2]-df3[,3]-df3[,4] +OVA.TCRs <- df3$obs1.cdr3_aa2[df3[,4]/df3[,3]>1] + +df1 <- data.frame(obs1$cdr3_aa2, obs1$TetramerT,obs1$ClonoFreq,obs1$Tissue,obs1$Tube) +df1$aa3.Tube <- paste0(obs1$cdr3_aa2,".",obs1$TetramerT,".",obs1$Tube) +df1 <- na.omit(df1) +df1l <- df1[df1$obs1.Tissue=="Liver",] +df2 <- df1l %>% group_by(aa3.Tube) %>% mutate(count = n()) %>% ungroup() %>% as.data.frame() +df3T <- df2 %>% select(obs1.cdr3_aa2,obs1.TetramerT,obs1.Tube,obs1.ClonoFreq,count) %>% unique() %>% + pivot_wider(names_from = obs1.TetramerT, values_from = count) %>% as.data.frame() +df3T[is.na(df3T)] <- 0 + + +######Indicating Tetramer OVA in obs1###### +obs1$OVA.reactive <- ifelse(obs1$cdr3_aa2 %in% OVA.TCRs, "OVA", "Other") +obs1@meta.data$TetramerTS <- paste0(obs1@meta.data$OVA.reactive,".",obs1@meta.data$NewlablesS) + + +######TISSUE SHARED CLONOTYPES######## +#Identify cells with the same Cdr3aa sequence in both tissues +df1<-data.frame(obs1@meta.data$cdr3_aa2,obs1@meta.data$hash.ID,obs1@meta.data$RNA_Group, obs1@meta.data$Tissue) +df2<-na.omit(df1) +df2$cdr3_mouse<-paste0(df2$obs1.meta.data.cdr3_aa2,".",df2$obs1.meta.data.hash.ID,".",df2$obs1.meta.data.RNA_Group) +shared_cdr3aa <- intersect(df2$cdr3_mouse[df2$obs1.meta.data.Tissue == "Liver"], df2$cdr3_mouse[df2$obs1.meta.data.Tissue == "Tumor"]) +obs1$cdr3_mouse<-paste0(obs1$cdr3_aa2,".",obs1$hash.ID,".",obs1$RNA_Group) +obs1$Shared <- ifelse(obs1$cdr3_mouse %in% shared_cdr3aa, "Shared", "Unique") + +# Create variables share tissue and shared OVA +obs1@meta.data$Sharedtissue<-paste0(obs1@meta.data$Tissue,".",obs1@meta.data$Shared) +obs1@meta.data$SharedOVA<-paste0(obs1@meta.data$Shared,".",obs1@meta.data$OVA.reactive) + +####Alluvial plot##### +######Figure S3B-allOVA the same color######## +df1 <- obs1@meta.data +df1 <- df1[df1$NewlablesG=="CD8 T cells",] +#df2<- na.omit(df1[,c(13,38,39,49)]) +df2<- na.omit(df1[,c("cdr3_aa2","RNA_Group","Tissue","OVA.reactive")]) +for (i in unique(df1$RNA_Group)){ + # i <- unique(df1$RNA_Group)[1] + df3 <- df2[df2$RNA_Group==i&df2$Tissue=="Liver",] + df4 <- df2[df2$RNA_Group==i&df2$Tissue=="Tumor",] + df3 <- df3 %>% group_by(cdr3_aa2) %>% mutate(ClonoFreq = n()) %>% unique() %>% ungroup() %>% as.data.frame() + df4 <- df4 %>% group_by(cdr3_aa2) %>% mutate(ClonoFreq = n()) %>% unique() %>% ungroup() %>% as.data.frame() + df3 <- df3[df3$ClonoFreq>2,] + df4 <- df4[df4$ClonoFreq>2,] + df3$ClonoFreq.norm <- sapply(df3$ClonoFreq,function(x){100*x/sum(df3$ClonoFreq)}) + df4$ClonoFreq.norm <- sapply(df4$ClonoFreq,function(x){100*x/sum(df4$ClonoFreq)}) + df6 <- rbind(df3,df4) + df6 <- df6[order(df6$cdr3_aa2),] + df6$col1[!duplicated(df6$cdr3_aa2)] <- "#CCCCCC" + Dtests <- duplicated(df6$cdr3_aa2)|duplicated(df6$cdr3_aa2, fromLast=T) + df6$col1 [df6$OVA.reactive=="OVA"] <- "#3399FF" #"#3399FF" + df6$col1 [df6$OVA.reactive=="Other"&Dtests] <- "#CC6600" + plotA <- ggplot(data = df6, + aes(x=Tissue, y=ClonoFreq.norm, alluvium=cdr3_aa2, stratum=cdr3_aa2)) + + geom_flow(aes(fill=col1), decreasing=F)+ + geom_stratum(aes(fill=col1, size=0.2), decreasing=F) + + scale_fill_manual(values=setNames(unique(df6$col), unique(df6$col)))+ + theme_bw() + theme(legend.position="none")+ + scale_size_identity()+ + ggtitle(i) + nameR <- paste0(i, ".plot") + assign(nameR, plotA)} + +pdf(paste0(pdir, "/Fluvial.Plot.18.CD8.norm.2clones.OVAblue_FigS3B.pdf"), width=4, height=4) +grid.arrange(Combo.plot,OVA.IFNa.plot,OVA.IL12.plot,OVA.plot, ncol=2, nrow=2) +dev.off() + +######CD4 T cells######## +####Figure 3H - normalized test CD4####### +df1 <- obs1@meta.data +df1 <- df1[df1$NewlablesG=="CD4 T cells",] +#df2<- na.omit(df1[,c(13,38,39,49)]) +df2<- na.omit(df1[,c("cdr3_aa2","RNA_Group","Tissue","OVA.reactive")]) +for (i in unique(df1$RNA_Group)){ + # i <- unique(df1$RNA_Group)[1] + df3 <- df2[df2$RNA_Group==i&df2$Tissue=="Liver",] + df4 <- df2[df2$RNA_Group==i&df2$Tissue=="Tumor",] + df3 <- df3 %>% group_by(cdr3_aa2) %>% mutate(ClonoFreq = n()) %>% unique() %>% ungroup() %>% as.data.frame() + df4 <- df4 %>% group_by(cdr3_aa2) %>% mutate(ClonoFreq = n()) %>% unique() %>% ungroup() %>% as.data.frame() + df3 <- df3[df3$ClonoFreq>1,] + df4 <- df4[df4$ClonoFreq>1,] + df3$ClonoFreq.norm <- sapply(df3$ClonoFreq,function(x){100*x/sum(df3$ClonoFreq)}) + df4$ClonoFreq.norm <- sapply(df4$ClonoFreq,function(x){100*x/sum(df4$ClonoFreq)}) + df6 <- rbind(df3,df4) + df6 <- df6[order(df6$cdr3_aa2),] + df6$col1[!duplicated(df6$cdr3_aa2)] <- "#CCCCCC" + Dtests <- duplicated(df6$cdr3_aa2)|duplicated(df6$cdr3_aa2, fromLast=T) + df6$col1 [df6$OVA.reactive=="OVA"&Dtests] <- "#CC6600" #"#3399FF" + df6$col1 [df6$OVA.reactive=="Other"&Dtests] <- "#CC6600" + plotA <- ggplot(data = df6, + aes(x = Tissue, y=ClonoFreq.norm, alluvium = cdr3_aa2,stratum=cdr3_aa2)) + + geom_flow(aes(fill = col1),decreasing = F)+ + geom_stratum(aes(fill = col1,size=0.2),decreasing = F) + + scale_fill_manual(values = setNames(unique(df6$col), unique(df6$col)))+ + theme_bw() + theme(legend.position = "none")+ + scale_size_identity()+ + ggtitle(i) + nameR <- paste0(i,".plot") + assign(nameR,plotA)} + + +pdf(paste0(pdir, "/Fluvial.Plot.18.CD4.norm.2clones_Fig3H.pdf"), width=4, height=4) +grid.arrange(Combo.plot,OVA.IFNa.plot,OVA.IL12.plot,OVA.plot, ncol=2, nrow=2) +dev.off() + + + + diff --git a/TAD019/001_TAD019_APCs_analysis.R b/TAD019/001_TAD019_APCs_analysis.R new file mode 100644 index 0000000000000000000000000000000000000000..6fa9982e0e79e44c2387d5f0cf046a91fb0abf0a --- /dev/null +++ b/TAD019/001_TAD019_APCs_analysis.R @@ -0,0 +1,321 @@ +library(Seurat) +library(openxlsx) +library(readxl) +library(tidyr) +library("RColorBrewer") +library(dplyr) +library(reshape2) +library(fgsea) +library(matrixStats) +library(fmsb) + +cluster_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A019/Analysis_MM" + +wdir <- paste0(cluster_dir, "/Result3_MNOT") +ddir <- paste0(cluster_dir, "/results3/Liver_Tumor_APCs/") +pdir <- paste0(cluster_dir, "/Result3_MNOT/Plots") + +# Custom functions +source(file = "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/last_scripts_MNOT/TAD018/plot_stellare_function.R") + +# Load RDS +obs1 <- readRDS(paste0(ddir, "Liver_Tumor_APCs_final.rds")) + +######################## +#####Annotations####### +######################## + +obs1@meta.data$Tissue <- obs1@meta.data$PROP.Source +obs1@meta.data$RNA_Group <- obs1@meta.data$PROP.Condition + +obs1@meta.data$RNA_Group[obs1@meta.data$RNA_Group == "TA_only"] <- "TA33" +obs1@meta.data$RNA_Group[obs1@meta.data$RNA_Group == "TA_combo"] <- "TA33.Combo" + +obs1@meta.data$RNA_Group <- factor(x = obs1@meta.data$RNA_Group, levels = c("TA33","TA33.Combo")) + + +# Tissue Sample assign +obs1$Tube <- paste0(obs1$hash.ID,obs1$RNA_Group) +obs1@meta.data$Orig<-paste0(obs1@meta.data$Tissue, ".", obs1@meta.data$RNA_Group) +table(obs1@meta.data$Tissue,obs1@meta.data$RNA_Group) +table(obs1@meta.data$Orig) + +obs1@meta.data$allData <- "all" + +#############Analysis APCs################### +features1 = c("H2-Q7", "H2-T22", "H2-Q4", "H2-K1", "H2-T23", "H2-M3", "H2-D1","Tap1","Tap2", #MHCI + "H2-Eb1", "H2-Ab1", "H2-Aa", "H2-DMb1", "H2-DMa", "Ciita", #MHCII + "Ifi44", "Oasl1","Irf7","Isg15", "Isg20","Oas1a","Oas1g", #IFNa + "Ccl5", "Upp1", "Slamf7", "Cxcl9", "Gbp4","Cd74", #IFNg + "Vav2","Tgfb1","Il10","Ccl24","Mmp8","Tmem176b","Trem2","Fn1") #protumor + +#####Figure 6A############## +pdf(paste0(pdir, "/liver.apc.19.LandT_Fig6A.pdf"), width=14, height=3) +plot.a <- PlotStellare(obs1, features1=features1, valueG="allData", i="all", group.by0="Orig", controGroup="Liver.TA33") +print(plot.a) +par(mfrow=c(1,2)) +dev.off() + + +#######################GSEA####################################################################### +#######################Figure S6B - gsea on Liver and tumor APCs################################## +# Load signature +#miDB_sig4.MLS <- readRDS("C:/Users/notaro.marco/Dropbox (HSR Global)/90-756142658_RNAseq_Squadrito/05-DGE-Tumor/miDB_sig4.MLS.rds") +miDB_sig4.MLS <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/reference/miDB_sig4.MLS.rds") + +sub.obj<-subset(obs1, subset= NewlablesM == "KCs"| + NewlablesM == "Macrophages"| + NewlablesM == "Monocytes") + + +sub.obj <- SetIdent(sub.obj, value = "Orig") +obs1.dge <- FindMarkers(sub.obj, ident.1 = "Liver.TA33.Combo", ident.2 = "Liver.TA33", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +obs2.dge <- FindMarkers(sub.obj, ident.1 = "Tumor.TA33.Combo", ident.2 = "Tumor.TA33", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) + +obs1.ranks <- obs1.dge$avg_log2FC +obs2.ranks <- obs2.dge$avg_log2FC + +names(obs2.ranks) <- rownames(obs2.dge) +names(obs1.ranks) <- rownames(obs1.dge) + +res.combo.liver<-fgsea(pathways = miDB_sig4.MLS, stats = obs1.ranks, minSize=0, maxSize=500, eps=0) # nPermSimple=50000 +res.combo.tumor<-fgsea(pathways = miDB_sig4.MLS, stats = obs2.ranks, minSize=0, maxSize=500, eps=0) # PermSimple=50000 + +# Select columns of interest +res.combo.liver2<-res.combo.liver[,c(1,3,6,8)] +res.combo.tumor2<-res.combo.tumor[,c(1,3,6,8)] + +# Merge in a single file and save xlsx +merge1 <- merge(x=res.combo.liver2, y=res.combo.tumor2, by="pathway", suffixes = c("-liver", "-tumor")) + +write.xlsx(merge1, paste0(pdir, "/GSEA_LandT_KC-mono-macs.xlsx"), asTable=T, rowNames=T) + + +##################GSEA Heatmap of selected####################################### +#rearrange data to plot heatmap +res.combo.liver$origin<-"Liver" +res.combo.tumor$origin<-"Tumor" + + +# res.OVA$origin<- factor(x = res.OVA$origin, levels = c("OVA.Combo","OVA.Il12","OVA.IFNa","liOVA")) +merge.results<-rbind(res.combo.liver,res.combo.tumor) + +#saveRDS(merge.results, "GSEA.liverandtumormacs.nperm50000.rds") + +#create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + + +# Manually selected pathways +a1<-c("IFNa_RO", + "HALLMARK_INTERFERON_GAMMA_RESPONSE", + "GOBP_DEFENSE_RESPONSE_TO_VIRUS", + "GOBP_POSITIVE_REGULATION_OF_LEUKOCYTE_CELL_CELL_ADHESION", + "GOBP_POSITIVE_REGULATION_OF_CELL_KILLING", + "GOCC_MHC_PROTEIN_COMPLEX", + "GOBP_POSITIVE_REGULATION_OF_T_CELL_MEDIATED_CYTOTOXICITY", + "GOCC_MHC_CLASS_II_PROTEIN_COMPLEX", + "GOBP_ANTIGEN_PROCESSING_AND_PRESENTATION_OF_ENDOGENOUS_ANTIGEN", + "HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION", + "GOBP_POSITIVE_REGULATION_OF_EPITHELIAL_CELL_PROLIFERATION", + "GOBP_POSITIVE_REGULATION_OF_ENDOTHELIAL_CELL_PROLIFERATION", + "PGE2_RO", + "HALLMARK_ANGIOGENESIS", + "IL4_RO" + ) + +# Subset selected pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# Rename pathways +merge.results1[merge.results1 == "IFNa_RO"] <- "IFNa response (Cilenti et all)" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Hallmark_IFNg response" +merge.results1[merge.results1 == "GOBP_DEFENSE_RESPONSE_TO_VIRUS"] <- "Antiviral response" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_LEUKOCYTE_CELL_CELL_ADHESION"] <- "Positive regulation of cell adhesion" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_CELL_KILLING"] <- "Positive regulation of cell killing" +merge.results1[merge.results1 == "GOCC_MHC_PROTEIN_COMPLEX"] <- "MHC protein complex" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_T_CELL_MEDIATED_CYTOTOXICITY"] <- "Positive regulation of T cell cytotoxicity" +merge.results1[merge.results1 == "GOCC_MHC_CLASS_II_PROTEIN_COMPLEX"] <- "MHC-II protein complex" +merge.results1[merge.results1 == "GOBP_ANTIGEN_PROCESSING_AND_PRESENTATION_OF_ENDOGENOUS_ANTIGEN"] <- "Antigen processing and presentation" +merge.results1[merge.results1 == "HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION"] <- "Hallmark EMT" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_EPITHELIAL_CELL_PROLIFERATION"] <- "Positive regulation of epithelial cell proliferation" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_ENDOTHELIAL_CELL_PROLIFERATION"] <- "Positive regulation of endothelial cell proliferation" +merge.results1[merge.results1 == "PGE2_RO"] <- "PGE2 signature from Cilenti et al" +merge.results1[merge.results1 == "HALLMARK_ANGIOGENESIS"] <- "Angiogenesis" +merge.results1[merge.results1 == "IL4_RO"] <- "IL-4 signature from Cilenti et al" + + +# Order in the way we want to see +merge.results1$pathway<- factor(merge.results1$pathway, levels = c("IFNa response (Cilenti et all)", + "Hallmark_IFNg response", + "Antiviral response", + "Positive regulation of cell adhesion", + "Positive regulation of cell killing", + "Positive regulation of T cell cytotoxicity", + "Antigen processing and presentation", + "MHC protein complex", + "MHC-II protein complex", + "Hallmark EMT", + "Positive regulation of epithelial cell proliferation", + "Positive regulation of endothelial cell proliferation", + "Angiogenesis", + "IL-4 signature from Cilenti et al", + "PGE2 signature from Cilenti et al")) + +# Heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_gradientn(limits = c(-4,5.2), colours=c("Blue","White","Red"))+ + geom_text(aes(label = stats), vjust=0.7,angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), + axis.text.x = element_text(angle=90, vjust=0.5, hjust=1, color="Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black"))+ + ggtitle("GSEA_MacroKCandmono vs OVA_Liver") +ggsave(filename = paste0(pdir, "/Liver_and_Tumor_MacroKCsMonovsOVA_FigS6B.pdf"), plot=y, width=5, height=3) + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.0001,] +filter_in <- head(unique(merge.results_temp$pathway), 100) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("Liver","Tumor")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) +ggtitle("GSEA_MacroKCandmono vs OVA_Liver") +ggsave(filename = paste0(pdir, "/Liver_and_Tumor_MacroKCsMonovsOVA_unbias.pdf"), plot=y, width=15, height=30) # limitsize = FALSE + + +############################################################################## +##################Figure S6D - RADAR PLOT###################################### +############################################################################## +plotRadar <- function(i){ + ploTData<- rbind(max1,min1,get(i)) + id <- sub(".db","",i) + radarchart(ploTData, title = id, pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty=1, cglwd=0.8) +} #function to plot radarplot + +####Create label to cluster dc and granulocytes together +obs1@meta.data$Shortlables<-obs1@meta.data$NewlablesM +#DCs<-c("CD8 cDC1","moDCs", "Ccr7 DCs","pDCs","pre DCs") +#obs1@meta.data$Shortlables[obs1@meta.data$NewlablesM%in%DCs] <- "DCs" +#granu<-c("Neutrophils","Basophils") +#obs1@meta.data$Shortlables[obs1@meta.data$NewlablesM%in%granu] <- "Granulocytes" +obs1$Shortlables <- paste0(obs1$Shortlables,".",obs1$Tissue) + + +# AddModuleScore +MHCI_genes<- list(c("H2-Q7", "H2-T22", "H2-Q4", "H2-K1", "H2-T23", "H2-M3", "H2-D1","Tap1","Tap2")) +MHCII_genes<- list( c("H2-Eb1", "H2-Ab1", "H2-Aa", "H2-DMb1", "H2-DMa", "Ciita")) +Protumoral_genes<- list(c("Vav2","Tgfb1","Il10","Ccl24","Mmp8","Tmem176b","Trem2","Fn1") ) +IFNa_genes<- list(c("Ifi44", "Oasl1","Irf7","Isg15", "Isg20","Oas1a","Oas1g") ) +IFNg_genes<-list(c("Ccl5", "Upp1", "Slamf7", "Cxcl9", "Gbp4","Cd74")) + +obs1<- AddModuleScore(obs1, features = MHCI_genes, name = "MHCI_genes") +obs1<- AddModuleScore(obs1, features = MHCII_genes, name = "MHCII_genes") +obs1<- AddModuleScore(obs1, features = Protumoral_genes, name = "Protumoral_genes") +obs1<- AddModuleScore(obs1, features = IFNa_genes, name = "IFNa_genes") +obs1<- AddModuleScore(obs1, features = IFNg_genes, name = "IFNg_genes") + +# Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. + +#M1 <- obs1@meta.data[,c(37,42, 43:47)] +M1 <- obs1@meta.data[,c("Shortlables", "RNA_Group", "MHCI_genes1","MHCII_genes1","Protumoral_genes1","IFNa_genes1","IFNg_genes1")] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(obs1$RNA_Group) +CellType<-unique(M1$Shortlables) + +#with Median +#TAMs +#Groups +for (i in CellType){ + M2<-M1[M1$Shortlables%in%i,] + M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) + M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) + M4<-rbind(M3a,M3b) + rownames(M4)<-Groups + colnames(M4)<-colnames(M2[,3:7]) + x<-as.data.frame(M4) + assign(paste0(i,".db"),x)} + +lsCells <- grep(".db",ls(),value=T) +MinMax<-lapply(lsCells,get) +max1 <- rep(do.call("max", MinMax),5) +min1 <- rep(do.call("min", MinMax),5) + +colors_border=c(rgb(0,0.8,0,0.9), rgb(0,0,0,0.9)) +colors_in=c(rgb(0,0.3,0,0.), rgb(0,0,0.0,0.1)) + + +pdf(paste0(pdir, "/Radar_plot_liver_and_tumor_APCs_FigS6D_new2.pdf"), width=15, height=12) + +par(mfrow=c(4,5)) + +for (i in 1:length(unique(obs1$Shortlables))){ + plotRadar(lsCells[i]) +} +dev.off() + + + + +#######################Plot UMAP################ + +liver.apcs <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A019/Analysis_MM/results3/Liver_APCs/Liver_APCs_final.rds") +tumor.apcs <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A019/Analysis_MM/results3/Tumor_APCs/Tumor_APCs_final.rds") + +liver.apcs@meta.data$Tissue <- liver.apcs@meta.data$PROP.Source +liver.apcs@meta.data$RNA_Group <- liver.apcs@meta.data$PROP.Condition +liver.apcs@meta.data$RNA_Group[liver.apcs@meta.data$RNA_Group == "TA_only"] <- "TA33" +liver.apcs@meta.data$RNA_Group[liver.apcs@meta.data$RNA_Group == "TA_combo"] <- "TA33.Combo" +liver.apcs@meta.data$RNA_Group <- factor(x = liver.apcs@meta.data$RNA_Group, levels = c("TA33","TA33.Combo")) +liver.apcs$Tube <- paste0(liver.apcs$hash.ID,liver.apcs$RNA_Group) + + +tumor.apcs@meta.data$Tissue <- tumor.apcs@meta.data$PROP.Source +tumor.apcs@meta.data$RNA_Group <- tumor.apcs@meta.data$PROP.Condition +tumor.apcs@meta.data$RNA_Group[tumor.apcs@meta.data$RNA_Group == "TA_only"] <- "TA33" +tumor.apcs@meta.data$RNA_Group[tumor.apcs@meta.data$RNA_Group == "TA_combo"] <- "TA33.Combo" +tumor.apcs@meta.data$RNA_Group <- factor(x = tumor.apcs@meta.data$RNA_Group, levels = c("TA33","TA33.Combo")) +tumor.apcs$Tube <- paste0(tumor.apcs$hash.ID,tumor.apcs$RNA_Group) + + + +# Save plot +pdf(paste0(pdir, "/liver_apcs_umap_FigS11A-1.pdf"), width=7, height=6) # Figure S11A-1 +DimPlot(liver.apcs, reduction = "umap.harmony.orig.ident",group.by = "NewlablesM_clu", pt.size = 0.5, label = T, label.size = 3, repel = T) +dev.off() + +pdf(paste0(pdir, "/tumor_apcs_umap_FigS11A-2.pdf"), width=7, height=6) # Figure S11A-2 +DimPlot(tumor.apcs, reduction = "umap.harmony.orig.ident",group.by = "NewlablesM_clu", pt.size = 0.5, label = T, label.size = 3, repel = T) +dev.off() + + +# Export DimPlot as excel +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.1.2","NewlablesM_clu") +liver.apcs_df <- FetchData(liver.apcs, vars = var_list) +liver.apcs_df$cell_ID <- rownames(liver.apcs_df) +write.xlsx(liver.apcs_df, file=paste0(pdir, "/liver_apcs_umap_FigS11A-1.xlsx"), overwrite=T) + +tumor.apcs_df <- FetchData(tumor.apcs, vars = var_list) +tumor.apcs_df$cell_ID <- rownames(tumor.apcs_df) +write.xlsx(tumor.apcs_df, file=paste0(pdir, "/tumor_apcs_umap_FigS11A-2.xlsx"), overwrite=T) + + + +#################################ENDS here############################## \ No newline at end of file diff --git a/TAD019/002_TAD019_TandNK_analysis.R b/TAD019/002_TAD019_TandNK_analysis.R new file mode 100644 index 0000000000000000000000000000000000000000..5ce711ad696ce406d1a0a290838d281747ad3197 --- /dev/null +++ b/TAD019/002_TAD019_TandNK_analysis.R @@ -0,0 +1,887 @@ +library(Seurat) +library(openxlsx) +library(readxl) +library(tidyr) +library("RColorBrewer") +library(dplyr) +library(scRepertoire) +library(reshape2) +library(fgsea) +library(ggalluvial) +library("gridExtra") +library(matrixStats) +library(fmsb) + +cluster_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A019/Analysis_MM" + +wdir <- paste0(cluster_dir, "/Result3_MNOT") +ddir <- paste0(cluster_dir, "/results3/Liver_Tumor_TnK/") +pdir <- paste0(cluster_dir, "/Result3_MNOT/Plots") + +# Custom functions +source(file = "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/Analysis_MM/last_scripts_MNOT/TAD018/plot_stellare_function.R") + +# Load RDS +obs1 <- readRDS(paste0(ddir, "Liver_Tumor_TnK_final.rds")) +#obs1 <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A019/Analysis_MM/results3/Liver_TandNK_NO_TCR/Liver_TandNK_final.rds") + +######################## +#####Annotations####### +######################## + +obs1@meta.data$Tissue <- obs1@meta.data$PROP.Source +obs1@meta.data$RNA_Group <- obs1@meta.data$PROP.Condition + +obs1@meta.data$RNA_Group[obs1@meta.data$RNA_Group == "TA_only"] <- "TA33" +obs1@meta.data$RNA_Group[obs1@meta.data$RNA_Group == "TA_combo"] <- "TA33.Combo" + +obs1@meta.data$RNA_Group <- factor(x = obs1@meta.data$RNA_Group, levels = c("TA33","TA33.Combo")) + +# Tissue Sample assign +obs1$Tube <- paste0(obs1$hash.ID,obs1$RNA_Group) +obs1@meta.data$Orig<-paste0(obs1@meta.data$Tissue, ".", obs1@meta.data$RNA_Group) +table(obs1@meta.data$Tissue,obs1@meta.data$RNA_Group) +table(obs1@meta.data$Orig) + +#################create labels for all CD8 and CD4 T cells############# +obs1@meta.data$NewlablesG <- obs1@meta.data$NewlablesM +obs1@meta.data$NewlablesG[grep("CD4",obs1@meta.data$NewlablesM) ] <- "CD4 T cells" +obs1@meta.data$NewlablesG[grep("CD8",obs1@meta.data$NewlablesM)] <- "CD8 T cells" +unique(obs1@meta.data$NewlablesM) + +################create labels CD4 and CD8 clusters without naive#################### +obs1@meta.data$NewlablesS <- obs1@meta.data$NewlablesM +indCd4<- grepl("CD4",obs1@meta.data$NewlablesM) & !grepl("Naive",obs1@meta.data$NewlablesM) +indCd8<- grepl("CD8",obs1@meta.data$NewlablesM) & !grepl("Naive",obs1@meta.data$NewlablesM) +obs1@meta.data$NewlablesS[indCd4] <- "CD4 T cells" +obs1@meta.data$NewlablesS[indCd8] <- "CD8 T cells" +obs1@meta.data$NewlablesST <- paste0(obs1@meta.data$Tissue,".",obs1@meta.data$NewlablesS) + + +################################################ +###Calculating hyperexpanded T cells############# +################################################ +obs1$aa3.Tube <- paste0(obs1$cdr3_aa2,".",obs1$Tube) +obs1$aa3.Tube[is.na(obs1$cdr3_aa2)] <- NA +obs1@meta.data$ClonoFreq <- obs1@meta.data %>% group_by(aa3.Tube) %>% mutate(count = n()) %>% ungroup() %>% + as.data.frame() %>% select (count) +obs1@meta.data$ClonoFreq[is.na(obs1$cdr3_aa2),] <- NA +obs1@meta.data$Clonetype <- NA +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq==1] <- "unique" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 1 & obs1@meta.data$ClonoFreq <= 5] <- "small" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 5 & obs1@meta.data$ClonoFreq <= 30] <- "large" +obs1@meta.data$Clonetype[obs1@meta.data$ClonoFreq > 30] <- "hyperexpanded" +obs1$Clonetype <- factor(x = obs1$Clonetype, levels = c("unique", "small", "large", "hyperexpanded")) #order clonotype variable + +obs1$Expansion <- "unique" +obs1$Expansion[obs1@meta.data$ClonoFreq>5] <- "expanded" + +table(obs1@meta.data$Clonetype) + +######TISSUE SHARED CLONOTYPES######## +# Identify cells with the same Cdr3aa sequence in both tissues +df1<-data.frame(obs1@meta.data$cdr3_aa2,obs1@meta.data$hash.ID,obs1@meta.data$RNA_Group, obs1@meta.data$Tissue) +df2<-na.omit(df1) +df2$cdr3_mouse<-paste0(df2$obs1.meta.data.cdr3_aa2,".",df2$obs1.meta.data.hash.ID,".",df2$obs1.meta.data.RNA_Group) +shared_cdr3aa <- intersect(df2$cdr3_mouse[df2$obs1.meta.data.Tissue == "Liver"], df2$cdr3_mouse[df2$obs1.meta.data.Tissue == "Tumor"]) +obs1$cdr3_mouse<-paste0(obs1$cdr3_aa2,".",obs1$hash.ID,".",obs1$RNA_Group) +obs1$Shared <- ifelse(obs1$cdr3_mouse %in% shared_cdr3aa, "Shared", "Unique") + +# Create variables share tissue +obs1@meta.data$Sharedtissue<-paste0(obs1@meta.data$Tissue,".",obs1@meta.data$Shared) +obs1@meta.data$Shared.NewlablesS<-paste0(obs1@meta.data$Shared,".",obs1@meta.data$NewlablesS) +obs1@meta.data$Shared.NewlablesG<-paste0(obs1@meta.data$Shared,".",obs1@meta.data$NewlablesG) +obs1@meta.data$Expansion.NewlablesG<-paste0(obs1@meta.data$Shared,".",obs1@meta.data$NewlablesG,".",obs1@meta.data$Expansion) + +################################################ + + +Tobs <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A019/Analysis_MM/results3/Tumor_TandNK/Tumor_TandNK_final.rds") + + +######################## +#####Annotations####### +######################## + +Tobs@meta.data$Tissue <- Tobs@meta.data$PROP.Source +Tobs@meta.data$RNA_Group <- Tobs@meta.data$PROP.Condition + +Tobs@meta.data$RNA_Group[Tobs@meta.data$RNA_Group == "TA_only"] <- "TA33" +Tobs@meta.data$RNA_Group[Tobs@meta.data$RNA_Group == "TA_combo"] <- "TA33.Combo" + +Tobs@meta.data$RNA_Group <- factor(x = Tobs@meta.data$RNA_Group, levels = c("TA33","TA33.Combo")) + +# Tissue Sample assign +Tobs$Tube <- paste0(Tobs$hash.ID,Tobs$RNA_Group) +Tobs@meta.data$Orig<-paste0(Tobs@meta.data$Tissue, ".", Tobs@meta.data$RNA_Group) +table(Tobs@meta.data$Tissue,Tobs@meta.data$RNA_Group) +table(Tobs@meta.data$Orig) + +#################create labels for all CD8 and CD4 T cells############# +Tobs@meta.data$NewlablesG <- Tobs@meta.data$NewlablesM +Tobs@meta.data$NewlablesG[grep("CD4",Tobs@meta.data$NewlablesM) ] <- "CD4 T cells" +Tobs@meta.data$NewlablesG[grep("CD8",Tobs@meta.data$NewlablesM)] <- "CD8 T cells" +unique(Tobs@meta.data$NewlablesM) + +################create labels CD4 and CD8 clusters without naive#################### +Tobs@meta.data$NewlablesS <- Tobs@meta.data$NewlablesM +indCd4<- grepl("CD4",Tobs@meta.data$NewlablesM) & !grepl("Naive",Tobs@meta.data$NewlablesM) +indCd8<- grepl("CD8",Tobs@meta.data$NewlablesM) & !grepl("Naive",Tobs@meta.data$NewlablesM) +Tobs@meta.data$NewlablesS[indCd4] <- "CD4 T cells" +Tobs@meta.data$NewlablesS[indCd8] <- "CD8 T cells" +Tobs@meta.data$NewlablesST <- paste0(Tobs@meta.data$Tissue,".",Tobs@meta.data$NewlablesS) + + +################################################ +###Calculating hyperexpanded T cells############# +################################################ +Tobs$aa3.Tube <- paste0(Tobs$cdr3_aa2,".",Tobs$Tube) +Tobs$aa3.Tube[is.na(Tobs$cdr3_aa2)] <- NA +Tobs@meta.data$ClonoFreq <- Tobs@meta.data %>% group_by(aa3.Tube) %>% mutate(count = n()) %>% ungroup() %>% + as.data.frame() %>% select (count) +Tobs@meta.data$ClonoFreq[is.na(Tobs$cdr3_aa2),] <- NA +Tobs@meta.data$Clonetype <- NA +Tobs@meta.data$Clonetype[Tobs@meta.data$ClonoFreq==1] <- "unique" +Tobs@meta.data$Clonetype[Tobs@meta.data$ClonoFreq > 1 & Tobs@meta.data$ClonoFreq <= 5] <- "small" +Tobs@meta.data$Clonetype[Tobs@meta.data$ClonoFreq > 5 & Tobs@meta.data$ClonoFreq <= 30] <- "large" +Tobs@meta.data$Clonetype[Tobs@meta.data$ClonoFreq > 30] <- "hyperexpanded" +Tobs$Clonetype <- factor(x = Tobs$Clonetype, levels = c("unique", "small", "large", "hyperexpanded")) #order clonotype variable + +Tobs$Expansion <- "unique" +Tobs$Expansion[Tobs@meta.data$ClonoFreq>5] <- "expanded" + +table(Tobs@meta.data$Clonetype) + + + +######TISSUE SHARED CLONOTYPES with tumors######## +# clonotypes in Liver +df1<-data.frame(obs1@meta.data$cdr3_aa2,obs1@meta.data$hash.ID,obs1@meta.data$RNA_Group, obs1@meta.data$Tissue) +df2<-na.omit(df1) +df2$cdr3_mouse<-paste0(df2$obs1.meta.data.cdr3_aa2,".",df2$obs1.meta.data.hash.ID,".",df2$obs1.meta.data.RNA_Group) + +# clonotypes in Tumor +df3<-data.frame(Tobs@meta.data$cdr3_aa2,Tobs@meta.data$hash.ID,Tobs@meta.data$RNA_Group, Tobs@meta.data$Tissue) +df4<-na.omit(df3) +df4$cdr3_mouse<-paste0(df4$Tobs.meta.data.cdr3_aa2,".",df4$Tobs.meta.data.hash.ID,".",df4$Tobs.meta.data.RNA_Group) + +# List of Shared clonotypes +shared_cdr3aa <- intersect(df2$cdr3_mouse, df4$cdr3_mouse) + +# Add variable shared in liver +obs1$cdr3_mouse<-paste0(obs1$cdr3_aa2,".",obs1$hash.ID,".",obs1$RNA_Group) +obs1$Shared <- ifelse(obs1$cdr3_mouse %in% shared_cdr3aa, "Shared", "Unique") + +# Add variable shared in tumor +Tobs$cdr3_mouse<-paste0(Tobs$cdr3_aa2,".",Tobs$hash.ID,".",Tobs$RNA_Group) +Tobs$Shared <- ifelse(Tobs$cdr3_mouse %in% shared_cdr3aa, "Shared", "Unique") + + +# Add new variables in liver +obs1@meta.data$New_division <- obs1@meta.data$NewlablesM_clu +ind<- grepl("CD4",obs1@meta.data$NewlablesM_clu) & grepl("Shared",obs1@meta.data$Shared) +obs1@meta.data$New_division[ind] <- "Shared CD4" +ind<- grepl("CD8",obs1@meta.data$NewlablesM_clu) & grepl("Shared",obs1@meta.data$Shared) +obs1@meta.data$New_division[ind] <- "Shared CD8" +obs1@meta.data$New_division2 <- "Other" +ind<- grepl("CD4",obs1@meta.data$NewlablesM_clu) & grepl("Shared",obs1@meta.data$Shared) +obs1@meta.data$New_division2[ind] <- "Shared CD4" + +unique(obs1@meta.data$New_division) + +obs1@meta.data$New_division_CD8 <- "Other" +obs1@meta.data$New_division_CD8[obs1@meta.data$New_division=="Shared CD8"] <- "Shared CD8" + +# Variable with shared CD4 only in selected groups +obs1$New_division3<-paste0(obs1$New_division2,".",obs1$RNA_Group) +obs1@meta.data$New_division3[obs1@meta.data$New_division3 %in% "Shared CD4.OVA.IFNa"] <- "Other.OVA.IFNa" +obs1@meta.data$New_division3[obs1@meta.data$New_division3 %in% "Shared CD4.OVA"] <- "Other.OVA" + +# Add new variables in tumor +Tobs@meta.data$New_division <- Tobs@meta.data$NewlablesM_clu +ind<- grepl("CD4",Tobs@meta.data$NewlablesM_clu) & grepl("Shared",Tobs@meta.data$Shared) +Tobs@meta.data$New_division[ind] <- "Shared CD4" +ind<- grepl("CD8",Tobs@meta.data$NewlablesM_clu) & grepl("Shared",Tobs@meta.data$Shared) +Tobs@meta.data$New_division[ind] <- "Shared CD8" +Tobs@meta.data$New_division2 <- "Other" +ind<- grepl("CD4",Tobs@meta.data$NewlablesM_clu) & grepl("Shared",Tobs@meta.data$Shared) +Tobs@meta.data$New_division2[ind] <- "Shared CD4" + + +#######################Plot UMAP################ + +# Save plot +pdf(paste0(pdir, "/AKTPF_TandNK_umap_Fig6B-1.pdf"), width=7, height=6) # Figure 6B-1 +DimPlot(obs1, reduction = "umap.harmony.orig.ident", group.by = "NewlablesM_clu", pt.size = 0.5, label = T, label.size = 3, repel = T) +dev.off() + +# DimPlot(obs1, reduction = "umap.harmony.orig.ident",group.by = "Expansion", pt.size = 0.5, label = F, order = c("expanded", "unique"), cols = c("lightgrey", "blue")) + +pdf(paste0(pdir, "/AKTPF_tetramer_umap_Fig6B-2.pdf"), width=7, height=6) # Figure 6B-2 +DimPlot(obs1, reduction = "umap.harmony.orig.ident", group.by = "New_division_CD8", pt.size = 0.5, label = F, order = c("Shared CD8", "Other"), cols = c("lightgrey", "blue")) +dev.off() + +pdf(paste0(pdir, "/AKTPF_shared_cd4_umap_FigS12F.pdf"), width=7, height=6) # Figure S12F +DimPlot(obs1, reduction = "umap.harmony.orig.ident", group.by = "New_division2", pt.size = 0.5, label = F, order = c("Shared CD4", "Other"), cols = c("lightgrey", "blue")) +dev.off() + +# Export DimPlot as excel +var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.1.2","NewlablesM_clu","Clonetype","Expansion","New_division","New_division_CD8","New_division2") +TandNK_df <- FetchData(obs1, vars = var_list) +TandNK_df$cell_ID <- rownames(TandNK_df) +write.xlsx(TandNK_df, file=paste0(pdir, "/AKTPF_TandNK_umap_Fig6B_FigS12F.xlsx"), overwrite=T) + +#######################Plot UMAP################ + +# NO_TCR + +# # Save plot +# pdf(paste0(pdir, "/AKTPF_TandNK_umap_NO_TCR_FigS13D-1.pdf"), width=7, height=6) # Figure S13D-1 +# DimPlot(obs1, reduction = "umap.harmony.orig.ident", group.by = "NewlablesM_clu", pt.size = 0.5, label = T, label.size = 3, repel = T) +# dev.off() +# +# pdf(paste0(pdir, "/AKTPF_tetramer_umap_NO_TCR_FigS13D-2.pdf"), width=7, height=6) # Figure FigS13D-2 +# DimPlot(obs1, reduction = "umap.harmony.orig.ident", group.by = "New_division_CD8", pt.size = 0.5, label = F, order = c("Shared CD8", "Other"), cols = c("lightgrey", "blue")) +# dev.off() +# +# # Export DimPlot as excel +# var_list <- c("UMAPh_1", "UMAPh_2","Tissue","orig.ident","Sample","RNA_Group","Tube","RNA_snn_h.orig.ident_res.1.2","NewlablesM_clu","Clonetype","Expansion","New_division","New_division_CD8","New_division2") +# TandNK_df <- FetchData(obs1, vars = var_list) +# TandNK_df$cell_ID <- rownames(TandNK_df) +# write.xlsx(TandNK_df, file=paste0(pdir, "/AKTPF_TandNK_umap_NO_TCR_Fig6B_FigS13D.xlsx"), overwrite=T) + + +#######################DOTPLOT stellare ######################################################## +featuresCD4<-c("Ly6c2","Oas1a","Irf8","Ifitm3", # Ifna + "Il18rap","Il18r1","Il12rb1","Gbp2", # Ifng genes + "Ifng","Tbx21","Gzmk","Stat1","Tnf","Cxcr3","Il2", # Th1/effector genes + "Gata3","Il4","Il5","Lima1","Auh","Runx2","Smad2", # Th2 + "Rorc","Il17a","Palld","Basp1","Tnfrsf8","Apoe") # Th17 + +featuresCD8<-c("Stat1","Ly6c2","Oas1a","Irf8","Ifitm3", # IFNa genes + "Il18rap","Il18r1","Ifngas1","Il12rb1","Gbp2", # IL12/IFNg genes + "Tbx21","Klrg1","Cx3cr1","Tcf7","Klf2","Sell", # pex + "Gzmb","Gzma","Prf1","Ifng","Tnf","Fasl", # effector + "Pdcd1","Lag3","Ctla4","Havcr2","Tigit","Il10ra","Tox") # exhaustion + +# PlotStellari +pdf(file=paste0(pdir, "/CD8T_expanded_shared_FigS6D.pdf"), width=14, height=3) # Figure S6D +plot.b<-PlotStellare(obs1=obs1, features1=featuresCD8, valueG="Expansion.NewlablesG", i="Shared.CD8 T cells.expanded", group.by0="Orig", controGroup="Liver.TA33", noCtrlvsAll=T) +print(plot.b) +dev.off() + +pdf(file=paste0(pdir, "/CD4_T_cells_Liver_FigS6F.pdf"), width=14, height=3) # Figure S6F +plot.c<-PlotStellare(obs1=obs1, features1=featuresCD4, valueG="NewlablesG", i="CD4 T cells", group.by0="Orig", controGroup="Liver.TA33", noCtrlvsAll=T) +print(plot.c) +dev.off() + + +# Subset putative tumor specific CD8 in liver and tumor +T.liver<-subset(obs1, subset = Tissue=="Liver") +T.liverCD8.shexp<-subset(T.liver, subset = Expansion.NewlablesG =="Shared.CD8 T cells.expanded") + +T.tumor<-subset(obs1, subset = Tissue=="Tumor") +T.tumorCD8.shexp<-subset(T.tumor, subset = Expansion.NewlablesG =="Shared.CD8 T cells.expanded") + + +######################################################### +###############FIGURE 6D############################ +########################################################## + +##############RADAR PLOT LIVER EXPANDED######## +Effector <- list(c("Gzmb","Gzma","Prf1","Ifng","Tnf","Fasl")) +Pex <- list(c("Tbx21","Klrg1","Cx3cr1","Tcf7","Klf2","Sell")) +Exhaustion <- list(c("Pdcd1","Lag3","Ctla4","Havcr2","Tigit","Il10ra","Tox")) +IFNa_genes <- list(c("Stat1","Ly6c2","Oas1a","Irf8","Ifitm3") ) +IFNg_genes <-list(c("Il18rap","Il18r1","Ifngas1","Il12rb1","Gbp2")) + +T.liverCD8.shexp<- AddModuleScore(T.liverCD8.shexp, features = Effector, name = "Effector") +T.liverCD8.shexp<- AddModuleScore(T.liverCD8.shexp, features = Pex, name = "Pex") +T.liverCD8.shexp<- AddModuleScore(T.liverCD8.shexp, features = Exhaustion, name = "Exhaustion") +T.liverCD8.shexp<- AddModuleScore(T.liverCD8.shexp, features = IFNa_genes, name = "IFNa_genes") +T.liverCD8.shexp<- AddModuleScore(T.liverCD8.shexp, features = IFNg_genes, name = "IFNg_genes") + +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. + +#M1<-T.liverCD8.shexp@meta.data[,c(16, 37, 54:58)] +M1<-T.liverCD8.shexp@meta.data[,c("NewlablesM", "RNA_Group", "Effector1","Pex1","Exhaustion1","IFNa_genes1","IFNg_genes1")] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(T.liverCD8.shexp$RNA_Group) +CellType<-unique(M1$NewlablesM) +M2<-M1 +M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) +M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) +M4<-rbind(M3a,M3b) +rownames(M4)<-Groups +colnames(M4)<-colnames(M2[,3:7]) +x<-as.data.frame(M4) +max1 <- rep(do.call("max", x),5) +min1 <- rep(do.call("min", x),5) +ploTData<- rbind(max1,min1,x) +colors_border=c(rgb(0.1,0.6,0.2,0.9),rgb(0,0,0,0.9)) +colors_in=c(rgb(0.1,0.6,0.2,0.1),rgb(0,0,0,0.1)) + +#radarchart(ploTData, title = "Tumor reactive liver T cells", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty=1, cglwd=0.8) + +pdf(paste0(pdir, "/radar.plot.liver.expandedandshared.CD8_newgenes_Fig6D-1.pdf"), width=5, height=5) +radarchart(ploTData, title = "CD8 T cells", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty=1, cglwd=0.8) +dev.off() + + +##############RADAR PLOT tumor EXPANDED######## +Effector <- list(c("Gzmb","Gzma","Prf1","Ifng","Tnf","Fasl")) +Pex <- list(c("Tbx21","Klrg1","Cx3cr1","Tcf7","Klf2","Sell")) +Exhaustion <- list(c("Pdcd1","Lag3","Ctla4","Havcr2","Tigit","Il10ra","Tox")) +IFNa_genes <- list(c("Stat1","Ly6c2","Oas1a","Irf8","Ifitm3") ) +IFNg_genes <-list(c("Il18rap","Il18r1","Ifngas1","Il12rb1","Gbp2")) + +T.tumorCD8.shexp<- AddModuleScore(T.tumorCD8.shexp, features = Effector, name = "Effector") +T.tumorCD8.shexp<- AddModuleScore(T.tumorCD8.shexp, features = Pex, name = "Pex") +T.tumorCD8.shexp<- AddModuleScore(T.tumorCD8.shexp, features = Exhaustion, name = "Exhaustion") +T.tumorCD8.shexp<- AddModuleScore(T.tumorCD8.shexp, features = IFNa_genes, name = "IFNa_genes") +T.tumorCD8.shexp<- AddModuleScore(T.tumorCD8.shexp, features = IFNg_genes, name = "IFNg_genes") + +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. + +#M1<-T.tumorCD8.shexp@meta.data[,c(16, 37, 54:58)] +M1<-T.tumorCD8.shexp@meta.data[,c("NewlablesM", "RNA_Group", "Effector1","Pex1","Exhaustion1","IFNa_genes1","IFNg_genes1")] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(T.tumorCD8.shexp$RNA_Group) +CellType<-unique(M1$NewlablesM) +M2<-M1 +M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) +M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) +M4<-rbind(M3a,M3b) +rownames(M4)<-Groups +colnames(M4)<-colnames(M2[,3:7]) +x<-as.data.frame(M4) +max1 <- rep(do.call("max", x),5) +min1 <- rep(do.call("min", x),5) +ploTData<- rbind(max1,min1,x) +colors_border=c(rgb(0.1,0.6,0.2,0.9),rgb(0,0,0,0.9)) +colors_in=c(rgb(0.1,0.6,0.2,0.1),rgb(0,0,0,0.1)) + + +#radarchart(ploTData, title = "Tumor reactive tumor CD8 T cells", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty=1, cglwd=0.8) + +pdf(paste0(pdir, "/radar.plot.tumor.expandedandshared.CD8_Fig6D-2.pdf"), width=5, height=5) +radarchart(ploTData, title = "CD8 T cells", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty=1, cglwd=0.8) +dev.off() + + + +#################FIGURE S6G########################### +############Spider plot liver CD4###################### +CD4<-subset(obs1, subset = Tissue =="Liver" & + NewlablesG =="CD4 T cells") + +IFNa_genes<- list(c("Ly6c2","Oas1a","Irf8","Ifitm3") ) +IFNg_genes<-list(c("Il18rap","Il18r1","Il12rb1","Gbp2")) +Th1<-list(c("Ifng","Tbx21","Gzmk","Stat1","Tnf","Cxcr3","Il2")) +Th2<-list(c("Gata3","Il4","Il5","Lima1","Auh","Runx2","Smad2")) +Th17<-list(c("Rorc","Il17a","Palld","Basp1","Tnfrsf8","Apoe")) + +CD4 <- AddModuleScore(CD4, features = Th1, name = "Th1") +CD4 <- AddModuleScore(CD4, features = Th2, name = "Th2") +CD4 <- AddModuleScore(CD4, features = Th17, name = "Th17") +CD4 <- AddModuleScore(CD4, features = IFNa_genes, name = "IFNa_genes") +CD4 <- AddModuleScore(CD4, features = IFNg_genes, name = "IFNg_genes") + +#Normalize data +#we needed to find a way to normalize the module scores. +#we used a quantile normalization method. + +#M1<-CD4@meta.data[,c(16, 37, 54:58)] +M1<-CD4@meta.data[,c("NewlablesM", "RNA_Group", "Th11","Th21","Th171","IFNa_genes1","IFNg_genes1")] +M1[,3:7]<-limma::normalizeQuantiles(M1[,3:7]) +Groups <-unique(CD4$RNA_Group) +CellType<-unique(M1$NewlablesM) +M2<-M1 +M3a<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[1],3:7]),na.rm=T) +M3b<-colMedians(as.matrix(M2[M2$RNA_Group%in%Groups[2],3:7]),na.rm=T) +M4<-rbind(M3a,M3b) +rownames(M4)<-Groups +colnames(M4)<-colnames(M2[,3:7]) +x<-as.data.frame(M4) +max1 <- rep(do.call("max", x),5) +min1 <- rep(do.call("min", x),5) +ploTData<- rbind(max1,min1,x) +colors_border=c(rgb(0.1,0.6,0.2,0.9),rgb(0,0,0,0.9)) +colors_in=c(rgb(0.1,0.6,0.2,0.1),rgb(0,0,0,0.1)) + +pdf(paste0(pdir, "/radar.plot.liver_CD4_FigS6G.pdf"), width=5, height=5) +radarchart(ploTData, title = "CD4 T liver cells", pcol=colors_border, pfcol=colors_in, plwd=2, plty=1, cglcol="grey", cglty = 1,cglwd=0.8) +dev.off() + + + +######################################### +###################GSEA################## +######################################### +# Load signature +#miDB_sig4.MLS <- readRDS(paste0(username, "Dropbox (HSR Global)/90-756142658_RNAseq_Squadrito/05-DGE-Tumor/miDB_sig4.MLS.rds")) +miDB_sig4.MLS <- readRDS("/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A018/reference/miDB_sig4.MLS.rds") + + +###############Figure S6############################# +CD8<-subset(obs1, subset= NewlablesG =="CD8 T cells") + +CD8<-SetIdent(CD8, value = "Orig") +obs1.dge<-FindMarkers(CD8, ident.1 = "Liver.TA33.Combo", ident.2 = "Liver.TA33",min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +obs1.ranks <- obs1.dge$avg_log2FC +names(obs1.ranks) <- rownames(obs1.dge) + +obs2.dge<-FindMarkers(CD8, ident.1 = "Tumor.TA33.Combo", ident.2 = "Tumor.TA33",min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +obs2.ranks <- obs2.dge$avg_log2FC +names(obs2.ranks) <- rownames(obs2.dge) + + +res.combo.liver<-fgsea(pathways = miDB_sig4.MLS, stats = obs1.ranks,minSize=0,maxSize=500, eps=0) +res.combo.tumor<-fgsea(pathways = miDB_sig4.MLS, stats = obs2.ranks,minSize=0,maxSize=500, eps=0) + +# Select the columns of interest +res.combo.liver2<-res.combo.liver[,c(1,3,6,8)] +res.combo.tumor2<-res.combo.tumor[,c(1,3,6,8)] + +# Merge in a single file and save xlsx +merge1 <- merge(x=res.combo.liver2,y=res.combo.tumor2,by="pathway", suffixes = c("-liver", "-tumor")) +write.xlsx(merge1, paste0(pdir, "GSEA_CD8.xlsx"), asTable=T, rowNames=T) + + +##################GSEA Heatmap of selected####################################### + +# Rearrange data to plot heatmap +res.combo.liver$origin <- "Liver" +res.combo.tumor$origin <- "Tumor" + + +# res.OVA$origin<- factor(x = res.OVA$origin, levels = c("OVA.Combo","OVA.Il12","OVA.IFNa","liOVA")) +merge.results<-rbind(res.combo.liver,res.combo.tumor) + +#create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + + +#pathway manually selected +a1<-c("HALLMARK_G2M_CHECKPOINT", + "GOBP_DNA_REPLICATION", + "HALLMARK_ANGIOGENESIS", + "GOBP_RESPONSE_TO_TYPE_I_INTERFERON", + "GOBP_RESPONSE_TO_INTERFERON_GAMMA", + "GOBP_LEUKOCYTE_MEDIATED_CYTOTOXICITY", + "GOBP_CELL_CYCLE_G2_M_PHASE_TRANSITION", + "GOBP_DEFENSE_RESPONSE_TO_VIRUS", + "GOBP_CELL_KILLING", + "GOBP_POSITIVE_REGULATION_OF_ENDOTHELIAL_CELL_MIGRATION", + "GOBP_VASCULAR_ENDOTHELIAL_GROWTH_FACTOR_SIGNALING_PATHWAY", + "HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION") + +#subset selcting pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# Rename pathways +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_TYPE_I_INTERFERON"] <- "Response to IFNa" +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_INTERFERON_GAMMA"] <- "Response to IFNg" +merge.results1[merge.results1 == "GOBP_DEFENSE_RESPONSE_TO_VIRUS"] <- "Response to virus" +merge.results1[merge.results1 == "GOBP_LEUKOCYTE_MEDIATED_CYTOTOXICITY"] <- "Leukocyte cytotoxicity" +merge.results1[merge.results1 == "GOBP_CELL_CYCLE_G2_M_PHASE_TRANSITION"] <- "G2-M phase transition" +merge.results1[merge.results1 == "GOBP_CELL_KILLING"] <- "Cell Killing" +merge.results1[merge.results1 == "GOBP_POSITIVE_REGULATION_OF_ENDOTHELIAL_CELL_MIGRATION"] <- "Positive regulation of endothelial cell migration" +merge.results1[merge.results1 == "GOBP_VASCULAR_ENDOTHELIAL_GROWTH_FACTOR_SIGNALING_PATHWAY"] <- "VEGF signaling" +merge.results1[merge.results1 == "HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION"] <- "Hallmark EMT" +merge.results1[merge.results1 == "HALLMARK_G2M_CHECKPOINT"] <- "Hallmark G2M checkpoint" +merge.results1[merge.results1 == "GOBP_DNA_REPLICATION"] <- "DNA replication" +merge.results1[merge.results1 == "HALLMARK_ANGIOGENESIS"] <- "Hallmark angiogenesis" + +# Order in the way we want to see +merge.results1$pathway<- factor(merge.results1$pathway, levels = rev(c("Response to virus", + "Response to IFNa", + "Response to IFNg", + "Cell Killing", + "Leukocyte cytotoxicity", + "G2-M phase transition", + "Hallmark G2M checkpoint", + "DNA replication", + "Hallmark EMT", + "Positive regulation of endothelial cell migration", + "VEGF signaling", + "PGE2 signature Cilenti et al", + "Hallmark angiogenesis"))) + + +# Heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), + axis.text.x = element_text(angle = 45, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + + ggtitle("GSEA_CD8") +ggsave(filename = paste0(pdir, "/GSEA_CD8_FigS6C.pdf"), plot=y, width=5, height=2.5) + + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.0001,] +filter_in <- head(unique(merge.results_temp$pathway), 100) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("Liver","Tumor")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) +ggtitle("GSEA_CD8") +ggsave(filename = paste0(pdir, "/GSEA_CD8_unbias.pdf"), plot=y, width=15, height=30) + + + +###################Figure S6E################ +CD4<-subset(obs1, subset= NewlablesG =="CD4 T cells") + +CD4<-SetIdent(CD4, value = "Orig") +obs1.dge<-FindMarkers(CD4, ident.1="Liver.TA33.Combo", ident.2="Liver.TA33", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +obs2.dge<-FindMarkers(CD4, ident.1="Tumor.TA33.Combo", ident.2="Tumor.TA33", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) + +obs1.ranks <- obs1.dge$avg_log2FC +obs2.ranks <- obs2.dge$avg_log2FC + +names(obs1.ranks) <- rownames(obs1.dge) +names(obs2.ranks) <- rownames(obs2.dge) + + +res.combo.liver <- fgsea(pathways = miDB_sig4.MLS, stats=obs1.ranks, minSize=0, maxSize=500, eps=0) +res.combo.tumor <- fgsea(pathways = miDB_sig4.MLS, stats=obs2.ranks, minSize=0, maxSize=500, eps=0) + + +# Select columns of interest +res.combo.liver2<-res.combo.liver[,c(1,3,6,8)] +res.combo.tumor2<-res.combo.tumor[,c(1,3,6,8)] + +#merge in a single file and save xlsx +merge1 <- merge(x=res.combo.liver2,y=res.combo.tumor2,by="pathway", suffixes = c("-liver", "-tumor")) +write.xlsx(merge1, file = paste0(pdir, "/GSEA_CD4.xlsx"), asTable=T, rowNames=T) + + +##################GSEA Heatmap of selected####################################### + +#rearrange data to plot heatmap +res.combo.liver$origin <- "Liver" +res.combo.tumor$origin <- "Tumor" + + +# res.OVA$origin<- factor(x = res.OVA$origin, levels = c("OVA.Combo","OVA.Il12","OVA.IFNa","liOVA")) +merge.results<-rbind(res.combo.liver,res.combo.tumor) + +#create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + + +#pathway manually selected +a1<-c("HALLMARK_INTERFERON_ALPHA_RESPONSE", + "HALLMARK_INTERFERON_GAMMA_RESPONSE", + "LPS_RO", + "GOBP_INTERLEUKIN_18_PRODUCTION", + "GOBP_INTERFERON_GAMMA_PRODUCTION", + "GOBP_T_CELL_DIFFERENTIATION_INVOLVED_IN_IMMUNE_RESPONSE", + "HALLMARK_E2F_TARGETS", + "HALLMARK_G2M_CHECKPOINT", + "GOBP_NEGATIVE_REGULATION_OF_MACROPHAGE_ACTIVATION", + "IL4_RO", + "GOBP_RESPONSE_TO_INTERLEUKIN_17") + +# #subset selcting pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# ###rename pathways +merge.results1[merge.results1 == "HALLMARK_INTERFERON_ALPHA_RESPONSE"] <- "Response to IFNa" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Response to IFNg" +merge.results1[merge.results1 == "LPS_RO"] <- "LPS signature (Cilenti et al)" +merge.results1[merge.results1 == "GOBP_INTERLEUKIN_18_PRODUCTION"] <- "IL-18 production" +merge.results1[merge.results1 == "GOBP_INTERFERON_GAMMA_PRODUCTION"] <- "Ifng production" +merge.results1[merge.results1 == "GOBP_T_CELL_DIFFERENTIATION_INVOLVED_IN_IMMUNE_RESPONSE"] <- "T cell differentiation" +merge.results1[merge.results1 == "HALLMARK_E2F_TARGETS"] <- "Hallmark E2F targets" +merge.results1[merge.results1 == "HALLMARK_G2M_CHECKPOINT"] <- "Hallmark G2M checkpoint" +merge.results1[merge.results1 == "GOBP_NEGATIVE_REGULATION_OF_MACROPHAGE_ACTIVATION"] <- "Negative regulation of Macrophages activation" +merge.results1[merge.results1 == "IL4_RO"] <- "IL-4 Signature (Cilenti et al)" +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_INTERLEUKIN_17"] <- "Response to IL-17" + + + +# Order in the way we want to see +merge.results1$pathway<- factor(merge.results1$pathway, levels = rev(c("Response to IFNa", + "Response to IFNg", + "LPS signature (Cilenti et al)", + "IL-18 production", + "Ifng production", + "T cell differentiation", + "Hallmark E2F targets", + "Hallmark G2M checkpoint", + "Negative regulation of Macrophages activation", + "IL-4 Signature (Cilenti et al)", + "Response to IL-17"))) + + +# Heatmap +y<-ggplot(merge.results1, aes(x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust=0.7, angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), + axis.text.x = element_text(angle=45, hjust=1, color="Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + + ggtitle("GSEA_CD4") +ggsave(filename = paste0(pdir, "/GSEA_CD4_T_cells_FigS6E.pdf"), plot=y, width=5, height=3) + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.0001,] +filter_in <- head(unique(merge.results_temp$pathway), 100) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("Liver","Tumor")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label=stats), vjust=0.7, angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + +ggtitle("GSEA_CD4") +ggsave(filename = paste0(pdir, "/GSEA_CD4_T_cells_unbias.pdf"), plot=y, width=15, height=30) + + + +####################Figure 6E##################################### +sub.obj<-subset(obs1, subset= Expansion.NewlablesG =="Shared.CD8 T cells.expanded") + +sub.obj<-SetIdent(sub.obj, value = "Orig") +obs1.dge<-FindMarkers(sub.obj, ident.1="Liver.TA33.Combo", ident.2="Liver.TA33", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) +obs2.dge<-FindMarkers(sub.obj, ident.1="Tumor.TA33.Combo", ident.2="Tumor.TA33", min.pct=0.01, logfc.threshold=0, min.cells.feature=1, min.cells.group=1) + +obs1.ranks <- obs1.dge$avg_log2FC +obs2.ranks <- obs2.dge$avg_log2FC + +names(obs1.ranks) <- rownames(obs1.dge) +names(obs2.ranks) <- rownames(obs2.dge) + + +res.combo.liver <- fgsea(pathways = miDB_sig4.MLS, stats = obs1.ranks, minSize=0, maxSize=500, eps=0) +res.combo.tumor <- fgsea(pathways = miDB_sig4.MLS, stats = obs2.ranks, minSize=0, maxSize=500, eps=0) + +#select columns of interest +res.combo.liver2<-res.combo.liver[,c(1,3,6,8)] +res.combo.tumor2<-res.combo.tumor[,c(1,3,6,8)] + +#merge in a single file and save xlsx +merge1 <- merge(x=res.combo.liver2,y=res.combo.tumor2,by="pathway", suffixes = c("-liver", "-tumor")) + +setwd(pdir) +write.xlsx(merge1,"GSEA_LandT_SharedexpandedCD8.xlsx",asTable = TRUE,rowNames=T) ####save file + +##################GSEA Heatmap of selected####################################### + +#rearrange data to plot heatmap +res.combo.liver$origin<-"Liver" +res.combo.tumor$origin<-"Tumor" + + +# res.OVA$origin<- factor(x = res.OVA$origin, levels = c("OVA.Combo","OVA.Il12","OVA.IFNa","liOVA")) +merge.results<-rbind(res.combo.liver,res.combo.tumor) + +#create variable with star for statistic +merge.results$stats <- ifelse(merge.results$padj < 0.0005, "***", + ifelse(merge.results$padj < 0.005, "**", + ifelse(merge.results$padj < 0.05, "*", ""))) + +#merge.results2 <- merge.results[order(merge.results$padj, decreasing = F)] +#filter_in <- head(unique(merge.results2$pathway), 50) +#merge.results1 <-merge.results[merge.results$pathway %in% filter_in,] + +# Manually selected pathways +a1_OLD<-c("Exhaustion_Wherry", + "GOBP_RESPONSE_TO_TYPE_I_INTERFERON", + "GOBP_RESPONSE_TO_INTERFERON_GAMMA", + "GOBP_LEUKOCYTE_MEDIATED_CYTOTOXICITY", + "GOBP_CELL_CYCLE_G2_M_PHASE_TRANSITION", + "GOBP_DEFENSE_RESPONSE_TO_VIRUS", + "GOBP_CELL_KILLING", + "GOBP_POSITIVE_REGULATION_OF_ENDOTHELIAL_CELL_MIGRATION", + "GOBP_VASCULAR_ENDOTHELIAL_GROWTH_FACTOR_SIGNALING_PATHWAY", + "PGE2_RO", + "HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION") + +a1<-c("GOBP_RESPONSE_TO_VIRUS", + "HALLMARK_INTERFERON_GAMMA_RESPONSE", + "HALLMARK_INTERFERON_ALPHA_RESPONSE", + "HALLMARK_E2F_TARGETS", + "GOMF_ANTIGEN_BINDING", + "GOBP_VASCULATURE_DEVELOPMENT", + "LPS_RO", + "GOBP_EPITHELIAL_TO_MESENCHYMAL_TRANSITION", + "GOBP_MESENCHYMAL_CELL_DIFFERENTIATION", + "Exhaustion_Wherry") + +# Subset selected pathways +merge.results1 <-merge.results[merge.results$pathway %in% a1,] + +# Rename pathways +merge.results1[merge.results1 == "GOBP_RESPONSE_TO_VIRUS"] <- "Response to virus" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_ALPHA_RESPONSE"] <- "Response to IFNa" +merge.results1[merge.results1 == "HALLMARK_INTERFERON_GAMMA_RESPONSE"] <- "Response to IFNg" +merge.results1[merge.results1 == "LPS_RO"] <- "LPS signature from Cilenti et al" +merge.results1[merge.results1 == "HALLMARK_E2F_TARGETS"] <- "E2F targets" +merge.results1[merge.results1 == "GOMF_ANTIGEN_BINDING"] <- "Antigen binding" +merge.results1[merge.results1 == "GOBP_EPITHELIAL_TO_MESENCHYMAL_TRANSITION"] <- "Epithelial to mesenchymal transition" +merge.results1[merge.results1 == "GOBP_MESENCHYMAL_CELL_DIFFERENTIATION"] <- "Mesenchymal cell differentiation" +merge.results1[merge.results1 == "GOBP_VASCULATURE_DEVELOPMENT"] <- "Vasculature development" +merge.results1[merge.results1 == "Exhaustion_Wherry"] <- "Exhaustion signature (Wherry)" + + + +# Order in the way we want to see +merge.results1$pathway <- factor(merge.results1$pathway, levels = rev(c("Response to virus", # rev()? + "Response to IFNa", + "Response to IFNg", + "LPS signature from Cilenti et al", + "E2F targets", + "Antigen binding", + "Epithelial to mesenchymal transition", + "Mesenchymal cell differentiation", + "Vasculature development", + "Exhaustion signature (Wherry)"))) + +#merge.results1$origin <- factor(x = merge.results1$origin, levels = c("Liver","Tumor")) + +# Heatmap +y<-ggplot(merge.results1, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette="RdBu") + + geom_text(aes(label = stats), vjust=0.7, angle=0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color="Black"), + axis.text.x = element_text(angle=45, hjust=1, color="Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) + + ggtitle("GSEA_LandT_putative_Tumor_specific") +ggsave(filename = paste0(pdir, "/GSEA_LandT_putative_Tumorspecific_Fig6E.pdf"), plot=y, width=5, height=2.5) #width=5, height=2.5) + +# Unbias heatmap +merge.results <- merge.results[order(merge.results$padj, decreasing = F)] +merge.results_temp <-merge.results[merge.results$padj < 0.001,] +#filter_in <- head(unique(merge.results_temp$pathway), 100) +filter_in <- head(unique(merge.results$pathway), 100) +merge.results2 <-merge.results[merge.results$pathway %in% filter_in,] +merge.results2$origin<- factor(x = merge.results2$origin, levels = c("Liver","Tumor")) + +y<-ggplot(merge.results2, aes (x=origin, y=pathway, fill=NES)) + + geom_tile() + + scale_fill_distiller(palette = "RdBu") + + geom_text(aes(label = stats), vjust = 0.7,angle = 0) + + labs(y='',x='')+ + theme_classic()+ + theme(axis.text.y = element_text(color = "Black"), text = element_text(size = 15), + axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, color = "Black"), + axis.line.x=element_line(color="Black"), + axis.line.y=element_line(color="Black")) +ggtitle("GSEA_LandT_putative_Tumorspecific") +ggsave(filename = paste0(pdir, "/GSEA_LandT_putative_Tumorspecific_unbias.pdf"), plot=y, width=15, height=30) + + +################################################################################## +#############################ALLUVIAL PLOT######################################## +################################################################################## + +#####Figure 6C######### +df1 <- obs1@meta.data +df1<-df1[df1$NewlablesG == "CD8 T cells",] +#df2<- na.omit(df1[,c(12,37,38)]) +df2<- na.omit(df1[,c("cdr3_aa2","RNA_Group","Tissue")]) +for (i in unique(df1$RNA_Group)){ + df3 <- df2[df2$RNA_Group==i&df2$Tissue=="Liver",] + df4 <- df2[df2$RNA_Group==i&df2$Tissue=="Tumor",] + df3 <- df3 %>% group_by(cdr3_aa2) %>% mutate(ClonoFreq = n()) %>% unique() %>% ungroup() %>% as.data.frame() + df4 <- df4 %>% group_by(cdr3_aa2) %>% mutate(ClonoFreq = n()) %>% unique() %>% ungroup() %>% as.data.frame() + #df5 <- merge(df3,df4,by=1,suffixes = c(".Liver",".Tumor")) + df6 <- rbind(df3,df4) + df6 <- df6[df6$ClonoFreq>2,] + df6 <- df6[order(df6$cdr3_aa2),] + df6$col1[!duplicated(df6$cdr3_aa2)] <- "#CCCCCC" + Dtests <- duplicated(df6$cdr3_aa2)|duplicated(df6$cdr3_aa2,fromLast = T) + df6$col1 [Dtests] <- "#CC6600" #"#3399FF" + plotA <- ggplot(data = df6, + aes(x = Tissue, y=ClonoFreq,alluvium = cdr3_aa2,stratum= cdr3_aa2)) + + geom_flow(aes(fill = col1),decreasing = F)+ + geom_stratum(aes(fill = col1,size=0.2),decreasing = F) + + scale_fill_manual(values = setNames(unique(df6$col), unique(df6$col)))+ + theme_bw() + theme(legend.position = "none")+ + scale_size_identity()+ + ggtitle(i) + nameR <- paste0(i,".plot") + assign(nameR,plotA)} + +pdf(paste0(pdir, "/Fluvial.Plot.19.CD8mag2clones_Fig6C.pdf"), width=4, height=2) +grid.arrange(TA33.plot,TA33.Combo.plot, ncol = 2, nrow = 1) +#grid.arrange(sapply(plots.all,get), ncol = 2, nrow = 2) +dev.off() + +#####Figure 6G######### +df1 <- obs1@meta.data +df1<-df1[df1$NewlablesG == "CD4 T cells",] +#df2<- na.omit(df1[,c(12,37,38)]) +df2<- na.omit(df1[,c("cdr3_aa2","RNA_Group","Tissue")]) +for (i in unique(df1$RNA_Group)){ + df3 <- df2[df2$RNA_Group==i&df2$Tissue=="Liver",] + df4 <- df2[df2$RNA_Group==i&df2$Tissue=="Tumor",] + df3 <- df3 %>% group_by(cdr3_aa2) %>% mutate(ClonoFreq = n()) %>% unique() %>% ungroup() %>% as.data.frame() + df4 <- df4 %>% group_by(cdr3_aa2) %>% mutate(ClonoFreq = n()) %>% unique() %>% ungroup() %>% as.data.frame() + #df5 <- merge(df3,df4,by=1,suffixes = c(".Liver",".Tumor")) + df6 <- rbind(df3,df4) + df6 <- df6[df6$ClonoFreq>1,] + df6 <- df6[order(df6$cdr3_aa2),] + df6$col1[!duplicated(df6$cdr3_aa2)] <- "#CCCCCC" + Dtests <- duplicated(df6$cdr3_aa2)|duplicated(df6$cdr3_aa2,fromLast = T) + df6$col1 [Dtests] <- "#CC6600" #"#3399FF" + plotA <- ggplot(data = df6, + aes(x = Tissue, y=ClonoFreq,alluvium = cdr3_aa2,stratum= cdr3_aa2)) + + geom_flow(aes(fill = col1),decreasing = F)+ + geom_stratum(aes(fill = col1,size=0.2),decreasing = F) + + scale_fill_manual(values = setNames(unique(df6$col), unique(df6$col)))+ + theme_bw() + theme(legend.position = "none")+ + scale_size_identity()+ + ggtitle(i) + nameR <- paste0(i,".plot") + assign(nameR,plotA)} + +pdf(paste0(pdir, "/Fluvial.Plot.19.CD4mag1clones_Fig6G.pdf"), width=4, height=2) +grid.arrange(TA33.plot,TA33.Combo.plot, ncol = 2, nrow = 1) +#grid.arrange(sapply(plots.all,get), ncol = 2, nrow = 2) +dev.off() + + + diff --git a/TAD019/003_TAD019_Multinichenet_Tumor.R b/TAD019/003_TAD019_Multinichenet_Tumor.R new file mode 100644 index 0000000000000000000000000000000000000000..609f054732a6d84e449e189f493bd5e35136c1f9 --- /dev/null +++ b/TAD019/003_TAD019_Multinichenet_Tumor.R @@ -0,0 +1,232 @@ +library(SingleCellExperiment) +library(dplyr) +library(ggplot2) +library(multinichenetr) + +#####RELATIVE TO FIGURE 6H######### + +#############Prepare files +wdir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_NotaroTAD_A019/Analysis_MM/results3/Result3_MNOT" +setwd(wdir) +all.labels <- readRDS("all.labels.rds") + +#####open LIVER Obj +####Prepare files +username <- "C:/Users/notaro.marco/" +username <- "/Users/Squadrito/" +ddir<- paste0(username, "Dropbox (HSR Global)/90-935462466_scRNAseq_NotaroTAD_A019/Analysis_MM/results2cond/Tumor") +setwd(ddir) +obs <- readRDS("Tumor_final.rds") + +obs@meta.data$NewlablesM2 <- all.labels[rownames(obs@meta.data)] +obs$sample_id <- paste0(obs$hash.ID, obs$PROP.Condition) + + +obs@meta.data$NewlablesG <- obs@meta.data$NewlablesM2 +obs@meta.data$NewlablesG[grep("CD4",obs@meta.data$NewlablesM2) ] <- "CD4_Tcells" +obs@meta.data$NewlablesG[grep("CD8",obs@meta.data$NewlablesM2)] <- "CD8_Tcells" +obs@meta.data$NewlablesG[grep("DCs",obs@meta.data$NewlablesM2) ] <- "DCs" + +###subset +sub.obj<-subset(obs, + subset= NewlablesG == "Macrophages"| + NewlablesG == "DCs"| + NewlablesG == "CD4_Tcells"| + NewlablesG == "CD8_Tcells") + +#sub.obj2 <- subset(sub.obj,cells = sample(1:nrow(sub.obj@meta.data),500)) +sub.obj2 <- sub.obj + +nrow(sub.obj@meta.data) + +###Multinichnet +organism = "mouse" +if(organism == "human"){ + lr_network = readRDS(url("https://zenodo.org/record/7074291/files/lr_network_human_21122021.rds")) + lr_network = lr_network %>% dplyr::rename(ligand = from, receptor = to) %>% distinct(ligand, receptor) %>% mutate(ligand = make.names(ligand), receptor = make.names(receptor)) + ligand_target_matrix = readRDS(url("https://zenodo.org/record/7074291/files/ligand_target_matrix_nsga2r_final.rds")) + colnames(ligand_target_matrix) = colnames(ligand_target_matrix) %>% make.names() + rownames(ligand_target_matrix) = rownames(ligand_target_matrix) %>% make.names() +} else if(organism == "mouse"){ + lr_network = readRDS(url("https://zenodo.org/record/7074291/files/lr_network_mouse_21122021.rds")) + lr_network = lr_network %>% dplyr::rename(ligand = from, receptor = to) %>% distinct(ligand, receptor) %>% mutate(ligand = make.names(ligand), receptor = make.names(receptor)) + ligand_target_matrix = readRDS(url("https://zenodo.org/record/7074291/files/ligand_target_matrix_nsga2r_final_mouse.rds")) + colnames(ligand_target_matrix) = colnames(ligand_target_matrix) %>% make.names() + rownames(ligand_target_matrix) = rownames(ligand_target_matrix) %>% make.names() +} + + +obs1 <- Seurat::as.SingleCellExperiment(sub.obj2, assay = "RNA") +obs1 = alias_to_symbol_SCE(obs1, "mouse") %>% makenames_SCE() + + +celltype_id = "NewlablesG" +group_id = "PROP.Condition" +sample_id = "sample_id" +covariates = NA +batches = NA + +senders_oi = SummarizedExperiment::colData(obs1)[,celltype_id] %>% unique() +receivers_oi = SummarizedExperiment::colData(obs1)[,celltype_id] %>% unique() + +min_cells = 10 + +abundance_expression_info = get_abundance_expression_info(sce = obs1, + sample_id = sample_id, group_id = group_id, celltype_id = celltype_id, + min_cells = min_cells, senders_oi = senders_oi, + receivers_oi = receivers_oi, lr_network = lr_network, batches = batches) + +abundance_expression_info$abund_plot_sample + +contrasts_oi = c("'TA_combo-TA_only','TA_only-TA_combo'") + +contrast_tbl = tibble(contrast = + c("TA_combo-TA_only","TA_only-TA_combo"), + group = c("TA_combo","TA_only")) + +DE_info = get_DE_info(sce = obs1, sample_id = sample_id, + group_id = group_id, celltype_id = celltype_id, + batches = batches, covariates = covariates, + contrasts_oi = contrasts_oi, min_cells = min_cells) + + +DE_info$celltype_de$de_output_tidy %>% arrange(p_adj) %>% head() + +celltype_de = DE_info$celltype_de$de_output_tidy + +sender_receiver_de = combine_sender_receiver_de( + sender_de = celltype_de, + receiver_de = celltype_de, + senders_oi = senders_oi, + receivers_oi = receivers_oi, + lr_network = lr_network) + +sender_receiver_de %>% head(20) + +logFC_threshold = 0.50 +p_val_threshold = 0.05 +fraction_cutoff = 0.05 + +p_val_adj = FALSE + +top_n_target = 250 + +verbose = TRUE +#cores_system = 8 +#n.cores = min(cores_system, sender_receiver_de$receiver %>% unique() %>% length()) # use one core per receiver cell type + +#takes time + +ligand_activities_targets_DEgenes = suppressMessages(suppressWarnings(get_ligand_activities_targets_DEgenes( + receiver_de = celltype_de, + receivers_oi = receivers_oi, + ligand_target_matrix = ligand_target_matrix, + logFC_threshold = logFC_threshold, + p_val_threshold = p_val_threshold, + p_val_adj = p_val_adj, + top_n_target = top_n_target, + verbose = verbose, + n.cores = 1 +))) + + +#prioritazing +prioritizing_weights_DE = c("de_ligand" = 1, + "de_receptor" = 1) +prioritizing_weights_activity = c("activity_scaled" = 2) +prioritizing_weights_expression_specificity = c("exprs_ligand" = 2, + "exprs_receptor" = 2) +prioritizing_weights_expression_sufficiency = c("frac_exprs_ligand_receptor" = 1) +prioritizing_weights_relative_abundance = c( "abund_sender" = 0, + "abund_receiver" = 0) + +prioritizing_weights = c(prioritizing_weights_DE, + prioritizing_weights_activity, + prioritizing_weights_expression_specificity, + prioritizing_weights_expression_sufficiency, + prioritizing_weights_relative_abundance) + +sender_receiver_tbl = sender_receiver_de %>% dplyr::distinct(sender, receiver) + +metadata_combined = SummarizedExperiment::colData(obs1) %>% tibble::as_tibble() + +#grouping +if(!is.na(batches)){ + grouping_tbl = metadata_combined[,c(sample_id, group_id, batches)] %>% tibble::as_tibble() %>% dplyr::distinct() + colnames(grouping_tbl) = c("sample","group",batches) +} else { + grouping_tbl = metadata_combined[,c(sample_id, group_id)] %>% tibble::as_tibble() %>% dplyr::distinct() + colnames(grouping_tbl) = c("sample","group")} + +#run it +prioritization_tables = suppressMessages(generate_prioritization_tables( + sender_receiver_info = abundance_expression_info$sender_receiver_info, + sender_receiver_de = sender_receiver_de, + ligand_activities_targets_DEgenes = ligand_activities_targets_DEgenes, + contrast_tbl = contrast_tbl, + sender_receiver_tbl = sender_receiver_tbl, + grouping_tbl = grouping_tbl, + prioritizing_weights = prioritizing_weights, + fraction_cutoff = fraction_cutoff, + abundance_data_receiver = abundance_expression_info$abundance_data_receiver, + abundance_data_sender = abundance_expression_info$abundance_data_sender +)) +prioritization_tables$group_prioritization_tbl %>% head(20) + +##known info +lr_target_prior_cor = lr_target_prior_cor_inference(prioritization_tables$group_prioritization_tbl$receiver %>% unique(), abundance_expression_info, celltype_de, grouping_tbl, prioritization_tables, ligand_target_matrix, logFC_threshold = logFC_threshold, p_val_threshold = p_val_threshold, p_val_adj = p_val_adj) + +##saving +multinichenet_output = list( + celltype_info = abundance_expression_info$celltype_info, + celltype_de = celltype_de, + sender_receiver_info = abundance_expression_info$sender_receiver_info, + sender_receiver_de = sender_receiver_de, + ligand_activities_targets_DEgenes = ligand_activities_targets_DEgenes, + prioritization_tables = prioritization_tables, + grouping_tbl = grouping_tbl, + lr_target_prior_cor = lr_target_prior_cor +) +multinichenet_output = make_lite_output(multinichenet_output) + +seted(wdir) +saveRDS(multinichenet_output, paste0(wdir, "multinichenet_output.Tumor.19.rds")) + + +##look at top 50 +prioritized_tbl_oi_all = get_top_n_lr_pairs(multinichenet_output$prioritization_tables, 50, rank_per_group = FALSE) + +prioritized_tbl_oi = multinichenet_output$prioritization_tables$group_prioritization_tbl %>% + filter(id %in% prioritized_tbl_oi_all$id) %>% + distinct(id, sender, receiver, ligand, receptor, group) %>% left_join(prioritized_tbl_oi_all) +prioritized_tbl_oi$prioritization_score[is.na(prioritized_tbl_oi$prioritization_score)] = 0 + +senders_receivers = union(prioritized_tbl_oi$sender %>% unique(), prioritized_tbl_oi$receiver %>% unique()) %>% sort() + +colors_sender = RColorBrewer::brewer.pal(n = length(senders_receivers), name = 'Spectral') %>% magrittr::set_names(senders_receivers) +colors_receiver = RColorBrewer::brewer.pal(n = length(senders_receivers), name = 'Spectral') %>% magrittr::set_names(senders_receivers) + + +circos_list = make_circos_group_comparison(prioritized_tbl_oi, colors_sender, colors_receiver) + +##see interactions +group_oi = "TA_combo" + +##plot results +prioritized_tbl_oi_M_50 = get_top_n_lr_pairs(multinichenet_output$prioritization_tables, 50, groups_oi = group_oi) + +plot_oi = make_sample_lr_prod_activity_plots(multinichenet_output$prioritization_tables, prioritized_tbl_oi_M_50) +plot_oi + +##see interactions +group_oi = "TA_only" + +##plot results +prioritized_tbl_oi_M_50 = get_top_n_lr_pairs(multinichenet_output$prioritization_tables, 50, groups_oi = group_oi) + +plot_oi = make_sample_lr_prod_activity_plots(multinichenet_output$prioritization_tables, prioritized_tbl_oi_M_50) +plot_oi + +sessionInfo() + + diff --git a/Vizgen/Vizgen_transcript_distance.R b/Vizgen/Vizgen_transcript_distance.R new file mode 100644 index 0000000000000000000000000000000000000000..60f1abc9dc26486250a5de91099e7d99cd16ba64 --- /dev/null +++ b/Vizgen/Vizgen_transcript_distance.R @@ -0,0 +1,162 @@ +suppressPackageStartupMessages(library(Seurat)) +options(Seurat.object.assay.version = "v5") +suppressPackageStartupMessages(library(ggplot2)) +suppressPackageStartupMessages(library(openxlsx)) +suppressPackageStartupMessages(library(dplyr)) +suppressPackageStartupMessages(library(plyr)) + +wd <- "/beegfs/scratch/ric.squadrito/ric.squadrito/202312011215_VMSC10702-NotaroTAD_A019/Analysis_MM/python_scripts/circles" +setwd(wd) + +args <- commandArgs(trailingOnly = TRUE) + +sample <- args[1] # "M18", "M21", "M40", "M41" +#sample <- "M18" + +out_dir <- paste0(wd, "/distance_table") +dir.create(out_dir, showWarnings = F, recursive = T) + +##################### + +# Define a function to calculate Euclidean distance +euclidean_dist <- function(x1, y1, x2, y2) { + return(sqrt((x1 - x2)^2 + (y1 - y2)^2)) +} + +##################### + +detected_transcripts <- read.csv(file=paste0(wd, "/detected_transcripts_", sample, ".csv"), header = T, numerals = c("no.loss")) + +# "global_x" and "global_y" give the position in um, x and y in pixels: https://vizgen.github.io/vizgen-postprocessing/output_data_formats/detected_transcripts_format.html +df_molecules <- detected_transcripts[c("gene", "global_x", "global_y", "cell_id")] +colnames(df_molecules) <- c("gene", "x", "y", "cell_id") +rm(detected_transcripts) + +# Remove transcripts without cell_id +nrow(df_molecules) +df_molecules <- df_molecules %>% filter(! df_molecules$gene %in% grep(x = df_molecules$gene, pattern = "Blank", value = T)) +nrow(df_molecules) +df_molecules <- df_molecules[df_molecules$cell_id != "-1",] # It might be possible to include transcripts outside the cells but the results appear similar +nrow(df_molecules) + +# M18 transcripts: 4263642 => 4242609 => 3254954 +# M21 transcripts: 3508195 => 3490821 => 2430395 +# M40 transcripts: 2017821 => 2001106 => 1449746 +# M41 transcripts: 4510227 => 4494444 => 3030891 + +# Number of genes +n_genes <- 500 + +# Define the distance threshold. Default d=30um +d <- 30 + +# SelectedGenes contains the list of genes manually selected to identify specific cell types. +# It is possible to run the analysis with all the 500 genes but it takes much more time (5-10 days). +SelectedGenes <- unique(c("S100a6", "Klf4", "Anxa2", "Cdkn2a", "Vim", + # Antigen presentation + "Ciita", "H2-DMb1", "H2-Aa", "H2-Ab1", + # Macrophages + "Clec4f", "C1qa", "Marco", + # T cell activation + "Trac", "Cd3e", "Klf2", "Sell", "Il2rb", "Stat1","Ccr5", "Il12rb1", "Cd40", + # IFN + "Irf1", "Isg15", "Ifit2", "Cxcl9","Il18r1", + # Protumoral + "Serpine1","Cebpb","Pdgfb","Lrg1","Id2", "Vegfa", "Il1r1", "Cd274", "Tgfb1")) # Cd81 + +df_molecules <- df_molecules[df_molecules$gene %in% SelectedGenes,] + +# subset to have a smaller dataframe. This is used mostly for benchmarking and testing +#df_molecules <- df_molecules[df_molecules$gene %in% head(genes_ID, n_genes),] + +# Get the unique gene ID +genes_ID <- unique(df_molecules$gene) + +# Sort genes_ID +genes_ID <- sort(genes_ID, decreasing=F) + +n_genes <- length(genes_ID) # 500 + +# Initialize an empty distance matrix +distance_matrix <- matrix(nrow = length(genes_ID), ncol = length(genes_ID), 0) +distance_matrix_norm <- matrix(nrow = length(genes_ID), ncol = length(genes_ID), 0) +colnames(distance_matrix) <- genes_ID +rownames(distance_matrix) <- genes_ID +colnames(distance_matrix_norm) <- genes_ID +rownames(distance_matrix_norm) <- genes_ID + +# Loop through each gene type combination +for (i in 1:length(genes_ID)) { # 1:length(genes_ID) or 1:n_genes + print(i) + gene_A <- genes_ID[i] + + # Filter transcripts for gene A + transcripts_A <- df_molecules[df_molecules$gene == gene_A,] + for (j in 1:length(genes_ID)) { # (i + 1):length(genes_ID)) or 1:n_genes + gene_B <- genes_ID[j] + + # Filter transcripts for gene B + transcripts_B <- df_molecules[df_molecules$gene == gene_B,] + + # Initialize counters for close and not close transcripts + close_count <- 0 + + # Loop through transcripts in transcripts_A + for (z in 1:nrow(transcripts_A)) { + a_x <- transcripts_A$x[z] + a_y <- transcripts_A$y[z] + + # filter to retain only transcripts_B that are not in the same cell as the transcripts_A analysed. This speed up the script. + transcripts_B_temp <- transcripts_B[transcripts_B$cell_id != transcripts_A$cell_id[z],] + # If you include also transcripts outside the cells add the following lines + #if (transcripts_A$cell_id[z] != "-1") { + # transcripts_B_temp <- transcripts_B[transcripts_B$cell_id != transcripts_A$cell_id[z],]} + #else{transcripts_B_temp <- transcripts_B} + + # filter to retain only transcripts_B that are close to the transcripts_A analysed. This speed up the script. It looks only in a square of l=1.1*1.1*2d. + transcripts_B_temp <- transcripts_B_temp[transcripts_B_temp$x > a_x - 1.1*d & transcripts_B_temp$x < a_x + 1.1*d,] + transcripts_B_temp <- transcripts_B_temp[transcripts_B_temp$y > a_y - 1.1*d & transcripts_B_temp$y < a_y + 1.1*d,] + + is_close <- FALSE # Flag to track if a close transcript is found + + if (nrow(transcripts_B_temp)==0){next} # This transcript of A is not close to any transcript of B + + # Loop through transcripts in transcripts_B + for (w in 1:nrow(transcripts_B_temp)) { + b_x <- transcripts_B_temp$x[w] + b_y <- transcripts_B_temp$y[w] + + # Calculate distance + distance <- euclidean_dist(a_x, a_y, b_x, b_y) + + # Check if distance is less than threshold + if (distance < d) { + is_close <- TRUE + break # Exit inner loop if close transcript found + } + } + + # Update counters based on the flag + if (is_close) { + close_count <- close_count + 1 + } + + } + # Fill the distance matrix. Note: The matrix is not perfectly symmetrical because more A molecules can be close to the same B molecule and viceversa + distance_matrix[i, j] <- close_count + # Normalize for the sum of transcripts A and B. + # Note: I multiplied close_count * 2 because each transcript-transcript interaction involves two transcripts. + distance_matrix_norm[i, j] <- round(close_count*2/((nrow(transcripts_A)+nrow(transcripts_B))),5) + } +} + +# Print the distance matrix +print(distance_matrix) +print(distance_matrix_norm) + +# Save the matrix +write.csv(distance_matrix, paste0(out_dir, "/", sample, "_transcripts_distance_matrix_inCell_t", d, "_g", n_genes, "_selected.csv"), row.names=T) +write.csv(distance_matrix_norm, paste0(out_dir, "/", sample, "_transcripts_distance_matrix_norm_inCell_t", d, "_g", n_genes, "_selected.csv"), row.names=T) + + + diff --git a/Vizgen/Vizgen_transcript_distance_heatmap.R b/Vizgen/Vizgen_transcript_distance_heatmap.R new file mode 100644 index 0000000000000000000000000000000000000000..b1498de61138d938368b2ca9c9d16b70ef6d85bb --- /dev/null +++ b/Vizgen/Vizgen_transcript_distance_heatmap.R @@ -0,0 +1,107 @@ +suppressPackageStartupMessages(library(pheatmap)) +suppressPackageStartupMessages(library(dplyr)) +suppressPackageStartupMessages(library(openxlsx)) +suppressPackageStartupMessages(library(RColorBrewer)) + + +wd <- "/beegfs/scratch/ric.squadrito/ric.squadrito/202312011215_VMSC10702-NotaroTAD_A019/Analysis_MM/python_scripts/circles" +setwd(wd) + +# M21 and M40 are TA_Only and M18 and M41 are TA_Combo +sample <- "M18" # "M18", "M21", "M40", "M41" + +# Define the distance threshold. Default d=30um +d <- 30 # 10 or 30 + +inCell <- "inCell_" # "inCell_" or "" + +# _transcripts_distance_matrix_t30_g500.csv _transcripts_distance_matrix_inCell_t10_g500-2.csv _transcripts_distance_matrix_post_t30_g500.csv +td_matrix_norm <- read.csv(paste0(wd, "/distance_table/", sample, "_transcripts_distance_matrix_norm_", inCell, "t", d, "_g35_selected.csv")) +plot_dir <- paste0(wd, "/distance_table/selected/") +dir.create(plot_dir, showWarnings=F, recursive=T) + +td_matrix_norm$X <- NULL +genes <- colnames(td_matrix_norm) + +H2_genes <- genes[grep(x = genes, pattern = "H2")] +H2_genes_modified <- gsub("\\.", "-", H2_genes) # replace "." with "-" + +# Change the column names of the genes that start with H2... +#colnames(td_matrix_norm[H2_genes]) <- H2_genes_modified +genes <- gsub("\\.", "-", genes) # replace "." with "-" + +colnames(td_matrix_norm) <- genes +rownames(td_matrix_norm) <- genes + +td_matrix_norm$X <- NULL +colnames(td_matrix_norm) <- genes +rownames(td_matrix_norm) <- genes + +#Cancer cell signature from top genes +SelectedGenes <- unique(c("S100a6", "Klf4", "Anxa2", "Cdkn2a", "Vim", + #antigen presentation + "Ciita", "H2-DMb1", "H2-Aa", "H2-Ab1", + #Macrophages + "Clec4f", "C1qa", "Marco", + #T cell activation + "Trac", "Cd3e", "Klf2", "Sell", "Il2rb", "Stat1","Ccr5", "Il12rb1", "Cd40", + #IFN + "Irf1", "Isg15", "Ifit2", "Cxcl9","Il18r1", + #protumoral + "Serpine1","Cebpb","Pdgfb","Lrg1","Id2", "Vegfa", "Il1r1", "Cd274", "Tgfb1")) # Cd81 + +SelectedGenes_ann <- c("Cancer genes", "Cancer genes", "Cancer genes", "Cancer genes", "Cancer genes", + #antigen presentation + "MHCI", "MHCI", "MHCI", "MHCI", + #Macrophages + "Macs", "Macs","Macs", + #T cell activation + "T cell activation", "T cell activation", "T cell activation", "T cell activation", "T cell activation", "T cell activation","T cell activation", "T cell activation", "T cell activation", + #IFN + "IFN", "IFN", "IFN", "IFN","IFN", + #Protumoral + "Protumoral","Protumoral","Protumoral","Protumoral","Protumoral","Protumoral","Protumoral","Protumoral","Protumoral") + +gene_annotation <- data.frame(annotation = SelectedGenes_ann) +row.names(gene_annotation) <- SelectedGenes + +signature_levels <- c("Cancer genes", "MHCI", "Macs", "T cell activation", "IFN", "Protumoral") +gene_annotation$annotation <- factor(gene_annotation$annotation, levels = signature_levels, ordered = T) + +td_matrix_norm_selected <- td_matrix_norm[SelectedGenes, SelectedGenes] + +pheatmap(td_matrix_norm_selected, cluster_rows = F, cluster_cols = F, na_col = "grey", scale = "none", + filename = paste0(plot_dir, sample, "_transcripts_distance_matrix_norm_", inCell, "d", d, "_selected.pdf"), width = 15, height = 15, + fontsize=9, annotation_col = gene_annotation, annotation_row = gene_annotation) + + +# Compare two samples + +# M21 and M40 are TA_Only and M18 and M41 are TA_Combo +sample2 <- "M21" # "M18", "M21", "M40", "M41" + +td_matrix_norm_S2 <- read.csv(paste0(wd, "/distance_table/", sample2, "_transcripts_distance_matrix_norm_", inCell, "t", d, "_g35_selected.csv")) + +td_matrix_norm_S2$X <- NULL +colnames(td_matrix_norm_S2) <- genes +rownames(td_matrix_norm_S2) <-genes + +# Combine the two samples by subtracting the two matrices +td_matrix_norm_S1_S2 <- td_matrix_norm - td_matrix_norm_S2 + +td_matrix_norm_selected_S1_S2 <- td_matrix_norm_S1_S2[SelectedGenes, SelectedGenes] + +# Plot the results +paletteLength <- 50 +myColor <- colorRampPalette(c("blue", "white", "red"))(paletteLength) + +# Use floor and ceiling to deal with even/odd length pallettelengths +MIN <- min(td_matrix_norm_selected_S1_S2[!is.na(td_matrix_norm_selected_S1_S2)]) +MAX <- max(td_matrix_norm_selected_S1_S2[!is.na(td_matrix_norm_selected_S1_S2)]) +myBreaks <- c(seq(MIN, 0, length.out=ceiling(paletteLength/2) + 1), + seq(MAX/paletteLength, MAX, length.out=floor(paletteLength/2))) + + +pheatmap(td_matrix_norm_selected_S1_S2, cluster_rows = F, cluster_cols = F, na_col = "grey", scale = "none", + filename = paste0(plot_dir, sample, "_", sample2, "_transcripts_distance_matrix_norm_", inCell, "d", d, "_selected.pdf"), width = 15, height = 15, + fontsize=9, annotation_col = gene_annotation, annotation_row = gene_annotation, color = myColor, breaks = myBreaks) diff --git a/antigen_discovery/001_antigen_discovery_filtering.R b/antigen_discovery/001_antigen_discovery_filtering.R new file mode 100644 index 0000000000000000000000000000000000000000..004d0f3a83857b0250cb371d927c21a69609c83b --- /dev/null +++ b/antigen_discovery/001_antigen_discovery_filtering.R @@ -0,0 +1,435 @@ +library(openxlsx) +library(dplyr) +library(readxl) +library(psych) +library(data.table) +library(GGally) +library(ggplot2) +library(ggpubr) +library(ggrepel) + +#WDs +MNOT.gar<-"C:/Users/notaro.marco/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38/" +MNOT.pvac<-"C:/Users/notaro.marco/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38/pvacseq_mouse/MHC_Class_I" +MNOT.wd1<-"C:/Users/notaro.marco/Dropbox (HSR Global)/90-756142658_RNAseq_Squadrito/03-aln_GRCm38/" + + +#WD MLS +#MNOT.gar<-"/Users/Squadrito/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38" +#MNOT.pvac<-"/Users/Squadrito/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38/pvacseq_mouse/MHC_Class_I" +#MNOT.wd1<-"/Users/Squadrito/Dropbox (HSR Global)/90-756142658_RNAseq_Squadrito/03-aln_GRCm38" + + + + +#define filtering functions + +filter_data_common <- function(df, a1, a2, a3, a4, a5, a6, a7, a8) { + subset(df, (Ensemble_score <= a1 | is.na(Ensemble_score)) & + (IC50.MT <= a2 | is.na(IC50.MT)) & + (DAI >= a3 | is.na(DAI)) & + (agretopicity <= a4 | is.na(agretopicity)) & + (average_vivo >= a5 | is.na(average_vivo)) & + (average_vitro >= a6 | is.na(average_vitro)) & + (dissimilarity >= a7 | is.na(dissimilarity)) & + (foreignness_score >= a8 | is.na(foreignness_score))) +} + +filter_data_garnish <- function(df, a1, a3, a5, a6, a7, a8) { + subset(df, (Ensemble_score <= a1 | is.na(Ensemble_score)) & + (DAI >= a3 | is.na(DAI)) & + (average_vivo >= a5 | is.na(average_vivo)) & + (average_vitro >= a6 | is.na(average_vitro)) & + (dissimilarity >= a7 | is.na(dissimilarity)) & + (foreignness_score >= a8 | is.na(foreignness_score))) +} + + +filter_data_pvac <- function(df, a2, a4, a5, a6, a7, a8) { + subset(df,(IC50.MT <= a2 | is.na(IC50.MT)) & + (agretopicity <= a4 | is.na(agretopicity)) & + (average_vivo >= a5 | is.na(average_vivo)) & + (average_vitro >= a6 | is.na(average_vitro)) & + (dissimilarity >= a7 | is.na(dissimilarity)) & + (foreignness_score >= a8 | is.na(foreignness_score))) +} + + + + +##Garnish +#carica la tabella di antigengarnish +setwd(MNOT.gar) +data_garnish<- fread("ant_garnish_res_AKTPFV3only_filt_coding.tsv", sep = "\t", header = TRUE) + +###pvac +setwd(MNOT.pvac) +data_pvac <- read_excel("pvac_seq.xlsx") + +#Common +common.pep.pvac<-unique(data_pvac$Best.Peptide) +common.pep.garnish<-unique(data_garnish$nmer) +common.pep<-intersect(common.pep.pvac,common.pep.garnish) + +data_pvac2<-subset(data_pvac,Best.Peptide%in%common.pep) +data_pvac3<-data_pvac2 %>% + group_by(Best.Peptide) %>% + slice(which.min(IC50.MT)) + +data_garnish2<-subset(data_garnish,nmer%in%common.pep) +data_garnish3<-data_garnish2 %>% + group_by(nmer_uuid) %>% + slice(which.min(Ensemble_score)) + +data.common<-merge(data_pvac3,data_garnish3, by.x = "Best.Peptide", by.y= "nmer") + + +#ADD expression +setwd(MNOT.wd1) +count_tpm <- read_excel("featureCounts_results_tpm.xlsx") + +#average expression level to pply filtering +count_tpm$average_vitro<-apply(count_tpm[,7:9],1,function(x)mean(x)) +#sum(count_tpm$average_vitro==0) +count_tpm$average_vitro[apply(count_tpm[,7:9],1,function(x)mean(x)*min(x))==0]<-0 + +count_tpm$average_vivo<-apply(count_tpm[,10:12],1,function(x)mean(x)) +#sum(count_tpm$average_vivo==0) +count_tpm$average_vivo[apply(count_tpm[,10:12],1,function(x)mean(x)*min(x))==0]<-0 + + +merged.exp<-merge(data.common,count_tpm[,c("Geneid","average_vivo","average_vitro")], by.x = "Gene",by.y="Geneid") +merged.df<-merged.exp #1244 + +merged.df[,c(22)]<-as.numeric(as.character(merged.df[,c(22)])) +merged.df[,c(24)]<-as.numeric(as.character(merged.df[,c(24)])) +merged.df$dissimilarity.x[is.na(merged.df$dissimilarity.x)] <- 0 +merged.df$foreignness_score.x[is.na(merged.df$foreignness_score.x)] <- 0 +merged.df$dissimilarity<-merged.df$dissimilarity.x +merged.df$foreignness_score<-merged.df$foreignness_score.x + + + +#FILTERING common based on expr and foreigness +a1<-quantile(merged.df$Ensemble_score, 0.2) #minor 0.4 +a2<-quantile(merged.df$IC50.MT, 1) #minor 0.4 +a3<-quantile(merged.df$DAI, 0,na.rm=T) #higher 0.4 +a4<-quantile(merged.df$agretopicity, 1) #minor 0.6 +a5<-quantile(merged.df$average_vivo, 0.80) #higher 90 +a6<-quantile(merged.df$average_vitro, 0.90) #higher 95 +a7<-quantile(merged.df$dissimilarity, 0) #higher +a8<-quantile(merged.df$foreignness_score, 0.5) #higher + + +data_filter1<-filter_data_common(merged.df,a1,a2,a3,a4,a5,a6,a7,a8) + + +db1 <- data_filter1[,c(1,2,3,6,10,11,131,12,132,138,139,140,141)] +db1$type <- "exp-foreigness" +db1 + +#FILTERING common based on IC50,Agretopicity + +a1<-quantile(merged.df$Ensemble_score, 0.12) #minor +a2<-quantile(merged.df$IC50.MT, 0.12) #minor +a3<-quantile(merged.df$DAI, 0.2,na.rm=T) #higher +a4<-quantile(merged.df$agretopicity, 0.1) #minor +a5<-quantile(merged.df$average_vivo, 0.50) #higher +a6<-quantile(merged.df$average_vitro, 0.60) #higher +a7<-quantile(merged.df$dissimilarity, 0) #higher +a8<-quantile(merged.df$foreignness_score, 0.0) #higher + +data_filter2<-filter_data_common(merged.df,a1,a2,a3,a4,a5,a6,a7,a8) + +db2 <- data_filter2[,c(1,2,3,6,10,11,131,12,132,138,139,140,141)] +db2$type <- "IC50-agretopicity" +db2 + +#FILTERING common based on expression and IC50 + +a1<-quantile(merged.df$Ensemble_score, 0.3) #minor +a2<-quantile(merged.df$IC50.MT, 0.3) #minor +a3<-quantile(merged.df$DAI, 0.4,na.rm=T) #higher +a4<-quantile(merged.df$agretopicity, 0.6) #minor +a5<-quantile(merged.df$average_vivo, 0.90) #higher +a6<-quantile(merged.df$average_vitro, 0.95) #higher +a7<-quantile(merged.df$dissimilarity, 0) #higher +a8<-quantile(merged.df$foreignness_score, 0.0) #higher + +data_filter3<-filter_data_common(merged.df,a1,a2,a3,a4,a5,a6,a7,a8) + +db3 <- data_filter3[,c(1,2,3,6,10,11,131,12,132,138,139,140,141)] +db3$type <- "IC50-exp" +db3 + +common.sel<- rbind(db1,db2,db3) +common.sel<-common.sel %>% group_by(Best.Peptide) %>% + slice(which.min(Ensemble_score)) + +#top scoring in garnish +#take only garnish not present in common +garnish.only<- subset(data_garnish, !(nmer %in% common.pep)) + +#ADD expression +garnish.only<-merge(garnish.only,count_tpm[,c("Geneid", + "average_vivo","average_vitro")], by.x = "gene",by.y="Geneid") + +#rimuovi peptidi wt,più lunghi di 10aa, multipli e di frame diversi, tiene solo quelli con ensemble score piu alto +garnish.only<- subset(garnish.only, pep_type != "wt") +garnish.only<-subset(garnish.only, nmer_l<= 10 ) + +garnish.only<-garnish.only %>% + group_by(nmer_uuid) %>% + slice(which.min(Ensemble_score)) + +garnish.only <- garnish.only %>% + group_by(var_uuid) %>% + slice(which.min(Ensemble_score)) + +garnish.only$foreignness_score[is.na(garnish.only$foreignness_score)]<-0 + +#FILTERING garnish based on Enseble score +a1<-quantile(garnish.only$Ensemble_score, 0.01) #minor +a3<-quantile(garnish.only$DAI, 0.5,na.rm=T) #higher +a5<-quantile(garnish.only$average_vivo, 0.40) #higher +a6<-quantile(garnish.only$average_vitro, 0.40) #higher +a7<-quantile(garnish.only$dissimilarity, 0 ,na.rm=T ) #higher +a8<-quantile(garnish.only$foreignness_score, .8,na.rm=T ) #higher + + +data_filter1<-filter_data_garnish(garnish.only,a1,a3,a5,a6,a7,a8) +db1<-data_filter1[,c(1,2,9,10,12,13,57,108,109,111,113,115,116)] +db1$type <- "Escore" + +#FILTERING garnish based on expression +a1<-quantile(garnish.only$Ensemble_score, 0.1) #minor +a3<-quantile(garnish.only$DAI, 0.5,na.rm=T) #higher +a5<-quantile(garnish.only$average_vivo, 0.90) #higher +a6<-quantile(garnish.only$average_vitro, 0.95) #higher +a7<-quantile(garnish.only$dissimilarity, 0 ,na.rm=T ) #higher +a8<-quantile(garnish.only$foreignness_score, .8,na.rm=T ) #higher + + +data_filter2<-filter_data_garnish(garnish.only,a1,a3,a5,a6,a7,a8) +db2<-data_filter2[,c(1,2,9,10,12,13,57,108,109,111,113,115,116)] +db2$type <- "expression" + + +garnish.sel<- rbind(db1,db2) +garnish.sel<-garnish.sel %>% group_by(nmer) %>% + slice(which.min(Ensemble_score)) + +#top scoring in pvac +#take only pvac not present in common +pvac.only<- subset(data_pvac, !(Best.Peptide %in% common.pep)) + +#ADD expression +pvac.only<-merge(pvac.only,count_tpm[,c("Geneid", + "average_vivo","average_vitro")], by.x = "Gene",by.y="Geneid") + +pvac.only$nmer_l<-nchar(pvac.only$Best.Peptide) + +pvac.only$foreignness_score<-as.numeric(pvac.only$foreignness_score) +pvac.only$foreignness_score[is.na(pvac.only$foreignness_score)]<-0 + + + +#FILTERING pvac based on IC50 +a2<-quantile(pvac.only$IC50.MT, 0.2) #minor +a4<-quantile(pvac.only$agretopicity, 0.2) #minor +a5<-quantile(pvac.only$average_vivo, 0.2) #higher +a6<-quantile(pvac.only$average_vitro, 0.2) #higher +a7<-quantile(pvac.only$dissimilarity, 0) #higher +a8<-quantile(pvac.only$foreignness_score, 0) #higher + +data_filter1<-filter_data_pvac(pvac.only,a2,a4,a5,a6,a7,a8) +db1<-data_filter1[,c(1,2,3,6,10,11,25,26,22,24)] + +db1$type <- "IC50" + +#FILTERING pvac based on expression + +a2<-quantile(pvac.only$IC50.MT, .5) #minor +a4<-quantile(pvac.only$agretopicity, 1) #minor +a5<-quantile(pvac.only$average_vivo, 0.80) #higher +a6<-quantile(pvac.only$average_vitro, 0.90) #higher +a7<-quantile(pvac.only$dissimilarity, 0) #higher +a8<-quantile(pvac.only$foreignness_score, 0) #higher + +data_filter2<-filter_data_pvac(pvac.only,a2,a4,a5,a6,a7,a8) +db2<-data_filter2[,c(1,2,3,6,10,11,25,26,22,24)] +db2$type <- "exp" + + +pvac.sel<- rbind(db1,db2) + +pvac.sel<-pvac.sel %>% + group_by(Best.Peptide) %>% + slice(which.min(IC50.MT)) + +#length of nmer in original db +windows() +par(mfrow=c(3,1)) +hist(garnish.only$nmer_l,xlim=c(8,12)) +hist(merged.df$nmer_l,xlim=c(8,12)) +hist(pvac.only$nmer_l,xlim=c(8,12)) + +#length of selected nmer +pvac.sel$nmer_l<-nchar(pvac.sel$Best.Peptide) +common.sel$nmer_l<-nchar(common.sel$Best.Peptide) +garnish.sel$nmer_l<-nchar(garnish.sel$nmer) + +windows() +par(mfrow=c(3,1)) +hist(garnish.sel$nmer_l,xlim=c(8,12)) +hist(common.sel$nmer_l,xlim=c(8,12)) +hist(pvac.sel$nmer_l,xlim=c(8,12)) + + +#FINAL MERGE of selected adding origin + +common.sel$origin<-"common" +garnish.sel$origin<-"garnish" +pvac.sel$origin<-"pvac" + +colnames(common.sel)[1:3]<-c("gene","nmer","ID") +colnames(pvac.sel)[c(1,2)]<-c("gene","nmer") + +db.All <- merge(garnish.sel,merge(common.sel,pvac.sel,all=TRUE),all=T) + + +# Crea un nuovo file Excel e salva il dataframe +setwd(MNOT.gar) +write.xlsx(db.All,"FinalTable.xlsx") + + +######################################################################################### +#####################ENDS HERE########################################################### +########################################################################################### + + + + + + + + + + + + + + + + +#plots + +FINAL_LIST_PEP <- read_excel("C:/Users/notaro.marco/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38/FINAL_LIST_PEP.xlsx") + + + +windows() +par(mfrow=c(4,2)) +db.ES<- FINAL_LIST_PEP[!is.na(FINAL_LIST_PEP$Ensemble_score),] +plot.ecdf((merged.df$Ensemble_score),main="Ensemble_score", xlab=("")) +abline(v=(FINAL_LIST_PEP$Ensemble_score),col="red") + +db.ES<- FINAL_LIST_PEP[!is.na(FINAL_LIST_PEP$IC50.MT),] +plot.ecdf((merged.df$IC50.MT),main="IC50.MT", xlab=("")) +abline(v=(FINAL_LIST_PEP$IC50.MT),col="red") + +db.ES<- FINAL_LIST_PEP[!is.na(FINAL_LIST_PEP$foreignness_score),] +plot.ecdf(merged.df$foreignness_score,main="foreigness_score", xlab=("")) +abline(v=FINAL_LIST_PEP$foreignness_score,col="red") + +#db.ES<- FINAL_LIST_PEP[!is.na(FINAL_LIST_PEP$DAI),] +#plot.ecdf((merged.df$DAI+0.1),main="DAI") +#abline(v=(db.ES$DAI+0.1),col="red") + +db.ES<- FINAL_LIST_PEP[!is.na(FINAL_LIST_PEP$agretopicity),] +plot.ecdf((merged.df$agretopicity+0.01),main="agretopicity", xlab=("")) +abline(v=(FINAL_LIST_PEP$agretopicity+0.01),col="red") + +db.ES<- FINAL_LIST_PEP[!is.na(FINAL_LIST_PEP$average_vitro),] +plot.ecdf((merged.df$average_vitro+0.00001),main="average_vitro", xlab=("")) +abline(v=(FINAL_LIST_PEP$average_vitro+0.00001),col="red") + +db.ES<- FINAL_LIST_PEP[!is.na(FINAL_LIST_PEP$average_vivo),] +plot.ecdf((merged.df$average_vivo+0.00001),main="average_vivo", xlab=("")) +abline(v=(FINAL_LIST_PEP$average_vivo+0.00001),col="red") + +#gg plots + +windows() +par(mfrow=c(2,2)) + +p<- ggplot(merged.df, aes(IC50.MT)) + + geom_line(stat = "ecdf")+ + geom_point(stat="ecdf",size=2) + + geom_vline(xintercept=FINAL_LIST_PEP$IC50.MT, colour = "red") +p + + +#histos + +windows() +par(mfrow=c(2,2)) + +hist(merged.df$IC50.MT, breaks = 100, xlab="IC50", main ="IC50") +abline(v=(FINAL_LIST_PEP$IC50.MT),col="black") + + +hist(log10(merged.df$average_vivo), breaks = 100, xlab="Average expression (log TPM)", main ="Log TPM") +abline(v=(log10(FINAL_LIST_PEP$average_vivo)),col="black") + +hist(merged.df$agretopicity, xlab="Agretopicity", main ="Agretopicity") +abline(v=(FINAL_LIST_PEP$agretopicity),col="red") + +hist(merged.df$foreignness_score, xlab="Foreigness", main ="Foreigness") +abline(v=(FINAL_LIST_PEP$foreignness_score),col="red") + + +#corr +windows() +par(mfrow=c(2,2)) +p<-ggscatter(merged.df, x = "IC50.MT", y = "average_vivo", + cor.coef = TRUE, cor.method = "pearson", + xlab = "IC50", ylab = "log10 TPM", + color= "black", fill='grey', shape=21, size=5)+ + scale_y_log10()+ + scale_x_log10()+ + geom_vline(xintercept=1000, colour = "red",linetype = "dashed")+ + geom_hline(yintercept=10, colour = "red",linetype = "dashed")+ + geom_point(data=FINAL_LIST_PEP, fill= "green",color="black", , shape=21, size=5)+ + grids(linetype = "dashed")+ + geom_text_repel( + data = FINAL_LIST_PEP, + aes(label = gene), + size = 5, + box.padding = unit(0.35, "lines"), + point.padding = unit(0.3, "lines") + ) +p + + +windows() +par(mfrow=c(2,2)) +p<-ggscatter(merged.df, x = "foreignness_score", y = "agretopicity", + cor.coef = TRUE, cor.method = "pearson", + xlab = "Foreigness", ylab = "Agretopicity", + color= "black", fill='grey', shape=21, size=5)+ + scale_y_log10()+ + scale_x_log10()+ + geom_point(data=FINAL_LIST_PEP, fill= "green",color="black", , shape=21, size=5)+ + grids(linetype = "dashed")+ + geom_text_repel( + data = FINAL_LIST_PEP, + aes(label = gene), + size = 5, + box.padding = unit(0.35, "lines"), + point.padding = unit(0.3, "lines") + ) +p + + + diff --git a/antigen_discovery/002_antigen_discovery_VCF_double_mutations.R b/antigen_discovery/002_antigen_discovery_VCF_double_mutations.R new file mode 100644 index 0000000000000000000000000000000000000000..cfc54877962ae4eadeff11affd4bf30960d26ac2 --- /dev/null +++ b/antigen_discovery/002_antigen_discovery_VCF_double_mutations.R @@ -0,0 +1,146 @@ +library(openxlsx) +library(dplyr) +library(readxl) +library(psych) +library(data.table) +library(tidyr) +library(stringr) +library(R.utils) + +#WDs +MNOT.gar<-"C:/Users/notaro.marco/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38/" +MNOT.pvac<-"C:/Users/notaro.marco/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38/pvacseq_mouse/MHC_Class_I" +MNOT.wd1<-"C:/Users/notaro.marco/Dropbox (HSR Global)/90-756142658_RNAseq_Squadrito/03-aln_GRCm38/" + +#MLS +MNOT.gar<-"/Users/Squadrito/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38" +MNOT.pvac<-"/Users/Squadrito/Dropbox (HSR Global)/90-756147447_WES_Squadrito/WES_07-diff_GRCm38/pvacseq_mouse/MHC_Class_I" +MNOT.wd1<-"/Users/Squadrito/Dropbox (HSR Global)/90-756142658_RNAseq_Squadrito/03-aln_GRCm38" + +mappa_completa <- c("Ala" = "A", "Arg" = "R", "Asn" = "N", "Asp" = "D", "Cys" = "C", + "Gln" = "Q", "Glu" = "E", "Gly" = "G", "His" = "H", "Ile" = "I", + "Leu" = "L", "Lys" = "K", "Met" = "M", "Phe" = "F", "Pro" = "P", + "Ser" = "S", "Thr" = "T", "Trp" = "W", "Tyr" = "Y", "Val" = "V") + +##Garnish +#carica la tabella di antigengarnish +#setwd(MNOT.gar) +#data_garnish<- fread("ant_garnish_res_AKTPFV3only_filt_coding.tsv.gz", sep = "\t", header = TRUE) + +#clean garnish +#data_garnish<-subset(data_garnish, effect_type == "missense_variant") +#data_garnish<- subset(data_garnish, pep_type != "wt") +#saveRDS(data_garnish,"data_garnish.rds") +data_garnish<-readRDS("data_garnish.rds") + + +#create protein_pos column +data_garnish <- separate(data_garnish, Protein_position_Protein_len, + into = c("Protein_pos", "Protein_length"), sep = "/") +data_garnish$Protein_pos<-as.numeric(as.character(data_garnish$Protein_pos)) + + +#calculate distance from previous mutation in the same gene, take only mutation that are nearby in the protein (distance<10) +data_garnish2<-data_garnish[,c(50,7,60,57,67)] +data_garnish2 <- unique(data_garnish2) +double_mut <- data_garnish2[order(data_garnish2$transcript_id, data_garnish2$Protein_pos),] +double_mut$next_position1 <- c(double_mut$Protein_pos[-1],NA) +double_mut$next_gene1 <- c(double_mut$transcript_id[-1],NA) +double_mut$next_mut1 <- c(double_mut$protein_change[-1],NA) +double_mut$distance1 <- ifelse(double_mut$transcript_id == double_mut$next_gene1, + double_mut$next_position1-double_mut$Protein_pos, NA) + +#genes with 3 concatenate mutations +df1<-double_mut +remove_rows<- c(-1,-2) +df2<- df1[order(df1$transcript_id, df1$Protein_pos),] +df2$next_position2 <- c(df2$Protein_pos[remove_rows],NA,NA) +df2$next_gene2 <- c(df2$transcript_id[remove_rows],NA,NA) +df2$next_mut2 <- c(df2$protein_change[remove_rows],NA,NA) +df2$distance2 <- ifelse(df2$transcript_id == df2$next_gene2, + df2$next_position2 - df2$Protein_pos, NA) + +#transcripts with 4 concatenate mutations +remove_rows<- c(-1,-2,-3) +df3<- df2[order(df2$transcript_id, df2$Protein_pos),] +df3$next_position3 <- c(df2$Protein_pos[remove_rows],NA,NA,NA) +df3$next_gene3 <- c(df2$transcript_id[remove_rows],NA,NA,NA) +df3$next_mut3 <- c(df2$protein_change[remove_rows],NA,NA,NA) +df3$distance3 <- ifelse(df3$transcript_id == df3$next_gene3, + df3$next_position3 - df3$Protein_pos, NA) + +#transcripts with 5 concatenate mutations +remove_rows<- c(-1,-2,-3,-4) +df4<- df3[order(df3$transcript_id, df3$Protein_pos),] +df4$next_position4 <- c(df3$Protein_pos[remove_rows],NA,NA,NA,NA) +df4$next_gene4 <- c(df3$transcript_id[remove_rows],NA,NA,NA,NA) +df4$next_mut4 <- c(df3$protein_change[remove_rows],NA,NA,NA,NA) +df4$distance4 <- ifelse(df4$transcript_id == df4$next_gene4, + df4$next_position4 - df4$Protein_pos, NA) + +#Apply filters +pep01 <- df4 %>% filter(distance1 <= 10 & distance1 >0 & + (is.na(distance2)|distance2>10| + (distance2==distance1 & (is.na(distance3)|distance3>10)))) + +pep02 <- df4 %>% filter(distance1 == 0 & distance2 <= 10 & distance2 > 0 & + (is.na(distance3)|distance3 > 10| + (distance3 == distance2 & (is.na(distance4)|distance4 > 10)))) + +pep012 <- df4 %>% filter(distance1 <= 10 & distance1 >0 & + distance2 <= 10 & distance2 >0 & + distance1!=distance2 & + (is.na(distance3)|distance3>10| + (distance3==distance2 & (is.na(distance4)|distance4>10)))) + +pep013 <- df4 %>% filter(distance1 <= 10 & distance1 >0 & + distance1==distance2 & + distance3 <= 10 & distance3 >0 & + (is.na(distance4)|distance4>10|distance4==distance3)) + +pep0123 <- df4 %>% filter(distance1 <= 10 & distance1 >0 & + distance1!=distance2 & + distance2 <= 10 & distance2 >0 & + distance2!=distance3 & + distance3 <= 10 & distance3 >0 & + (is.na(distance4)|distance4>10|distance4==distance3)) + +#Select columns for semplicity +pep01 <- pep01[,c(1,2,3,5,4,8)] +pep02 <- pep02[,c(1,2,3,5,4,12)] +pep012 <- pep012[,c(1,2,3,5,4,8,12)] +pep013<- pep013[,c(1,2,3,5,4,8,16)] +pep0123 <- pep0123[,c(1,2,3,5,4,8,12,16)] + +#crea colonne con la singola mutazione e converte in codice ad una lettera +#for +Create_db <- function(dfi,x,name.pep="pep"){ +Prot_mut <- dfi[,4] + for (i in x){ + aminoacido_sost <- str_extract(dfi[,i], "(?<=\\d)[A-Z][a-z]{2}") + pos_inMut <- as.numeric(as.character(str_sub(dfi[,i], 6, -4))) + aminoacido_sost <- mappa_completa[aminoacido_sost] + Prot_mut<- transform(str_replace(Prot_mut, paste0("^(.{", pos_inMut-1, "})."), paste0("\\1", aminoacido_sost))) + Prot_mut <- Prot_mut[,1]} + Pep_mut <- substr(Prot_mut, dfi[,3]-9, dfi[,3]+10) + Pep_wt <- substr(dfi[,4], dfi[,3]-9, dfi[,3]+10) + Gene_ID <- paste0(dfi[,1],name.pep) + mut0123<- data.frame(Gene_ID,Pep_wt,Pep_mut) + return(mut0123)} + +pep01 <- pep01[,c(1,2,3,5,4,8)] +pep02 <- pep02[,c(1,2,3,5,4,12)] +pep012 <- pep012[,c(1,2,3,5,4,8,12)] +pep013<- pep013[,c(1,2,3,5,4,8,16)] +pep0123 <- pep0123[,c(1,2,3,5,4,8,12,16)] + +FinalDB <- rbind(Create_db(pep01,5:6,".01"), + Create_db(pep02,5:6,".02"), + Create_db(pep012,5:7,".012"), + Create_db(pep013,5:7,".013"), + Create_db(pep0123,5:8,".0123")) + +FinalDB <- unique(FinalDB) +write.xlsx(FinalDB,"multipleMuts_MNOT.xlsx") + + \ No newline at end of file diff --git a/environment_singlecell5.yml b/environment_singlecell5.yml new file mode 100644 index 0000000000000000000000000000000000000000..7061b3446755e2b6e4465b4f281d2dbf0c5b462c --- /dev/null +++ b/environment_singlecell5.yml @@ -0,0 +1,663 @@ +name: singlecell5 +channels: + - defaults + - bioconda + - conda-forge +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - _r-mutex=1.0.1=anacondar_1 + - aioeasywebdav=2.4.0=pyha770c72_0 + - aiohttp=3.9.1=py311h459d7ec_0 + - aiosignal=1.3.1=pyhd8ed1ab_0 + - amply=0.1.6=pyhd8ed1ab_0 + - anyio=4.8.0=pyhd8ed1ab_0 + - aom=3.9.1=hac33072_0 + - appdirs=1.4.4=pyh9f0ad1d_0 + - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi-bindings=21.2.0=py311h9ecbd09_5 + - arrow=1.3.0=pyhd8ed1ab_1 + - asttokens=2.4.1=pyhd8ed1ab_0 + - async-lru=2.0.4=pyhd8ed1ab_1 + - atk-1.0=2.38.0=h04ea711_2 + - attmap=0.13.2=pyhd8ed1ab_0 + - attrs=23.1.0=pyh71513ae_1 + - aws-c-auth=0.8.0=h205f482_16 + - aws-c-cal=0.8.1=h1a47875_3 + - aws-c-common=0.10.6=hb9d3cd8_0 + - aws-c-compression=0.3.0=h4e1184b_5 + - aws-c-event-stream=0.5.0=h7959bf6_11 + - aws-c-http=0.9.2=hefd7a92_4 + - aws-c-io=0.15.3=h173a860_6 + - aws-c-mqtt=0.11.0=h11f4f37_12 + - aws-c-s3=0.7.9=hf454442_0 + - aws-c-sdkutils=0.2.2=h4e1184b_0 + - aws-checksums=0.2.2=h4e1184b_4 + - aws-crt-cpp=0.29.9=hbbd73d0_1 + - aws-sdk-cpp=1.11.488=h4d475cb_0 + - azure-core-cpp=1.14.0=h5cfcd09_0 + - azure-identity-cpp=1.10.0=h113e628_0 + - azure-storage-blobs-cpp=12.13.0=h3cf044e_1 + - azure-storage-common-cpp=12.8.0=h736e048_1 + - azure-storage-files-datalake-cpp=12.12.0=ha633028_1 + - babel=2.16.0=pyhd8ed1ab_1 + - backports=1.0=pyhd8ed1ab_3 + - backports.functools_lru_cache=1.6.5=pyhd8ed1ab_0 + - bcrypt=4.1.1=py311h46250e7_0 + - beautifulsoup4=4.12.3=pyha770c72_1 + - bedtools=2.31.1=h13024bc_3 + - binutils_impl_linux-64=2.40=hf600244_0 + - bleach=6.2.0=pyh29332c3_4 + - bleach-with-css=6.2.0=h82add2a_4 + - boto3=1.28.81=pyhd8ed1ab_0 + - botocore=1.31.82=pyhd8ed1ab_0 + - brotli=1.1.0=hd590300_1 + - brotli-bin=1.1.0=hd590300_1 + - brotli-python=1.1.0=py311hb755f60_1 + - bwidget=1.9.14=ha770c72_1 + - bzip2=1.0.8=hd590300_5 + - c-ares=1.34.4=hb9d3cd8_0 + - ca-certificates=2025.1.31=hbcca054_0 + - cached-property=1.5.2=hd8ed1ab_1 + - cached_property=1.5.2=pyha770c72_1 + - cachetools=5.3.2=pyhd8ed1ab_0 + - cairo=1.18.2=h3394656_1 + - certifi=2025.1.31=pyhd8ed1ab_0 + - cffi=1.16.0=py311hb3a22ac_0 + - charset-normalizer=3.3.2=pyhd8ed1ab_0 + - cmake=3.31.4=h74e3db0_0 + - coin-or-cbc=2.10.10=h9002f0b_0 + - coin-or-cgl=0.60.9=h1d3f3f2_0 + - coin-or-clp=1.17.10=h07f2a63_0 + - coin-or-osi=0.108.11=h6514dde_1 + - coin-or-utils=2.11.12=h99da652_1 + - coincbc=2.10.10=0_metapackage + - colorama=0.4.6=pyhd8ed1ab_0 + - comm=0.1.4=pyhd8ed1ab_0 + - configargparse=1.7=pyhd8ed1ab_0 + - connection_pool=0.0.3=pyhd3deb0d_0 + - cryptography=41.0.7=py311hcb13ee4_1 + - curl=8.11.1=h332b0f4_0 + - cycler=0.12.1=pyhd8ed1ab_1 + - dart-sass=1.58.3=ha770c72_1 + - datrie=0.8.2=py311h459d7ec_7 + - dav1d=1.2.1=hd590300_0 + - debugpy=1.8.0=py311hb755f60_1 + - decorator=5.1.1=pyhd8ed1ab_0 + - defusedxml=0.7.1=pyhd8ed1ab_0 + - deno=1.46.3=hcab8b69_0 + - deno-dom=0.1.41=h4768de7_0 + - docutils=0.20.1=py311h38be061_3 + - dpath=2.1.6=pyha770c72_0 + - dropbox=11.36.2=pyhd8ed1ab_0 + - eido=0.2.1=pyhd8ed1ab_0 + - esbuild=0.19.2=ha770c72_0 + - exceptiongroup=1.1.3=pyhd8ed1ab_0 + - executing=2.0.1=pyhd8ed1ab_0 + - expat=2.6.4=h5888daf_0 + - fftw=3.3.10=nompi_hf1063bd_110 + - filechunkio=1.8=py_2 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=hab24e00_0 + - fontconfig=2.15.0=h7e30c49_1 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fqdn=1.5.1=pyhd8ed1ab_1 + - freetype=2.12.1=h267a509_2 + - fribidi=1.0.10=h36c2ea0_0 + - frozenlist=1.4.0=py311h459d7ec_1 + - ftputil=5.0.4=pyhd8ed1ab_0 + - future=1.0.0=pyhd8ed1ab_1 + - gcc_impl_linux-64=13.2.0=h338b0a0_2 + - gdk-pixbuf=2.42.12=hb9ae30d_0 + - gettext=0.21.1=h27087fc_0 + - gflags=2.2.2=he1b5a44_1004 + - gfortran_impl_linux-64=13.2.0=h76e1118_2 + - ghostscript=10.04.0=h5888daf_0 + - giflib=5.2.2=hd590300_0 + - gitdb=4.0.11=pyhd8ed1ab_0 + - gitpython=3.1.40=pyhd8ed1ab_0 + - glog=0.7.1=hbabe93e_0 + - google-api-core=2.24.0=pyhd8ed1ab_0 + - google-api-python-client=2.107.0=pyhd8ed1ab_0 + - google-auth=2.23.4=pyhca7485f_0 + - google-auth-httplib2=0.1.1=pyhd8ed1ab_0 + - google-cloud-core=2.3.3=pyhd8ed1ab_0 + - google-cloud-storage=2.3.0=pyh6c4a22f_0 + - google-crc32c=1.1.2=py311h9b08b9c_5 + - google-resumable-media=2.6.0=pyhd8ed1ab_0 + - googleapis-common-protos=1.66.0=pyhff2d567_0 + - graphite2=1.3.13=h58526e2_1001 + - graphviz=12.0.0=hba01fac_0 + - grpcio=1.67.1=py311h9789449_1 + - gsl=2.7=he838d99_0 + - gtk2=2.24.33=h6470451_5 + - gts=0.7.6=h977cf35_4 + - gxx_impl_linux-64=13.2.0=h338b0a0_2 + - h11=0.14.0=pyhd8ed1ab_1 + - h2=4.1.0=pyhd8ed1ab_1 + - harfbuzz=9.0.0=hda332d3_1 + - hdf5=1.14.4=nompi_h2d575fe_105 + - hpack=4.1.0=pyhd8ed1ab_0 + - htslib=1.21=h566b1c6_1 + - httpcore=1.0.7=pyh29332c3_1 + - httplib2=0.22.0=pyhd8ed1ab_0 + - httpx=0.28.1=pyhd8ed1ab_0 + - humanfriendly=10.0=pyhd8ed1ab_6 + - hyperframe=6.1.0=pyhd8ed1ab_0 + - icu=75.1=he02047a_0 + - idna=3.4=pyhd8ed1ab_0 + - imagemagick=7.1.1_41=imagemagick_hcfc5581_0 + - importlib-metadata=6.8.0=pyha770c72_0 + - importlib_metadata=6.8.0=hd8ed1ab_0 + - importlib_resources=6.1.1=pyhd8ed1ab_0 + - iniconfig=2.0.0=pyhd8ed1ab_0 + - ipykernel=6.26.0=pyhf8b6a83_0 + - ipython=8.17.2=pyh41d4057_0 + - isoduration=20.11.0=pyhd8ed1ab_1 + - jags=4.3.2=h647a790_1 + - jbig=2.1=h7f98852_2003 + - jedi=0.19.1=pyhd8ed1ab_0 + - jinja2=3.1.2=pyhd8ed1ab_1 + - jmespath=1.0.1=pyhd8ed1ab_0 + - json5=0.10.0=pyhd8ed1ab_1 + - jsonpointer=3.0.0=py311h38be061_1 + - jsonschema=4.19.2=pyhd8ed1ab_0 + - jsonschema-specifications=2023.7.1=pyhd8ed1ab_0 + - jsonschema-with-format-nongpl=4.19.2=pyhd8ed1ab_0 + - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter_client=8.6.0=pyhd8ed1ab_0 + - jupyter_core=5.5.0=py311h38be061_0 + - jupyter_events=0.11.0=pyhd8ed1ab_0 + - jupyter_server=2.15.0=pyhd8ed1ab_0 + - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 + - jupyterlab=4.3.5=pyhd8ed1ab_0 + - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 + - jupyterlab_server=2.27.3=pyhd8ed1ab_1 + - kernel-headers_linux-64=2.6.32=he073ed8_16 + - keyutils=1.6.1=h166bdaf_0 + - krb5=1.21.3=h659f571_0 + - lcms2=2.16=hb7c19ff_0 + - ld_impl_linux-64=2.40=h41732ed_0 + - lerc=4.0.0=h27087fc_0 + - lftp=4.9.3=h63b36a4_1 + - libabseil=20240722.0=cxx17_hbbce691_4 + - libaec=1.1.3=h59595ed_0 + - libarrow=19.0.0=hb1bf10f_2_cuda + - libarrow-acero=19.0.0=hb826db4_2_cuda + - libarrow-dataset=19.0.0=hb826db4_2_cuda + - libarrow-substrait=19.0.0=hbf482d9_2_cuda + - libavif16=1.1.1=h1909e37_2 + - libblas=3.9.0=19_linux64_openblas + - libbrotlicommon=1.1.0=hd590300_1 + - libbrotlidec=1.1.0=hd590300_1 + - libbrotlienc=1.1.0=hd590300_1 + - libcblas=3.9.0=19_linux64_openblas + - libcrc32c=1.1.2=h9c3ff4c_0 + - libcurl=8.11.1=h332b0f4_0 + - libde265=1.0.15=h00ab1b0_0 + - libdeflate=1.23=h4ddbbb0_0 + - libedit=3.1.20191231=he28a2e2_2 + - libev=4.33=h516909a_1 + - libevent=2.1.12=hf998b51_1 + - libexpat=2.6.4=h5888daf_0 + - libffi=3.4.2=h7f98852_5 + - libgcc=14.2.0=h77fa898_1 + - libgcc-devel_linux-64=13.2.0=ha9c7c90_2 + - libgcc-ng=14.2.0=h69a702a_1 + - libgd=2.3.3=h6f5c62b_11 + - libgfortran=14.2.0=h69a702a_1 + - libgfortran-ng=14.2.0=h69a702a_1 + - libgfortran5=14.2.0=hd5240d6_1 + - libgit2=1.8.4=hd24f944_1 + - libglib=2.82.2=h2ff4ddf_1 + - libgomp=14.2.0=h77fa898_1 + - libgoogle-cloud=2.33.0=h2b5623c_1 + - libgoogle-cloud-storage=2.33.0=h0121fbd_1 + - libgrpc=1.67.1=h25350d4_1 + - libheif=1.18.2=gpl_hffcb242_100 + - libiconv=1.17=h166bdaf_0 + - libjpeg-turbo=3.0.0=hd590300_1 + - liblapack=3.9.0=19_linux64_openblas + - liblapacke=3.9.0=19_linux64_openblas + - liblzma=5.6.3=hb9d3cd8_1 + - libnghttp2=1.64.0=h161d5f1_0 + - libnsl=2.0.1=hd590300_0 + - libopenblas=0.3.24=pthreads_h413a1c8_0 + - libparquet=19.0.0=h3f30f2e_2_cuda + - libpng=1.6.45=h943b412_0 + - libprotobuf=5.28.3=h6128344_1 + - libre2-11=2024.07.02=hbbce691_2 + - librsvg=2.58.4=hc0ffecb_0 + - libsanitizer=13.2.0=h7e041cc_2 + - libsodium=1.0.18=h36c2ea0_1 + - libsqlite=3.48.0=hee588c1_0 + - libssh2=1.11.1=hf672d98_0 + - libstdcxx=14.2.0=hc0a3c3a_1 + - libstdcxx-devel_linux-64=13.2.0=ha9c7c90_2 + - libstdcxx-ng=13.2.0=h7e041cc_2 + - libthrift=0.21.0=h0e7cc3e_0 + - libtiff=4.7.0=hd9ff511_3 + - libutf8proc=2.9.0=hb9d3cd8_1 + - libuuid=2.38.1=h0b41bf4_0 + - libuv=1.50.0=hb9d3cd8_0 + - libwebp=1.5.0=hae8dbeb_0 + - libwebp-base=1.5.0=h851e524_0 + - libxcb=1.17.0=h8a09558_0 + - libxcrypt=4.4.36=hd590300_1 + - libxml2=2.13.5=h8d12d68_1 + - libzlib=1.3.1=hb9d3cd8_2 + - logmuse=0.2.6=pyh8c360ce_0 + - lz4-c=1.10.0=h5888daf_1 + - make=4.3=hd18ef5c_1 + - markdown-it-py=3.0.0=pyhd8ed1ab_0 + - markupsafe=2.1.3=py311h459d7ec_1 + - matplotlib-base=3.10.0=py311h2b939e6_0 + - matplotlib-inline=0.1.6=pyhd8ed1ab_0 + - mdurl=0.1.0=pyhd8ed1ab_0 + - mistune=3.1.1=pyhd8ed1ab_0 + - multidict=6.0.4=py311h459d7ec_1 + - munkres=1.0.7=py_1 + - nbconvert-core=7.16.6=pyh29332c3_0 + - nbformat=5.9.2=pyhd8ed1ab_0 + - ncbi-vdb=3.0.8=hdbdd923_0 + - ncurses=6.5=h2d0b736_2 + - nest-asyncio=1.5.8=pyhd8ed1ab_0 + - notebook-shim=0.2.4=pyhd8ed1ab_1 + - numpy=1.26.2=py311h64a7726_0 + - oauth2client=4.1.3=py_0 + - openjpeg=2.5.2=he7f1fd0_0 + - openssl=3.4.1=h7b32b05_0 + - orc=2.0.3=h12ee42a_2 + - ossuuid=1.6.2=hf484d3e_1000 + - overrides=7.7.0=pyhd8ed1ab_1 + - packaging=23.2=pyhd8ed1ab_0 + - pandas=2.1.4=py311h320fe9a_0 + - pandoc=3.4=ha770c72_0 + - pandocfilters=1.5.0=pyhd8ed1ab_0 + - pango=1.54.0=h3a902e7_3 + - paramiko=3.3.1=pyhd8ed1ab_0 + - parso=0.8.3=pyhd8ed1ab_0 + - pcre2=10.44=hba22ea6_2 + - peppy=0.35.7=pyhd8ed1ab_0 + - perl=5.32.1=7_hd590300_perl5 + - perl-alien-build=2.84=pl5321h7b50bb2_0 + - perl-alien-libxml2=0.17=pl5321h577a1d6_1 + - perl-app-cpanminus=1.7048=pl5321hd8ed1ab_0 + - perl-business-isbn=3.007=pl5321hd8ed1ab_0 + - perl-business-isbn-data=20210112.006=pl5321hd8ed1ab_0 + - perl-capture-tiny=0.48=pl5321ha770c72_1 + - perl-carp=1.50=pl5321hd8ed1ab_0 + - perl-constant=1.33=pl5321hd8ed1ab_0 + - perl-data-dumper=2.183=pl5321hd590300_0 + - perl-encode=3.21=pl5321hb9d3cd8_1 + - perl-exporter=5.74=pl5321hd8ed1ab_0 + - perl-extutils-makemaker=7.70=pl5321hd8ed1ab_0 + - perl-ffi-checklib=0.28=pl5321hdfd78af_0 + - perl-file-chdir=0.1011=pl5321hd8ed1ab_0 + - perl-file-path=2.18=pl5321hd8ed1ab_0 + - perl-file-temp=0.2304=pl5321hd8ed1ab_0 + - perl-file-which=1.24=pl5321hd8ed1ab_0 + - perl-importer=0.026=pl5321hd8ed1ab_0 + - perl-mime-base64=3.16=pl5321hb9d3cd8_2 + - perl-parent=0.243=pl5321hd8ed1ab_0 + - perl-path-tiny=0.124=pl5321hd8ed1ab_0 + - perl-pathtools=3.75=pl5321hb9d3cd8_1 + - perl-scope-guard=0.21=pl5321hd8ed1ab_0 + - perl-storable=3.15=pl5321hb9d3cd8_0 + - perl-sub-info=0.002=pl5321hd8ed1ab_0 + - perl-term-table=0.024=pl5321hdfd78af_0 + - perl-test-fatal=0.016=pl5321ha770c72_0 + - perl-test-warnings=0.031=pl5321ha770c72_0 + - perl-test2-suite=0.000163=pl5321hdfd78af_0 + - perl-try-tiny=0.31=pl5321ha770c72_0 + - perl-uri=5.17=pl5321ha770c72_0 + - perl-xml-libxml=2.0210=pl5321hf886d80_0 + - perl-xml-namespacesupport=1.12=pl5321hd8ed1ab_0 + - perl-xml-sax=1.02=pl5321hd8ed1ab_0 + - perl-xml-sax-base=1.09=pl5321hd8ed1ab_0 + - perl-xsloader=0.24=pl5321hd8ed1ab_0 + - pexpect=4.8.0=pyh1a96a4e_2 + - pickleshare=0.7.5=py_1003 + - pip=23.3.1=pyhd8ed1ab_0 + - pixman=0.44.2=h29eaf8c_0 + - pkg-config=0.29.2=h4bc722e_1009 + - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 + - plac=1.4.1=pyhd8ed1ab_1 + - platformdirs=3.11.0=pyhd8ed1ab_0 + - pluggy=1.3.0=pyhd8ed1ab_0 + - ply=3.11=py_1 + - prettytable=3.9.0=pyhd8ed1ab_0 + - prometheus_client=0.21.1=pyhd8ed1ab_0 + - prompt-toolkit=3.0.39=pyha770c72_0 + - prompt_toolkit=3.0.39=hd8ed1ab_0 + - proto-plus=1.25.0=pyhd8ed1ab_1 + - protobuf=5.28.3=py311hfdbb021_0 + - psutil=5.9.5=py311h459d7ec_1 + - pthread-stubs=0.4=h36c2ea0_1001 + - ptyprocess=0.7.0=pyhd3deb0d_0 + - pulp=2.7.0=py311h38be061_1 + - pure_eval=0.2.2=pyhd8ed1ab_0 + - pyasn1=0.5.0=pyhd8ed1ab_0 + - pyasn1-modules=0.3.0=pyhd8ed1ab_0 + - pybktree=1.1=pyh9f0ad1d_0 + - pycparser=2.21=pyhd8ed1ab_0 + - pygments=2.16.1=pyhd8ed1ab_0 + - pynacl=1.5.0=py311h459d7ec_3 + - pyopenssl=23.3.0=pyhd8ed1ab_0 + - pyparsing=3.1.1=pyhd8ed1ab_0 + - pysam=0.22.1=py311h1f0e11c_2 + - pysftp=0.2.9=py_1 + - pysocks=1.7.1=pyha2e5f31_6 + - pytest=7.4.3=pyhd8ed1ab_0 + - python=3.11.11=h9e4cc4f_1_cpython + - python-dateutil=2.8.2=pyhd8ed1ab_0 + - python-fastjsonschema=2.18.1=pyhd8ed1ab_0 + - python-irodsclient=1.1.9=pyhd8ed1ab_0 + - python-json-logger=2.0.7=pyhd8ed1ab_0 + - python-tzdata=2023.3=pyhd8ed1ab_0 + - python_abi=3.11=4_cp311 + - pytz=2023.3.post1=pyhd8ed1ab_0 + - pyu2f=0.1.5=pyhd8ed1ab_0 + - pyyaml=6.0.1=py311h459d7ec_1 + - pyzmq=25.1.2=py311h34ded2d_0 + - qhull=2020.2=h434a139_5 + - r-arrow=19.0.0=r44h5888daf_0 + - r-askpass=1.2.1=r44h2b5f3a1_0 + - r-assertthat=0.2.1=r44hc72bb7e_5 + - r-base=4.4.2=hc737e89_2 + - r-base64enc=0.1_3=r44hb1dbf0f_1007 + - r-bit=4.5.0.1=r44h2b5f3a1_0 + - r-bit64=4.5.2=r44h2b5f3a1_0 + - r-bslib=0.8.0=r44hc72bb7e_0 + - r-cachem=1.1.0=r44hb1dbf0f_1 + - r-cairo=1.6_2=r44h232ff4d_2 + - r-cli=3.6.3=r44h0d4f4ea_1 + - r-coda=0.19_4.1=r44hc72bb7e_1 + - r-codetools=0.2_20=r44hc72bb7e_1 + - r-colorspace=2.1_1=r44hdb488b9_0 + - r-cpp11=0.5.1=r44hc72bb7e_0 + - r-crayon=1.5.3=r44hc72bb7e_1 + - r-credentials=2.0.2=r44hc72bb7e_0 + - r-curl=6.0.1=r44h2700575_0 + - r-digest=0.6.37=r44h0d4f4ea_0 + - r-dplyr=1.1.4=r44h0d4f4ea_1 + - r-ellipsis=0.3.2=r44hb1dbf0f_3 + - r-evaluate=1.0.3=r44hc72bb7e_0 + - r-fansi=1.0.6=r44hb1dbf0f_1 + - r-farver=2.1.2=r44ha18555a_1 + - r-fastmap=1.2.0=r44ha18555a_1 + - r-fontawesome=0.5.3=r44hc72bb7e_0 + - r-fs=1.6.5=r44h93ab643_0 + - r-future=1.34.0=r44h785f33e_0 + - r-future.apply=1.11.3=r44hc72bb7e_0 + - r-generics=0.1.3=r44hc72bb7e_3 + - r-gert=2.1.4=r44h017ce79_0 + - r-ggplot2=3.5.1=r44hc72bb7e_1 + - r-globals=0.16.3=r44hc72bb7e_1 + - r-glue=1.8.0=r44h2b5f3a1_0 + - r-gridextra=2.3=r44hc72bb7e_1006 + - r-gtable=0.3.6=r44hc72bb7e_0 + - r-highr=0.11=r44hc72bb7e_1 + - r-htmltools=0.5.8.1=r44ha18555a_1 + - r-isoband=0.2.7=r44ha18555a_3 + - r-jquerylib=0.1.4=r44hc72bb7e_3 + - r-jsonlite=1.8.9=r44h2b5f3a1_0 + - r-knitr=1.49=r44hc72bb7e_0 + - r-labeling=0.4.3=r44hc72bb7e_1 + - r-later=1.4.1=r44h93ab643_0 + - r-lattice=0.22_6=r44hb1dbf0f_1 + - r-lifecycle=1.0.4=r44hc72bb7e_1 + - r-listenv=0.9.1=r44hc72bb7e_1 + - r-magick=2.8.5=r44h93ab643_0 + - r-magrittr=2.0.3=r44hb1dbf0f_3 + - r-mass=7.3_64=r44h2b5f3a1_0 + - r-matrix=1.6_5=r44he966344_1 + - r-matrixstats=1.5.0=r44h2b5f3a1_0 + - r-memoise=2.0.1=r44hc72bb7e_3 + - r-mgcv=1.9_1=r44h0d28552_1 + - r-mime=0.12=r44hb1dbf0f_3 + - r-munsell=0.5.1=r44hc72bb7e_1 + - r-nlme=3.1_165=r44hbcb9c34_1 + - r-openssl=2.2.2=r44he8289e2_0 + - r-packrat=0.9.2=r44hc72bb7e_1 + - r-parallelly=1.41.0=r44h2b5f3a1_0 + - r-pillar=1.10.1=r44hc72bb7e_0 + - r-pkgconfig=2.0.3=r44hc72bb7e_4 + - r-pki=0.1_14=r44he8289e2_2 + - r-plyr=1.8.9=r44ha18555a_1 + - r-processx=3.8.5=r44h2b5f3a1_0 + - r-ps=1.8.1=r44h2b5f3a1_0 + - r-purrr=1.0.2=r44hdb488b9_1 + - r-quarto=1.4.4=r44hc72bb7e_1 + - r-r6=2.5.1=r44hc72bb7e_3 + - r-rappdirs=0.3.3=r44hb1dbf0f_3 + - r-rcolorbrewer=1.1_3=r44h785f33e_3 + - r-rcpp=1.0.14=r44h93ab643_0 + - r-rcppannoy=0.0.22=r44ha18555a_1 + - r-rcpparmadillo=14.2.2_1=r44hb79369c_0 + - r-rcpptoml=0.2.2=r44ha18555a_2 + - r-renv=1.0.11=r44hc72bb7e_0 + - r-reshape2=1.4.4=r44h0d4f4ea_4 + - r-rjags=4_16=r44h93ab643_1 + - r-rlang=1.1.5=r44h93ab643_0 + - r-rmarkdown=2.29=r44hc72bb7e_0 + - r-rsconnect=1.3.3=r44hc72bb7e_0 + - r-rstudioapi=0.17.1=r44hc72bb7e_0 + - r-sass=0.4.9=r44ha18555a_1 + - r-scales=1.3.0=r44hc72bb7e_1 + - r-sctransform=0.4.1=r44hb424bfc_1 + - r-stringi=1.8.4=r44h33cde33_3 + - r-stringr=1.5.1=r44h785f33e_1 + - r-sys=3.4.3=r44h2b5f3a1_0 + - r-systemfonts=1.1.0=r44h38d38ca_1 + - r-textshaping=0.4.0=r44ha47bcaa_2 + - r-tibble=3.2.1=r44hdb488b9_3 + - r-tidyselect=1.2.1=r44hc72bb7e_1 + - r-tinytex=0.54=r44hc72bb7e_0 + - r-utf8=1.2.4=r44hb1dbf0f_1 + - r-vctrs=0.6.5=r44h0d4f4ea_1 + - r-viridislite=0.4.2=r44hc72bb7e_2 + - r-withr=3.0.2=r44hc72bb7e_0 + - r-xfun=0.50=r44h93ab643_0 + - r-yaml=2.3.10=r44hdb488b9_0 + - r-zip=2.3.1=r44hb1dbf0f_1 + - rav1e=0.6.6=he8a937b_2 + - re2=2024.07.02=h9925aae_2 + - readline=8.2=h8228510_1 + - referencing=0.30.2=pyhd8ed1ab_0 + - regex=2024.11.6=py311h9ecbd09_0 + - requests=2.31.0=pyhd8ed1ab_0 + - reretry=0.11.8=pyhd8ed1ab_0 + - rfc3339-validator=0.1.4=pyhd8ed1ab_1 + - rfc3986-validator=0.1.1=pyh9f0ad1d_0 + - rhash=1.4.5=hb9d3cd8_0 + - rich=13.6.0=pyhd8ed1ab_0 + - rpds-py=0.13.2=py311h46250e7_0 + - rsa=4.9=pyhd8ed1ab_0 + - s2n=1.5.11=h072c03f_0 + - s3transfer=0.7.0=pyhd8ed1ab_0 + - samtools=1.21=h96c455f_1 + - sed=4.8=he412f7d_0 + - send2trash=1.8.3=pyh0d859eb_1 + - setuptools=68.2.2=pyhd8ed1ab_0 + - setuptools-scm=8.0.4=pyhd8ed1ab_0 + - six=1.16.0=pyh6c4a22f_0 + - slacker=0.14.0=py_0 + - smart_open=6.4.0=pyhd8ed1ab_0 + - smmap=5.0.0=pyhd8ed1ab_0 + - snakemake=7.32.4=hdfd78af_1 + - snakemake-minimal=7.32.4=pyhdfd78af_0 + - snappy=1.2.1=h8bd8927_1 + - sniffio=1.3.1=pyhd8ed1ab_1 + - soupsieve=2.5=pyhd8ed1ab_1 + - sra-tools=3.0.8=h9f5acd7_0 + - stack_data=0.6.2=pyhd8ed1ab_0 + - star=2.7.11b=h5ca1c30_5 + - stone=3.3.1=pyhd8ed1ab_0 + - stopit=1.1.2=py_0 + - stress-ng=0.17.03=h2797004_0 + - svt-av1=2.3.0=h5888daf_0 + - sysroot_linux-64=2.12=he073ed8_16 + - tabulate=0.9.0=pyhd8ed1ab_1 + - terminado=0.18.1=pyh0d859eb_0 + - throttler=1.2.2=pyhd8ed1ab_0 + - tinycss2=1.4.0=pyhd8ed1ab_0 + - tk=8.6.13=noxft_h4845f30_101 + - tktable=2.10=h0c5db8f_5 + - tomli=2.0.1=pyhd8ed1ab_0 + - toposort=1.10=pyhd8ed1ab_0 + - tornado=6.3.3=py311h459d7ec_1 + - traitlets=5.13.0=pyhd8ed1ab_0 + - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - typing-extensions=4.8.0=hd8ed1ab_0 + - typing_extensions=4.8.0=pyha770c72_0 + - typing_utils=0.1.0=pyhd8ed1ab_1 + - typst=0.11.0=he8a937b_0 + - tzdata=2025a=h78e105d_0 + - ubiquerg=0.6.3=pyhd8ed1ab_0 + - umi_tools=1.1.6=py311haab0aaa_0 + - unicodedata2=16.0.0=py311h9ecbd09_0 + - uri-template=1.3.0=pyhd8ed1ab_1 + - uritemplate=4.1.1=pyhd8ed1ab_0 + - urllib3=1.26.18=pyhd8ed1ab_0 + - veracitools=0.1.3=py_0 + - wcwidth=0.2.9=pyhd8ed1ab_0 + - webcolors=24.11.1=pyhd8ed1ab_0 + - webencodings=0.5.1=pyhd8ed1ab_3 + - websocket-client=1.8.0=pyhd8ed1ab_1 + - wheel=0.41.3=pyhd8ed1ab_0 + - wrapt=1.16.0=py311h459d7ec_0 + - x265=3.5=h924138e_3 + - xorg-kbproto=1.0.7=h7f98852_1002 + - xorg-libice=1.1.1=hd590300_0 + - xorg-libsm=1.2.4=h7391055_0 + - xorg-libx11=1.8.10=h4f16b4b_1 + - xorg-libxau=1.0.11=hd590300_0 + - xorg-libxdmcp=1.1.3=h7f98852_0 + - xorg-libxext=1.3.6=hb9d3cd8_0 + - xorg-libxrender=0.9.11=hd590300_0 + - xorg-libxt=1.3.0=hd590300_1 + - xorg-renderproto=0.11.1=h7f98852_1002 + - xorg-xextproto=7.3.0=h0b41bf4_1003 + - xorg-xproto=7.0.31=h7f98852_1007 + - xz=5.2.6=h166bdaf_0 + - yaml=0.2.5=h7f98852_2 + - yarl=1.9.3=py311h459d7ec_0 + - yte=1.5.1=pyha770c72_2 + - zeromq=4.3.5=h59595ed_0 + - zipp=3.17.0=pyhd8ed1ab_0 + - zlib=1.3.1=hb9d3cd8_2 + - zstd=1.5.6=ha6fb4c9_0 + - pip: + - absl-py==2.1.0 + - anndata==0.8.0 + - arboreto==0.1.6 + - array-api-compat==1.6 + - bokeh==3.3.2 + - boltons==23.1.1 + - chex==0.1.86 + - click==8.1.7 + - cloudpickle==3.0.0 + - contextlib2==21.6.0 + - contourpy==1.2.0 + - ctxcore==0.2.0 + - cytoolz==0.12.2 + - dask==2023.12.0 + - dill==0.3.7 + - distributed==2023.12.0 + - dnspython==2.6.1 + - docrep==0.3.2 + - et-xmlfile==1.1.0 + - etils==1.8.0 + - filelock==3.13.4 + - flax==0.8.2 + - fonttools==4.51.0 + - frozendict==2.3.10 + - fsspec==2023.12.2 + - h5py==3.10.0 + - hyperopt==0.1.2 + - igraph==0.10.8 + - interlap==0.2.7 + - jax==0.4.26 + - jaxlib==0.4.26 + - joblib==1.3.2 + - kiwisolver==1.4.5 + - legacy-api-wrap==1.4 + - leidenalg==0.10.1 + - lightning==2.1.4 + - lightning-utilities==0.11.2 + - llvmlite==0.41.1 + - locket==1.0.0 + - loompy==3.0.7 + - lz4==4.3.2 + - matplotlib==3.8.4 + - ml-collections==0.1.1 + - ml-dtypes==0.4.0 + - mpmath==1.3.0 + - msgpack==1.0.7 + - mudata==0.2.3 + - multipledispatch==1.0.0 + - multiprocessing-on-dill==3.5.0a4 + - natsort==8.4.0 + - nbclient==0.9.0 + - networkx==3.2.1 + - numba==0.58.1 + - numexpr==2.8.8 + - numpy-groupies==0.10.2 + - numpyro==0.14.0 + - nvidia-cublas-cu12==12.1.3.1 + - nvidia-cuda-cupti-cu12==12.1.105 + - nvidia-cuda-nvrtc-cu12==12.1.105 + - nvidia-cuda-runtime-cu12==12.1.105 + - nvidia-cudnn-cu12==8.9.2.26 + - nvidia-cufft-cu12==11.0.2.54 + - nvidia-curand-cu12==10.3.2.106 + - nvidia-cusolver-cu12==11.4.5.107 + - nvidia-cusparse-cu12==12.1.0.106 + - nvidia-nccl-cu12==2.19.3 + - nvidia-nvjitlink-cu12==12.4.127 + - nvidia-nvtx-cu12==12.1.105 + - openpyxl==3.1.5 + - opt-einsum==3.3.0 + - optax==0.2.2 + - orbax-checkpoint==0.5.10 + - partd==1.4.1 + - patsy==0.5.6 + - pillow==10.1.0 + - pyarrow==14.0.1 + - pyarrow-hotfix==0.6 + - pymongo==4.6.3 + - pynndescent==0.5.11 + - pyro-api==0.1.2 + - pyro-ppl==1.9.0 + - pyscenic==0.12.1 + - pytorch-lightning==2.2.3 + - quarto==0.1.0 + - scanpy==1.10.1 + - scikit-learn==1.3.2 + - scikit-misc==0.3.1 + - scipy==1.11.4 + - scvi-tools==1.1.2 + - seaborn==0.13.2 + - session-info==1.0.0 + - sortedcontainers==2.4.0 + - statsmodels==0.14.2 + - stdlib-list==0.10.0 + - sympy==1.12 + - tblib==3.0.0 + - tensorstore==0.1.56 + - texttable==1.7.0 + - threadpoolctl==3.2.0 + - toolz==0.12.0 + - torch==2.2.2 + - torchmetrics==1.3.2 + - tqdm==4.66.1 + - triton==2.2.0 + - umap-learn==0.5.5 + - xlrd==2.0.1 + - xyzservices==2023.10.1 + - zict==3.0.0 +prefix: /opt/common/tools/ric.tiget/mambaforge/envs/singlecell5 diff --git a/reference/miDB_sig4.MLS.rds b/reference/miDB_sig4.MLS.rds new file mode 100644 index 0000000000000000000000000000000000000000..511567585842025f91f410b98fe18f9a38f485c7 Binary files /dev/null and b/reference/miDB_sig4.MLS.rds differ diff --git a/reference/regev_lab_cell_cycle_mouse.rds b/reference/regev_lab_cell_cycle_mouse.rds new file mode 100644 index 0000000000000000000000000000000000000000..a6e26e108c96655e7463b4d68efe186d75f8ba27 Binary files /dev/null and b/reference/regev_lab_cell_cycle_mouse.rds differ