OSCR

Combinatorial multiomic analysis from a pedigree of Sox10Dom Hirschsprung mice identifies multiple high confidence candidate modifiers of Enteric Nervous System development.

Code ↔ Paper

20 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 20 matches
  1. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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. [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

  1. ################################################################################
  2. ### Modifier Interval Candidate Gene Pipeline Part 7:
  3. ### How many differentially accessible loci in WT 16.5dpc ENS nuclei (by
  4. ### cell group: Neuronal Branches, Neuroblast, Progenitor) are within modifier
  5. ### intervals? Which TF binding motifs are enriched within modifier interval-
  6. ### contained differentially accessible loci?
  7. ################################################################################
  8. ### Import packages:
  9. library(Seurat)
  10. library(Signac)
  11. library(cowplot)
  12. library(GenomicRanges)
  13. library(TFBSTools)
  14. library(JASPAR2024)
  15. library(BSgenome.Mmusculus.UCSC.mm10)
  16. library(tidyverse)
  17. library(TxDb.Mmusculus.UCSC.mm10.knownGene)
  18. library(ggVennDiagram)
  19. ### Get filepaths where data are stored:
  20. savepath='path/to/files/'
  21. savepath='C:/Users/jtben/Documents/ms2/MS2_Files/Manuscripts/Sox10DomPedigree_Dach1/'
  22. path10='D:/Projects/Gopinath_2016_SOX10_BindingConsensus_HMC/'
  23. path5='G:/Documents/ms2/MS2_Files/Projects/snATAC-seq/Dim1Included/'
  24. pathtoobjects<-'D:/JustinPaperCodeReview/JustinObjects/'
  25. path4='G:/Documents/ms2/MS2_Files/Projects/snATAC-seq/'
  26. path8='D:/Projects/Zhao_et_al_2022_scRNA-seq_GITractDev9.5-15.5dpc/'
  27. ### Import GWAS Summary Statistics and Modifier Interval Set Tables:
  28. GWASList<-readRDS(file = paste0(savepath,
  29. '2024-08-21_AllGWASCompiled.RDS'))
  30. IntList<-readRDS(file = paste0(savepath,
  31. '2024-08-21_AllGWAS-DerivedModifierIntervalsSetsCompiled.RDS'))
  32. IntGeneExpData<-readRDS(file = paste0(savepath,
  33. '2024-08-21_AllGWAS-DerivedModifierIntervalsSetsCompiled_GenesWithinData.RDS'))
  34. IntGeneExpList<-readRDS(file = paste0(savepath,
  35. '2024-08-21_AllGWAS-DerivedModifierIntervalsSetsCompiled_GenesWithinUnique.RDS'))
  36. TopSNPList<-readRDS(file = paste0(savepath,
  37. '2024-08-21_AllGWAS-DerivedModifierIntervalsSets_TopSNPs.RDS'))
  38. PeaksPerInterval<-readRDS(file = paste0(savepath,
  39. '2024-08-29_AllGWAS-DerivedModifierIntervalsSets_PeakSNPsPerModInt.RDS'))
  40. GroupsSigList<-readRDS(file = paste0(savepath,
  41. '2024-10-04_AllGWASCompiled_WithModInts.RDS'))
  42. ### Now I will load in the E16.5 WT snATAC-seq data
  43. ### generated from Phox2b H2B-CFP:
  44. reprocessed<-readRDS(file = paste0(path5,'2023-08-07_reprocessed_No1718+GeneralLabels+FragUpdate+Links.RDS'))
  45. DimPlot(reprocessed,label=TRUE)
  46. DefaultAssay(reprocessed)<-'MACS2peaks'
  47. Idents(reprocessed)<-'seurat_clusters'
  48. ### Load in data from Avila & Benthal et al., 2024:
  49. JAAE15.5 <- readRDS(paste0(pathtoobjects,
  50. "2024-08-23_ENS_MainClusts_JAA.RDS"))
  51. ### Make sure the grouped identities are present in the object:
  52. DimPlot(JAAE15.5,label=TRUE,group.by = 'Grouped_Ident')
  53. ### Make sure the Sub_cluster identities are present in the object:
  54. JAAE15.5<-SetIdent(JAAE15.5,value = 'sub_cluster')
  55. DimPlot(JAAE15.5,label=TRUE)
  56. ### Isolate only the WT cells from the object:
  57. WT<-subset(JAAE15.5,subset = Condition == c("Wt"))
  58. ### Make the default assay SCT:
  59. DefaultAssay(WT)<-'SCT'
  60. ### Below I use the estimated RNA expression in the snATAC-seq data to match
  61. ### cell identities to the scRNA-seq data:
  62. ### Note that Neuroblast Path 2 cells may not exist in the snATAC-seq data
  63. ### because these are nuclei, and Path 2 cells are cycling. M phase cells may
  64. ### have condensed chromosomes and therefore no nuclear membrane, making nuclei
  65. ### isolation from these cells impossible.
  66. ### quantify gene activity
  67. ### note that we restrict the imputation to variable genes from scRNA-seq,
  68. ### but could impute the full transcriptome if we wanted to
  69. genes.use <- VariableFeatures(WT)
  70. refdata <- GetAssayData(WT, assay = "RNA", slot = "data")[genes.use, ]
  71. ### Identify anchors
  72. transfer.anchors <- FindTransferAnchors(reference = WT,
  73. query = reprocessed,
  74. features = VariableFeatures(object = WT),
  75. reference.assay = "RNA",
  76. query.assay = "RNA", reduction = "cca")
  77. ### Transfer data to estimate which cell types correspond to snATAC-seq nuclei:
  78. celltype.predictions <- TransferData(anchorset = transfer.anchors,
  79. refdata = WT$Grouped_Ident,
  80. weight.reduction = reprocessed[["lsi"]],
  81. dims = 2:30)
  82. ### Add the metadata for the cell type predictions to the snATAC-seq data:
  83. reprocessed <- AddMetaData(reprocessed, metadata = celltype.predictions)
  84. ### Add the predicted IDs in the correct order to the snATAC-seq metadata:
  85. reprocessed$predicted.id <- factor(reprocessed$predicted.id,
  86. levels = c('Progenitors','Path1',
  87. 'Path2',"Branch.A",
  88. "Branch.B","Branch.C"))
  89. ### Make the predicted cell IDs the main cluster identities in the snATAC-seq
  90. ### data and make the grouped cell IDs the main cluster identities in the
  91. ### scRNA-seq reference data:
  92. Idents(reprocessed)<-'predicted.id'
  93. Idents(WT)<-'Grouped_Ident'
  94. ### Plot the UMAPs beside each other:
  95. p1 <- DimPlot(reprocessed)
  96. p2 <- DimPlot(WT)
  97. p1 | p2
  98. ### Set up dataframe to calculate confidence of cell type predictions:
  99. predictions <- table(reprocessed$seurat_clusters, reprocessed$predicted.id)
  100. predictions <- predictions/rowSums(predictions) # normalize for number of cells in each cell type
  101. predictions <- as.data.frame(predictions)
  102. predictions<-predictions[predictions$Var1 %in% c('0','1','2','3','4','5','6',
  103. '7','8','9','10','11','12',
  104. '13','14','15','16'),]
  105. ### Plot a heatmap of the cell type prediction confidence:
  106. p3 <- ggplot(predictions, aes(Var1, Var2, fill = Freq)) +
  107. geom_tile() + scale_fill_gradient(name = "Fraction \nof cells",
  108. low = "#ffffc8", high = "#7d0025") +
  109. xlab("Seurat Clusters") +
  110. ylab("Predicted cell type label from RNA") +
  111. theme_cowplot() +
  112. theme(axis.text.x = element_text(angle = 90,
  113. vjust = 0.5,
  114. hjust = 1))
  115. p1 | p2 | p3
  116. ### Save these plots:
  117. ggsave(plot = p1+
  118. theme(axis.line = element_line(colour = 'black', size = 1.1),
  119. axis.text.y = element_text(size = 10,face='bold'),
  120. legend.text=element_text(size=15,face='bold'),
  121. plot.title = element_text(size=20,face='bold'),
  122. legend.title = element_text(size=15,face='bold'),
  123. axis.text.x = element_text(size = 10,face='bold')),
  124. filename = paste0(savepath,"Images/2024-09-09_Reprocessed_snATAC-seqPhox2bBright2+Dim1+2_predicted.id.jpg"),
  125. device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
  126. ggsave(plot = p2+
  127. theme(axis.line = element_line(colour = 'black', size = 1.1),
  128. axis.text.y = element_text(size = 10,face='bold'),
  129. legend.text=element_text(size=15,face='bold'),
  130. plot.title = element_text(size=20,face='bold'),
  131. legend.title = element_text(size=15,face='bold'),
  132. axis.text.x = element_text(size = 10,face='bold')),
  133. filename = paste0(savepath,"Images/2024-09-09_JAA15.5scRNA-seq_Grouped_Ident.jpg"),
  134. device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
  135. ggsave(plot = p3+
  136. theme(axis.line = element_line(colour = 'black', size = 1.1),
  137. axis.text.y = element_text(size = 12,face='bold'),
  138. legend.text=element_text(size=15,face='bold'),
  139. plot.title = element_text(size=20,face='bold'),
  140. legend.title = element_text(size=15,face='bold'),
  141. axis.text.x = element_text(size = 12,face='bold'))+RotatedAxis(),
  142. filename = paste0(savepath,"Images/2024-09-09_Predicted.ID_Heatmap.jpg"),
  143. device = 'jpg',dpi = 600,units = 'in',width = 7,height = 5)
  144. ### Read in the Bright and Dim Phox2b-CFP snATAC-seq datasets from which the
  145. ### main snATAC-seq datasets originated for plotting purposes:
  146. Bright2<-readRDS(file = paste0(path4,'2021-08-26_snATAC-seq_Phox2bCFP_Bright2.RDS'))
  147. hm.Dim.integrate<-readRDS(file = paste0(path4,'2021-08-20_snATAC-seq_Phox2bCFP_Dims_IntegratedBatchCorrectedHarmony.RDS'))
  148. DimPlot(hm.Dim.integrate,label=TRUE) | DimPlot(Bright2,label=TRUE)
  149. gc()
  150. ### Plot UMAPs and save the plots:
  151. ggsave(plot = DimPlot(reprocessed)+
  152. theme(axis.line = element_line(colour = 'black', size = 1.1),
  153. axis.text.y = element_text(size = 10,face='bold'),
  154. legend.text=element_text(size=15,face='bold'),
  155. plot.title = element_text(size=20,face='bold'),
  156. legend.title = element_text(size=15,face='bold'),
  157. axis.text.x = element_text(size = 10,face='bold')),
  158. filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bBright2+Dim1+2.jpg"),
  159. device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
  160. ggsave(plot = DimPlot(reprocessed)+
  161. theme(axis.line = element_line(colour = 'black', size = 1.1),
  162. axis.text.y = element_text(size = 10,face='bold'),
  163. legend.text=element_text(size=15,face='bold'),
  164. plot.title = element_text(size=20,face='bold'),
  165. legend.title = element_text(size=15,face='bold'),
  166. axis.text.x = element_text(size = 10,face='bold')),
  167. filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bBright2+Dim1+2_forLegend.jpg"),
  168. device = 'jpg',dpi = 600,units = 'in',width = 7,height = 5)
  169. ggsave(plot = DimPlot(hm.Dim.integrate)+
  170. theme(axis.line = element_line(colour = 'black', size = 1.1),
  171. axis.text.y = element_text(size = 10,face='bold'),
  172. legend.text=element_text(size=15,face='bold'),
  173. plot.title = element_text(size=20,face='bold'),
  174. legend.title = element_text(size=15,face='bold'),
  175. axis.text.x = element_text(size = 10,face='bold')),
  176. filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bDim1+2_HBC.jpg"),
  177. device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
  178. ggsave(plot = DimPlot(Bright2)+
  179. theme(axis.line = element_line(colour = 'black', size = 1.1),
  180. axis.text.y = element_text(size = 10,face='bold'),
  181. legend.text=element_text(size=15,face='bold'),
  182. plot.title = element_text(size=20,face='bold'),
  183. legend.title = element_text(size=15,face='bold'),
  184. axis.text.x = element_text(size = 10,face='bold')),
  185. filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bBright2.jpg"),
  186. device = 'jpg',dpi = 600,units = 'in',width = 5,height = 3)
  187. ggsave(plot = DimPlot(Bright2)+
  188. theme(axis.line = element_line(colour = 'black', size = 1.1),
  189. axis.text.y = element_text(size = 10,face='bold'),
  190. legend.text=element_text(size=15,face='bold'),
  191. plot.title = element_text(size=20,face='bold'),
  192. legend.title = element_text(size=15,face='bold'),
  193. axis.text.x = element_text(size = 10,face='bold')),
  194. filename = paste0(savepath,"Images/2024-09-08_Reprocessed_snATAC-seqPhox2bBright2_forLegend.jpg"),
  195. device = 'jpg',dpi = 600,units = 'in',width = 7,height = 5)
  196. ### Make certain the main cluster identities in the snATAC-seq data are the
  197. ### predicted cell IDs:
  198. Idents(reprocessed)<-'predicted.id'
  199. ### Perform FindAllMarkers to find the differentially accessible peaks per cell
  200. ### ID in the snATAC-seq UMAP:
  201. FAM<-FindAllMarkers(object = reprocessed,
  202. assay = 'MACS2peaks',
  203. return.thresh = 0.05)
  204. ### Filter the differentially accessible peaks to those greater than 1.5
  205. ### average log2FoldChange and less than -1.5 average log2FoldChange:
  206. FAMpos<-FAM[FAM$avg_log2FC>1.5,]
  207. FAMneg<-FAM[FAM$avg_log2FC<((-1)*1.5),]
  208. FAM.sig<-rbind(FAMpos,FAMneg)
  209. ### Filter for Bonferroni-adjusted p-value less than 0.05:
  210. FAM.sig<-FAM.sig[FAM.sig$p_val_adj<0.05,]
  211. ### Change the name of a column to "loc" for loci:
  212. names(FAM.sig)[7]<-'loc'
  213. ### Split up the loci column to seqnames, start, and end columns per
  214. ### differentially accessible locus:
  215. FAM.sig[c('seqnames', 'start','end')] <- stringr::str_split_fixed(FAM.sig$loc, '-', 3)
  216. ### Flank each differentially accessible locus +/-25 base pairs:
  217. FAM.sig$start<-as.numeric(FAM.sig$start)-25
  218. FAM.sig$end<-as.numeric(FAM.sig$end)+25
  219. ### Save the differentially accessible loci dataset to a csv file:
  220. write.csv(x = FAM.sig,
  221. file = paste0(savepath,
  222. '2024-09-09_Phox2bCFPsnATAC-seqWT_DAPeaks_predicted.id.csv'),
  223. quote = FALSE)
  224. ### Find all Differentially Accessible Peaks conserved binding motifs that are
  225. ### within modifier intervals:
  226. ### Set up empty named list to write to:
  227. DAModIntList<-list(Male=NULL,
  228. Female=NULL,
  229. BothSexNo15X5=NULL,
  230. BothSexAllChrom=NULL,
  231. BinMale=NULL,
  232. BinFemale=NULL,
  233. BinBothSexAllChrom=NULL)
  234. ### Set up for loop to loop through the gene lists for each interval set to
  235. ### find which overlap with Differentially Accessible Peaks:
  236. for(i in seq_along(DAModIntList)){
  237. ### Initiate an empty list for writing Differentially Accessible Peaks to:
  238. DAModIntListmodlocilist<-list()
  239. for(j in seq_along(paste0('chr',IntList[[i]]$chrom))){
  240. DAModIntListmodlocilist[[j]]<-FAM.sig[FAM.sig$seqnames==paste0('chr',IntList[[i]]$chrom)[j] &
  241. FAM.sig$start>=IntList[[i]]$start0.5Mb[j] &
  242. FAM.sig$end<=IntList[[i]]$end0.5Mb[j],]
  243. try(DAModIntListmodlocilist[[j]]$ModInt<-IntList[[i]]$IntervalID[j])
  244. try(DAModIntListmodlocilist[[j]]$source<-names(IntList)[[i]])
  245. }
  246. DAModIntList[[i]]<-do.call('rbind',DAModIntListmodlocilist)
  247. }
  248. DAModIntList
  249. ### Add a name column to the data:
  250. for(i in seq_along(DAModIntList)){
  251. DAModIntList[[i]]$assay<-names(DAModIntList)[[i]]
  252. }
  253. ### Combine to one data table:
  254. FAM.sig.all<-do.call(rbind,DAModIntList)
  255. write.csv(x = FAM.sig.all,
  256. file = paste0(savepath,'2024-10-09_DifferentiallyAccessiblePeaksPredictedCellIDs_InModIntervals.csv'),
  257. quote = FALSE,row.names = FALSE)
  258. FAM.sig.all$IntervalID2<-paste0(FAM.sig.all$assay,'_',FAM.sig.all$ModInt)
  259. FAM.sig.all$IntervalID2Clust<-paste0(FAM.sig.all$cluster,'_',
  260. FAM.sig.all$IntervalID2)
  261. table(FAM.sig.all$IntervalID2,FAM.sig.all$cluster)
  262. ### Find overlap of the differentially accessible peaks across the modifier
  263. ### interval definitions:
  264. geneSets <- list(BothSexAllChrom = unique(FAM.sig.all[FAM.sig.all$assay=='BothSexAllChrom',]$loc),
  265. BothSexNo15X5 = unique(FAM.sig.all[FAM.sig.all$assay=='BothSexNo15X5',]$loc),
  266. Female = unique(FAM.sig.all[FAM.sig.all$assay=='Female',]$loc),
  267. Male = unique(FAM.sig.all[FAM.sig.all$assay=='Male',]$loc),
  268. BinBothSexAllChrom = unique(FAM.sig.all[FAM.sig.all$assay=='BinBothSexAllChrom',]$loc),
  269. BinFemale = unique(FAM.sig.all[FAM.sig.all$assay=='BinFemale',]$loc),
  270. BinMale = unique(FAM.sig.all[FAM.sig.all$assay=='BinMale',]$loc))
  271. vnnplt<-ggVennDiagram(geneSets,
  272. category.names = c("All Chrs",
  273. "No Chr5,15,X",
  274. "Female",
  275. "Male",
  276. "Bin All Chrs",
  277. 'BinFemale',
  278. 'BinMale'),
  279. # label_size = 5,
  280. # set_size = 5,
  281. force_upset = TRUE,
  282. label_size = 20,top.bar.numbers.size = 6,
  283. set_size = 20
  284. )
  285. # +scale_fill_distiller(palette = "Purples",direction=1)
  286. vnnplt
  287. vnnplt$plotlist[[1]][["theme"]][["text"]]$face<-'bold'
  288. vnnplt$plotlist[[1]][["theme"]][["text"]]$size<-17
  289. vnnplt$plotlist[[2]][["theme"]][["text"]]$face<-'bold'
  290. vnnplt$plotlist[[2]][["theme"]][["text"]]$size<-17
  291. vnnplt$plotlist[[3]][["theme"]][["text"]]$face<-'bold'
  292. vnnplt$plotlist[[3]][["theme"]][["text"]]$size<-17
  293. vnnplt
  294. ggsave(device = 'jpg',dpi = 600,
  295. plot = vnnplt,width = 13,height = 5,
  296. filename = paste0(savepath,"Images/2024-10-09_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_UpsetPlot.jpg"))
  297. ### Convert differentially accessible loci to GRanges objects so that
  298. ### plotting ChIPseeker annotations can be performed per group:
  299. ### DA Peaks overall:
  300. FAM.sig_GR<-GenomicRanges::makeGRangesFromDataFrame(df = FAM.sig,
  301. keep.extra.columns = TRUE,
  302. seqnames.field = 'seqnames',
  303. start.field = 'start',
  304. end.field = 'end',
  305. ignore.strand = TRUE)
  306. ### Annotate the loci:
  307. bed.annot=ChIPseeker::annotatePeak(FAM.sig_GR,
  308. tssRegion=c(-3000, 3000),
  309. TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
  310. annoDb="org.Mm.eg.db")
  311. annot_peaks=as.data.frame(bed.annot)
  312. ### Annotate the peaks per predicted cell ID:
  313. FAM.sig_GR.list<- split(FAM.sig_GR , f = FAM.sig_GR$cluster)
  314. peakAnnoList <- lapply(FAM.sig_GR.list, ChIPseeker::annotatePeak,
  315. TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
  316. tssRegion=c(-3000, 3000), verbose=FALSE,
  317. annoDb="org.Mm.eg.db")
  318. ### Plot the annotations in stacked bar plots:
  319. ChIPseeker::plotAnnoBar(peakAnnoList)
  320. ggsave(plot = ChIPseeker::plotAnnoBar(peakAnnoList)+
  321. theme(axis.line = element_line(colour = 'black', size = 1.1),
  322. axis.text.y = element_text(size = 10,face='bold'),
  323. legend.text=element_text(size=15,face='bold'),
  324. plot.title = element_text(size=20,face='bold'),
  325. legend.title = element_text(size=15,face='bold'),
  326. axis.text.x = element_text(size = 10,face='bold')),
  327. device = 'jpg',dpi = 600,width = 8,height = 2.5,
  328. filename = paste0(savepath,"Images/2024-09-09_ALLFAMPeaks_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_PeakClass_splitbyCluster.jpg"))
  329. ### Now for the DA peaks in modifier intervals:
  330. FAM.sig.all_GR<-GenomicRanges::makeGRangesFromDataFrame(df = FAM.sig.all,
  331. keep.extra.columns = TRUE,
  332. seqnames.field = 'seqnames',
  333. start.field = 'start',
  334. end.field = 'end',
  335. ignore.strand = TRUE)
  336. ### Annotate the loci:
  337. bed.annot=ChIPseeker::annotatePeak(FAM.sig.all_GR,
  338. tssRegion=c(-3000, 3000),
  339. TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
  340. annoDb="org.Mm.eg.db")
  341. annot_peaks=as.data.frame(bed.annot)
  342. # ChIPseeker::upsetplot(bed.annot, vennpie=TRUE)
  343. # ChIPseeker::vennpie(x = bed.annot)
  344. # ChIPseeker::plotAnnoBar(bed.annot)
  345. ### Then Split by modifier definitions, or "assay" and plot:
  346. FAM.sig.all_GR.list<- split(FAM.sig.all_GR , f = FAM.sig.all_GR$assay)
  347. peakAnnoList <- lapply(FAM.sig.all_GR.list, ChIPseeker::annotatePeak,
  348. TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
  349. tssRegion=c(-3000, 3000), verbose=FALSE,
  350. annoDb="org.Mm.eg.db")
  351. ChIPseeker::plotAnnoBar(peakAnnoList)
  352. ggsave(plot = ChIPseeker::plotAnnoBar(peakAnnoList)+
  353. theme(axis.line = element_line(colour = 'black', size = 1.1),
  354. axis.text.y = element_text(size = 10,face='bold'),
  355. legend.text=element_text(size=15,face='bold'),
  356. plot.title = element_text(size=20,face='bold'),
  357. legend.title = element_text(size=15,face='bold'),
  358. axis.text.x = element_text(size = 10,face='bold')),
  359. device = 'jpg',dpi = 600,width = 8,height = 2,
  360. filename = paste0(savepath,"Images/2024-09-09_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_PeakClass_splitbyAssay.jpg"))
  361. ### Then split by cluster definitions and plot:
  362. FAM.sig.all_GR.list<- split(FAM.sig.all_GR , f = FAM.sig.all_GR$cluster)
  363. peakAnnoList <- lapply(FAM.sig.all_GR.list, ChIPseeker::annotatePeak,
  364. TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
  365. tssRegion=c(-3000, 3000), verbose=FALSE,
  366. annoDb="org.Mm.eg.db")
  367. ChIPseeker::plotAnnoBar(peakAnnoList)
  368. ggsave(plot = ChIPseeker::plotAnnoBar(peakAnnoList)+
  369. theme(axis.line = element_line(colour = 'black', size = 1.1),
  370. axis.text.y = element_text(size = 10,face='bold'),
  371. legend.text=element_text(size=15,face='bold'),
  372. plot.title = element_text(size=20,face='bold'),
  373. legend.title = element_text(size=15,face='bold'),
  374. axis.text.x = element_text(size = 10,face='bold')),
  375. device = 'jpg',dpi = 600,width = 8,height = 2.5,
  376. filename = paste0(savepath,"Images/2024-09-09_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_PeakClass_splitbyCluster.jpg"))
  377. ### Then a combination of both to see how these might differ across cluster and
  378. ### modifier interval definitions:
  379. ### Make combined metadata of cluster and GEMMA run:
  380. FAM.sig.all_GR$assay_cluster<-paste0(FAM.sig.all_GR$assay,'_',
  381. FAM.sig.all_GR$cluster)
  382. ### Add annotations per assay_cluster:
  383. FAM.sig.all_GR.list2<- split(FAM.sig.all_GR , f = FAM.sig.all_GR$assay_cluster)
  384. peakAnnoList <- lapply(FAM.sig.all_GR.list2, ChIPseeker::annotatePeak,
  385. TxDb=TxDb.Mmusculus.UCSC.mm10.knownGene,
  386. tssRegion=c(-3000, 3000), verbose=FALSE,
  387. annoDb="org.Mm.eg.db")
  388. ### Plot these:
  389. ChIPseeker::plotAnnoBar(peakAnnoList)
  390. ggsave(plot = ChIPseeker::plotAnnoBar(peakAnnoList)+
  391. theme(axis.line = element_line(colour = 'black', size = 1.1),
  392. axis.text.y = element_text(size = 10,face='bold'),
  393. legend.text=element_text(size=15,face='bold'),
  394. plot.title = element_text(size=20,face='bold'),
  395. legend.title = element_text(size=15,face='bold'),
  396. axis.text.x = element_text(size = 10,face='bold')),
  397. device = 'jpg',dpi = 600,width = 8,height = 7,
  398. filename = paste0(savepath,"Images/2024-09-09_DiffAccChrom_snATAC-seq_Phox2b_predicted.id_PeakClass_splitbyAssayandCluster.jpg"))
  399. ### Perform TF binding motif enrichment on the differentially accessible loci
  400. ### within/per modifier intervals via Signac's base function and JASPAR 2024:
  401. ### Get the position frequency matrices from JASPAR 2024 for vertebrates:
  402. pfm <- TFBSTools::getMatrixSet(
  403. x = db(JASPAR2024()),
  404. opts = list(collection = "CORE",
  405. tax_group = 'vertebrates',
  406. all_versions = FALSE))
  407. # pfm.un <- TFBSTools::getMatrixSet(
  408. # x = db(JASPAR2024()),
  409. # opts = list(collection = "UNVALIDATED",
  410. # tax_group = 'vertebrates',
  411. # all_versions = TRUE))
  412. ### Add the UNVALIDATED DACH1 TF binding motif information from JASPAR2020 to
  413. ### the pfm object:
  414. ### https://jaspar2020.genereg.net/matrix/UN0306.1/
  415. pfm@listData[['UN0306.1']]<-pfm@listData[['MA0442.3']]
  416. as.matrix(read.table(file = paste0(savepath,'UN0306.1.jaspar.tsv'),
  417. header = FALSE,sep = '\t',row.names = c('A','C','G','T')))
  418. pfm@listData[['UN0306.1']]@profileMatrix<-as.matrix(read.table(file = paste0(savepath,'UN0306.1.jaspar.tsv'),
  419. header = FALSE,
  420. sep = '\t',
  421. row.names = c('A','C','G','T')))
  422. pfm@listData[['UN0306.1']]@profileMatrix
  423. pfm@listData[['UN0306.1']]@ID<-'UN0306.1'
  424. pfm@listData[['UN0306.1']]@name<-'DACH1'
  425. pfm@listData[['UN0306.1']]@matrixClass<-'SKI / DACH domain factors'
  426. pfm@listData[['UN0306.1']]@tags$centrality_logp<-(-633.186)
  427. pfm@listData[['UN0306.1']]@tags$family<-'DACH / dachshund-related factors'
  428. pfm@listData[['UN0306.1']]@tags$medline<-NULL
  429. pfm@listData[['UN0306.1']]@tags$remap_tf_name<-'DACH1'
  430. pfm@listData[['UN0306.1']]@tags$source<-'http://remap.univ-amu.fr/'
  431. pfm@listData[['UN0306.1']]@tags$tax_group<-'vertebrates'
  432. pfm@listData[['UN0306.1']]@tags$tfbs_shape_id<-NULL
  433. pfm@listData[['UN0306.1']]@tags$unibind<-NULL
  434. pfm@listData[['UN0306.1']]@tags$collection<-'UNVALIDATED'
  435. pfm@listData[['UN0306.1']]@tags$acc<-'Q9UI36'
  436. ### Add motif information to the snATAC-seq object:
  437. reprocessed <- AddMotifs(
  438. object = reprocessed,
  439. genome = BSgenome.Mmusculus.UCSC.mm10,
  440. pfm = pfm)
  441. ### Find background open chromatin to assess differentially accessible
  442. ### loci within modifier loci against for motif analysis:
  443. ### Get all "open" loci from the snATAC-seq object:
  444. open.peaks <- AccessiblePeaks(reprocessed)
  445. ### Match the overall GC content in the peak set:
  446. meta.feature <- GetAssayData(reprocessed,
  447. assay = "MACS2peaks",
  448. layer = "meta.features")
  449. peaks.matched <- MatchRegionStats(
  450. meta.feature = meta.feature[open.peaks, ],
  451. query.feature = meta.feature[unique(FAM.sig$loc), ],
  452. n = 50000)
  453. ### Perform motif enrichment analysis on just the progenitor and neuroblast
  454. ### nuclei by a combined metadata of GEMMA GWAS run + Modifier Interval:
  455. ### Make a GRanges object for these differentially accessible peaks:
  456. FAM.sig.all_GR_Prog<-GenomicRanges::makeGRangesFromDataFrame(df = FAM.sig.all[FAM.sig.all$cluster %in%
  457. c('Progenitors',
  458. 'Neuroblast1',
  459. 'Neuroblast2'),],
  460. keep.extra.columns = TRUE,
  461. seqnames.field = 'seqnames',
  462. start.field = 'start',
  463. end.field = 'end',
  464. ignore.strand = TRUE)
  465. ### Split the GRanges object by modifier interval definition:
  466. FAM.sig.all_GR_Prog.list<- split(FAM.sig.all_GR_Prog,
  467. f = FAM.sig.all_GR_Prog$IntervalID2)
  468. ### Perform TF binding motif enrichment analysis on these differentially
  469. ### accessible peaks per modifier interval:
  470. EnrichedMotifsList<-list()
  471. EnrichedMotifsList<-lapply(X = FAM.sig.all_GR_Prog.list,
  472. FUN = function(x) {FindMotifs(object = reprocessed,
  473. features = unique(x$loc))})
  474. ### Make into a combined dataframe:
  475. EnrichedMotifs_Prog<-EnrichedMotifsList %>%
  476. bind_rows(.id = "IntervalID2")
  477. ### Filter for those with an adjusted p-value of less than 0.05:
  478. EnrichedMotifs_Prog<-EnrichedMotifs_Prog[EnrichedMotifs_Prog$p.adjust<0.05,]
  479. ### Add the percent motif in the test chromatin vs the percent motif in the
  480. ### background chromatin:
  481. EnrichedMotifs_Prog$percent.diff<-EnrichedMotifs_Prog$percent.observed-EnrichedMotifs_Prog$percent.background
  482. ### Convert the motif names into mouse gene names:
  483. convert_to_mouse_gene <- function(gene_name) {
  484. # Split the gene name by "::"
  485. parts <- unlist(strsplit(gene_name, "::"))
  486. # Convert each part to mouse gene format
  487. mouse_genes <- sapply(parts, function(part) {
  488. part <- tolower(part)
  489. part <- paste0(toupper(substring(part, 1, 1)), substring(part, 2))
  490. return(part)
  491. })
  492. ### Combine the parts back if there were multiple
  493. return(mouse_genes)
  494. }
  495. ### Apply the function to the GeneNames column
  496. MouseGeneNames <- gsub(pattern = '\\.',
  497. replacement = '',
  498. x = unique(unlist(sapply(EnrichedMotifs_Prog$motif.name,
  499. convert_to_mouse_gene))))
  500. ### There is a specific name that needs to be corrected here: EWSR1-FLI1
  501. MouseGeneNames[717]<-strsplit(MouseGeneNames[142], "-")[[1]][2]
  502. MouseGeneNames[717]<-paste0(toupper(substring(MouseGeneNames[717], 1, 1)),
  503. tolower(substring(MouseGeneNames[717], 2)))
  504. MouseGeneNames[142]<-strsplit(MouseGeneNames[142], "-")[[1]][1]
  505. ### Load in the "Neural Crest" cells from Zhao et al., 2022:
  506. nc1<-readRDS(file=paste0(path8,
  507. '2024-08-21_NeuralCrestOnly_Zhaoetal2022Dev_SCTv5IntegrateSeuratV5.RDS'))
  508. DimPlot(nc1,label=TRUE)
  509. nc1$time<-factor(x=nc1$time,
  510. levels = c("E9.5",
  511. "E10.5",
  512. "E11.5",
  513. "E13.5",
  514. "E15.5"))
  515. ### Isolate all motif gene names that are expressed in the "Neural Crest" cells
  516. ### above a pseudobulk-RNA expression of 0.1 by timepoint:
  517. exptable<-as.data.frame(AverageExpression(object = nc1,
  518. assays = 'RNA',
  519. features = MouseGeneNames,
  520. group.by = 'time'))
  521. exptablefilt_0.1<-filter_all(exptable, any_vars(. > 0.1))
  522. # exptablefilt_0.2<-filter_all(exptable, any_vars(. > 0.2))
  523. # exptablefilt_0.12<-filter_all(exptable, any_vars(. > 0.12))
  524. ### Filter the enriched motif dataset to those genes that are expressed:
  525. EnrichedMotifs_Prog_Exp <- EnrichedMotifs_Prog[sapply(EnrichedMotifs_Prog$motif.name,
  526. function(name) any(sapply(rownames(exptablefilt_0.1),
  527. grepl, name,ignore.case=TRUE))), ]
  528. ### Load in all result tables from each pipeline part:
  529. Sox10TFMotsModInt<-read.csv(file=paste0(savepath,'2024-10-08_Sox10TFMotifsConservedInModIntervals_ClosestFeature.csv'))
  530. Sox10TFMotsModInt10gene<-read.csv(file=paste0(savepath,'2024-10-08_Sox10TFMotifsConservedInModIntervals_Closest10Genes.csv'))
  531. Top2peaks10gene<-read.csv(file=paste0(savepath,'2024-09-04_Top2PeaksPerIntervalSet_Closest10Genes.csv'))
  532. WavefrontModInt<-read.csv(file=paste0(savepath,'2024-10-08_StavelyWavefrontDEG_InModifiers_All_Assays.csv'))
  533. dfcompleteUnfiltModInt_filt<-read.csv(file = paste0(savepath,'2024-10-02_FiltEnrichedCellChatGenesInModInts_netP.csv'))
  534. # FAMfilt<-read.csv(file = paste0(savepath,
  535. # '2024-09-30_FAM_Zhao_2022_ByCellTypeTimeCombined_pvalLT0.05.csv'))[2:8]
  536. DiffExpModInt<-read.csv(file=paste0(savepath,'2024-10-07_Zhao_FAM_DiffExpGenesGenesPerModInt.csv'))
  537. DiffExpModInt[c('CellType', 'Age')]<-stringr::str_split_fixed(DiffExpModInt$cluster,'_',2)
  538. # DiffExpModInt_Adj<-DiffExpModInt[DiffExpModInt$Age!='E15.5',]
  539. # DiffExpModInt_Adj<-subset(DiffExpModInt_Adj,subset=CellType %in%
  540. # unique(DiffExpModInt_Adj$CellType)[c(1,3:9,11:23)])
  541. DiffExpModInt_Adj<-subset(DiffExpModInt,subset=CellType %in%
  542. unique(DiffExpModInt$CellType)[c(1,3:9,11:24)])
  543. ### Convert the motif names into mouse gene names:
  544. convert_to_mouse_gene <- function(gene_name) {
  545. # Split the gene name by "::"
  546. parts <- unlist(strsplit(gene_name, "::"))
  547. # Convert each part to mouse gene format
  548. mouse_genes <- sapply(parts, function(part) {
  549. part <- tolower(part)
  550. part <- paste0(toupper(substring(part, 1, 1)), substring(part, 2))
  551. return(part)
  552. })
  553. ### Combine the parts back if there were multiple
  554. return(mouse_genes)
  555. }
  556. ### Apply the function to the GeneNames column
  557. MouseGeneNames <- gsub(pattern = '\\.',
  558. replacement = '',
  559. x = unique(unlist(sapply(EnrichedMotifs_Prog_Exp$motif.name,
  560. convert_to_mouse_gene))))
  561. ### Find n closest genes per DA peak:
  562. DAPeaksModInt<-FAM.sig.all[FAM.sig.all$cluster %in%
  563. c('Progenitors',
  564. 'Neuroblast1',
  565. 'Neuroblast2'),]
  566. # loci<-GenomicRanges::makeGRangesFromDataFrame(df = DAPeaksModInt,
  567. # keep.extra.columns = TRUE,
  568. # seqnames.field = 'seqnames',
  569. # start.field = 'start',
  570. # end.field = 'end',
  571. # ignore.strand = TRUE)
  572. DAPeaksModInt[c('seqnames', 'start','end')] <- stringr::str_split_fixed(DAPeaksModInt$loc, '-', 3)
  573. loci<-DAPeaksModInt[,8:10]
  574. loci$start<-as.numeric(loci$start)
  575. loci$end<-as.numeric(loci$end)
  576. genesobj<-as.data.frame(genes(TxDb.Mmusculus.UCSC.mm10.knownGene))
  577. # Retrieve gene symbols using AnnotationDbi
  578. gene_symbols <- select(org.Mm.eg.db,
  579. keys = genesobj$gene_id,
  580. columns = "SYMBOL",
  581. keytype = "ENTREZID")
  582. genesobj <- merge(genesobj,
  583. gene_symbols,
  584. by.x = "gene_id",
  585. by.y = "ENTREZID")
  586. # Function to find nearest n genes
  587. find_nearest_genes <- function(loci, genesobj, n) {
  588. result <- lapply(1:nrow(loci), function(i) {
  589. genesobjchrom<-genesobj[genesobj$seqnames==loci$seqnames[i],]
  590. # Calculate distances to each gene
  591. distances <- pmin(abs(genesobjchrom$start - loci$start[i]),
  592. abs(genesobjchrom$end - loci$start[i]),
  593. abs(genesobjchrom$start - loci$end[i]),
  594. abs(genesobjchrom$end - loci$end[i]))
  595. # Check if locus falls within gene
  596. within_gene <- (loci$start[i] >= genesobjchrom$start & loci$end[i] <= genesobjchrom$end) |
  597. (loci$start[i] <= genesobjchrom$start & loci$end[i] >= genesobjchrom$start) |
  598. (loci$start[i] <= genesobjchrom$end & loci$end[i] >= genesobjchrom$end)
  599. # Set distance to 0 if locus falls within gene
  600. distances[within_gene] <- 0
  601. # Get the indices of the nearest genes
  602. nearest_indices <- order(distances)[1:n]
  603. nearest_genes <- genesobjchrom[nearest_indices, ]
  604. data.frame(
  605. locus = paste0(loci$seqnames[i],'-',loci$start[i],'-',loci$end[i]),
  606. gene_ids = nearest_genes$SYMBOL,
  607. distances = distances[nearest_indices]
  608. )
  609. })
  610. do.call(rbind, result)
  611. }
  612. # Set the number of nearest genes to retrieve
  613. n <- 3
  614. # Find the nearest genes
  615. nearest_genes_df <- find_nearest_genes(loci, genesobj, n)
  616. # Display the results
  617. print(nearest_genes_df)
  618. nearest_genes_df_Sox10TFBM <- find_nearest_genes(Sox10TFMotsModInt[,3:5], genesobj, 10)
  619. ### Using the nearest 10 genes to both the conserved Sox10 TF binding motifs,
  620. ### the nearest 3 genes to the differentially accessible peaks, the
  621. ### differentially expressed genes from the gut cells across celltype/time, the
  622. ### differentially expressed genes from the ENCDC migrating wavefront, and the
  623. ### genes from the CellChat results (all of these modalities within modifier
  624. ### intervals), I will label the gene that overlap with the enriched TF motifs
  625. ### for figure-making purposes.
  626. genes<-unique(c(unique(c('St18','Pkhd1',
  627. 'Il17f','Mcm3',
  628. 'Adgrb3','Cyp7b1',
  629. 'Nlgn1','Mecom',
  630. 'Sox2','Slit2',
  631. 'Ppargc1a','Chic2',
  632. 'Pdgfra','Prdm8',
  633. 'Antxr2','Ranbp17',
  634. 'Tlx3','Tenm2',
  635. 'Bcas3','Tbx2',
  636. 'Cadps','Ptprg',
  637. 'Dach1','Fam204a')),
  638. unique(WavefrontModInt$symbol),
  639. unique(nearest_genes_df$gene_ids),
  640. c('Ppia','Col1a1','Lgals9','Ednrb','Nrg1'),
  641. unique(DiffExpModInt_Adj$mm10.kgXref.geneSymbol)))
  642. MouseGeneNamesSub<-intersect(MouseGeneNames,genes)
  643. EnrichedMotifs_Prog_Exp_sub <- EnrichedMotifs_Prog_Exp[sapply(EnrichedMotifs_Prog_Exp$motif.name,
  644. function(name) any(sapply(MouseGeneNamesSub,
  645. grepl, name,ignore.case=TRUE))), ]
  646. ### The above code includes genes Ebf1 and Tbx2. Unfortunately, the way the code
  647. ### is written, this fails to filter out Srebf1, Sox21, Tbx20, and Tbx21, because Ebf1
  648. ### and Tbx2 are substrings of those genes. I manually checked to see if each of
  649. ### these genes were in at least 1 other data modality, and only Srebf2 was in
  650. ### the differentially accessible peaks and in the differentially expressed
  651. ### genes. For the rest which were not in any other of the data modalities, I am
  652. ### manually removing them here:
  653. EnrichedMotifs_Prog_Exp_sub<-EnrichedMotifs_Prog_Exp_sub[EnrichedMotifs_Prog_Exp_sub$motif.name %in%
  654. setdiff(EnrichedMotifs_Prog_Exp_sub$motif.name,
  655. c('Tbx20','Tbx21',
  656. 'TBX21','TBX20',
  657. 'SOX21')),]
  658. EnrichedMotifs_Prog_Exp_subtoplot <- EnrichedMotifs_Prog_Exp_sub %>%
  659. separate(IntervalID2, into = c("IntervalID", "specificinterval"), sep = "_",
  660. extra = "merge")
  661. p4<-ggplot(data=EnrichedMotifs_Prog_Exp_subtoplot,
  662. aes(x=fold.enrichment,
  663. y=-log10(p.adjust),
  664. col=IntervalID,
  665. label=motif.name,
  666. size=percent.diff
  667. )) +
  668. geom_point() +
  669. theme_minimal() +
  670. theme(
  671. # legend.position = c(.93, .93),
  672. legend.title=element_text(size = 20,face='bold'),
  673. legend.text = element_text(size = 20,face='bold'),
  674. # legend.title=element_blank(),
  675. axis.line = element_line(colour = 'black', size = 1.1),
  676. axis.text.y = element_text(size = 10,face='bold'),
  677. axis.text.x = element_text(size = 10,face='bold'),
  678. axis.title = element_text(size = 15,face='bold')) +
  679. guides(colour=guide_legend(override.aes=list(alpha=1, size=3.25))) +
  680. ggrepel::geom_text_repel(show.legend =FALSE,
  681. fontface='bold',
  682. color='black')
  683. p4
  684. ggsave(device = 'jpg',dpi = 600,
  685. plot = p4,units = 'in',width = 11,height = 7,
  686. filename = paste0(savepath,
  687. "Images/2025-02-11_DiffAccChromTFsEnrichProgNeurblst12_",
  688. 'OverlapWithOtherModalities',
  689. "_snATAC-seq_Phox2b_predicted.id_1SidedVolc.jpg"))
  690. p4<-ggplot(data=EnrichedMotifs_Prog_Exp,
  691. aes(x=fold.enrichment,
  692. y=-log10(p.adjust),
  693. col=assay,
  694. label=motif.name,
  695. size=percent.diff
  696. )) +
  697. geom_point() +
  698. theme_minimal() +
  699. theme(
  700. # legend.position = c(.93, .93),
  701. legend.title=element_text(size = 20,face='bold'),
  702. legend.text = element_text(size = 20,face='bold'),
  703. # legend.title=element_blank(),
  704. axis.line = element_line(colour = 'black', size = 1.1),
  705. axis.text.y = element_text(size = 10,face='bold'),
  706. axis.text.x = element_text(size = 10,face='bold'),
  707. axis.title = element_text(size = 15,face='bold')) +
  708. guides(colour=guide_legend(override.aes=list(alpha=1, size=3.25))) +
  709. ggrepel::geom_text_repel(show.legend =FALSE,
  710. fontface='bold',
  711. color='black')
  712. p4
  713. ggsave(device = 'jpg',dpi = 600,
  714. plot = p4,units = 'in',width = 11,height = 7,
  715. filename = paste0(savepath,
  716. "Images/2025-07-08_DiffAccChromTFsEnrichProgNeurblst12_",
  717. 'ExpressedEnENCDCs',
  718. "_snATAC-seq_Phox2b_predicted.id_1SidedVolc.jpg"))
  719. write.csv(x = EnrichedMotifs_Prog,
  720. file = paste0(savepath,'/2024-10-14_EnrichedMotifs_Progen+NB12_DAC-derivedMotifEnrichment_InModInts_byIntervalID2.csv'),
  721. quote = FALSE,row.names = FALSE)
  722. write.csv(x = EnrichedMotifs_Prog_Exp,
  723. file = paste0(savepath,'/2024-10-14_EnrichedMotifs_ExprsdNeurCrst_Progen+NB12_DAC-derivedMotifEnrichment_InModInts_byIntervalID2.csv'),
  724. quote = FALSE,row.names = FALSE)
  725. ### Find differentially accessible peaks that overlap with Sox10 binding sites
  726. ### within modifier intervals, if any:
  727. Sox10TFMotifsInModInts.all.cf<-read.csv(file = paste0(savepath,
  728. '2024-10-08_Sox10TFMotifsConservedInModIntervals_ClosestFeature.csv'))
  729. ### Binding sites are smaller than the peaks, so I am using the below order to
  730. ### find the overlap:
  731. locilist<-list()
  732. for(i in seq_along(FAM.sig.all$seqnames)){
  733. locilist[[i]]<-Sox10TFMotifsInModInts.all.cf[Sox10TFMotifsInModInts.all.cf$seqnames==FAM.sig.all$seqnames[i] &
  734. Sox10TFMotifsInModInts.all.cf$start>=FAM.sig.all$start[i] &
  735. Sox10TFMotifsInModInts.all.cf$end<=FAM.sig.all$end[i],]
  736. }
  737. FAM_inSox10Gopinath<-do.call('rbind',locilist)
  738. unique(FAM_inSox10Gopinath$V2)
  739. ### Two differentially accessible loci overlap with Sox10 TF binding motifs
  740. ### c('chr11-33400347-33400362','chr14-97891443-97891462'). These overlap with
  741. ### Ranbp17 and Dach1 introns. However, these do not have many fragments on
  742. ### These peaks (normalized frags 0-20 in the CoveragePlot) are very small.
  743. Sox10TFMotifsInModInts.all.cf[,4]<-as.numeric(Sox10TFMotifsInModInts.all.cf[,4])
  744. Sox10TFMotifsInModInts.all.cf[,5]<-as.numeric(Sox10TFMotifsInModInts.all.cf[,5])
  745. ### Plot binding motif loci and Dach1 as a whole:
  746. CoveragePlot(
  747. object = reprocessed,links = FALSE,
  748. region = 'chr14-97891443-97891462',extend.downstream = 10000,extend.upstream = 10000) /
  749. Signac::PeakPlot(object = reprocessed,region = 'chr14-97891443-97891462',
  750. peaks = GRanges(Sox10TFMotifsInModInts.all.cf[,3:5]),
  751. extend.downstream = 10000,extend.upstream = 10000)+
  752. patchwork::plot_layout(heights = c(5, 0.5))
  753. CoveragePlot(
  754. object = reprocessed,links = FALSE,
  755. region = 'chr14-97786853-98169543',extend.downstream = 10000,extend.upstream = 10000) /
  756. Signac::PeakPlot(object = reprocessed,region = 'chr14-97786853-98169543',
  757. peaks = GRanges(Sox10TFMotifsInModInts.all.cf[,3:5]),
  758. extend.downstream = 10000,extend.upstream = 10000)+
  759. patchwork::plot_layout(heights = c(5, 0.5))
  760. ### Plot binding motif loci and Ranbp17 as a whole:
  761. CoveragePlot(
  762. object = reprocessed,links = FALSE,
  763. region = 'chr11-33400347-33400362',extend.downstream = 10000,extend.upstream = 10000) /
  764. Signac::PeakPlot(object = reprocessed,region = 'chr11-33400347-33400362',
  765. peaks = GRanges(Sox10TFMotifsInModInts.all.cf[,3:5]),
  766. extend.downstream = 10000,extend.upstream = 10000)+
  767. patchwork::plot_layout(heights = c(5, 0.5))
  768. CoveragePlot(
  769. object = reprocessed,links = FALSE,
  770. region = 'chr11-33211795-33513746',extend.downstream = 10000,extend.upstream = 10000) /
  771. Signac::PeakPlot(object = reprocessed,region = 'chr11-33211795-33513746',
  772. peaks = GRanges(Sox10TFMotifsInModInts.all.cf[,3:5]),
  773. extend.downstream = 10000,extend.upstream = 10000)+
  774. patchwork::plot_layout(heights = c(5, 0.5))
  775. ### These peaks are very small and may not be important. Will investigate these
  776. ### genes further but this is not evidence that there are conserved Sox10
  777. ### binding sites within these differentially accessible peaks.
  778. write.csv(x = FAM_inSox10Gopinath,
  779. file = paste0(savepath,'2024-10-14_Sox10GopinathBS_Within_Phox2bCFPsnATAC-seqWT_DAPeaks_predicted.id_InModInts+CF.csv'),
  780. quote = FALSE,row.names = FALSE)
  781. saveRDS(reprocessed,paste0('D:/ModifierIntervalCodeSeuratV5/DataFiles/2024-10-15_snATAC-seq_16.5dpcPhox2bH2B-CFP+WholeGutPooled_Reprocessed.RDS'))
  782. sessionInfo()
  783. # R version 4.4.1 (2024-06-14 ucrt)
  784. # Platform: x86_64-w64-mingw32/x64
  785. # Running under: Windows 11 x64 (build 22631)
  786. #
  787. # Matrix products: default
  788. #
  789. #
  790. # locale:
  791. # [1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8 LC_MONETARY=English_United States.utf8
  792. # [4] LC_NUMERIC=C LC_TIME=English_United States.utf8
  793. #
  794. # time zone: America/Chicago
  795. # tzcode source: internal
  796. #
  797. # attached base packages:
  798. # [1] stats4 stats graphics grDevices utils datasets methods base
  799. #
  800. # other attached packages:
  801. # [1] org.Mm.eg.db_3.19.1 ggVennDiagram_1.5.2
  802. # [3] TxDb.Mmusculus.UCSC.mm10.knownGene_3.10.0 GenomicFeatures_1.56.0
  803. # [5] AnnotationDbi_1.66.0 Biobase_2.64.0
  804. # [7] lubridate_1.9.3 forcats_1.0.0
  805. # [9] stringr_1.5.1 dplyr_1.1.4
  806. # [11] purrr_1.0.2 readr_2.1.5
  807. # [13] tidyr_1.3.1 tibble_3.2.1
  808. # [15] ggplot2_3.5.1 tidyverse_2.0.0
  809. # [17] BSgenome.Mmusculus.UCSC.mm10_1.4.3 BSgenome_1.72.0
  810. # [19] rtracklayer_1.64.0 BiocIO_1.14.0
  811. # [21] Biostrings_2.72.1 XVector_0.44.0
  812. # [23] JASPAR2024_0.99.6 BiocFileCache_2.12.0
  813. # [25] dbplyr_2.5.0 TFBSTools_1.42.0
  814. # [27] GenomicRanges_1.56.1 GenomeInfoDb_1.40.1
  815. # [29] IRanges_2.38.0 S4Vectors_0.42.0
  816. # [31] BiocGenerics_0.50.0 cowplot_1.1.3
  817. # [33] Signac_1.13.0 Seurat_5.1.0
  818. # [35] SeuratObject_5.0.2 sp_2.1-4
  819. #
  820. # loaded via a namespace (and not attached):
  821. # [1] fs_1.6.4 matrixStats_1.3.0 spatstat.sparse_3.0-3
  822. # [4] bitops_1.0-7 enrichplot_1.24.0 DirichletMultinomial_1.46.0
  823. # [7] HDO.db_0.99.1 httr_1.4.7 RColorBrewer_1.1-3
  824. # [10] tools_4.4.1 sctransform_0.4.1 utf8_1.2.4
  825. # [13] R6_2.5.1 lazyeval_0.2.2 uwot_0.2.2
  826. # [16] withr_3.0.0 gridExtra_2.3 progressr_0.14.0
  827. # [19] cli_3.6.2 textshaping_0.4.0 spatstat.explore_3.2-7
  828. # [22] fastDummies_1.7.3 scatterpie_0.2.3 labeling_0.4.3
  829. # [25] spatstat.data_3.0-4 ggridges_0.5.6 pbapply_1.7-2
  830. # [28] yulab.utils_0.1.4 Rsamtools_2.20.0 systemfonts_1.1.0
  831. # [31] DOSE_3.30.1 R.utils_2.12.3 parallelly_1.37.1
  832. # [34] plotrix_3.8-4 limma_3.60.2 rstudioapi_0.16.0
  833. # [37] RSQLite_2.3.7 TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2 generics_0.1.3
  834. # [40] gridGraphics_0.5-1 gtools_3.9.5 ica_1.0-3
  835. # [43] spatstat.random_3.2-3 GO.db_3.19.1 Matrix_1.7-0
  836. # [46] fansi_1.0.6 abind_1.4-5 R.methodsS3_1.8.2
  837. # [49] lifecycle_1.0.4 yaml_2.3.8 SummarizedExperiment_1.34.0
  838. # [52] gplots_3.1.3.1 qvalue_2.36.0 SparseArray_1.4.8
  839. # [55] Rtsne_0.17 grid_4.4.1 blob_1.2.4
  840. # [58] promises_1.3.0 crayon_1.5.2 pwalign_1.0.0
  841. # [61] miniUI_0.1.1.1 lattice_0.22-6 annotate_1.82.0
  842. # [64] KEGGREST_1.44.0 pillar_1.9.0 fgsea_1.30.0
  843. # [67] boot_1.3-30 rjson_0.2.21 future.apply_1.11.2
  844. # [70] codetools_0.2-20 fastmatch_1.1-4 leiden_0.4.3.1
  845. # [73] glue_1.7.0 ggfun_0.1.5 data.table_1.15.4
  846. # [76] treeio_1.28.0 vctrs_0.6.5 png_0.1-8
  847. # [79] spam_2.10-0 gtable_0.3.5 poweRlaw_0.80.0
  848. # [82] cachem_1.1.0 S4Arrays_1.4.1 mime_0.12
  849. # [85] tidygraph_1.3.1 pracma_2.4.4 survival_3.6-4
  850. # [88] RcppRoll_0.3.0 statmod_1.5.0 fitdistrplus_1.1-11
  851. # [91] ROCR_1.0-11 nlme_3.1-164 ggtree_3.12.0
  852. # [94] bit64_4.0.5 filelock_1.0.3 RcppAnnoy_0.0.22
  853. # [97] irlba_2.3.5.1 KernSmooth_2.23-24 colorspace_2.1-0
  854. # [100] seqLogo_1.70.0 DBI_1.2.3 tidyselect_1.2.1
  855. # [103] bit_4.0.5 compiler_4.4.1 curl_5.2.1
  856. # [106] DelayedArray_0.30.1 plotly_4.10.4 shadowtext_0.1.3
  857. # [109] scales_1.3.0 caTools_1.18.2 ChIPseeker_1.40.0
  858. # [112] lmtest_0.9-40 digest_0.6.35 goftest_1.2-3
  859. # [115] spatstat.utils_3.0-4 presto_1.0.0 motifmatchr_1.26.0
  860. # [118] htmltools_0.5.8.1 pkgconfig_2.0.3 MatrixGenerics_1.16.0
  861. # [121] fastmap_1.2.0 rlang_1.1.4 htmlwidgets_1.6.4
  862. # [124] UCSC.utils_1.0.0 shiny_1.8.1.1 farver_2.1.2
  863. # [127] zoo_1.8-12 jsonlite_1.8.8 BiocParallel_1.38.0
  864. # [130] GOSemSim_2.30.0 R.oo_1.26.0 RCurl_1.98-1.14
  865. # [133] magrittr_2.0.3 GenomeInfoDbData_1.2.12 ggplotify_0.1.2
  866. # [136] dotCall64_1.1-1 patchwork_1.2.0 munsell_0.5.1
  867. # [139] Rcpp_1.0.12 ape_5.8 viridis_0.6.5
  868. # [142] reticulate_1.37.0 stringi_1.8.4 ggraph_2.2.1
  869. # [145] zlibbioc_1.50.0 MASS_7.3-60.2 plyr_1.8.9
  870. # [148] parallel_4.4.1 listenv_0.9.1 ggrepel_0.9.5
  871. # [151] deldir_2.0-4 CNEr_1.40.0 graphlayouts_1.1.1
  872. # [154] splines_4.4.1 tensor_1.5 hms_1.1.3
  873. # [157] igraph_2.0.3 spatstat.geom_3.2-9 RcppHNSW_0.6.0
  874. # [160] pkgload_1.3.4 reshape2_1.4.4 TFMPvalue_0.0.9
  875. # [163] XML_3.99-0.16.1 tweenr_2.0.3 tzdb_0.4.0
  876. # [166] httpuv_1.6.15 RANN_2.6.1 polyclip_1.10-6
  877. # [169] future_1.33.2 scattermore_1.2 ggforce_0.4.2
  878. # [172] xtable_1.8-4 restfulr_0.0.15 tidytree_0.4.6
  879. # [175] RSpectra_0.16-1 later_1.3.2 viridisLite_0.4.2
  880. # [178] ragg_1.3.2 aplot_0.2.3 memoise_2.0.1
  881. # [181] GenomicAlignments_1.40.0 cluster_2.1.6 timechange_0.3.0
  882. # [184] globals_0.16.3

2025-02-12_ModifierInterval_CandidateGenePipeline_Part7_V2.R, under CC-BY-4.0 · at the source

Overview

Authors: Joseph T Benthal1, Justin A Avila2,3, Jeffrey R Smith4, E Michelle Southard-Smith1,2,4
  1. Program in Human Genetics, Vanderbilt University, Nashville, Tennessee, United States of America
  2. Vanderbilt Brain Institute, Vanderbilt University, Nashville, Tennessee, United States of America
  3. Stowers Institute for Medical Research, Kansas City, Missouri, United States of America
  4. Genetic Medicine, Vanderbilt University School of Medicine, Nashville, Tennessee, United States of America
Institutions: Vanderbilt University (United States); Stowers Institute for Medical Research (United States)
Journal: PLoS computational biology, volume 22, issue 7, article e1014424
Dates: received 3 November 2025; accepted 9 June 2026; published online 6 July 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1371/journal.pcbi.1014424 · PMID 42406857 · PMCID PMC13372245 · OpenAlex W7167545869
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: genetics / omics (modality), human (organism), mouse (organism)
Methods: Statistics
MeSH: Enteric Nervous System*, Hirschsprung Disease*, SOXE Transcription Factors*, Animals, Computational Biology, Disease Models, Animal, Female, Genetic Predisposition to Disease, Genome-Wide Association Study, Humans, Male, Mice, Multiomics, Neural Crest, Pedigree (* major topic)
Topic: Congenital gastrointestinal and neural anomalies (Surgery, Medicine), according to OpenAlex
Funding: National Institute of Diabetes and Digestive and Kidney Diseases (1F31DK137637-01, R01 DK127178, R01 DK60047, R01-DK127178-03S1); Howard Hughes Medical Institute (GT11505); National Institute of Child Health and Human Development (T32-HD007502); NIDDK NIH HHS (R01 DK127178, P30 DK058404, F31 DK137637, R01 DK060047); National Institute of Diabetes and Kidney Disease (P30-DK058404); NICHD NIH HHS (P50 HD103537, T32 HD007502); Eunice Kennedy Shriver National Institute of Child Health and Human Development (T32-HD007502)
Citations: not cited yet (Europe PMC); 96 references in the paper

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

License: CC-BY-4.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Languages: R (21)
Size: 31 files, 21 scripts
Software Heritage: not checked
Found in: “Data Availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: tidyverse (18 files), ggplot2 (16 files), Seurat (14 files), patchwork (6 files), cowplot (4 files), ggpubr (3 files), data.table (2 files), Harmony (2 files), clusterProfiler (1 file), reshape2 (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
21 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:

  • 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

Data Availability

All Code, fragment files, and snATAC-seq Seurat Object are shared at Zenodo: https://doi.org/10.5281/zenodo.20671852 SnATAC-seq data is accessible at GEO under accession GSE298406 (https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE298406).

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://doi.org/10.1371/journal.pcbi.1014424

BibTeX

@article{benthal2026combinatorial,
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/journal.pcbi.1014424},
url = {https://doi.org/10.1371/journal.pcbi.1014424},
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/07/06
VL - 22
IS - 7
SP - e1014424
SN - 1553-734X
PB - PLOS
DO - 10.1371/journal.pcbi.1014424
UR - https://doi.org/10.1371/journal.pcbi.1014424
LA - en
ER -

CSL-JSON

{
"id": "10.1371/journal.pcbi.1014424",
"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": "PLoS Comput Biol",
"volume": "22",
"issue": "7",
"page": "e1014424",
"DOI": "10.1371/journal.pcbi.1014424",
"PMID": "42406857",
"PMCID": "PMC13372245",
"ISSN": "1553-734X",
"publisher": "PLOS",
"URL": "https://doi.org/10.1371/journal.pcbi.1014424",
"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. Medicine
In 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 data
In 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 communications
In 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 neuroscience
In 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 psychiatry
In 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: iMeta
In 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 aging
In 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 research
In 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 medicine
In 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: Cell
In 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.

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.