Combinatorial multiomic analysis from a pedigree of Sox10Dom Hirschsprung mice identifies multiple high confidence candidate modifiers of Enteric Nervous System development.
The 20 matches
- [1] § Methods › Generation and processing of fetal ENS single nucleus assay for transposase-accessible chromatin-sequencing (snATAC-seq) data › Analysis of snATAC-seq data. ↔ 2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, lines 487–530 · score 0.93 · position frequency matrices, TFBSTools, getMatrixSet, TF binding motifs, accessible loci, JASPAR
- [2] § Results › Evolutionarily conserved SOX10 binding sites within Sox10Dom modifier intervals overlap or are near genes differentially expressed in the migrating wavefront ↔ 2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, lines 788–828 · score 0.93 · Cyp7b1, Fam204a, Ppargc1a, conserved SOX10, nearest gene, binding motif
- [3] § Methods › Modifier intervals for downstream candidate gene analysis ↔ 2024-10-04_ModifierInterval_CandidateGenePipeline_Part1_V3.R, lines 472–518 · score 0.89 · Browser Tool, BothSexNo15X5, BinBothSexAllChrom, BinFemale, BinMale, gene symbol
- [4] § Results › Evolutionarily conserved SOX10 binding sites within Sox10Dom modifier intervals overlap or are near genes differentially expressed in the migrating wavefront ↔ 2024-12-05_CandidateGenesComparisonsCrossModality.R, lines 175–205 · score 0.89 · Cyp7b1, Fam204a, Ppargc1a, nearest gene, Adgrb3, Bcas3
- [5] § Methods › Modifier intervals for downstream candidate gene analysis ↔ 2024-10-02_ModifierInterval_CandidateGenePipeline_Part2+3_V1.R, lines 247–292 · score 0.88 · Browser Tool, BothSexNo15X5, BinBothSexAllChrom, BinFemale, BinMale, gene symbol
- [6] § Results › Differential expression of modifier interval genes in the migrating wavefront of enteric neural crest-derived cells further prioritizes candidate genes ↔ 2024-10-03_ModifierInterval_CandidateGenePipeline_Part5_V1.R, lines 361–426 · score 0.87 · Hs3st3b1, Sh2b3, Slc10a4, Col1a1, Alkbh5, Hoxb5
- [7] § Methods › Generation and processing of fetal ENS single nucleus assay for transposase-accessible chromatin-sequencing (snATAC-seq) data › Analysis of snATAC-seq data. ↔ 2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, lines 245–287 · score 0.86 · log2 Fold Change, FindAllMarkers, Bonferroni adjusted, accessible locus, snATAC, identities
- [8] § Results › Prioritization of top aganglionosis modifier candidate genes across data modalities ↔ 2024-12-18_CandidateGenes_VariantsDifferentThanB6_FunctionalPrediction_V2.R, lines 295–357 · score 0.79 · UCSC Genome Browser, variant predicted, Col1a1, insertion, splice, Phox2b
- [9] § Results › Prioritization of top aganglionosis modifier candidate genes across data modalities ↔ 2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, lines 788–828 · score 0.78 · CellChat, TF binding motifs, conserved SOX10, Col1a1, expressed genes, Mecom
- [10] § Results › Chromatin accessibility within enteric neuronal progenitors highlights putative regulatory regions within aganglionosis modifier intervals ↔ 2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, lines 917–960 · score 0.78 · 33400347–33400362, 97891443–97891462, SOX10 binding sites, SOX10 binding motifs, chr11, Gopinath
- [11] § Results › Candidate modifiers of aganglionosis related to human GI phenotypes ↔ 2024-12-18_CandidateGenes_OverlapWithHumanGWASHit.R, lines 363–394 · score 0.78 · stool frequency GWAS, Mb away, HSCR GWAS, Col1a1, Rbpj, Sox10Dom
- [12] § Methods › Generation and processing of fetal ENS single nucleus assay for transposase-accessible chromatin-sequencing (snATAC-seq) data › Analysis of snATAC-seq data. ↔ 2024-09-16_snATAC-seq_Phox2bH2B-CFP_16.6dpc_ImportProcessing.R, lines 46–86 · score 0.72 · LSI dimensionality reduction, CellRanger, CFP, ATAC, Harmony, imported
- [13] § Methods › Overlap of Sox10Dom aganglionosis modifier interval candidate genes with human HSCR and stool frequency GWAS summary statistics ↔ 2024-12-18_CandidateGenes_OverlapWithHumanGWASHit.R, lines 363–394 · score 0.66 · stool frequency, HSCR GWAS, hg19, FDR, candidate genes, overlapped
- [14] § Results › Differential expression of modifier interval genes in the migrating wavefront of enteric neural crest-derived cells further prioritizes candidate genes ↔ 2024-10-03_ModifierInterval_CandidateGenePipeline_Part5_V1.R, lines 361–426 · score 0.62 · Phox2a, Col1a1, Ascl1, Prph, Tgfbi, Uchl1
- [15] § Methods › Generation and processing of fetal ENS single nucleus assay for transposase-accessible chromatin-sequencing (snATAC-seq) data › Isolation of nuclei from fetal mouse tissue. ↔ 2024-09-16_snATAC-seq_Phox2bH2B-CFP_16.6dpc_ImportProcessing.R, lines 1–44 · score 0.61 · ATAC seq, neuronal cells, snATAC, Libraries, CFP, Nuclei
- [16] § Results › Chromatin accessibility within enteric neuronal progenitors highlights putative regulatory regions within aganglionosis modifier intervals ↔ 2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, lines 54–95 · score 0.60 · Phox2b H2B CFP, scRNA, snATAC, activity, WT, nucleus
- [17] § Results › Prioritization of candidate genes based on expression in the fetal mouse intestine ↔ 2024-10-02_ModifierInterval_CandidateGenePipeline_Part2+3_V1.R, lines 344–382 · score 0.59 · 9.5–15.5, fetal gut, known genes, modifier intervals, dpc, candidate genes
- [18] § Results › Differential expression of modifier interval genes in the migrating wavefront of enteric neural crest-derived cells further prioritizes candidate genes ↔ 2024-10-03_ModifierInterval_CandidateGenePipeline_Part5_V1.R, lines 229–273 · score 0.57 · Phox2a, enteric neural crest, Volcano, gene expression, wavefront, modifier interval
- [19] § Results › Differential expression of modifier interval genes in the migrating wavefront of enteric neural crest-derived cells further prioritizes candidate genes ↔ 2024-12-26_CandidateGene_ExonPheWAS_ManhattanPlots.R, lines 114–171 · score 0.53 · COL1A1, Hoxb5, Myh10, Prph, Tgfbi, Uchl1
- [20] § Results › Chromatin accessibility within enteric neuronal progenitors highlights putative regulatory regions within aganglionosis modifier intervals ↔ 2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, lines 575–627 · score 0.53 · percent.diff, TF binding motifs, background, nuclei, chromatin, neuroblast
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
R · 1,092 lines · 55 KB · CC-BY-4.0 · 7 matches
- ################################################################################
- ### Modifier Interval Candidate Gene Pipeline Part 7:
- ### How many differentially accessible loci in WT 16.5dpc ENS nuclei (by
- ### cell group: Neuronal Branches, Neuroblast, Progenitor) are within modifier
- ### intervals? Which TF binding motifs are enriched within modifier interval-
- ### contained differentially accessible loci?
- ################################################################################
- ### Import packages:
- library(Seurat)
- library(Signac)
- library(cowplot)
- library(GenomicRanges)
- library(TFBSTools)
- library(JASPAR2024)
- library(BSgenome.Mmusculus.UCSC.mm10)
- library(tidyverse)
- library(TxDb.Mmusculus.UCSC.mm10.knownGene)
- library(ggVennDiagram)
- ### Get filepaths where data are stored:
- savepath='path/to/files/'
- savepath='C:/Users/jtben/Documents/ms2/MS2_Files/Manuscripts/Sox10DomPedigree_Dach1/'
- path10='D:/Projects/Gopinath_2016_SOX10_BindingConsensus_HMC/'
- path5='G:/Documents/ms2/MS2_Files/Projects/snATAC-seq/Dim1Included/'
- pathtoobjects<-'D:/JustinPaperCodeReview/JustinObjects/'
- path4='G:/Documents/ms2/MS2_Files/Projects/snATAC-seq/'
- path8='D:/Projects/Zhao_et_al_2022_scRNA-seq_GITractDev9.5-15.5dpc/'
- ### Import GWAS Summary Statistics and Modifier Interval Set Tables:
- GWASList<-readRDS(file = paste0(savepath,
- '2024-08-21_AllGWASCompiled.RDS'))
- IntList<-readRDS(file = paste0(savepath,
- '2024-08-21_AllGWAS-DerivedModifierIntervalsSetsCompiled.RDS'))
- IntGeneExpData<-readRDS(file = paste0(savepath,
- '2024-08-21_AllGWAS-DerivedModifierIntervalsSetsCompiled_GenesWithinData.RDS'))
- IntGeneExpList<-readRDS(file = paste0(savepath,
- '2024-08-21_AllGWAS-DerivedModifierIntervalsSetsCompiled_GenesWithinUnique.RDS'))
- TopSNPList<-readRDS(file = paste0(savepath,
- '2024-08-21_AllGWAS-DerivedModifierIntervalsSets_TopSNPs.RDS'))
- PeaksPerInterval<-readRDS(file = paste0(savepath,
- '2024-08-29_AllGWAS-DerivedModifierIntervalsSets_PeakSNPsPerModInt.RDS'))
- GroupsSigList<-readRDS(file = paste0(savepath,
- '2024-10-04_AllGWASCompiled_WithModInts.RDS'))
- ### Now I will load in the E16.5 WT snATAC-seq data
- ### generated from Phox2b H2B-CFP:
- reprocessed<-readRDS(file = paste0(path5,'2023-08-07_reprocessed_No1718+GeneralLabels+FragUpdate+Links.RDS'))
- DimPlot(reprocessed,label=TRUE)
- DefaultAssay(reprocessed)<-'MACS2peaks'
- Idents(reprocessed)<-'seurat_clusters'
- ### Load in data from Avila & Benthal et al., 2024:
- JAAE15.5 <- readRDS(paste0(pathtoobjects,
- "2024-08-23_ENS_MainClusts_JAA.RDS"))
- ### Make sure the grouped identities are present in the object:
- DimPlot(JAAE15.5,label=TRUE,group.by = 'Grouped_Ident')
- ### Make sure the Sub_cluster identities are present in the object:
- JAAE15.5<-SetIdent(JAAE15.5,value = 'sub_cluster')
- DimPlot(JAAE15.5,label=TRUE)
- ### Isolate only the WT cells from the object:
- WT<-subset(JAAE15.5,subset = Condition == c("Wt"))
- ### Make the default assay SCT:
- DefaultAssay(WT)<-'SCT'
- ### Below I use the estimated RNA expression in the snATAC-seq data to match
- ### cell identities to the scRNA-seq data:
- ### Note that Neuroblast Path 2 cells may not exist in the snATAC-seq data
- ### because these are nuclei, and Path 2 cells are cycling. M phase cells may
- ### have condensed chromosomes and therefore no nuclear membrane, making nuclei
- ### isolation from these cells impossible.
- ### quantify gene activity
- ### note that we restrict the imputation to variable genes from scRNA-seq,
- ### but could impute the full transcriptome if we wanted to
- genes.use <- VariableFeatures(WT)
- refdata <- GetAssayData(WT, assay = "RNA", slot = "data")[genes.use, ]
- ### Identify anchors
- transfer.anchors <- FindTransferAnchors(reference = WT,
- query = reprocessed,
- features = VariableFeatures(object = WT),
- reference.assay = "RNA",
- query.assay = "RNA", reduction = "cca")
- ### Transfer data to estimate which cell types correspond to snATAC-seq nuclei:
- celltype.predictions <- TransferData(anchorset = transfer.anchors,
- refdata = WT$Grouped_Ident,
- weight.reduction = reprocessed[["lsi"]],
- dims = 2:30)
- ### Add the metadata for the cell type predictions to the snATAC-seq data:
- reprocessed <- AddMetaData(reprocessed, metadata = celltype.predictions)
- ### Add the predicted IDs in the correct order to the snATAC-seq metadata:
- reprocessed$predicted.id <- factor(reprocessed$predicted.id,
- levels = c('Progenitors','Path1',
- 'Path2',"Branch.A",
- "Branch.B","Branch.C"))
- ### Make the predicted cell IDs the main cluster identities in the snATAC-seq
- ### data and make the grouped cell IDs the main cluster identities in the
- ### scRNA-seq reference data:
- Idents(reprocessed)<-'predicted.id'
- Idents(WT)<-'Grouped_Ident'
- ### Plot the UMAPs beside each other:
- p1 <- DimPlot(reprocessed)
- p2 <- DimPlot(WT)
- p1 | p2
- ### Set up dataframe to calculate confidence of cell type predictions:
- predictions <- table(reprocessed$seurat_clusters, reprocessed$predicted.id)
- predictions <- predictions/rowSums(predictions) # normalize for number of cells in each cell type
- predictions <- as.data.frame(predictions)
- predictions<-predictions[predictions$Var1 %in% c('0','1','2','3','4','5','6',
- '7','8','9','10','11','12',
- '13','14','15','16'),]
- ### Plot a heatmap of the cell type prediction confidence:
- p3 <- ggplot(predictions, aes(Var1, Var2, fill = Freq)) +
- geom_tile() + scale_fill_gradient(name = "Fraction \nof cells",
- low = "#ffffc8", high = "#7d0025") +
- xlab("Seurat Clusters") +
- ylab("Predicted cell type label from RNA") +
- theme_cowplot() +
- theme(axis.text.x = element_text(angle = 90,
- vjust = 0.5,
- hjust = 1))
- p1 | p2 | p3
- ### Save these plots:
- ggsave(plot = p1+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- filename = paste0(savepath,"Images/2024-09-09_Reprocessed_snATAC-seqPhox2bBright2+Dim1+2_predicted.id.jpg"),
- device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
- ggsave(plot = p2+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- filename = paste0(savepath,"Images/2024-09-09_JAA15.5scRNA-seq_Grouped_Ident.jpg"),
- device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
- ggsave(plot = p3+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 12,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 12,face='bold'))+RotatedAxis(),
- filename = paste0(savepath,"Images/2024-09-09_Predicted.ID_Heatmap.jpg"),
- device = 'jpg',dpi = 600,units = 'in',width = 7,height = 5)
- ### Read in the Bright and Dim Phox2b-CFP snATAC-seq datasets from which the
- ### main snATAC-seq datasets originated for plotting purposes:
- Bright2<-readRDS(file = paste0(path4,'2021-08-26_snATAC-seq_Phox2bCFP_Bright2.RDS'))
- hm.Dim.integrate<-readRDS(file = paste0(path4,'2021-08-20_snATAC-seq_Phox2bCFP_Dims_IntegratedBatchCorrectedHarmony.RDS'))
- DimPlot(hm.Dim.integrate,label=TRUE) | DimPlot(Bright2,label=TRUE)
- gc()
- ### Plot UMAPs and save the plots:
- ggsave(plot = DimPlot(reprocessed)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bBright2+Dim1+2.jpg"),
- device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
- ggsave(plot = DimPlot(reprocessed)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bBright2+Dim1+2_forLegend.jpg"),
- device = 'jpg',dpi = 600,units = 'in',width = 7,height = 5)
- ggsave(plot = DimPlot(hm.Dim.integrate)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bDim1+2_HBC.jpg"),
- device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
- ggsave(plot = DimPlot(Bright2)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bBright2.jpg"),
- device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
- ggsave(plot = DimPlot(Bright2)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bBright2_forLegend.jpg"),
- device = 'jpg',dpi = 600,units = 'in',width = 7,height = 5)
- ### Make certain the main cluster identities in the snATAC-seq data are the
- ### predicted cell IDs:
- Idents(reprocessed)<-'predicted.id'
- ### Perform FindAllMarkers to find the differentially accessible peaks per cell
- ### ID in the snATAC-seq UMAP:
- FAM<-FindAllMarkers(object = reprocessed,
- assay = 'MACS2peaks',
- return.thresh = 0.05)
- ### Filter the differentially accessible peaks to those greater than 1.5
- ### average log2FoldChange and less than -1.5 average log2FoldChange:
- FAMpos<-FAM[FAM$avg_log2FC>1.5,]
- FAMneg<-FAM[FAM$avg_log2FC<((-1)*1.5),]
- FAM.sig<-rbind(FAMpos,FAMneg)
- ### Filter for Bonferroni-adjusted p-value less than 0.05:
- FAM.sig<-FAM.sig[FAM.sig$p_val_adj<0.05,]
- ### Change the name of a column to "loc" for loci:
- names(FAM.sig)[7]<-'loc'
- ### Split up the loci column to seqnames, start, and end columns per
- ### differentially accessible locus:
- FAM.sig[c('seqnames', 'start','end')] <- stringr::str_split_fixed(FAM.sig$loc, '-', 3)
- ### Flank each differentially accessible locus +/-25 base pairs:
- FAM.sig$start<-as.numeric(FAM.sig$start)-25
- FAM.sig$end<-as.numeric(FAM.sig$end)+25
- ### Save the differentially accessible loci dataset to a csv file:
- write.csv(x = FAM.sig,
- file = paste0(savepath,
- '2024-09-09_Phox2bCFPsnATAC-seqWT_DAPeaks_predicted.id.csv'),
- quote = FALSE)
- ### Find all Differentially Accessible Peaks conserved binding motifs that are
- ### within modifier intervals:
- ### Set up empty named list to write to:
- DAModIntList<-list(Male=NULL,
- Female=NULL,
- BothSexNo15X5=NULL,
- BothSexAllChrom=NULL,
- BinMale=NULL,
- BinFemale=NULL,
- BinBothSexAllChrom=NULL)
- ### Set up for loop to loop through the gene lists for each interval set to
- ### find which overlap with Differentially Accessible Peaks:
- for(i in seq_along(DAModIntList)){
- ### Initiate an empty list for writing Differentially Accessible Peaks to:
- DAModIntListmodlocilist<-list()
- for(j in seq_along(paste0('chr',IntList[[i]]$chrom))){
- DAModIntListmodlocilist[[j]]<-FAM.sig[FAM.sig$seqnames==paste0('chr',IntList[[i]]$chrom)[j] &
- FAM.sig$start>=IntList[[i]]$start0.5Mb[j] &
- FAM.sig$end<=IntList[[i]]$end0.5Mb[j],]
- try(DAModIntListmodlocilist[[j]]$ModInt<-IntList[[i]]$IntervalID[j])
- try(DAModIntListmodlocilist[[j]]$source<-names(IntList)[[i]])
- }
- DAModIntList[[i]]<-do.call('rbind',DAModIntListmodlocilist)
- }
- DAModIntList
- ### Add a name column to the data:
- for(i in seq_along(DAModIntList)){
- DAModIntList[[i]]$assay<-names(DAModIntList)[[i]]
- }
- ### Combine to one data table:
- FAM.sig.all<-do.call(rbind,DAModIntList)
- write.csv(x = FAM.sig.all,
- file = paste0(savepath,'2024-10-09_DifferentiallyAccessiblePeaksPredictedCellIDs_InModIntervals.csv'),
- quote = FALSE,row.names = FALSE)
- FAM.sig.all$IntervalID2<-paste0(FAM.sig.all$assay,'_',FAM.sig.all$ModInt)
- FAM.sig.all$IntervalID2Clust<-paste0(FAM.sig.all$cluster,'_',
- FAM.sig.all$IntervalID2)
- table(FAM.sig.all$IntervalID2,FAM.sig.all$cluster)
- ### Find overlap of the differentially accessible peaks across the modifier
- ### interval definitions:
- geneSets <- list(BothSexAllChrom = unique(FAM.sig.all[FAM.sig.all$assay=='BothSexAllChrom',]$loc),
- BothSexNo15X5 = unique(FAM.sig.all[FAM.sig.all$assay=='BothSexNo15X5',]$loc),
- Female = unique(FAM.sig.all[FAM.sig.all$assay=='Female',]$loc),
- Male = unique(FAM.sig.all[FAM.sig.all$assay=='Male',]$loc),
- BinBothSexAllChrom = unique(FAM.sig.all[FAM.sig.all$assay=='BinBothSexAllChrom',]$loc),
- BinFemale = unique(FAM.sig.all[FAM.sig.all$assay=='BinFemale',]$loc),
- BinMale = unique(FAM.sig.all[FAM.sig.all$assay=='BinMale',]$loc))
- vnnplt<-ggVennDiagram(geneSets,
- category.names = c("All Chrs",
- "No Chr5,15,X",
- "Female",
- "Male",
- "Bin All Chrs",
- 'BinFemale',
- 'BinMale'),
- # label_size = 5,
- # set_size = 5,
- force_upset = TRUE,
- label_size = 20,top.bar.numbers.size = 6,
- set_size = 20
- )
- # +scale_fill_distiller(palette = "Purples",direction=1)
- vnnplt
- vnnplt$plotlist[[1]][["theme"]][["text"]]$face<-'bold'
- vnnplt$plotlist[[1]][["theme"]][["text"]]$size<-17
- vnnplt$plotlist[[2]][["theme"]][["text"]]$face<-'bold'
- vnnplt$plotlist[[2]][["theme"]][["text"]]$size<-17
- vnnplt$plotlist[[3]][["theme"]][["text"]]$face<-'bold'
- vnnplt$plotlist[[3]][["theme"]][["text"]]$size<-17
- vnnplt
- ggsave(device = 'jpg',dpi = 600,
- plot = vnnplt,width = 13,height = 5,
- filename = paste0(savepath,"Images/2024-10-09_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_UpsetPlot.jpg"))
- ### Convert differentially accessible loci to GRanges objects so that
- ### plotting ChIPseeker annotations can be performed per group:
- ### DA Peaks overall:
- FAM.sig_GR<-GenomicRanges::makeGRangesFromDataFrame(df = FAM.sig,
- keep.extra.columns = TRUE,
- seqnames.field = 'seqnames',
- start.field = 'start',
- end.field = 'end',
- ignore.strand = TRUE)
- ### Annotate the loci:
- bed.annot=ChIPseeker::annotatePeak(FAM.sig_GR,
- tssRegion=c(-3000, 3000),
- TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
- annoDb="org.Mm.eg.db")
- annot_peaks=as.data.frame(bed.annot)
- ### Annotate the peaks per predicted cell ID:
- FAM.sig_GR.list<- split(FAM.sig_GR , f = FAM.sig_GR$cluster)
- peakAnnoList <- lapply(FAM.sig_GR.list, ChIPseeker::annotatePeak,
- TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
- tssRegion=c(-3000, 3000), verbose=FALSE,
- annoDb="org.Mm.eg.db")
- ### Plot the annotations in stacked bar plots:
- ChIPseeker::plotAnnoBar(peakAnnoList)
- ggsave(plot = ChIPseeker::plotAnnoBar(peakAnnoList)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- device = 'jpg',dpi = 600,width = 8,height = 2.5,
- filename = paste0(savepath,"Images/2024-09-09_ALLFAMPeaks_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_PeakClass_splitbyCluster.jpg"))
- ### Now for the DA peaks in modifier intervals:
- FAM.sig.all_GR<-GenomicRanges::makeGRangesFromDataFrame(df = FAM.sig.all,
- keep.extra.columns = TRUE,
- seqnames.field = 'seqnames',
- start.field = 'start',
- end.field = 'end',
- ignore.strand = TRUE)
- ### Annotate the loci:
- bed.annot=ChIPseeker::annotatePeak(FAM.sig.all_GR,
- tssRegion=c(-3000, 3000),
- TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
- annoDb="org.Mm.eg.db")
- annot_peaks=as.data.frame(bed.annot)
- # ChIPseeker::upsetplot(bed.annot, vennpie=TRUE)
- # ChIPseeker::vennpie(x = bed.annot)
- # ChIPseeker::plotAnnoBar(bed.annot)
- ### Then Split by modifier definitions, or "assay" and plot:
- FAM.sig.all_GR.list<- split(FAM.sig.all_GR , f = FAM.sig.all_GR$assay)
- peakAnnoList <- lapply(FAM.sig.all_GR.list, ChIPseeker::annotatePeak,
- TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
- tssRegion=c(-3000, 3000), verbose=FALSE,
- annoDb="org.Mm.eg.db")
- ChIPseeker::plotAnnoBar(peakAnnoList)
- ggsave(plot = ChIPseeker::plotAnnoBar(peakAnnoList)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- device = 'jpg',dpi = 600,width = 8,height = 2,
- filename = paste0(savepath,"Images/2024-09-09_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_PeakClass_splitbyAssay.jpg"))
- ### Then split by cluster definitions and plot:
- FAM.sig.all_GR.list<- split(FAM.sig.all_GR , f = FAM.sig.all_GR$cluster)
- peakAnnoList <- lapply(FAM.sig.all_GR.list, ChIPseeker::annotatePeak,
- TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
- tssRegion=c(-3000, 3000), verbose=FALSE,
- annoDb="org.Mm.eg.db")
- ChIPseeker::plotAnnoBar(peakAnnoList)
- ggsave(plot = ChIPseeker::plotAnnoBar(peakAnnoList)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- device = 'jpg',dpi = 600,width = 8,height = 2.5,
- filename = paste0(savepath,"Images/2024-09-09_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_PeakClass_splitbyCluster.jpg"))
- ### Then a combination of both to see how these might differ across cluster and
- ### modifier interval definitions:
- ### Make combined metadata of cluster and GEMMA run:
- FAM.sig.all_GR$assay_cluster<-paste0(FAM.sig.all_GR$assay,'_',
- FAM.sig.all_GR$cluster)
- ### Add annotations per assay_cluster:
- FAM.sig.all_GR.list2<- split(FAM.sig.all_GR , f = FAM.sig.all_GR$assay_cluster)
- peakAnnoList <- lapply(FAM.sig.all_GR.list2, ChIPseeker::annotatePeak,
- TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
- tssRegion=c(-3000, 3000), verbose=FALSE,
- annoDb="org.Mm.eg.db")
- ### Plot these:
- ChIPseeker::plotAnnoBar(peakAnnoList)
- ggsave(plot = ChIPseeker::plotAnnoBar(peakAnnoList)+
- theme(axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- legend.text=element_text(size=15,face='bold'),
- plot.title = element_text(size=20,face='bold'),
- legend.title = element_text(size=15,face='bold'),
- axis.text.x = element_text(size = 10,face='bold')),
- device = 'jpg',dpi = 600,width = 8,height = 7,
- filename = paste0(savepath,"Images/2024-09-09_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_PeakClass_splitbyAssayandCluster.jpg"))
- ### Perform TF binding motif enrichment on the differentially accessible loci
- ### within/per modifier intervals via Signac's base function and JASPAR 2024:
- ### Get the position frequency matrices from JASPAR 2024 for vertebrates:
- pfm <- TFBSTools::getMatrixSet(
- x = db(JASPAR2024()),
- opts = list(collection = "CORE",
- tax_group = 'vertebrates',
- all_versions = FALSE))
- # pfm.un <- TFBSTools::getMatrixSet(
- # x = db(JASPAR2024()),
- # opts = list(collection = "UNVALIDATED",
- # tax_group = 'vertebrates',
- # all_versions = TRUE))
- ### Add the UNVALIDATED DACH1 TF binding motif information from JASPAR2020 to
- ### the pfm object:
- ### https://jaspar2020.genereg.net/matrix/UN0306.1/
- pfm@listData[['UN0306.1']]<-pfm@listData[['MA0442.3']]
- as.matrix(read.table(file = paste0(savepath,'UN0306.1.jaspar.tsv'),
- header = FALSE,sep = '\t',row.names = c('A','C','G','T')))
- pfm@listData[['UN0306.1']]@profileMatrix<-as.matrix(read.table(file = paste0(savepath,'UN0306.1.jaspar.tsv'),
- header = FALSE,
- sep = '\t',
- row.names = c('A','C','G','T')))
- pfm@listData[['UN0306.1']]@profileMatrix
- pfm@listData[['UN0306.1']]@ID<-'UN0306.1'
- pfm@listData[['UN0306.1']]@name<-'DACH1'
- pfm@listData[['UN0306.1']]@matrixClass<-'SKI / DACH domain factors'
- pfm@listData[['UN0306.1']]@tags$centrality_logp<-(-633.186)
- pfm@listData[['UN0306.1']]@tags$family<-'DACH / dachshund-related factors'
- pfm@listData[['UN0306.1']]@tags$medline<-NULL
- pfm@listData[['UN0306.1']]@tags$remap_tf_name<-'DACH1'
- pfm@listData[['UN0306.1']]@tags$source<-'http://remap.univ-amu.fr/'
- pfm@listData[['UN0306.1']]@tags$tax_group<-'vertebrates'
- pfm@listData[['UN0306.1']]@tags$tfbs_shape_id<-NULL
- pfm@listData[['UN0306.1']]@tags$unibind<-NULL
- pfm@listData[['UN0306.1']]@tags$collection<-'UNVALIDATED'
- pfm@listData[['UN0306.1']]@tags$acc<-'Q9UI36'
- ### Add motif information to the snATAC-seq object:
- reprocessed <- AddMotifs(
- object = reprocessed,
- genome = BSgenome.Mmusculus.UCSC.mm10,
- pfm = pfm)
- ### Find background open chromatin to assess differentially accessible
- ### loci within modifier loci against for motif analysis:
- ### Get all "open" loci from the snATAC-seq object:
- open.peaks <- AccessiblePeaks(reprocessed)
- ### Match the overall GC content in the peak set:
- meta.feature <- GetAssayData(reprocessed,
- assay = "MACS2peaks",
- layer = "meta.features")
- peaks.matched <- MatchRegionStats(
- meta.feature = meta.feature[open.peaks, ],
- query.feature = meta.feature[unique(FAM.sig$loc), ],
- n = 50000)
- ### Perform motif enrichment analysis on just the progenitor and neuroblast
- ### nuclei by a combined metadata of GEMMA GWAS run + Modifier Interval:
- ### Make a GRanges object for these differentially accessible peaks:
- FAM.sig.all_GR_Prog<-GenomicRanges::makeGRangesFromDataFrame(df = FAM.sig.all[FAM.sig.all$cluster %in%
- c('Progenitors',
- 'Neuroblast1',
- 'Neuroblast2'),],
- keep.extra.columns = TRUE,
- seqnames.field = 'seqnames',
- start.field = 'start',
- end.field = 'end',
- ignore.strand = TRUE)
- ### Split the GRanges object by modifier interval definition:
- FAM.sig.all_GR_Prog.list<- split(FAM.sig.all_GR_Prog,
- f = FAM.sig.all_GR_Prog$IntervalID2)
- ### Perform TF binding motif enrichment analysis on these differentially
- ### accessible peaks per modifier interval:
- EnrichedMotifsList<-list()
- EnrichedMotifsList<-lapply(X = FAM.sig.all_GR_Prog.list,
- FUN = function(x) {FindMotifs(object = reprocessed,
- features = unique(x$loc))})
- ### Make into a combined dataframe:
- EnrichedMotifs_Prog<-EnrichedMotifsList %>%
- bind_rows(.id = "IntervalID2")
- ### Filter for those with an adjusted p-value of less than 0.05:
- EnrichedMotifs_Prog<-EnrichedMotifs_Prog[EnrichedMotifs_Prog$p.adjust<0.05,]
- ### Add the percent motif in the test chromatin vs the percent motif in the
- ### background chromatin:
- EnrichedMotifs_Prog$percent.diff<-EnrichedMotifs_Prog$percent.observed-EnrichedMotifs_Prog$percent.background
- ### Convert the motif names into mouse gene names:
- convert_to_mouse_gene <- function(gene_name) {
- # Split the gene name by "::"
- parts <- unlist(strsplit(gene_name, "::"))
- # Convert each part to mouse gene format
- mouse_genes <- sapply(parts, function(part) {
- part <- tolower(part)
- part <- paste0(toupper(substring(part, 1, 1)), substring(part, 2))
- return(part)
- })
- ### Combine the parts back if there were multiple
- return(mouse_genes)
- }
- ### Apply the function to the GeneNames column
- MouseGeneNames <- gsub(pattern = '\\.',
- replacement = '',
- x = unique(unlist(sapply(EnrichedMotifs_Prog$motif.name,
- convert_to_mouse_gene))))
- ### There is a specific name that needs to be corrected here: EWSR1-FLI1
- MouseGeneNames[717]<-strsplit(MouseGeneNames[142], "-")[[1]][2]
- MouseGeneNames[717]<-paste0(toupper(substring(MouseGeneNames[717], 1, 1)),
- tolower(substring(MouseGeneNames[717], 2)))
- MouseGeneNames[142]<-strsplit(MouseGeneNames[142], "-")[[1]][1]
- ### Load in the "Neural Crest" cells from Zhao et al., 2022:
- nc1<-readRDS(file=paste0(path8,
- '2024-08-21_NeuralCrestOnly_Zhaoetal2022Dev_SCTv5IntegrateSeuratV5.RDS'))
- DimPlot(nc1,label=TRUE)
- nc1$time<-factor(x=nc1$time,
- levels = c("E9.5",
- "E10.5",
- "E11.5",
- "E13.5",
- "E15.5"))
- ### Isolate all motif gene names that are expressed in the "Neural Crest" cells
- ### above a pseudobulk-RNA expression of 0.1 by timepoint:
- exptable<-as.data.frame(AverageExpression(object = nc1,
- assays = 'RNA',
- features = MouseGeneNames,
- group.by = 'time'))
- exptablefilt_0.1<-filter_all(exptable, any_vars(. > 0.1))
- # exptablefilt_0.2<-filter_all(exptable, any_vars(. > 0.2))
- # exptablefilt_0.12<-filter_all(exptable, any_vars(. > 0.12))
- ### Filter the enriched motif dataset to those genes that are expressed:
- EnrichedMotifs_Prog_Exp <- EnrichedMotifs_Prog[sapply(EnrichedMotifs_Prog$motif.name,
- function(name) any(sapply(rownames(exptablefilt_0.1),
- grepl, name,ignore.case=TRUE))), ]
- ### Load in all result tables from each pipeline part:
- Sox10TFMotsModInt<-read.csv(file=paste0(savepath,'2024-10-08_Sox10TFMotifsConservedInModIntervals_ClosestFeature.csv'))
- Sox10TFMotsModInt10gene<-read.csv(file=paste0(savepath,'2024-10-08_Sox10TFMotifsConservedInModIntervals_Closest10Genes.csv'))
- Top2peaks10gene<-read.csv(file=paste0(savepath,'2024-09-04_Top2PeaksPerIntervalSet_Closest10Genes.csv'))
- WavefrontModInt<-read.csv(file=paste0(savepath,'2024-10-08_StavelyWavefrontDEG_InModifiers_All_Assays.csv'))
- dfcompleteUnfiltModInt_filt<-read.csv(file = paste0(savepath,'2024-10-02_FiltEnrichedCellChatGenesInModInts_netP.csv'))
- # FAMfilt<-read.csv(file = paste0(savepath,
- # '2024-09-30_FAM_Zhao_2022_ByCellTypeTimeCombined_pvalLT0.05.csv'))[2:8]
- DiffExpModInt<-read.csv(file=paste0(savepath,'2024-10-07_Zhao_FAM_DiffExpGenesGenesPerModInt.csv'))
- DiffExpModInt[c('CellType', 'Age')]<-stringr::str_split_fixed(DiffExpModInt$cluster,'_',2)
- # DiffExpModInt_Adj<-DiffExpModInt[DiffExpModInt$Age!='E15.5',]
- # DiffExpModInt_Adj<-subset(DiffExpModInt_Adj,subset=CellType %in%
- # unique(DiffExpModInt_Adj$CellType)[c(1,3:9,11:23)])
- DiffExpModInt_Adj<-subset(DiffExpModInt,subset=CellType %in%
- unique(DiffExpModInt$CellType)[c(1,3:9,11:24)])
- ### Convert the motif names into mouse gene names:
- convert_to_mouse_gene <- function(gene_name) {
- # Split the gene name by "::"
- parts <- unlist(strsplit(gene_name, "::"))
- # Convert each part to mouse gene format
- mouse_genes <- sapply(parts, function(part) {
- part <- tolower(part)
- part <- paste0(toupper(substring(part, 1, 1)), substring(part, 2))
- return(part)
- })
- ### Combine the parts back if there were multiple
- return(mouse_genes)
- }
- ### Apply the function to the GeneNames column
- MouseGeneNames <- gsub(pattern = '\\.',
- replacement = '',
- x = unique(unlist(sapply(EnrichedMotifs_Prog_Exp$motif.name,
- convert_to_mouse_gene))))
- ### Find n closest genes per DA peak:
- DAPeaksModInt<-FAM.sig.all[FAM.sig.all$cluster %in%
- c('Progenitors',
- 'Neuroblast1',
- 'Neuroblast2'),]
- # loci<-GenomicRanges::makeGRangesFromDataFrame(df = DAPeaksModInt,
- # keep.extra.columns = TRUE,
- # seqnames.field = 'seqnames',
- # start.field = 'start',
- # end.field = 'end',
- # ignore.strand = TRUE)
- DAPeaksModInt[c('seqnames', 'start','end')] <- stringr::str_split_fixed(DAPeaksModInt$loc, '-', 3)
- loci<-DAPeaksModInt[,8:10]
- loci$start<-as.numeric(loci$start)
- loci$end<-as.numeric(loci$end)
- genesobj<-as.data.frame(genes(TxDb.Mmusculus.UCSC.mm10.knownGene))
- # Retrieve gene symbols using AnnotationDbi
- gene_symbols <- select(org.Mm.eg.db,
- keys = genesobj$gene_id,
- columns = "SYMBOL",
- keytype = "ENTREZID")
- genesobj <- merge(genesobj,
- gene_symbols,
- by.x = "gene_id",
- by.y = "ENTREZID")
- # Function to find nearest n genes
- find_nearest_genes <- function(loci, genesobj, n) {
- result <- lapply(1:nrow(loci), function(i) {
- genesobjchrom<-genesobj[genesobj$seqnames==loci$seqnames[i],]
- # Calculate distances to each gene
- distances <- pmin(abs(genesobjchrom$start - loci$start[i]),
- abs(genesobjchrom$end - loci$start[i]),
- abs(genesobjchrom$start - loci$end[i]),
- abs(genesobjchrom$end - loci$end[i]))
- # Check if locus falls within gene
- within_gene <- (loci$start[i] >= genesobjchrom$start & loci$end[i] <= genesobjchrom$end) |
- (loci$start[i] <= genesobjchrom$start & loci$end[i] >= genesobjchrom$start) |
- (loci$start[i] <= genesobjchrom$end & loci$end[i] >= genesobjchrom$end)
- # Set distance to 0 if locus falls within gene
- distances[within_gene] <- 0
- # Get the indices of the nearest genes
- nearest_indices <- order(distances)[1:n]
- nearest_genes <- genesobjchrom[nearest_indices, ]
- data.frame(
- locus = paste0(loci$seqnames[i],'-',loci$start[i],'-',loci$end[i]),
- gene_ids = nearest_genes$SYMBOL,
- distances = distances[nearest_indices]
- )
- })
- do.call(rbind, result)
- }
- # Set the number of nearest genes to retrieve
- n <- 3
- # Find the nearest genes
- nearest_genes_df <- find_nearest_genes(loci, genesobj, n)
- # Display the results
- print(nearest_genes_df)
- nearest_genes_df_Sox10TFBM <- find_nearest_genes(Sox10TFMotsModInt[,3:5], genesobj, 10)
- ### Using the nearest 10 genes to both the conserved Sox10 TF binding motifs,
- ### the nearest 3 genes to the differentially accessible peaks, the
- ### differentially expressed genes from the gut cells across celltype/time, the
- ### differentially expressed genes from the ENCDC migrating wavefront, and the
- ### genes from the CellChat results (all of these modalities within modifier
- ### intervals), I will label the gene that overlap with the enriched TF motifs
- ### for figure-making purposes.
- genes<-unique(c(unique(c('St18','Pkhd1',
- 'Il17f','Mcm3',
- 'Adgrb3','Cyp7b1',
- 'Nlgn1','Mecom',
- 'Sox2','Slit2',
- 'Ppargc1a','Chic2',
- 'Pdgfra','Prdm8',
- 'Antxr2','Ranbp17',
- 'Tlx3','Tenm2',
- 'Bcas3','Tbx2',
- 'Cadps','Ptprg',
- 'Dach1','Fam204a')),
- unique(WavefrontModInt$symbol),
- unique(nearest_genes_df$gene_ids),
- c('Ppia','Col1a1','Lgals9','Ednrb','Nrg1'),
- unique(DiffExpModInt_Adj$mm10.kgXref.geneSymbol)))
- MouseGeneNamesSub<-intersect(MouseGeneNames,genes)
- EnrichedMotifs_Prog_Exp_sub <- EnrichedMotifs_Prog_Exp[sapply(EnrichedMotifs_Prog_Exp$motif.name,
- function(name) any(sapply(MouseGeneNamesSub,
- grepl, name,ignore.case=TRUE))), ]
- ### The above code includes genes Ebf1 and Tbx2. Unfortunately, the way the code
- ### is written, this fails to filter out Srebf1, Sox21, Tbx20, and Tbx21, because Ebf1
- ### and Tbx2 are substrings of those genes. I manually checked to see if each of
- ### these genes were in at least 1 other data modality, and only Srebf2 was in
- ### the differentially accessible peaks and in the differentially expressed
- ### genes. For the rest which were not in any other of the data modalities, I am
- ### manually removing them here:
- EnrichedMotifs_Prog_Exp_sub<-EnrichedMotifs_Prog_Exp_sub[EnrichedMotifs_Prog_Exp_sub$motif.name %in%
- setdiff(EnrichedMotifs_Prog_Exp_sub$motif.name,
- c('Tbx20','Tbx21',
- 'TBX21','TBX20',
- 'SOX21')),]
- EnrichedMotifs_Prog_Exp_subtoplot <- EnrichedMotifs_Prog_Exp_sub %>%
- separate(IntervalID2, into = c("IntervalID", "specificinterval"), sep = "_",
- extra = "merge")
- p4<-ggplot(data=EnrichedMotifs_Prog_Exp_subtoplot,
- aes(x=fold.enrichment,
- y=-log10(p.adjust),
- col=IntervalID,
- label=motif.name,
- size=percent.diff
- )) +
- geom_point() +
- theme_minimal() +
- theme(
- # legend.position = c(.93, .93),
- legend.title=element_text(size = 20,face='bold'),
- legend.text = element_text(size = 20,face='bold'),
- # legend.title=element_blank(),
- axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- axis.text.x = element_text(size = 10,face='bold'),
- axis.title = element_text(size = 15,face='bold')) +
- guides(colour=guide_legend(override.aes=list(alpha=1, size=3.25))) +
- ggrepel::geom_text_repel(show.legend =FALSE,
- fontface='bold',
- color='black')
- p4
- ggsave(device = 'jpg',dpi = 600,
- plot = p4,units = 'in',width = 11,height = 7,
- filename = paste0(savepath,
- "Images/2025-02-11_DiffAccChromTFsEnrichProgNeurblst12_",
- 'OverlapWithOtherModalities',
- "_snATAC-seq_Phox2b_predicted.id_1SidedVolc.jpg"))
- p4<-ggplot(data=EnrichedMotifs_Prog_Exp,
- aes(x=fold.enrichment,
- y=-log10(p.adjust),
- col=assay,
- label=motif.name,
- size=percent.diff
- )) +
- geom_point() +
- theme_minimal() +
- theme(
- # legend.position = c(.93, .93),
- legend.title=element_text(size = 20,face='bold'),
- legend.text = element_text(size = 20,face='bold'),
- # legend.title=element_blank(),
- axis.line = element_line(colour = 'black', size = 1.1),
- axis.text.y = element_text(size = 10,face='bold'),
- axis.text.x = element_text(size = 10,face='bold'),
- axis.title = element_text(size = 15,face='bold')) +
- guides(colour=guide_legend(override.aes=list(alpha=1, size=3.25))) +
- ggrepel::geom_text_repel(show.legend =FALSE,
- fontface='bold',
- color='black')
- p4
- ggsave(device = 'jpg',dpi = 600,
- plot = p4,units = 'in',width = 11,height = 7,
- filename = paste0(savepath,
- "Images/2025-07-08_DiffAccChromTFsEnrichProgNeurblst12_",
- 'ExpressedEnENCDCs',
- "_snATAC-seq_Phox2b_predicted.id_1SidedVolc.jpg"))
- write.csv(x = EnrichedMotifs_Prog,
- file = paste0(savepath,'/2024-10-14_EnrichedMotifs_Progen+NB12_DAC-derivedMotifEnrichment_InModInts_byIntervalID2.csv'),
- quote = FALSE,row.names = FALSE)
- write.csv(x = EnrichedMotifs_Prog_Exp,
- file = paste0(savepath,'/2024-10-14_EnrichedMotifs_ExprsdNeurCrst_Progen+NB12_DAC-derivedMotifEnrichment_InModInts_byIntervalID2.csv'),
- quote = FALSE,row.names = FALSE)
- ### Find differentially accessible peaks that overlap with Sox10 binding sites
- ### within modifier intervals, if any:
- Sox10TFMotifsInModInts.all.cf<-read.csv(file = paste0(savepath,
- '2024-10-08_Sox10TFMotifsConservedInModIntervals_ClosestFeature.csv'))
- ### Binding sites are smaller than the peaks, so I am using the below order to
- ### find the overlap:
- locilist<-list()
- for(i in seq_along(FAM.sig.all$seqnames)){
- locilist[[i]]<-Sox10TFMotifsInModInts.all.cf[Sox10TFMotifsInModInts.all.cf$seqnames==FAM.sig.all$seqnames[i] &
- Sox10TFMotifsInModInts.all.cf$start>=FAM.sig.all$start[i] &
- Sox10TFMotifsInModInts.all.cf$end<=FAM.sig.all$end[i],]
- }
- FAM_inSox10Gopinath<-do.call('rbind',locilist)
- unique(FAM_inSox10Gopinath$V2)
- ### Two differentially accessible loci overlap with Sox10 TF binding motifs
- ### c('chr11-33400347-33400362','chr14-97891443-97891462'). These overlap with
- ### Ranbp17 and Dach1 introns. However, these do not have many fragments on
- ### These peaks (normalized frags 0-20 in the CoveragePlot) are very small.
- Sox10TFMotifsInModInts.all.cf[,4]<-as.numeric(Sox10TFMotifsInModInts.all.cf[,4])
- Sox10TFMotifsInModInts.all.cf[,5]<-as.numeric(Sox10TFMotifsInModInts.all.cf[,5])
- ### Plot binding motif loci and Dach1 as a whole:
- CoveragePlot(
- object = reprocessed,links = FALSE,
- region = 'chr14-97891443-97891462',extend.downstream = 10000,extend.upstream = 10000) /
- Signac::PeakPlot(object = reprocessed,region = 'chr14-97891443-97891462',
- peaks = GRanges(Sox10TFMotifsInModInts.all.cf[,3:5]),
- extend.downstream = 10000,extend.upstream = 10000)+
- patchwork::plot_layout(heights = c(5, 0.5))
- CoveragePlot(
- object = reprocessed,links = FALSE,
- region = 'chr14-97786853-98169543',extend.downstream = 10000,extend.upstream = 10000) /
- Signac::PeakPlot(object = reprocessed,region = 'chr14-97786853-98169543',
- peaks = GRanges(Sox10TFMotifsInModInts.all.cf[,3:5]),
- extend.downstream = 10000,extend.upstream = 10000)+
- patchwork::plot_layout(heights = c(5, 0.5))
- ### Plot binding motif loci and Ranbp17 as a whole:
- CoveragePlot(
- object = reprocessed,links = FALSE,
- region = 'chr11-33400347-33400362',extend.downstream = 10000,extend.upstream = 10000) /
- Signac::PeakPlot(object = reprocessed,region = 'chr11-33400347-33400362',
- peaks = GRanges(Sox10TFMotifsInModInts.all.cf[,3:5]),
- extend.downstream = 10000,extend.upstream = 10000)+
- patchwork::plot_layout(heights = c(5, 0.5))
- CoveragePlot(
- object = reprocessed,links = FALSE,
- region = 'chr11-33211795-33513746',extend.downstream = 10000,extend.upstream = 10000) /
- Signac::PeakPlot(object = reprocessed,region = 'chr11-33211795-33513746',
- peaks = GRanges(Sox10TFMotifsInModInts.all.cf[,3:5]),
- extend.downstream = 10000,extend.upstream = 10000)+
- patchwork::plot_layout(heights = c(5, 0.5))
- ### These peaks are very small and may not be important. Will investigate these
- ### genes further but this is not evidence that there are conserved Sox10
- ### binding sites within these differentially accessible peaks.
- write.csv(x = FAM_inSox10Gopinath,
- file = paste0(savepath,'2024-10-14_Sox10GopinathBS_Within_Phox2bCFPsnATAC-seqWT_DAPeaks_predicted.id_InModInts+CF.csv'),
- quote = FALSE,row.names = FALSE)
- saveRDS(reprocessed,paste0('D:/ModifierIntervalCodeSeuratV5/DataFiles/2024-10-15_snATAC-seq_16.5dpcPhox2bH2B-CFP+WholeGutPooled_Reprocessed.RDS'))
- sessionInfo()
- # R version 4.4.1 (2024-06-14 ucrt)
- # Platform: x86_64-w64-mingw32/x64
- # Running under: Windows 11 x64 (build 22631)
- #
- # Matrix products: default
- #
- #
- # locale:
- # [1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8 LC_MONETARY=English_United States.utf8
- # [4] LC_NUMERIC=C LC_TIME=English_United States.utf8
- #
- # time zone: America/Chicago
- # tzcode source: internal
- #
- # attached base packages:
- # [1] stats4 stats graphics grDevices utils datasets methods base
- #
- # other attached packages:
- # [1] org.Mm.eg.db_3.19.1 ggVennDiagram_1.5.2
- # [3] TxDb.Mmusculus.UCSC.mm10.knownGene_3.10.0 GenomicFeatures_1.56.0
- # [5] AnnotationDbi_1.66.0 Biobase_2.64.0
- # [7] lubridate_1.9.3 forcats_1.0.0
- # [9] stringr_1.5.1 dplyr_1.1.4
- # [11] purrr_1.0.2 readr_2.1.5
- # [13] tidyr_1.3.1 tibble_3.2.1
- # [15] ggplot2_3.5.1 tidyverse_2.0.0
- # [17] BSgenome.Mmusculus.UCSC.mm10_1.4.3 BSgenome_1.72.0
- # [19] rtracklayer_1.64.0 BiocIO_1.14.0
- # [21] Biostrings_2.72.1 XVector_0.44.0
- # [23] JASPAR2024_0.99.6 BiocFileCache_2.12.0
- # [25] dbplyr_2.5.0 TFBSTools_1.42.0
- # [27] GenomicRanges_1.56.1 GenomeInfoDb_1.40.1
- # [29] IRanges_2.38.0 S4Vectors_0.42.0
- # [31] BiocGenerics_0.50.0 cowplot_1.1.3
- # [33] Signac_1.13.0 Seurat_5.1.0
- # [35] SeuratObject_5.0.2 sp_2.1-4
- #
- # loaded via a namespace (and not attached):
- # [1] fs_1.6.4 matrixStats_1.3.0 spatstat.sparse_3.0-3
- # [4] bitops_1.0-7 enrichplot_1.24.0 DirichletMultinomial_1.46.0
- # [7] HDO.db_0.99.1 httr_1.4.7 RColorBrewer_1.1-3
- # [10] tools_4.4.1 sctransform_0.4.1 utf8_1.2.4
- # [13] R6_2.5.1 lazyeval_0.2.2 uwot_0.2.2
- # [16] withr_3.0.0 gridExtra_2.3 progressr_0.14.0
- # [19] cli_3.6.2 textshaping_0.4.0 spatstat.explore_3.2-7
- # [22] fastDummies_1.7.3 scatterpie_0.2.3 labeling_0.4.3
- # [25] spatstat.data_3.0-4 ggridges_0.5.6 pbapply_1.7-2
- # [28] yulab.utils_0.1.4 Rsamtools_2.20.0 systemfonts_1.1.0
- # [31] DOSE_3.30.1 R.utils_2.12.3 parallelly_1.37.1
- # [34] plotrix_3.8-4 limma_3.60.2 rstudioapi_0.16.0
- # [37] RSQLite_2.3.7 TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2 generics_0.1.3
- # [40] gridGraphics_0.5-1 gtools_3.9.5 ica_1.0-3
- # [43] spatstat.random_3.2-3 GO.db_3.19.1 Matrix_1.7-0
- # [46] fansi_1.0.6 abind_1.4-5 R.methodsS3_1.8.2
- # [49] lifecycle_1.0.4 yaml_2.3.8 SummarizedExperiment_1.34.0
- # [52] gplots_3.1.3.1 qvalue_2.36.0 SparseArray_1.4.8
- # [55] Rtsne_0.17 grid_4.4.1 blob_1.2.4
- # [58] promises_1.3.0 crayon_1.5.2 pwalign_1.0.0
- # [61] miniUI_0.1.1.1 lattice_0.22-6 annotate_1.82.0
- # [64] KEGGREST_1.44.0 pillar_1.9.0 fgsea_1.30.0
- # [67] boot_1.3-30 rjson_0.2.21 future.apply_1.11.2
- # [70] codetools_0.2-20 fastmatch_1.1-4 leiden_0.4.3.1
- # [73] glue_1.7.0 ggfun_0.1.5 data.table_1.15.4
- # [76] treeio_1.28.0 vctrs_0.6.5 png_0.1-8
- # [79] spam_2.10-0 gtable_0.3.5 poweRlaw_0.80.0
- # [82] cachem_1.1.0 S4Arrays_1.4.1 mime_0.12
- # [85] tidygraph_1.3.1 pracma_2.4.4 survival_3.6-4
- # [88] RcppRoll_0.3.0 statmod_1.5.0 fitdistrplus_1.1-11
- # [91] ROCR_1.0-11 nlme_3.1-164 ggtree_3.12.0
- # [94] bit64_4.0.5 filelock_1.0.3 RcppAnnoy_0.0.22
- # [97] irlba_2.3.5.1 KernSmooth_2.23-24 colorspace_2.1-0
- # [100] seqLogo_1.70.0 DBI_1.2.3 tidyselect_1.2.1
- # [103] bit_4.0.5 compiler_4.4.1 curl_5.2.1
- # [106] DelayedArray_0.30.1 plotly_4.10.4 shadowtext_0.1.3
- # [109] scales_1.3.0 caTools_1.18.2 ChIPseeker_1.40.0
- # [112] lmtest_0.9-40 digest_0.6.35 goftest_1.2-3
- # [115] spatstat.utils_3.0-4 presto_1.0.0 motifmatchr_1.26.0
- # [118] htmltools_0.5.8.1 pkgconfig_2.0.3 MatrixGenerics_1.16.0
- # [121] fastmap_1.2.0 rlang_1.1.4 htmlwidgets_1.6.4
- # [124] UCSC.utils_1.0.0 shiny_1.8.1.1 farver_2.1.2
- # [127] zoo_1.8-12 jsonlite_1.8.8 BiocParallel_1.38.0
- # [130] GOSemSim_2.30.0 R.oo_1.26.0 RCurl_1.98-1.14
- # [133] magrittr_2.0.3 GenomeInfoDbData_1.2.12 ggplotify_0.1.2
- # [136] dotCall64_1.1-1 patchwork_1.2.0 munsell_0.5.1
- # [139] Rcpp_1.0.12 ape_5.8 viridis_0.6.5
- # [142] reticulate_1.37.0 stringi_1.8.4 ggraph_2.2.1
- # [145] zlibbioc_1.50.0 MASS_7.3-60.2 plyr_1.8.9
- # [148] parallel_4.4.1 listenv_0.9.1 ggrepel_0.9.5
- # [151] deldir_2.0-4 CNEr_1.40.0 graphlayouts_1.1.1
- # [154] splines_4.4.1 tensor_1.5 hms_1.1.3
- # [157] igraph_2.0.3 spatstat.geom_3.2-9 RcppHNSW_0.6.0
- # [160] pkgload_1.3.4 reshape2_1.4.4 TFMPvalue_0.0.9
- # [163] XML_3.99-0.16.1 tweenr_2.0.3 tzdb_0.4.0
- # [166] httpuv_1.6.15 RANN_2.6.1 polyclip_1.10-6
- # [169] future_1.33.2 scattermore_1.2 ggforce_0.4.2
- # [172] xtable_1.8-4 restfulr_0.0.15 tidytree_0.4.6
- # [175] RSpectra_0.16-1 later_1.3.2 viridisLite_0.4.2
- # [178] ragg_1.3.2 aplot_0.2.3 memoise_2.0.1
- # [181] GenomicAlignments_1.40.0 cluster_2.1.6 timechange_0.3.0
- # [184] globals_0.16.3
2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, under CC-BY-4.0 · at the source
Overview
- Program in Human Genetics, Vanderbilt University, Nashville, Tennessee, United States of America
- Vanderbilt Brain Institute, Vanderbilt University, Nashville, Tennessee, United States of America
- Stowers Institute for Medical Research, Kansas City, Missouri, United States of America
- Genetic Medicine, Vanderbilt University School of Medicine, Nashville, Tennessee, United States of America
Abstract
Hirschsprung disease (HSCR) is characterized by absence of enteric ganglia (aganglionosis) along variable lengths of the distal intestine. This disorder results from deficient colonization of fetal intestine by enteric neural crest-derived cells (ENCDCs). HSCR exhibits complex, multifactorial inheritance with penetrance and severity varying widely even within families. SOX10 is among causal genes that predispose to aganglionosis. Yet, how gene interactions influence severity of HSCR aganglionosis is not understood. Prior mapping of aganglionosis modifiers was achieved in a standard F1-intercross utilizing the Sox10Dom HSCR mouse model. Here we deploy a novel strategy of genotyping an extended pedigree pedigree of Sox10Dom mice on a mixed genetic background. GWAS in this pedigree points to novel aganglionosis modifier intervals with replication and refinement of prior modifier regions. Complementary omics analysis of the developing Enteric Nervous System (ENS) enabled identification of multiple high-priority candidate genes within these modifier intervals based on gene expression, chromatin accessibility, and presence of conserved SOX10 binding motifs. We implemented a prioritization pipeline for ranking potential modifiers that generated candidate lists including several well-known for effects on ENS development as well as multiple novel genes. Among the novel genes, Dach1 ranked as a top priority candidate gene for modifying migration of ENCDCs and thus influencing aganglionosis severity. The results identify genome intervals with intrinsic genes that are logical candidates for modifying Sox10Dom aganglionosis severity. We also note that several human orthologs to aganglionosis modifier candidate genes are within linkage disequilibrium blocks containing genetic variants associated with human gut motility disorders, which offers opportunity for gaining biological insight into human HSCR severity.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 20 matches between paragraphs and lines of code.
Zenodo 20671852
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
21 files
- 2024-08-01_Zhaoetal2022D
ev_CodeFor_SCTv5Integrat — R, 385 lineseSeuratV5.R - 2024-08-15_Sox10Dom_GEMM
A_GWAS_Aganglionosis_All — R, 454 linesChrs_PrepPedFiles.R - 2024-08-15_Sox10Dom_GEMM
A_GWAS_Aganglionosis_No5 — R, 435 linesX15Chrs_PrepPedFiles.R - 2024-08-19_Sox10Dom_GEMM
A_GWAS_Aganglionosis_Sex — R, 755 lines-Specific_AllChrs_PrepPe dFiles.R - 2024-08-21_NeuralCrestSu
bset_Zhaoetal2022Dev_Cod — R, 269 lineseFor_SCTv5IntegrateSeura tV5.R - 2024-08-29_Sox10Dom_GEMM
A_GWAS_Aganglionosis_All — R, 190 linesChrs_PrepPedFiles_JEFFSM ITH.R - 2024-09-03_PlottingPedig
reeMeasurementsPCALength — R, 523 lines.R - 2024-09-16_snATAC-seq_Ph
ox2bH2B-CFP_16.6dpc_Impo — R, 1,356 lines, 2 matchesrtProcessing.R - 2024-10-02_ModifierInter
val_CandidateGenePipelin — R, 1,878 lines, 2 matchese_Part2+3_V1.R - 2024-10-03_ModifierInter
val_CandidateGenePipelin — R, 463 linese_Part4_V2.R - 2024-10-03_ModifierInter
val_CandidateGenePipelin — R, 494 lines, 3 matchese_Part5_V1.R - 2024-10-04_ModifierInter
val_CandidateGenePipelin — R, 1,094 lines, 1 matche_Part1_V3.R - 2024-10-08_ModifierInter
val_CandidateGenePipelin — R, 389 linese_Part6_V1.R - 2024-10-25_TelocytesExpr
ession.R — R, 212 lines - 2024-11-12_ModifierInter
val_CandidateGenePipelin — R, 225 linese_SuppFigureforPart2+3.R - 2024-11-13_ModifierInter
val_CandidateGenePipelin — R, 69 linese_SuppFigureforPart5.R - 2024-12-05_CandidateGene
sComparisonsCrossModalit — R, 729 lines, 1 matchy.R - 2024-12-18_CandidateGene
s_OverlapWithHumanGWASHi — R, 458 lines, 2 matchest.R - 2024-12-18_CandidateGene
s_VariantsDifferentThanB — R, 556 lines, 1 match6_FunctionalPrediction_V 2.R - 2024-12-26_CandidateGene
_ExonPheWAS_ManhattanPlo — R, 221 lines, 1 matchts.R - 2025-02-12_ModifierInter
val_CandidateGenePipelin — R, 1,092 lines, 7 matchese_Part7_V2.R
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:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 21 scripts, each with its path and the digest of its content;
- 20 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
- geo:GSE298406 — at NCBI GEO; found in “Data Availability”
Data Availability
All Code, fragment files, and snATAC-seq Seurat Object are shared at Zenodo: https://
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, issue, pages, dates, 4 authors, 15 MeSH terms, 7 funders, 94 references.
Cite
This paper
Benthal, J. T., Avila, J. A., Smith, J. R., & Southard-Smith, E. M. (2026). Combinatorial multiomic analysis from a pedigree of Sox10Dom Hirschsprung mice identifies multiple high confidence candidate modifiers of Enteric Nervous System development. PLoS computational biology, 22(7), e1014424. https://
BibTeX
@article{benthal2026comb
author = {Benthal, Joseph T and Avila, Justin A and Smith, Jeffrey R and Southard-Smith, E Michelle},
title = {{Combinatorial multiomic analysis from a pedigree of Sox10Dom Hirschsprung mice identifies multiple high confidence candidate modifiers of Enteric Nervous System development}},
journal = {PLoS computational biology},
year = {2026},
month = jul,
volume = {22},
number = {7},
pages = {e1014424},
publisher = {PLOS},
issn = {1553-734X},
doi = {10.1371/
url = {https://
pmid = {42406857},
pmcid = {PMC13372245}
}
RIS
TY - JOUR
AU - Benthal, Joseph T
AU - Avila, Justin A
AU - Smith, Jeffrey R
AU - Southard-Smith, E Michelle
TI - Combinatorial multiomic analysis from a pedigree of Sox10Dom Hirschsprung mice identifies multiple high confidence candidate modifiers of Enteric Nervous System development
T2 - PLoS computational biology
J2 - PLoS Comput Biol
PY - 2026
DA - 2026/
VL - 22
IS - 7
SP - e1014424
SN - 1553-734X
PB - PLOS
DO - 10.1371/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1371/
"type": "article-journal",
"title": "Combinatorial multiomic analysis from a pedigree of Sox10Dom Hirschsprung mice identifies multiple high confidence candidate modifiers of Enteric Nervous System development",
"container-title": "PLoS computational biology",
"author": [
{
"family": "Benthal",
"given": "Joseph T"
},
{
"family": "Avila",
"given": "Justin A"
},
{
"family": "Smith",
"given": "Jeffrey R"
},
{
"family": "Southard-Smith",
"given": "E Michelle"
}
],
"container-title-short":
"volume": "22",
"issue": "7",
"page": "e1014424",
"DOI": "10.1371/
"PMID": "42406857",
"PMCID": "PMC13372245",
"ISSN": "1553-734X",
"publisher": "PLOS",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
6
]
]
}
}
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. MedicineIn common: Harmony, clusterProfiler, Seurat, 7 other tools, genetics / omics, 4 references
- [2] doi:10.1038/s41597-026-07185-4 [code]
- A multi-center cross-platform single-cell multimodal atlas of the mouse cerebral cortex.Journal: Scientific dataIn common: Harmony, clusterProfiler, Seurat, 6 other tools, genetics / omics, mouse, 4 references
- [3] doi:10.1038/s41467-026-76232-w [code]
- Th17 effector cytokines induce shared and distinct microglial and endothelial cell responses in a mouse model for post-streptococcal encephalitis.Journal: Nature communicationsIn common: Harmony, clusterProfiler, Seurat, 6 other tools, genetics / omics, mouse, 3 references
- [4] doi:10.1038/s41593-026-02367-0 [code]
- A reproducible three-dimensional model of human brain tissue to investigate physiological and disease-associated microglia phenotypes.Journal: Nature neuroscienceIn common: Harmony, clusterProfiler, Seurat, 7 other tools, 2 references
- [5] doi:10.1038/s41398-026-04200-5 [code]
- Postmortem brain single-nucleus and bulk gene expression analyses identify shared and distinct abnormalities in bipolar disorder and major depressive disorder.Journal: Translational psychiatryIn common: Harmony, clusterProfiler, Seurat, 6 other tools, genetics / omics, 3 references
- [6] doi:10.1002/imt2.70163 [code]
- Spatial multi-omics unveils sphingolipid metabolic reprogramming within the retinal pathological niche.Journal: iMetaIn common: Harmony, clusterProfiler, Seurat, 7 other tools, genetics / omics, mouse, 1 reference
- [7] doi:10.1038/s41514-026-00397-3 [code]
- Nasal administration of Protollin enhances monocyte phagocytosis and decreases CD8&
lt;sup& gt;+& lt;/ sup& gt; T cell cytotoxicity in subjects with early Alzheimer's disease: a Phase 1 clinical trial. Journal: npj agingIn common: Harmony, Seurat, cowplot, 6 other tools, 3 references - [8] doi:10.1101/gr.281113.125 [code]
- Single-nucleus multiomic profiling of the aging mouse substantia nigra reveals conserved gene alterations linked to Parkinson's disease.Journal: Genome researchIn common: clusterProfiler, Seurat, cowplot, 6 other tools, genetics / omics, mouse, 2 references
- [9] doi:10.1186/s12967-026-08266-z [code]
- Single-cell multi-omic integration analysis prioritizes druggable genes and reveals cell-type-specific causal effects in glioblastomagenesis.Journal: Journal of translational medicineIn common: clusterProfiler, Seurat, cowplot, 6 other tools, genetics / omics, 2 references
- [10] doi:10.1016/j.cell.2026.05.026 [code]
- The critical role of the endogenous immune compartment after CAR T cell therapy in recurrent GBM.Journal: CellIn common: Harmony, clusterProfiler, Seurat, 6 other tools, genetics / omics, 2 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.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 21 scripts, and 20 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:f8f5ec8073d445ff…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[.
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.
