OSCR

Esr1-dependent signaling and transcriptional maturation in the medial preoptic area of the hypothalamus shape the development of mating behavior during adolescence.

Code ↔ Paper

9 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 9 matches
  1. [1] § Materials and methods › DEG and trajectory analysis of scRNAseq in Esr1KO experiments ↔ Integrating Esr1KOM and MPOA scRNAseq Fig4.ipynb, lines 285–291 · score 0.81 · eVgat9, eVgat3, eVgat4, eVgat5, eVgat1, scRNAseq
  2. [2] § Materials and methods › Integrative clustering and differential gene expression analysis ↔ Integrating Esr1KOF and MPOA scRNAseq Fig4.ipynb, lines 26–37 · score 0.74 · RunUMAP, FindClusters, FindNeighbors, PCA, resolution, clustering
  3. [3] § Materials and methods › Integrative clustering and differential gene expression analysis ↔ Integrating Esr1KOM and MPOA scRNAseq Fig4.ipynb, lines 20–31 · score 0.74 · RunUMAP, FindClusters, FindNeighbors, PCA, resolution, clustering
  4. [4] § Materials and methods › Integrative clustering and differential gene expression analysis ↔ 210726 doublet_removal_only_paper.ipynb, lines 13–144 · score 0.64 · FindVariableFeatures, NormalizeData, transformation, Seurat, neighbor, matrix
  5. [5] § Materials and methods › Integrative analysis of MERFISH and scRNAseq data ↔ 210726 doublet_removal_only_paper.ipynb, lines 13–144 · score 0.60 · FindVariableFeatures, NormalizeData, POA, Seurat, clusters, V3
  6. [6] § Materials and methods › Integrative clustering and differential gene expression analysis ↔ Integrating Esr1KOF and MPOA scRNAseq Fig4.ipynb, lines 26–37 · score 0.59 · FindVariableFeatures, NormalizeData, scores, neighbor, clustering
  7. [7] § Materials and methods › DEG and trajectory analysis of scRNAseq in Esr1KO experiments ↔ Integrating Esr1KOM and MPOA scRNAseq Fig4.ipynb, lines 597–622 · score 0.59 · eMix1, eVgat1, Esr1KOM, clustering, V3, cells
  8. [8] § Materials and methods › DEG and trajectory analysis of scRNAseq in Esr1KO experiments ↔ Integrating Esr1KOF and MPOA scRNAseq Fig4.ipynb, lines 65–71 · score 0.58 · eMix1, eVgat1, Esr1KOF, V3
  9. [9] § Results › Transcriptional dynamics of MPOA cell types during adolescent development ↔ MPOA_log_neurons_basic_figures_UMAP_Propotion_Disc_violin_correlation_Fig2.ipynb, lines 649–663 · score 0.50 · androgen receptor, steroid hormone receptor, AR, Neurons, gene, MPOA

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Jupyter notebook · 731 lines · 43 KB · MIT · 3 matches

  1. # %%
  2. library(Seurat)
  3. library(dplyr)
  4. library(magrittr)
  5. IRdisplay::display_html("<style> .container { width:95% !important; } </style>")
  6. library("xlsx")
  7. #library(mgsa)
  8. library("ggplot2")# note that Seurat v3, they return ggplot object for easy customization
  9. library(parallel)
  10. library(scales)
  11. # %%
  12. Esr1KOM.data <-Read10X(data.dir = "/media/garret/New Volume/scRNAseq_data/backupv3/v3/Esr1KO_M/01_analysis/cellranger_count_v2/P50Esr1KO/raw_feature_bc_matrix")
  13. colnames(Esr1KOM.data) = paste0(colnames(Esr1KOM.data),"Esr1KOM")
  14. Esr1KOM<- CreateSeuratObject(counts = Esr1KOM.data, min.cells = 3, min.features = 200, project = "10X_MPOA")
  15. Neuron_id<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/all_cells/Neuron_bid.rds")
  16. Esr1KOM<-subset(x = Esr1KOM, cells=Neuron_id)
  17. [email hidden]$stim <- "Esr1KOM"
  18. # %%
  19. Esr1KOM<- NormalizeData(object = Esr1KOM,verbose = FALSE)
  20. Esr1KOM<- FindVariableFeatures(object =Esr1KOM,selection.method = "vst", nfeatures = 2000, verbose = FALSE)
  21. Esr1KOM<- ScaleData(object = Esr1KOM, features = rownames(x =Esr1KOM))
  22. Esr1KOM<- RunPCA(object = Esr1KOM, features = VariableFeatures(object =Esr1KOM), verbose = FALSE)
  23. Esr1KOM <- JackStraw(object =Esr1KOM, num.replicate = 100)
  24. Esr1KOM <- ScoreJackStraw(object = Esr1KOM, dims = 1:20)
  25. JackStrawPlot(object = Esr1KOM, dims = 1:20)
  26. ElbowPlot(object =Esr1KOM)
  27. Esr1KOM <- FindNeighbors(object =Esr1KOM, dims = 1:30)
  28. Esr1KOM <- FindClusters(object = Esr1KOM, resolution = 0.8)
  29. Esr1KOM<- RunUMAP(object = Esr1KOM, reduction = "pca", dims = 1:30)
  30. # %%
  31. DefaultAssay(Esr1KOM) <- "RNA"
  32. # %%
  33. FeaturePlot(object =Esr1KOM, features = c("Slc32a1"),order=TRUE)
  34. ggsave(file="/media/garret/New Volume/paper submission/MPOA_Science/Revision_Figures/raw/disc_Esr1KOM_all_#rev3_com#feature_Vgat.pdf",width=10,height=10)
  35. # %%
  36. FeaturePlot(object =Esr1KOM, features = c("Slc17a6"),order=TRUE)
  37. ggsave(file="/media/garret/New Volume/paper submission/MPOA_Science/Revision_Figures/raw/disc_Esr1KOM_all_#rev3_com#feature_Vglu.pdf",width=10,height=10)
  38. # %%
  39. saveRDS(Esr1KOM,file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/Esr1KOM.rds")
  40. # %%
  41. Esr1KOM<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/Esr1KOM.rds")
  42. new.ident <- c("Mix1","Vgat1","Vglu1","Vgat2","Vgat3","Vgat4","Vglu2","Vglu3","Vgat5","Vgat6","Vgat7","Vgat8","Vgat9","Mix2","Vgat10","Vglu4","Vgat11","Vglu5","Vgat12","Vglu6","Ambiguous")
  43. names(x = new.ident) <- levels(x =Esr1KOM)
  44. Esr1KOM<- RenameIdents(object =Esr1KOM, new.ident)
  45. for (i in 1:length(new.ident)){
  46. assign(paste(new.ident[i],"_barcode",sep=""),colnames(Esr1KOM@assays$RNA@data[,which(Idents(object=Esr1KOM) %in% new.ident[i])]))}
  47. # %%
  48. DimPlot(object = Esr1KOM, reduction = "umap", label = TRUE, repel = TRUE)
  49. ggsave(file="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/umap_name.pdf",width=10,height=10)
  50. # %%
  51. violin/disc
  52. # %%
  53. #start from here
  54. Esr1KOM<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/Esr1KOM.rds")
  55. new.ident <- c("eMix1","eVgat1","eVglu1","eVgat2","eVgat3","eVgat4","eVglu2","eVglu3","eVgat5","eVgat6","eVgat7","eVgat8","eVgat9","eMix2","eVgat10","eVglu4","eVgat11","eVglu5","eVgat12","eVglu6","eAmbiguous")
  56. names(x = new.ident) <- levels(x =Esr1KOM)
  57. Esr1KOM<- RenameIdents(object =Esr1KOM, new.ident)
  58. for (i in 1:length(new.ident)){
  59. assign(paste(new.ident[i],"_barcode",sep=""),colnames(Esr1KOM@assays$RNA@data[,which(Idents(object=Esr1KOM) %in% new.ident[i])]))}
  60. # %%
  61. # UMI, gene, fraction, UMAP
  62. # %%
  63. [email hidden]$celltype<-Idents(Esr1KOM)
  64. Celltype<-c("eVgat1","eVgat2","eVgat3","eVgat4","eVgat5","eVgat6","eVgat7","eVgat8","eVgat9","eVgat10","eVgat11","eVgat12","eVglu1","eVglu2","eVglu3","eVglu4","eVglu5","eVglu6","eMix1","eMix2")
  65. Esr1KOM<-subset(Esr1KOM,cells=rownames([email hidden])[[email hidden]$celltype %in% Celltype])
  66. [email hidden]$celltype<-factor([email hidden]$celltype,levels=Celltype)
  67. Idents(Esr1KOM)<-factor(Idents(Esr1KOM),levels=Celltype)
  68. # %%
  69. #colors<-rep("cyan4",length(unique([email hidden]$celltype)))
  70. # %%
  71. colors<-color<-c("lightblue","lightskyblue","skyblue","deepskyblue","lightsteelblue",
  72. "dodgerblue","cornflowerblue","steelblue","cadetblue","mediumslateblue",
  73. "slateblue","darkslateblue","lightsalmon","salmon","darksalmon","lightcoral","indianred",
  74. "#DC143C","darkgray","dimgray")
  75. # %%
  76. #UMAP
  77. DimPlot(object = Esr1KOM, reduction = "umap", label = FALSE, repel = TRUE,cols=color)
  78. ggsave(file="/media/garret/New Volume/paper submission/MPOA_Science/Revision_Figures/raw/Esr1KOM_neuron_umap_name_rec#3com#4.pdf",width=10,height=10)
  79. # %%
  80. #UMI
  81. ggplot([email hidden],aes_string(x="celltype",y="nCount_RNA",fill="celltype"))+geom_violin(scale = "width")+scale_fill_manual(values=colors)+
  82. stat_summary(fun.y=median, geom="point", size=0.6, color="red")+ylab("UMI")+
  83. theme(axis.title.x=element_blank(),
  84. ,axis.text.y=element_text(size=12,color="black"),axis.title.y=element_text(size=20,angle=90,color="black",margin = margin(t = 10, r = 8, b = 0, l = 10),vjust=0.5),axis.text.x=element_text(size=12,h=0.5,v=0.5,angle=50,color="black")
  85. ,axis.title=element_text(size=15,face="bold"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  86. panel.background = element_blank(), axis.line = element_line(colour = "black"),legend.position="none",plot.margin = unit(c(1, 0,0, 0), "cm"))
  87. ggsave(file="/media/garret/New Volume/paper submission/MPOA_Science/Revision_Figures/raw/Esr1KOM_UMI_neuroncelltype_rev#3com4.pdf",height=2, width=10 , paper = "letter")
  88. # %%
  89. #gene
  90. ggplot([email hidden],aes_string(x="celltype",y="nFeature_RNA",fill="celltype"))+geom_violin(scale = "width")+scale_fill_manual(values=colors)+
  91. stat_summary(fun.y=median, geom="point", size=0.6, color="red")+ylab("gene")+
  92. theme(axis.title.x=element_blank(),
  93. ,axis.text.y=element_text(size=12,color="black"),axis.title.y=element_text(size=20,angle=90,color="black",margin = margin(t = 10, r = 8, b = 0, l = 10),vjust=0.5),axis.text.x=element_text(size=12,h=0.5,v=0.5,angle=50,color="black")
  94. ,axis.title=element_text(size=15,face="bold"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  95. panel.background = element_blank(), axis.line = element_line(colour = "black"),legend.position="none",plot.margin = unit(c(1, 0,0, 0), "cm"))
  96. ggsave(file="/media/garret/New Volume/paper submission/MPOA_Science/Revision_Figures/raw/Esr1KOM_gene_neuroncelltype_rev#3com4.pdf",height=2, width=10 , paper = "letter")
  97. # %%
  98. #fraction
  99. Cell_type<-Celltype
  100. # make a data frame for cell number (this data frame is a simple version giving single value for each cluster)
  101. Cell_number<- data.frame("type" =Cell_type)
  102. Numberofcells<-vector(mode="numeric", length=0)
  103. proportion<-vector(mode="numeric", length=0)
  104. for (i in 1:dim(Cell_number)[1]){Numberofcells[i]<-dim(subset([email hidden],celltype==Cell_number$type[i]))[1]}
  105. Cell_number$len<-Numberofcells
  106. for (i in 1:dim(Cell_number)[1]){proportion[i]<-100*Cell_number$len[i]/sum(Cell_number$len)}
  107. Cell_number$prop<-proportion
  108. Cell_number$type<-factor(Cell_number$type,levels=Celltype)
  109. # %%
  110. # proportion of cells
  111. ggplot(Cell_number,aes(x=type,y=proportion,fill=type, width=.75))+geom_bar(stat = "identity",position=position_dodge())+ylab("fraction (%)")+
  112. scale_fill_manual(values=colors)+scale_x_discrete(limits = (levels(Cell_number$type)))+
  113. theme(legend.position="none",axis.title.x=element_text(size=0),axis.title.y=element_text(size=20,color="black"),axis.text.y=element_text(size=12,color="black"),axis.text.x=element_text(size=15,angle = 50, hjust =0.5,v=0.5,color="black"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  114. panel.background = element_blank(), axis.line = element_line(colour = "black",size=0.7))+ggtitle("% cells")
  115. ggsave(file="/media/garret/New Volume/paper submission/MPOA_Science/Revision_Figures/raw/Esr1KOM_neuroncelltypefraction_rev#3com4.pdf",height=6, width=10 , paper = "letter")
  116. # %%
  117. #disc plot
  118. # %%
  119. #ext fig7
  120. Cell_type<-factor(rev(c("eVgat7","eVgat3","eVgat4","eVgat8","eVgat9","eVgat10","eVgat2","eVgat1","eVgat5","eVgat6")),levels=rev(c("eVgat7","eVgat3","eVgat4","eVgat8","eVgat9","eVgat10","eVgat2","eVgat1","eVgat5","eVgat6")))
  121. gene_list<-c("Slc32a1","Slc17a6","Ar","Esr1")
  122. # %%
  123. Cell_number<- data.frame(Date=as.Date(character()),File=character(),User=character(),stringsAsFactors=FALSE)
  124. for (i in 1:length(gene_list)){
  125. L<-length(Cell_type)
  126. Cell_number_t<- data.frame("cluster" =Cell_type, "gene"=c(rep(gene_list[i],L)))
  127. #used normalized uncorrected data
  128. for (p in 1:length(Cell_type)){
  129. Cell_number_t$pct[p]<-100*sum(Esr1KOM@assays$RNA@data[gene_list[i],eval(parse(text=paste(Cell_type[p],"_barcode",sep="")))]>0)/length(eval(parse(text=paste(Cell_type[p],"_barcode",sep=""))))
  130. Cell_number_t$avg[p]<-(mean(Esr1KOM@assays$RNA@data[gene_list[i],eval(parse(text=paste(Cell_type[p],"_barcode",sep="")))])-mean(Esr1KOM@assays$RNA@data[gene_list[i],]))/sd(Esr1KOM@assays$RNA@data[gene_list[i],])
  131. #for avg only consider the expressed cell
  132. #t<-LHb.integrated@assays$RNA@data[gene_list[i],eval(parse(text=paste(Cell_type[p],"_barcode",sep="")))]>0
  133. # Cell_number_t$avg[p]<-mean(LHb.integrated@assays$RNA@data[gene_list[i],t])/sd(LHb.integrated@assays$RNA@data[gene_list[i],eval(parse(text=paste(Cell_type[p],"_barcode",sep="")))])
  134. }
  135. Cell_number<-rbind(Cell_number_t,Cell_number)}
  136. as.factor(Cell_number$cluster)
  137. # %%
  138. ggplot(Cell_number, aes(gene, cluster)) + geom_point(aes(size = pct, colour=avg)) +
  139. scale_y_discrete(limits = (levels(Cell_number$cluster)))+scale_x_discrete(limits =rev(levels(Cell_number$gene)),position = "top")+
  140. scale_color_gradient(low = "white", high = "darkblue",limits = c(-1,1.5),breaks=seq(-1,1.5,0.5),oob=squish) +scale_size_continuous(range = c(0,8),limits=c(0,100),breaks=seq(0,100,50))+
  141. geom_point(aes(size = pct), pch=21, lwd=0,stroke=0)+
  142. theme(axis.title.y=element_text(size=15),axis.text.y=element_text(size=8),axis.text.x=element_text(size=15,angle = 50, hjust = 0.1,vjust=0.5,color="black",face="bold"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  143. panel.background = element_blank(), axis.line = element_line(colour = "black",size=1),,legend.position ="top",axis.ticks.length=unit(.1, "cm"),axis.ticks = element_line(size = 1), plot.margin = margin(10, 110,30, 30))
  144. ggsave(file="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/disc_hormone_vglu.pdf",height=7, width=3.9 , paper = "letter")
  145. # %%
  146. ggplot(Cell_number, aes(gene, cluster)) + geom_point(aes(size = pct, colour=avg)) +
  147. scale_y_discrete(limits = (levels(Cell_number$cluster)))+scale_x_discrete(limits =rev(levels(Cell_number$gene)),position = "top")+
  148. scale_color_gradient(low = "white", high = "darkblue",limits = c(-1,1),breaks=seq(-1,1,0.5),oob=squish) +scale_size_continuous(range = c(0,8),limits=c(0,100),breaks=seq(0,100,50))+
  149. geom_point(aes(size = pct), pch=21, lwd=0,stroke=0)+
  150. theme(axis.title.y=element_text(size=15),axis.text.y=element_text(size=8),axis.text.x=element_text(size=15,angle = 50, hjust = 0.1,vjust=0.5,color="black",face="bold"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  151. panel.background = element_blank(), axis.line = element_line(colour = "black",size=1),,legend.position ="top",axis.ticks.length=unit(.1, "cm"),axis.ticks = element_line(size = 1), plot.margin = margin(10, 110,30, 30))
  152. ggsave(file="/media/garret/New Volume/paper submission/MPOA_Science/Revision_Figures/raw/disc_Esr1KOM_all_#rev3_com#.pdf",height=7, width=3.9 , paper = "letter")
  153. # %%
  154. Cell_type<-rev(c("eVgat1","eVgat2","eVgat3","eVgat4","eVgat5","eVgat6","eVgat7","eVgat8","eVgat9","eVgat10","eVgat11","eVgat12"))
  155. gene_list<-c("Slc32a1","Ar","Esr1","Dlx1")
  156. # %%
  157. #initialize empty data frame
  158. Cell_number<- data.frame(Date=as.Date(character()),File=character(),User=character(),stringsAsFactors=FALSE)
  159. for (i in 1:length(Cell_type)){
  160. L<-length(eval(parse(text = paste(Cell_type[i],"_barcode",sep=""))))
  161. Cell_number_t<- data.frame("type" =c(rep(Cell_type[i],L)))
  162. #used normalized uncorrected data
  163. for (p in 1:length(gene_list)){
  164. Cell_number_t[gene_list[p]]<-as.vector(Esr1KOM@assays$RNA@data[gene_list[p],eval(parse(text = paste(Cell_type[i],"_barcode",sep="")))])
  165. }
  166. Cell_number<-rbind(Cell_number_t,Cell_number)}
  167. as.factor(Cell_number$type)
  168. # %%
  169. colors<-rep("dodgerblue4",12)
  170. # %%
  171. for (k in 1:length(gene_list))
  172. {
  173. if (k==length(gene_list)){assign(paste("P",k,sep=""),ggplot(Cell_number,aes_string(x="type",y=gene_list[k],fill="type"))+geom_violin(scale = "width")+scale_fill_manual(values=colors)+ylab(gene_list[k])+ theme(axis.title.x=element_blank(),
  174. ,axis.text.y=element_blank(), axis.ticks.y=element_blank(),axis.text.x=element_text(size=12,face="bold",color="black",angle = 90, hjust =0,margin = margin(t = 2, r =0, b = 0, l =0)),axis.title.y=element_text(size=12,angle=0,face="bold",vjust=0.5,margin = margin(t = 5, r = 10, b = 0, l = 10)), axis.title=element_text(size=6,face="bold"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  175. panel.background = element_blank(), axis.line = element_line(colour = "black"),legend.position="none",plot.margin = unit(c(0, 0, 0, 0), "cm")))}
  176. else{
  177. assign(paste("P",k,sep=""),ggplot(Cell_number,aes_string(x="type",y=gene_list[k],fill="type"))+geom_violin(scale = "width")+scale_fill_manual(values=colors)+ylab(gene_list[k])+ theme(axis.title.x=element_blank(),
  178. axis.text.x=element_blank(), axis.ticks.x=element_blank(),axis.text.y=element_blank(), axis.ticks.y=element_blank(),axis.title.y=element_text(size=12,angle=0,face="bold",vjust=0.5,margin = margin(t = 5, r = 10, b = 0, l = 10)), axis.title=element_text(size=12,face="bold"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  179. panel.background = element_blank(), axis.line = element_line(colour = "black"),legend.position="none",plot.margin = unit(c(0, 0, 0, 0), "cm")))}
  180. }
  181. # %%
  182. library(grid)
  183. # %%
  184. #for Slc32a1,gene_list<-c("Slc32a1","Slc17a6","Dlx1","Ar","Esr1","Pgr","Moxd1")
  185. merge<-list()
  186. for (i in length(gene_list):1){
  187. if (length(merge)==0){
  188. merge<-ggplotGrob(eval(parse(text=paste("P",i,sep = ""))))}else{merge<-rbind(ggplotGrob(eval(parse(text=paste("P",i,sep = "")))),merge,size = "last")}}
  189. #all gene
  190. pdf(paste("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/stackplotviolin_all_clusters_hormone",".pdf",sep=""),height=3,width=18, paper = "letter")
  191. grid.newpage()
  192. grid.draw(merge)
  193. dev.off()
  194. # %% [markdown]
  195. # start from here
  196. # %%
  197. MPOA.integrated<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/MPOA.integrated.rds")
  198. P23M<-readRDS(file ="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/P23M.rds")
  199. P35M<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/P35M.rds")
  200. AM<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/AM.rds")
  201. Cast<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/Cast.rds")
  202. P23F<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/P23F.rds")
  203. P35F<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/P35F.rds")
  204. AF<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/AF.rds")
  205. OVX<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/OVX.rds")
  206. new.ident <- c("Mix1","Vgat1","Vglu1","Vgat2","Vgat3","Vgat4","Mix2","Vglu2","Vgat5","Vglu3","Vglu4","Vgat6","Vgat7","Vgat8","Vglu5","Vglu6","Vgat9","Vgat10","Vgat11","Vglu7","Vgat12","Vgat13","Vgat14","Vgat15","Vglu8","Vglu9","Vgat16","Vglu10","Vgat17","Vgat18","Vgat19","Vglu11","Vglu12","Ambiguous1","Mix3","Vgat20")
  207. names(x = new.ident) <- levels(x =MPOA.integrated)
  208. MPOA.integrated<- RenameIdents(object =MPOA.integrated, new.ident)
  209. for (i in 1:length(new.ident)){
  210. assign(paste(new.ident[i],"_barcode",sep=""),colnames(MPOA.integrated@assays$RNA@data[,which(Idents(object=MPOA.integrated) %in% new.ident[i])]))# this gives all barcodes in cluster
  211. assign(paste(new.ident[i],"_barcode_P23M",sep=""),intersect(colnames(P23M@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  212. assign(paste(new.ident[i],"_barcode_P35M",sep=""),intersect(colnames(P35M@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  213. assign(paste(new.ident[i],"_barcode_AM",sep=""),intersect(colnames(AM@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  214. assign(paste(new.ident[i],"_barcode_Cast",sep=""),intersect(colnames(Cast@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  215. assign(paste(new.ident[i],"_barcode_P23F",sep=""),intersect(colnames(P23F@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  216. assign(paste(new.ident[i],"_barcode_P35F",sep=""),intersect(colnames(P35F@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  217. assign(paste(new.ident[i],"_barcode_AF",sep=""),intersect(colnames(AF@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  218. assign(paste(new.ident[i],"_barcode_OVX",sep=""),intersect(colnames(OVX@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  219. }
  220. # %%
  221. [email hidden]$celltype<-Idents(MPOA.integrated)
  222. # %%
  223. Esr1KOM<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/Esr1KOM.rds")
  224. new.ident <- c("eMix1","eVgat1","eVglu1","eVgat2","eVgat3","eVgat4","eVglu2","eVglu3","eVgat5","eVgat6","eVgat7","eVgat8","eVgat9","eMix2","eVgat10","eVglu4","eVgat11","eVglu5","eVgat12","eVglu6","eAmbiguous")
  225. names(x = new.ident) <- levels(x =Esr1KOM)
  226. Esr1KOM<- RenameIdents(object =Esr1KOM, new.ident)
  227. for (i in 1:length(new.ident)){
  228. assign(paste(new.ident[i],"_barcode",sep=""),colnames(Esr1KOM@assays$RNA@data[,which(Idents(object=Esr1KOM) %in% new.ident[i])]))}
  229. [email hidden]$celltype<-Idents(Esr1KOM)
  230. #Celltype may change
  231. Celltype<-c("eVgat1","eVgat2","eVgat3","eVgat4","eVgat5","eVgat6","eVgat7","eVgat8","eVgat9","eVgat10","eVgat11","eVgat12","eVglu1","eVglu2","eVglu3","eVglu4","eVglu5","eVglu6","eMix1","eMix2")
  232. Esr1KOM<-subset(Esr1KOM,cells=rownames([email hidden])[[email hidden]$celltype %in% Celltype])
  233. [email hidden]$celltype<-factor([email hidden]$celltype,levels=Celltype)
  234. Idents(Esr1KOM)<-factor(Idents(Esr1KOM),levels=Celltype)
  235. # %%
  236. celltype<-c(eVglu1_barcode,eVglu2_barcode,eVglu3_barcode,eVglu4_barcode,eVglu5_barcode,eVglu6_barcode)
  237. # %% [markdown]
  238. # # correlation KO and scRNAseq
  239. # %%
  240. #for extFig7, remove Vgat20
  241. MPOA_type<-c("Vgat6","Vgat2","Vgat16","Vgat4","Vgat10","Vgat13","Vgat8","Vgat17","Vgat1","Vgat3","Vgat14","Vgat5","Vgat7","Vgat11","Vgat9","Vgat19","Vgat15","Vgat18","Vgat12")
  242. Esr1KOM_type<-rev(c("eVgat7","eVgat3","eVgat4","eVgat8","eVgat9","eVgat10","eVgat2","eVgat1","eVgat5","eVgat6"))
  243. # %%
  244. corr<- data.frame(matrix(NA, ncol=length(MPOA_type),nrow=length(Esr1KOM_type)))
  245. rownames(corr)<-factor(Esr1KOM_type,levels=Esr1KOM_type)
  246. colnames(corr)<-factor(MPOA_type,levels=MPOA_type)
  247. # %%
  248. p_value<- data.frame(matrix(NA, ncol=length(MPOA_type),nrow=length(Esr1KOM_type)))
  249. rownames(p_value)<-factor(Esr1KOM_type,levels=Esr1KOM_type)
  250. colnames(p_value)<-factor(MPOA_type,levels=MPOA_type)
  251. # %%
  252. genes<-intersect(rownames(Esr1KOM@ reductions$ pca@ feature.loadings),rownames(MPOA.integrated@assays$RNA@data))
  253. MPOA_exp<-MPOA.integrated@assays$RNA@data[genes,]
  254. Esr1KOM_exp<- Esr1KOM@assays$RNA@data[genes,]
  255. # %%
  256. length(genes)
  257. # %%
  258. MPOA_exp<-t(scale(t(as.matrix(MPOA_exp))))
  259. Esr1KOM_exp<-t(scale(t(as.matrix(Esr1KOM_exp))))
  260. # %%
  261. for (i in 1:length(MPOA_type)){
  262. for (j in 1:length(Esr1KOM_type)){
  263. test1<-Esr1KOM_exp[,eval(parse(text = paste(Esr1KOM_type[j],"_barcode",sep="")))]
  264. rownames(test1) <- c()
  265. test1<-rowMeans(test1)
  266. include1<-is.na(test1)
  267. test2<-MPOA_exp[,eval(parse(text = paste(MPOA_type[i],"_barcode",sep="")))]
  268. rownames(test2) <- c()
  269. test2<-rowMeans(test2)
  270. include2<-is.na(test2)
  271. include<-(include1+include2)==0
  272. test1<-test1[include]
  273. test2<-test2[include]
  274. corr[j,i]<-cor(test1,test2)
  275. }}
  276. # %%
  277. for (i in 1:length(MPOA_type)){
  278. for (j in 1:length(Esr1KOM_type)){
  279. test1<-Esr1KOM_exp[,eval(parse(text = paste(Esr1KOM_type[j],"_barcode",sep="")))]
  280. rownames(test1) <- c()
  281. test1<-rowMeans(test1)
  282. include1<-is.na(test1)
  283. test2<-MPOA_exp[,eval(parse(text = paste(MPOA_type[i],"_barcode",sep="")))]
  284. rownames(test2) <- c()
  285. test2<-rowMeans(test2)
  286. include2<-is.na(test2)
  287. include<-(include1+include2)==0
  288. test1<-test1[include]
  289. test2<-test2[include]
  290. p_value[j,i]<-cor.test(test1,test2)[[3]]}}
  291. # %%
  292. library("reshape2")
  293. # %%
  294. test.m <- melt(as.matrix(corr))
  295. # %%
  296. library(scales)
  297. # %%
  298. test.p <- melt(as.matrix(p_value))
  299. # %%
  300. for(i in 1:dim(test.m)[1]){
  301. if (test.p$value[i]>0.05){
  302. test.m$value[i]<-0
  303. }else{
  304. test.m$value[i]<-test.m$value[i]
  305. }
  306. }
  307. # %%
  308. p <- ggplot(test.m, aes(Var2, Var1)) + geom_tile(aes(fill =value),
  309. colour = "white")+ scale_fill_continuous(limits=c(0.3,0.8), breaks=seq(0.0,0.8,by=0.2),low = "white",high = "darkred", oob=squish)
  310. #scale_x_discrete(breaks=c(0,5994,7712,9820,11428,11674,11836,11878))
  311. pp<-p+ylab("Esr1KOM")+xlab("scRNAseq")+theme(axis.text.y=element_text(size=10,colour = "black"),axis.text.x=element_text(size=10,,angle = 50, hjust =1,colour = "black"),axis.title=element_text(size=20,face="bold"),plot.title = element_text(size=16),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  312. panel.background = element_blank(), axis.line = element_line(colour = "black", size = 0.1),axis.ticks.y = element_blank())+ggtitle("correlation between Esr1KOM and scRNAseq")
  313. print(pp)
  314. # %%
  315. p <- ggplot(test.m, aes(Var2, Var1)) + geom_tile(aes(fill =value),
  316. colour = "white")+ scale_fill_continuous(limits=c(0.3,0.8), breaks=seq(0.0,0.8,by=0.2),low = "white",high = "darkred", oob=squish)
  317. #scale_x_discrete(breaks=c(0,5994,7712,9820,11428,11674,11836,11878))
  318. pp<-p+ylab("Esr1KOM")+xlab("scRNAseq")+theme(axis.text.y=element_text(size=15,colour = "black",face="bold"),axis.text.x=element_text(size=14,,angle = 50, hjust =1,colour = "black",face="bold"),axis.title=element_text(size=20,face="bold"),plot.title = element_text(size=16),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  319. panel.background = element_blank(), axis.line = element_line(colour = "black", size = 1),axis.ticks.length=unit(.1, "cm"),axis.ticks = element_line(size = 1), plot.margin = margin(10, 10, 10, 10))
  320. ggsave(file="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/correlation_vgat.pdf",height=5, width=10 , paper = "letter")
  321. # %%
  322. p <- ggplot(test.m, aes(Var2, Var1)) + geom_tile(aes(fill =value),
  323. colour = "white")+ scale_fill_continuous(limits=c(0.3,0.8), breaks=seq(0.0,0.8,by=0.2),low = "white",high = "darkred", oob=squish)
  324. #scale_x_discrete(breaks=c(0,5994,7712,9820,11428,11674,11836,11878))
  325. pp<-p+ylab("Esr1KOM")+xlab("scRNAseq")+theme(axis.text.y=element_text(size=10,colour = "black"),axis.text.x=element_text(size=12,,angle = 50, hjust =1,colour = "black"),axis.title=element_text(size=20,face="bold"),plot.title = element_text(size=16),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  326. panel.background = element_blank(), axis.line = element_line(colour = "black", size = 0.1),axis.ticks.y = element_blank())+ggtitle("correlation between Esr1KOM and scRNAseq")
  327. ggsave(file="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/correlation_vglu.pdf",height=2.2, width=10 , paper = "letter")
  328. # %% [markdown]
  329. # # reference based projection
  330. # %%
  331. #for S-Fig, remove Vgat20 as no correspondence with Vgat20 in correlation analysis
  332. MPOA_type<-c("Vgat6","Vgat2","Vgat16","Vgat4","Vgat10","Vgat13","Vgat8","Vgat17","Vgat1","Vgat3","Vgat14","Vgat5","Vgat7","Vgat11","Vgat9","Vgat19","Vgat15","Vgat18","Vgat12")
  333. Esr1KOM_type<-rev(c("eVgat7","eVgat3","eVgat4","eVgat8","eVgat9","eVgat10","eVgat2","eVgat1","eVgat5","eVgat6"))
  334. # %%
  335. MPOA.integrated<-subset(MPOA.integrated,cells=rownames([email hidden])[[email hidden]$celltype %in% MPOA_type])
  336. Esr1KOM<-subset(Esr1KOM,cells=rownames([email hidden])[[email hidden]$celltype %in% Esr1KOM_type])
  337. # %%
  338. POA.list<-objects() #maybe better using POA.list<-vector(mode = "list")
  339. POA.list$MPOA.integrated<-MPOA.integrated
  340. POA.list$Esr1KOM<-Esr1KOM
  341. reference.list <- POA.list[c("MPOA.integrated","Esr1KOM")]
  342. # %%
  343. MPOA.integrated
  344. # %%
  345. help(FindTransferAnchors)
  346. # %%
  347. genes<-intersect(rownames(Esr1KOM@ reductions$ pca@ feature.loadings),rownames(MPOA.integrated@assays$RNA@data))
  348. # %%
  349. POA.anchors <- FindTransferAnchors(reference = MPOA.integrated, query = Esr1KOM, reduction = "cca", dims = 1:10,features=genes)
  350. # %%
  351. predictions <- TransferData(anchorset = POA.anchors, refdata = MPOA.integrated$celltype, weight.reduction="cca", dims = 1:10)
  352. Esr1KOM <- AddMetaData(Esr1KOM, metadata = predictions)
  353. # %%
  354. [email hidden]$celltype<-factor([email hidden]$celltype,levels=Esr1KOM_type)
  355. [email hidden]$predicted.id<-factor([email hidden]$predicted.id,levels=MPOA_type)
  356. # %%
  357. meta <- [email hidden] %>% select(celltype, predicted.id) %>% group_by(celltype, .drop = FALSE) %>% count(celltype, predicted.id)
  358. adjusted<-numeric()
  359. for(i in 1:dim(meta)[1]){
  360. adjusted[i]<-100*meta$n[i]/sum(subset(meta,predicted.id==meta$predicted.id[i])$n)
  361. }
  362. meta$adjusted<-adjusted
  363. # %%
  364. meta<-meta[meta$predicted.id %in% c("Vgat2","Vgat4","Vgat16"),]
  365. # %%
  366. meta$celltype<-factor(meta$celltype,levels=Esr1KOM_type)
  367. meta$predicted.id<-factor(meta$predicted.id,levels=c("Vgat2","Vgat4","Vgat16"))
  368. # %%
  369. unique(meta$celltype)
  370. # %%
  371. colors=c(c("eVgat7"="lightblue","eVgat3"="darkblue","eVgat4"="indianred","eVgat8"="lightskyblue","eVgat9"="skyblue","eVgat10"="lightgray","eVgat2"="darkgray","eVgat1"="lightsalmon","eVgat5"="darkgray","eVgat6"="dimgray"))
  372. # %%
  373. #% of scRNAseq Vgat Esr1 cell types predicted in KO data
  374. ggplot(meta,aes(x=predicted.id,y=adjusted,fill=celltype,group=celltype))+geom_bar(position="dodge",stat = "identity")+ylab("% of predicted cells")+
  375. scale_fill_manual(values=colors)+
  376. theme(axis.title.y=element_text(size=20,color="black"),axis.title.x=element_blank(),axis.text.y=element_text(size=15,color="black"),axis.text.x=element_text(size=15,angle = 50, hjust = 0.5,vjust=0.5,color="black",face="bold"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  377. panel.background = element_blank(), axis.line = element_line(colour = "black",size=0.3),axis.ticks.length=unit(.1, "cm"),axis.ticks = element_line(size =0.3), plot.margin = unit(c(0.6, 0,0, 0), "cm"))
  378. ggsave(file="/media/garret/New Volume/paper submission/MPOA_Science/Revision_Figures/raw/Esr1KOM_number_of_predicted_celltype_rev#3_com#4.pdf",height=3, width=10 , paper = "letter")
  379. # %%
  380. help(FindTransferAnchors)
  381. # %% [markdown]
  382. # # DEG analysis
  383. # %%
  384. MPOA.integrated<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/MPOA.integrated.rds")
  385. P23M<-readRDS(file ="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/P23M.rds")
  386. P35M<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/P35M.rds")
  387. AM<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/AM.rds")
  388. Cast<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/Cast.rds")
  389. P23F<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/P23F.rds")
  390. P35F<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/P35F.rds")
  391. AF<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/AF.rds")
  392. OVX<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/OVX.rds")
  393. new.ident <- c("Mix1","Vgat1","Vglu1","Vgat2","Vgat3","Vgat4","Mix2","Vglu2","Vgat5","Vglu3","Vglu4","Vgat6","Vgat7","Vgat8","Vglu5","Vglu6","Vgat9","Vgat10","Vgat11","Vglu7","Vgat12","Vgat13","Vgat14","Vgat15","Vglu8","Vglu9","Vgat16","Vglu10","Vgat17","Vgat18","Vgat19","Vglu11","Vglu12","Ambiguous1","Mix3","Vgat20")
  394. names(x = new.ident) <- levels(x =MPOA.integrated)
  395. MPOA.integrated<- RenameIdents(object =MPOA.integrated, new.ident)
  396. for (i in 1:length(new.ident)){
  397. assign(paste(new.ident[i],"_barcode",sep=""),colnames(MPOA.integrated@assays$RNA@data[,which(Idents(object=MPOA.integrated) %in% new.ident[i])]))# this gives all barcodes in cluster
  398. assign(paste(new.ident[i],"_barcode_P23M",sep=""),intersect(colnames(P23M@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  399. assign(paste(new.ident[i],"_barcode_P35M",sep=""),intersect(colnames(P35M@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  400. assign(paste(new.ident[i],"_barcode_AM",sep=""),intersect(colnames(AM@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  401. assign(paste(new.ident[i],"_barcode_Cast",sep=""),intersect(colnames(Cast@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  402. assign(paste(new.ident[i],"_barcode_P23F",sep=""),intersect(colnames(P23F@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  403. assign(paste(new.ident[i],"_barcode_P35F",sep=""),intersect(colnames(P35F@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  404. assign(paste(new.ident[i],"_barcode_AF",sep=""),intersect(colnames(AF@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  405. assign(paste(new.ident[i],"_barcode_OVX",sep=""),intersect(colnames(OVX@assays$RNA@data),eval(parse(text = paste(new.ident[i],"_barcode",sep="")))))
  406. }
  407. Esr1KOM<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/Esr1KOM.rds")
  408. new.ident <- c("eMix1","eVgat1","eVglu1","eVgat2","eVgat3","eVgat4","eVglu2","eVglu3","eVgat5","eVgat6","eVgat7","eVgat8","eVgat9","eMix2","eVgat10","eVglu4","eVgat11","eVglu5","eVgat12","eVglu6","eAmbiguous")
  409. names(x = new.ident) <- levels(x =Esr1KOM)
  410. Esr1KOM<- RenameIdents(object =Esr1KOM, new.ident)
  411. for (i in 1:length(new.ident)){
  412. assign(paste(new.ident[i],"_barcode",sep=""),colnames(Esr1KOM@assays$RNA@data[,which(Idents(object=Esr1KOM) %in% new.ident[i])]))}
  413. # %%
  414. DefaultAssay(Esr1KOM) <- "RNA"
  415. #celltype<-c(eVgat3_barcode,eVgat4_barcode,eVgat7_barcode) #not used
  416. celltype<-c(eVgat3_barcode,eVgat4_barcode)
  417. KO<-subset(Esr1KOM,cells=celltype)
  418. # %%
  419. DefaultAssay(MPOA.integrated) <- "RNA"
  420. temp<-c(Vgat2_barcode,Vgat4_barcode,Vgat16_barcode)
  421. celltype<-intersect(temp,rownames(subset([email hidden],stim=="AM")))
  422. Intact<-subset(MPOA.integrated,cells=celltype)
  423. # %%
  424. #vgat low
  425. DefaultAssay(MPOA.integrated) <- "RNA"
  426. temp<-c(Vgat14_barcode,Vgat17_barcode,Vgat20_barcode)
  427. celltype<-intersect(temp,rownames(subset([email hidden],stim=="AM")))
  428. Intact<-subset(MPOA.integrated,cells=celltype)
  429. # %%
  430. #Vgatlow
  431. DefaultAssay(Esr1KOM) <- "RNA"
  432. #celltype<-c(eVgat3_barcode,eVgat4_barcode,eVgat7_barcode)
  433. celltype<-c(eVgat9_barcode)
  434. KO<-subset(Esr1KOM,cells=celltype)
  435. # %%
  436. Merge<-merge(x = KO, y = Intact, merge.data = TRUE)
  437. DefaultAssay(Merge) <- "RNA"
  438. # %%
  439. [email hidden]
  440. # %%
  441. celltype.stim<-vector()
  442. for (i in 1:dim([email hidden])[1]){
  443. if([email hidden]$stim[i]=="AM"){celltype.stim[i]<-"AM"}
  444. else if([email hidden]$stim[i]=="Esr1KOM"){celltype.stim[i]<-"Esr1KOM"}
  445. }
  446. [email hidden]$celltype.stim<-celltype.stim
  447. # %%
  448. Merge[["celltype"]] <- Idents(object = Merge)
  449. Idents(Merge = Merge) <- [email hidden]$celltype.stim
  450. # %%
  451. one.markers <- FindMarkers(Merge, ident.1 = "AM", ident.2 ="Esr1KOM", grouping.var = "stim",print.bar = FALSE,logfc.threshold = 0,min.pct = 0,min.cells.gene = 3, min.cells.group = 1)
  452. one.markers$p_val_adjust<-one.markers$p_val*(dim(one.markers)[1]:1)
  453. sort_marker<-one.markers[order(-one.markers["avg_logFC"]),]
  454. # %%
  455. #201105 Vgat2 4 16 all
  456. one.markers <- FindMarkers(Merge, ident.1 = "AM", ident.2 ="Esr1KOM", grouping.var = "stim",print.bar = FALSE,logfc.threshold = 0,min.pct = 0,min.cells.gene = 3, min.cells.group = 1)
  457. one.markers$p_val_adjust<-one.markers$p_val*(dim(one.markers)[1]:1)
  458. sort_marker<-one.markers[order(-one.markers["avg_logFC"]),]
  459. write.xlsx2(subset(sort_marker),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/All_gene.xlsx"))
  460. # %%
  461. #201105 Vgat2 4 16
  462. one.markers <- FindMarkers(Merge, ident.1 = "AM", ident.2 ="Esr1KOM", grouping.var = "stim",print.bar = FALSE,logfc.threshold = 0,min.pct = 0,min.cells.gene = 3, min.cells.group = 1)
  463. one.markers$p_val_adjust<-one.markers$p_val*(dim(one.markers)[1]:1)
  464. sort_marker<-one.markers[order(-one.markers["avg_logFC"]),]
  465. write.xlsx2(subset(sort_marker,avg_logFC>0 & p_val_adjust<0.05 & pct.1>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/gene_adjust_0.1.xlsx"))
  466. write.xlsx2(subset(sort_marker,avg_logFC<0 & p_val_adjust<0.05 & pct.2>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/gene_adjust_0.1n.xlsx"))
  467. write.xlsx2(subset(sort_marker,avg_logFC>0.1 & p_val_adjust<0.05 & pct.1>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/gene_adjust_0.1_0.1.xlsx"))
  468. # %%
  469. #201106 Vgat2 4 16 vs 3 4
  470. one.markers <- FindMarkers(Merge, ident.1 = "AM", ident.2 ="Esr1KOM", grouping.var = "stim",print.bar = FALSE,logfc.threshold = 0,min.pct = 0,min.cells.gene = 3, min.cells.group = 1)
  471. one.markers$p_val_adjust<-one.markers$p_val*(dim(one.markers)[1]:1)
  472. sort_marker<-one.markers[order(-one.markers["avg_logFC"]),]
  473. write.xlsx2(subset(sort_marker,avg_logFC>0 & p_val_adjust<0.05 & pct.1>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/gene_adjust_0.1_246vs34.xlsx"))
  474. write.xlsx2(subset(sort_marker,avg_logFC<0 & p_val_adjust<0.05 & pct.2>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/gene_adjust_0.1n_246vs34.xlsx"))
  475. write.xlsx2(subset(sort_marker,avg_logFC>0.1 & p_val_adjust<0.05 & pct.1>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/gene_adjust_0.1_0.1_246vs34.xlsx"))
  476. # %%
  477. one.markers <- FindMarkers(Merge, ident.1 = "Esr1KOM", ident.2 ="AM", grouping.var = "stim",print.bar = FALSE,logfc.threshold = 0,min.pct = 0,min.cells.gene = 3, min.cells.group = 1)
  478. one.markers$p_val_adjust<-one.markers$p_val*(dim(one.markers)[1]:1)
  479. sort_marker<-one.markers[order(-one.markers["avg_logFC"]),]
  480. write.xlsx2(subset(sort_marker,avg_logFC>0.1 & p_val_adjust<0.05 & pct.1>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/gene_adjust_0.1_0.1_KO.xlsx"))
  481. # %%
  482. one.markers <- FindMarkers(Merge, ident.1 = "AM", ident.2 ="Esr1KOM", grouping.var = "stim",print.bar = FALSE,logfc.threshold = 0,min.pct = 0,min.cells.gene = 3, min.cells.group = 1)
  483. one.markers$p_val_adjust<-one.markers$p_val*(dim(one.markers)[1]:1)
  484. sort_marker<-one.markers[order(-one.markers["avg_logFC"]),]
  485. write.xlsx2(subset(sort_marker,avg_logFC>0 & p_val_adjust<0.05 & pct.1>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/low/gene_adjust_0.1_246vs34.xlsx"))
  486. write.xlsx2(subset(sort_marker,avg_logFC<0 & p_val_adjust<0.05 & pct.2>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/low/gene_adjust_0.1n_246vs34.xlsx"))
  487. write.xlsx2(subset(sort_marker,avg_logFC>0.1 & p_val_adjust<0.05 & pct.1>0.1),file=("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/low/gene_adjust_0.1_0.1_246vs34.xlsx"))
  488. # %% [markdown]
  489. # # heatmap
  490. # %%
  491. MPOA.integrated<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/MPOA.integrated.rds")
  492. new.ident <- c("Mix1","Vgat1","Vglu1","Vgat2","Vgat3","Vgat4","Mix2","Vglu2","Vgat5","Vglu3","Vglu4","Vgat6","Vgat7","Vgat8","Vglu5","Vglu6","Vgat9","Vgat10","Vgat11","Vglu7","Vgat12","Vgat13","Vgat14","Vgat15","Vglu8","Vglu9","Vgat16","Vglu10","Vgat17","Vgat18","Vgat19","Vglu11","Vglu12","Ambiguous1","Mix3","Vgat20")
  493. names(x = new.ident) <- levels(x =MPOA.integrated)
  494. MPOA.integrated<- RenameIdents(object =MPOA.integrated, new.ident)
  495. for (i in 1:length(new.ident)){
  496. assign(paste(new.ident[i],"_barcode",sep=""),colnames(MPOA.integrated@assays$RNA@data[,which(Idents(object=MPOA.integrated) %in% new.ident[i])]))# this gives all barcodes in cluster
  497. }
  498. #temp<-c(Vgat2_barcode,Vgat4_barcode,Vgat16_barcode) #Vgat Esr1
  499. temp<-c(Vgat14_barcode,Vgat17_barcode,Vgat20_barcode) # hormone low
  500. celltype<-intersect(temp,rownames(subset([email hidden],stim=="AM" | stim=="P35M"| stim=="P23M"|stim=="Cast")))
  501. MPOA.integrated<-subset(MPOA.integrated,cells=celltype)
  502. Esr1KOM<-readRDS(file = "/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/Esr1KOM.rds")
  503. new.ident <- c("eMix1","eVgat1","eVglu1","eVgat2","eVgat3","eVgat4","eVglu2","eVglu3","eVgat5","eVgat6","eVgat7","eVgat8","eVgat9","eMix2","eVgat10","eVglu4","eVgat11","eVglu5","eVgat12","eVglu6","eAmbiguous")
  504. names(x = new.ident) <- levels(x =Esr1KOM)
  505. Esr1KOM<- RenameIdents(object =Esr1KOM, new.ident)
  506. for (i in 1:length(new.ident)){
  507. assign(paste(new.ident[i],"_barcode",sep=""),colnames(Esr1KOM@assays$RNA@data[,which(Idents(object=Esr1KOM) %in% new.ident[i])]))}
  508. #201111 3 4
  509. #celltype<-c(eVgat3_barcode,eVgat4_barcode)
  510. celltype<-c(eVgat9_barcode)
  511. KO<-subset(Esr1KOM,cells=celltype)
  512. MPOA.integrated<-merge(x=MPOA.integrated,y=KO)
  513. # %%
  514. Cell_type<-c("Esr1KOM","Cast","AM")
  515. #Cell_type<-c("Esr1KOM","P23M","Cast","P35M","AM")
  516. Cell_type<-factor(Cell_type,levels=Cell_type)
  517. # %%
  518. temp1<-read.xlsx("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/DEG/Esr1_3/AM_over_Cast/gene_adjust_Vgat_0.1.xlsx",sheetIndex=1)
  519. temp3<-read.xlsx("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_integrated/log/Neurons/DEG/Esr1_3/P35M_over_Cast/gene_adjust_Vgat_0.1.xlsx",sheetIndex=1)
  520. temp2<-read.xlsx("/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/gene_adjust_0.1_0.1_246vs34.xlsx",sheetIndex=1)
  521. temp1<-temp1[,1]
  522. temp2<-temp2[,1]
  523. temp3<-temp3[,1]
  524. #both<-intersect(temp1,intersect(temp2,temp3))
  525. both<-intersect(temp1,temp2)
  526. # %%
  527. gene_list<-both
  528. #gene_list<-temp2
  529. # %%
  530. Cell_number<- data.frame(Date=as.Date(character()),File=character(),User=character(),stringsAsFactors=FALSE)
  531. for (i in 1:length(gene_list)){
  532. L<-length(Cell_type)
  533. Cell_number_t<- data.frame("cluster" =Cell_type, "gene"=(rep(gene_list[i],L))) # do not use c if the gene is factorizsed
  534. #used normalized uncorrected data
  535. for (p in 1:length(Cell_type)){
  536. #Cell_number_t$pct[p]<-100*sum(MPOA.integrated@assays$RNA@data[gene_list[i],eval(parse(text=paste(Cell_type[p],"_barcode",sep="")))]>0)/length(eval(parse(text=paste(Cell_type[p],"_barcode",sep=""))))
  537. Cell_number_t$zscore[p]<-(mean(MPOA.integrated@assays$RNA@data[gene_list[i],rownames(subset([email hidden],stim==Cell_type[p]))])-mean(MPOA.integrated@assays$RNA@data[gene_list[i],]))/sd(MPOA.integrated@assays$RNA@data[gene_list[i],])
  538. Cell_number_t$FC[p]<-mean(MPOA.integrated@assays$RNA@data[gene_list[i],rownames(subset([email hidden],stim==Cell_type[p]))])-mean(MPOA.integrated@assays$RNA@data[gene_list[i],rownames(subset([email hidden],stim!=Cell_type[p]))])
  539. Cell_number_t$percent[p]<- 100*sum(MPOA.integrated@assays$RNA@data[gene_list[i],rownames(subset([email hidden],stim==Cell_type[p]))]>0)/length(MPOA.integrated@assays$RNA@data[gene_list[i],rownames(subset([email hidden],stim==Cell_type[p]))])
  540. }
  541. Cell_number<-rbind(Cell_number_t,Cell_number)}
  542. as.factor(Cell_number$cluster)
  543. # %%
  544. Cell_number$gene
  545. # %%
  546. Cell_number$gene<-factor(Cell_number$gene,levels=gene_list)
  547. # %%
  548. temp_gene<-Cell_number$gene
  549. # %%
  550. color<-numeric()
  551. size<-numeric()
  552. for(i in 1:length(temp_gene)){
  553. if(temp_gene[i]=="Gal"| temp_gene[i]=="Guk1" | temp_gene[i]=="Pgr" | temp_gene[i]=="Prkce" | temp_gene[i]=="Greb1" | temp_gene[i]=="Sytl4"| temp_gene[i]=="Cntnap2" |temp_gene[i]=="Sv2c" ){
  554. color[i]<-"black"
  555. size[i]<-20
  556. }else{
  557. color[i]<-"white"
  558. size[i]<-0
  559. }
  560. }
  561. # %%
  562. genes<-c("Slc32a1","Esr1","Ar","Npy2r","Pgr15l","Sytl4","Lamp5","Pgr","Nrip1","Acvr1c","Apoc3","Greb1","Tead1","Napb","Apoe","Pgr","Gal","Apoc3","mt-Nd4",'Cdh4','Acvr1c',"Syt6","Prkce")
  563. # %%
  564. both
  565. # %%
  566. high_C<-"#FCFADE"
  567. middle_C<-"#489588"
  568. low_C<-"#262E68"
  569. low<- -0.0
  570. high<-1
  571. p<-ggplot(data = Cell_number, mapping = aes(x = cluster, y = gene,fill =zscore,label=gene)) + scale_y_discrete(breaks=c(genes))+
  572. geom_tile() + scale_fill_gradient2(limits=c(low, high), breaks=seq(low,high,by=0.1),low = low_C,mid=middle_C,high =high_C, midpoint = 0.5,oob=squish)
  573. #scale_x_discrete(breaks=c(0,5994,7712,9820,11428,11674,11836,11878))
  574. pp<-p+ylab("group")+xlab("genes")+theme(axis.text.x=element_text(size=20,colour = "black",angle = 40, vjust =0.6,face="bold"),axis.text.y=element_text(size=10, colour = "black",face="bold"),axis.title=element_blank(),plot.title = element_text(size=16),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  575. panel.background = element_blank(), axis.line = element_blank(),axis.ticks.x = element_blank())+ scale_x_discrete(labels=c("Esr1KOM" = "KOM", "Cast" = "Cast",
  576. "AM" = "AM"))
  577. print(pp)
  578. ggsave(file=paste(text="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/heatmap_male_common_3groups_",low,"_",high,"_mini_color_adjusted.pdf",sep=""),width=2.5,height=5,paper="letter")
  579. # %%
  580. size
  581. color
  582. # %%
  583. low<- -0.0
  584. high<-1
  585. p<-ggplot(Cell_number, aes(cluster, gene))+
  586. geom_tile(aes(fill =zscore))+ scale_fill_continuous(limits=c(low, high), breaks=seq(low,high,by=0.4),low = "black",high = "yellow", oob=squish)
  587. #scale_x_discrete(breaks=c(0,5994,7712,9820,11428,11674,11836,11878))
  588. pp<-p+ylab("group")+xlab("genes")+theme(axis.text.x=element_text(size=15,colour = "black",angle = 55, vjust =0.6,face="bold"),axis.text.y=element_text(size=0,colour = "black"),axis.title=element_blank(),plot.title = element_text(size=16),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  589. panel.background = element_blank(), axis.line = element_blank(),axis.ticks.y = element_blank(),axis.ticks.x = element_blank(), plot.margin = margin(10, 28, 10, 10))
  590. print(pp)
  591. ggsave(file=paste(text="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/heatmap_male_common_5groups_",low,"_",high,"_mini.pdf",sep=""),width=2.5,height=6)
  592. # %%
  593. high_C<-"#FCFADE"
  594. middle_C<-"#489588"
  595. low_C<-"#262E68"
  596. low<- -0.0
  597. high<-1
  598. p<-ggplot(data = Cell_number, mapping = aes(x = cluster, y = gene,fill =zscore,label=gene)) + scale_y_discrete(breaks=c(genes))+
  599. geom_tile() + scale_fill_gradient2(limits=c(low, high), breaks=seq(low,high,by=0.1),low = low_C,mid=middle_C,high =high_C, midpoint = 0.5,oob=squish)
  600. #scale_x_discrete(breaks=c(0,5994,7712,9820,11428,11674,11836,11878))
  601. pp<-p+ylab("group")+xlab("genes")+theme(axis.text.x=element_text(size=20,colour = "black",angle = 40, vjust =0.6,face="bold"),axis.text.y=element_text(size=10, colour = "black",face="bold"),axis.title=element_blank(),plot.title = element_text(size=16),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  602. panel.background = element_blank(), axis.line = element_blank(),axis.ticks.x = element_blank())+ scale_x_discrete(labels=c("Esr1KOM" = "KOM", "Cast" = "Cast",
  603. "AM" = "AM"))
  604. print(pp)
  605. ggsave(file=paste(text="/media/garret/New Volume/scRNAseq_data/Koichi/V3_analysis/MPOA/MPOA_Esr1KOM/Neuron/DEG/heatmap_male_common_3groups_hormonelow_",low,"_",high,"_mini.pdf",sep=""),width=2.5,height=5,paper="letter")

Integrating Esr1KOM and MPOA scRNAseq Fig4.ipynb at commit b46c819, under MIT · at the source

Overview

Authors: Koichi Hashikawa1, Yoshiko Hashikawa1, Brandy Briones1, Kentaro K Ishii1, Yuejia Liu1, Mark Rossi1, Marcus L Basiri1,2, Jane Y Chen3, Omar Ahmad1, Rishi Mukundan1, Nathan Johnston1, Rhiana Simon1, James Soetedjo1, Jason Siputro1, Jenna McHenry4, Richard D Palmiter3,5, David Rubinow6, Larry S Zweifel7,8, Garret D Stuber1
  1. Center for the Neurobiology of Addiction, Pain, and Emotion, Department of Anesthesiology and Pain Medicine, Department of Pharmacology, University of Washington Seattle United States
  2. University of North Carolina Chapel Hill United States
  3. Department of Biochemistry, University of Washington Seattle United States
  4. Department of Psychology & Neuroscience, Duke University Durham United States
  5. Howard Hughes Medical Institute, University of Washington Seattle United States
  6. Department of Psychiatry, University of North Carolina at Chapel Hill Chapel Hill United States
  7. Department of Psychiatry and Behavioral Sciences, University of Washington Seattle United States
  8. Department of Pharmacology, University of Washington Seattle United States
Institutions: University of Washington (United States); University of North Carolina at Chapel Hill (United States); Duke University (United States)
Journal: eLife, volume 14, article RP106347
Dates: published online 19 June 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.7554/elife.106347 · PMID 42318880 · PMCID PMC13282117 · OpenAlex W4409995543
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: genetics / omics (modality), mouse (organism), developmental (subfield)
Methods: Statistics, Smoothing, state filtering, decompositions, Machine learning, Evoked potentials, Connectivity, fMRI & imaging
Keywords: development, sex differences, steroid hormones, Mouse
MeSH: Estrogen Receptor alpha*, Preoptic Area*, Sexual Behavior, Animal*, Signal Transduction*, Animals, Female, GABAergic Neurons, Gene Expression Regulation, Developmental, Male, Mice, Transcription, Genetic (* major topic)
Journal subjects: Neuroscience
Topic: Circadian rhythm and melatonin (Endocrine and Autonomic Systems, Neuroscience), according to OpenAlex
Funding: National Institute of Health (NIH) (DA038168, DA032750, DA054317, DK121883, P30DA048736); Foundation of Hope; Brain and Behavior Research Foundation
Citations: cited by 1 paper (Europe PMC); 77 references in the paper
Research resources: C57BL/6 J males RRID:IMSR_JAX:000664, VgatFlp RRID:IMSR_JAX:029591, Vglut2Flp RRID:IMSR_JAX:030212, Esr1lox/lox RRID:IMSR_JAX:032173, Enrichr RRID:SCR_001575, R (v3.6) RRID:SCR_001905, ImageJ (Fiji) RRID:SCR_002285, GraphPad Prism v9.0.2 RRID:SCR_002798, CateGOrizer RRID:SCR_005737, The Gene Ontology (GO) Project RRID:SCR_006447, Seurat v3 RRID:SCR_016341, Cell Ranger RRID:SCR_017344, Monocle (V3) RRID:SCR_018685

Abstract

Mating and other behaviors emerge during adolescence through the coordinated actions of steroid hormone signaling throughout the nervous system and periphery. In this study, we investigated the transcriptional dynamics of the medial preoptic area (MPOA), a critical region for reproductive behavior, using single-cell RNA sequencing (scRNA-seq) and in situ hybridization techniques in male and female mice throughout adolescence development. Our findings reveal that estrogen receptor 1 (Esr1) plays a pivotal role in the transcriptional maturation of GABAergic neurons within the MPOA during adolescence. Deletion of the estrogen receptor gene, Esr1, in GABAergic neurons (Vgat+) disrupted the developmental progression of mating behaviors in both sexes, while its deletion in glutamatergic neurons (Vglut2+) had no observable effect. In males and females, these neurons displayed distinct transcriptional trajectories, with hormone-dependent gene expression patterns emerging throughout adolescence and regulated by Esr1. Esr1 deletion in MPOA GABAergic neurons, prior to adolescence, arrested adolescent transcriptional progression of these cells and uncovered sex-specific gene-regulatory networks associated with Esr1 signaling. Our results underscore the critical role of Esr1 in orchestrating sex-specific transcriptional dynamics during adolescence, revealing gene regulatory networks implicated in the development of hypothalamic-controlled reproductive behaviors.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repositories

Its files are read in the Code ↔ Paper reader above, with 9 matches between paragraphs and lines of code.

theislab/paga

License: BSD-3-Clause
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: d5688a38d9054c6fcea7302023afa0510cd3577a, 12 April 2019
Languages: Jupyter (20)
Size: 27 files, 20 scripts
Software Heritage: archived
Found in: the references
Holds: README, license file, 20 notebooks
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (15 files), Scanpy (15 files), Matplotlib (14 files), pandas (14 files), SciPy (7 files), seaborn (5 files), Monocle 3 (4 files), NetworkX (3 files), scikit-learn (3 files), tidyverse (2 files), anndata (1 file), igraph (1 file), pheatmap (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
22 files

stuberlab/Hashikawa-Hashikawa-eLife

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: b46c819e2f231da93b0ccce6f367fd33f865571b, 18 June 2026
Languages: Jupyter (29)
Size: 31 files, 29 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README, license file, 29 notebooks
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Seurat (13 files), tidyverse (13 files), ggplot2 (11 files), reshape2 (4 files), cowplot (2 files)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
14 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 33 scripts, each with its path and the digest of its content;
  • 9 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

Datasets cited

Data availability

The NCBI Gene Expression Omnibus accession number for the scRNAseq data reported in this paper for the reviewers is GEO: GSE172177. All the codes used to analyze scRNAseq, and HM-HCR FISH are available at a GithubGitHub repository affiliated with Stuber Laboratory group and this manuscript title (https://github.com/stuberlab/Hashikawa-Hashikawa-eLife) copy archived at Hashikawa, 2022.

The following dataset was generated:

HashikawaK 2025scRNAseq to understand hormonal control on pubertal transcription in the medial preoptic areaNCBI Gene Expression OmnibusGSE172177

Reproduced under the paper's license (CC BY), from the paper cited above.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, pages, dates, 19 authors, 4 keywords, 11 MeSH terms, 3 funders, 70 references, 13 RRIDs.

Cite

This paper

Hashikawa, K., Hashikawa, Y., Briones, B., Ishii, K. K., Liu, Y., Rossi, M., Basiri, M. L., Chen, J. Y., Ahmad, O., Mukundan, R., Johnston, N., Simon, R., Soetedjo, J., Siputro, J., McHenry, J., Palmiter, R. D., Rubinow, D., Zweifel, L. S., & Stuber, G. D. (2026). Esr1-dependent signaling and transcriptional maturation in the medial preoptic area of the hypothalamus shape the development of mating behavior during adolescence. eLife, 14, RP106347. https://doi.org/10.7554/elife.106347

BibTeX

@article{hashikawa2026esr1,
author = {Hashikawa, Koichi and Hashikawa, Yoshiko and Briones, Brandy and Ishii, Kentaro K and Liu, Yuejia and Rossi, Mark and Basiri, Marcus L and Chen, Jane Y and Ahmad, Omar and Mukundan, Rishi and Johnston, Nathan and Simon, Rhiana and Soetedjo, James and Siputro, Jason and McHenry, Jenna and Palmiter, Richard D and Rubinow, David and Zweifel, Larry S and Stuber, Garret D},
title = {{Esr1-dependent signaling and transcriptional maturation in the medial preoptic area of the hypothalamus shape the development of mating behavior during adolescence}},
journal = {eLife},
year = {2026},
month = jun,
volume = {14},
pages = {RP106347},
publisher = {eLife Sciences Publications, Ltd},
issn = {2050-084X},
doi = {10.7554/elife.106347},
url = {https://doi.org/10.7554/elife.106347},
pmid = {42318880},
pmcid = {PMC13282117}
}

RIS

TY - JOUR
AU - Hashikawa, Koichi
AU - Hashikawa, Yoshiko
AU - Briones, Brandy
AU - Ishii, Kentaro K
AU - Liu, Yuejia
AU - Rossi, Mark
AU - Basiri, Marcus L
AU - Chen, Jane Y
AU - Ahmad, Omar
AU - Mukundan, Rishi
AU - Johnston, Nathan
AU - Simon, Rhiana
AU - Soetedjo, James
AU - Siputro, Jason
AU - McHenry, Jenna
AU - Palmiter, Richard D
AU - Rubinow, David
AU - Zweifel, Larry S
AU - Stuber, Garret D
TI - Esr1-dependent signaling and transcriptional maturation in the medial preoptic area of the hypothalamus shape the development of mating behavior during adolescence
T2 - eLife
J2 - eLife
PY - 2026
DA - 2026/06/19
VL - 14
SP - RP106347
SN - 2050-084X
PB - eLife Sciences Publications, Ltd
DO - 10.7554/elife.106347
UR - https://doi.org/10.7554/elife.106347
LA - en
ER -

CSL-JSON

{
"id": "10.7554/elife.106347",
"type": "article-journal",
"title": "Esr1-dependent signaling and transcriptional maturation in the medial preoptic area of the hypothalamus shape the development of mating behavior during adolescence",
"container-title": "eLife",
"author": [
{
"family": "Hashikawa",
"given": "Koichi"
},
{
"family": "Hashikawa",
"given": "Yoshiko"
},
{
"family": "Briones",
"given": "Brandy"
},
{
"family": "Ishii",
"given": "Kentaro K"
},
{
"family": "Liu",
"given": "Yuejia"
},
{
"family": "Rossi",
"given": "Mark"
},
{
"family": "Basiri",
"given": "Marcus L"
},
{
"family": "Chen",
"given": "Jane Y"
},
{
"family": "Ahmad",
"given": "Omar"
},
{
"family": "Mukundan",
"given": "Rishi"
},
{
"family": "Johnston",
"given": "Nathan"
},
{
"family": "Simon",
"given": "Rhiana"
},
{
"family": "Soetedjo",
"given": "James"
},
{
"family": "Siputro",
"given": "Jason"
},
{
"family": "McHenry",
"given": "Jenna"
},
{
"family": "Palmiter",
"given": "Richard D"
},
{
"family": "Rubinow",
"given": "David"
},
{
"family": "Zweifel",
"given": "Larry S"
},
{
"family": "Stuber",
"given": "Garret D"
}
],
"container-title-short": "eLife",
"volume": "14",
"page": "RP106347",
"DOI": "10.7554/elife.106347",
"PMID": "42318880",
"PMCID": "PMC13282117",
"ISSN": "2050-084X",
"publisher": "eLife Sciences Publications, Ltd",
"URL": "https://doi.org/10.7554/elife.106347",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
19
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1016/j.xcrm.2026.102766 [code]
A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.
Journal: Cell reports. Medicine
In common: Monocle 3, anndata, igraph, 14 other tools, genetics / omics, 3 references
[2] doi:10.1038/s41586-026-10490-y [code]
Lineage and organ signals sequentially build organ intrinsic nervous systems.
Journal: Nature
In common: Monocle 3, anndata, Scanpy, 12 other tools, developmental, mouse, 3 references
[3] doi:10.1038/s41586-026-10629-x [code]
Whole-genome duplication shaped cell-type evolution in the vertebrate brain.
Journal: Nature
In common: anndata, igraph, Scanpy, 13 other tools, genetics / omics, mouse, 2 references
[4] doi:10.1038/s41467-026-75722-1 [code]
Single-nucleus analysis of the adult human olfactory epithelium uncovers shared neurogenesis programs with the brain.
Journal: Nature communications
In common: Monocle 3, anndata, Scanpy, 11 other tools, developmental, genetics / omics, 4 references
[5] doi:10.1186/s13059-026-04177-w [code]
Genomic sequence evolution underlying human neocortical interareal diversification.
Journal: Genome biology
In common: Monocle 3, anndata, igraph, 12 other tools, genetics / omics, mouse, 2 references
[6] doi:10.1038/s41467-026-76675-1 [code]
Long-read proteogenomic atlas of human neuronal differentiation reveals isoform diversity informing neurodevelopmental risk mechanisms.
Journal: Nature communications
In common: Monocle 3, anndata, igraph, 13 other tools, developmental, genetics / omics
[7] doi:10.1002/imt2.70163 [code]
Spatial multi-omics unveils sphingolipid metabolic reprogramming within the retinal pathological niche.
Journal: iMeta
In common: Monocle 3, anndata, igraph, 13 other tools, genetics / omics, mouse
[8] doi:10.1038/s41593-026-02293-1 [code]
Optics-free spatial genomics for mapping mammalian brain aging by IRISeq.
Journal: Nature neuroscience
In common: Monocle 3, Scanpy, Seurat, 10 other tools, genetics / omics, mouse, 4 references
[9] doi:10.1016/j.isci.2026.116055 [code]
Mapping the transcriptional diversity of calcium signaling in the mouse and human brain.
Journal: iScience
In common: Monocle 3, anndata, igraph, 10 other tools, genetics / omics, mouse, 3 references
[10] doi:10.1126/sciadv.aeg3223 [code]
The extreme diversity of retinal amacrine cells has deep evolutionary roots.
Journal: Science advances
In common: anndata, igraph, Scanpy, 11 other tools, genetics / omics, 3 references

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.