OSCR

Immune cell profiling reveals expanded stem cell-like memory T cells in anti-GAD65-associated neurological syndromes.

Code ↔ Paper

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

The 9 matches
  1. [1] § Results › Compartment-Specific TCR Clonal Expansion in Anti-GAD65 AINS. ↔ R/immune_cell_profiling_antiGAD65_data_analysis_visualization.Rmd, lines 342 to 467 · score 0.70 · regulated genes, fold change, cell clones, expressed genes, log2FC, nonexpanded · Report a mismatch
  2. [2] § Materials and Methods › Quantification and Statistical Analysis. › Bioinformatic Analyses of Single Cell RNA-Sequencing Data. ↔ R/immune_cell_profiling_antiGAD65_QC_preprocessing.R, lines 1 to 64 · score 0.70 · quality control, Filtered feature, Seurat, v5, matrix, RNA · Report a mismatch
  3. [3] § Materials and Methods › Quantification and Statistical Analysis. › Bioinformatic Analyses of Single Cell RNA-Sequencing Data. ↔ R/immune_cell_profiling_antiGAD65_QC_preprocessing.Rmd, lines 38 to 77 · score 0.61 · Filtered feature, quality control, Seurat, matrix, RNA, Cell · Report a mismatch
  4. [4] § Results › Compartment-Specific TCR Clonal Expansion in Anti-GAD65 AINS. ↔ R/immune_cell_profiling_antiGAD65_data_analysis_visualization.R, lines 717 to 759 · score 0.60 · regulated genes, fold change, expressed genes, log2FC, nonexpanded, Pseudobulk · Report a mismatch
  5. [5] § Results › Demographics and Basic Clinical Data. ↔ R/immune_cell_profiling_antiGAD65_data_analysis_visualization.Rmd, lines 268 to 308 · score 0.58 · activated CD4, Granulo, MAIT, Mega, Mono, TCM · Report a mismatch
  6. [6] § Results › Expansion of TSCM in the PB and CSF of Anti-GAD65 AINS Individuals. ↔ R/immune_cell_profiling_antiGAD65_data_analysis_visualization.Rmd, lines 342 to 467 · score 0.58 · fold change, expressed genes, box, DESeq2, log2FC, Pseudobulking · Report a mismatch
  7. [7] § Results › Compartment-Specific TCR Clonal Expansion in Anti-GAD65 AINS. ↔ R/immune_cell_profiling_antiGAD65_data_analysis_visualization.R, lines 1 to 43 · score 0.58 · immune repertoire, PBMC compartment, CSF compartment, anti GAD65, profile, abundant · Report a mismatch
  8. [8] § Results › Demographics and Basic Clinical Data. ↔ R/immune_cell_profiling_antiGAD65_data_analysis_visualization.R, lines 264 to 306 · score 0.57 · activated CD4, Granulo, MAIT, Mega, Mono, TCM · Report a mismatch
  9. [9] § Results › Expansion of TSCM in the PB and CSF of Anti-GAD65 AINS Individuals. ↔ R/immune_cell_profiling_antiGAD65_data_analysis_visualization.R, lines 717 to 759 · score 0.51 · fold change, expressed genes, DESeq2, log2FC, Pseudobulking, Volcano · Report a mismatch

Paper

Loaded from Europe PMC by your browser; OSCR does not store it: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

R · 846 lines · 21 KB · MIT · 4 matches

  1. ################################################################################
  2. # Immune Cell Profiling in Anti-GAD65 - Data Analysis and Visualization
  3. ################################################################################
  4. #
  5. # Author: Sumanta Barman
  6. # Description: Complete R analysis pipeline for immune cell profiling in
  7. # anti-GAD65 encephalitis including single-cell RNA-seq processing,
  8. # cell type annotation, differential abundance, differential
  9. # expression, and immune repertoire analysis.
  10. #
  11. # GitHub: [Your repository URL]
  12. # License: [Your license]
  13. #
  14. ################################################################################
  15. ################################################################################
  16. # TABLE OF CONTENTS
  17. ################################################################################
  18. # 1. Setup and Library Loading
  19. # 2. Data Loading
  20. # 3. Exploratory Visualization
  21. # 4. Cell Type Annotation
  22. # 4.1. SingleR Annotation
  23. # 4.2. Azimuth Annotation
  24. # 4.3. Marker Gene Identification
  25. # 4.4. Manual Annotation
  26. # 5. Differential Cell Abundance Analysis
  27. # 5.1. CSF Compartment
  28. # 5.2. PBMC Compartment
  29. # 6. Differential Gene Expression
  30. # 7. Pseudobulk Volcano Plot
  31. # 8. Session Information
  32. ################################################################################
  33. ################################################################################
  34. # 1. SETUP AND LIBRARY LOADING
  35. ################################################################################
  36. # Set global options
  37. options(
  38. stringsAsFactors = FALSE,
  39. warn = -1 # Suppress warnings
  40. )
  41. # Single-cell analysis packages
  42. library(Seurat)
  43. library(SeuratDisk)
  44. library(tidyverse)
  45. library(ggplot2)
  46. library(gridExtra)
  47. library(DoubletFinder)
  48. library(reticulate)
  49. library(SeuratData)
  50. library(SeuratWrappers)
  51. library(patchwork)
  52. library(harmony)
  53. library(scuttle)
  54. library(sctransform)
  55. library(SingleR)
  56. library(celldex)
  57. library(pheatmap)
  58. library(Azimuth)
  59. library(Signac)
  60. library(dplyr)
  61. library(cowplot)
  62. library(enrichR)
  63. library(rafalib)
  64. library(Matrix)
  65. library(edgeR)
  66. # Differential abundance packages
  67. library(speckle)
  68. library(limma)
  69. # Immune repertoire analysis
  70. library(immunarch)
  71. # Visualization packages
  72. library(EnhancedVolcano)
  73. library(ggrepel)
  74. library(RColorBrewer)
  75. library(ggsci)
  76. library(ggpubr)
  77. library(rstatix)
  78. # Set language
  79. Sys.setenv(lang = "en_US")
  80. cat("Libraries loaded successfully!\n\n")
  81. ################################################################################
  82. # 2. DATA LOADING
  83. ################################################################################
  84. # Load the integrated Seurat object with singlets
  85. cat("Loading preprocessed Seurat object...\n")
  86. seurat_object <- readRDS(file = "seurat_object_combined_singlets_integrated.rds")
  87. # Display object summary
  88. cat("\nSeurat object loaded:\n")
  89. print(seurat_object)
  90. cat("\n")
  91. ################################################################################
  92. # 3. EXPLORATORY VISUALIZATION
  93. ################################################################################
  94. cat("Generating UMAP visualizations...\n")
  95. # Visualize different metadata variables on UMAP
  96. DimPlot(
  97. seurat_object,
  98. reduction = "umap.harmony",
  99. group.by = c("sample", "Center", "Disease", "harmony_clusters"),
  100. combine = FALSE,
  101. label.size = 2,
  102. label = TRUE
  103. )
  104. ################################################################################
  105. # 4. CELL TYPE ANNOTATION
  106. ################################################################################
  107. # ---- 4.1. SingleR Annotation ----
  108. cat("Running SingleR annotation...\n")
  109. # Load reference dataset
  110. ref <- celldex::DatabaseImmuneCellExpressionData()
  111. # Prepare Seurat object for SingleR
  112. seurat_object_singler <- seurat_object
  113. seurat_object_singler.counts <- GetAssayData(
  114. seurat_object_singler,
  115. slot = "counts",
  116. assay = "SCT"
  117. )
  118. # Run SingleR prediction
  119. pred <- SingleR(
  120. test = seurat_object_singler.counts,
  121. ref = ref,
  122. labels = ref$label.fine
  123. )
  124. # Add SingleR labels to metadata
  125. seurat_object_singler$singleR.labels <- pred$labels[
  126. match(rownames([email hidden]), rownames(pred))
  127. ]
  128. # Save annotated object
  129. saveRDS(seurat_object_singler, file = "immune_cell_profiling_anti_gad65_singler.rds")
  130. cat("SingleR annotation complete. Object saved.\n\n")
  131. ## SingleR Visualization
  132. cat("Visualizing SingleR results...\n")
  133. # Basic UMAP with SingleR labels
  134. p1 <- DimPlot(
  135. seurat_object_singler,
  136. reduction = "umap.harmony",
  137. group.by = "singleR.labels"
  138. )
  139. # UMAP with labels and repelling
  140. p2 <- DimPlot(
  141. seurat_object_singler,
  142. reduction = "umap.harmony",
  143. group.by = "singleR.labels",
  144. label = TRUE,
  145. repel = TRUE,
  146. label.size = 2
  147. )
  148. # Split by disease condition
  149. p3 <- DimPlot(
  150. seurat_object_singler,
  151. reduction = "umap.harmony",
  152. group.by = "singleR.labels",
  153. split.by = "Disease",
  154. label = TRUE,
  155. repel = TRUE,
  156. label.size = 3
  157. )
  158. print(p1 | p2)
  159. print(p3)
  160. # ---- 4.2. Azimuth Annotation ----
  161. cat("\nRunning Azimuth annotation...\n")
  162. # Prepare object for Azimuth
  163. seurat_object_azimuth <- seurat_object
  164. seurat_object_azimuth <- PrepSCTFindMarkers(
  165. seurat_object_azimuth,
  166. assay = "SCT",
  167. verbose = TRUE
  168. )
  169. # Run Azimuth annotation
  170. seurat_object_azimuth <- RunAzimuth(
  171. seurat_object_azimuth,
  172. reference = "pbmcref"
  173. )
  174. # Save annotated object
  175. saveRDS(seurat_object_azimuth, file = "immune_cell_profiling_anti_gad65_azimuth.rds")
  176. cat("Azimuth annotation complete. Object saved.\n\n")
  177. ## Azimuth Visualization
  178. cat("Visualizing Azimuth results...\n")
  179. # UMAP without legend
  180. p1 <- DimPlot(
  181. seurat_object_azimuth,
  182. reduction = "umap.harmony",
  183. group.by = "predicted.celltype.l2",
  184. label = TRUE,
  185. repel = TRUE,
  186. label.size = 2
  187. ) + NoLegend()
  188. # UMAP with legend
  189. p2 <- DimPlot(
  190. seurat_object_azimuth,
  191. reduction = "umap.harmony",
  192. group.by = "predicted.celltype.l2",
  193. label = TRUE,
  194. repel = TRUE,
  195. label.size = 3
  196. )
  197. # Split by disease
  198. p3 <- DimPlot(
  199. seurat_object_azimuth,
  200. reduction = "umap.harmony",
  201. group.by = "predicted.celltype.l2",
  202. split.by = "Disease",
  203. label = TRUE,
  204. repel = TRUE,
  205. label.size = 3
  206. ) + NoLegend()
  207. print(p1 | p2)
  208. print(p3)
  209. # ---- 4.3. Marker Gene Identification ----
  210. cat("\nIdentifying cluster marker genes...\n")
  211. # Prepare for marker finding
  212. seurat_object <- PrepSCTFindMarkers(seurat_object, assay = "SCT", verbose = TRUE)
  213. DefaultAssay(seurat_object)
  214. # Set identity to harmony clusters
  215. Idents(seurat_object) <- "harmony_clusters"
  216. # Find markers using Wilcoxon test
  217. markers_genes_RNA_wilcox <- FindAllMarkers(
  218. seurat_object,
  219. test.use = "wilcox",
  220. only.pos = TRUE,
  221. assay = "SCT"
  222. )
  223. # Save markers
  224. write.csv(
  225. markers_genes_RNA_wilcox,
  226. "cluster_markers_wilcox.csv",
  227. row.names = FALSE
  228. )
  229. cat("Marker genes saved to cluster_markers_wilcox.csv\n\n")
  230. # ---- 4.4. Manual Annotation ----
  231. cat("Applying manual cell type annotations...\n")
  232. # Create annotated object
  233. seurat_object_annotated <- seurat_object
  234. # Define cell type labels for each cluster
  235. replacement_names <- c(
  236. "0" = "CD4+ Naive T",
  237. "1" = "CD4+ TCM",
  238. "2" = "CD8+ TEM, MAIT, gDT",
  239. "3" = "NK1",
  240. "4" = "CD8+ TEM",
  241. "5" = "Granulo",
  242. "6" = "cDC2",
  243. "7" = "Activated CD4+ TSCM",
  244. "8" = "CD8+ Naive T",
  245. "9" = "cDC1",
  246. "10" = "BC1",
  247. "12" = "BC2",
  248. "13" = "CD16+ Mono",
  249. "14" = "NK2",
  250. "16" = "Mega",
  251. "17" = "pDC",
  252. "18" = "CD14+ Mono",
  253. "19" = "Memory BC",
  254. "20" = "Plasma",
  255. "21" = "Microglia-like",
  256. "24" = "BC3"
  257. )
  258. # Add annotations to metadata
  259. metadata <- [email hidden]
  260. metadata$annotate <- replacement_names[as.character(metadata$harmony_clusters)]
  261. [email hidden] <- metadata
  262. # Save annotated object
  263. saveRDS(seurat_object_annotated, file = "immune_cell_profiling_anti_gad65_annotated.rds")
  264. cat("Manual annotation complete. Object saved.\n\n")
  265. ## Visualization of Annotated Clusters
  266. cat("Visualizing annotated cell types...\n")
  267. # UMAP with cell type labels
  268. p1 <- DimPlot(
  269. seurat_object_annotated,
  270. reduction = "umap.harmony",
  271. group.by = "annotate",
  272. label = TRUE
  273. )
  274. # Split by disease
  275. p2 <- DimPlot(
  276. seurat_object_annotated,
  277. reduction = "umap.harmony",
  278. group.by = "annotate",
  279. split.by = "Disease"
  280. )
  281. # Split by sample type
  282. p3 <- DimPlot(
  283. seurat_object_annotated,
  284. reduction = "umap.harmony",
  285. group.by = "annotate",
  286. split.by = "Sampletype"
  287. )
  288. print(p1)
  289. print(p2)
  290. print(p3)
  291. ################################################################################
  292. # 5. DIFFERENTIAL CELL ABUNDANCE ANALYSIS
  293. ################################################################################
  294. cat("\n=== DIFFERENTIAL CELL ABUNDANCE ANALYSIS ===\n\n")
  295. # Display cell counts
  296. cat("Cell type distribution:\n")
  297. print(table(seurat_object_annotated$annotate))
  298. cat("\nSample distribution:\n")
  299. print(table(seurat_object_annotated$sample))
  300. # ---- Proportions by Sample Type (CSF vs PBMC) ----
  301. cat("\nAnalyzing proportions by sample type...\n")
  302. props_csf_pbmc <- getTransformedProps(
  303. clusters = seurat_object_annotated$annotate,
  304. sample = seurat_object_annotated$Sampletype
  305. )
  306. # Visualize proportions
  307. p1 <- plotCellTypeProps(
  308. clusters = seurat_object_annotated$annotate,
  309. sample = seurat_object_annotated$Sampletype
  310. ) +
  311. theme_bw() +
  312. theme(
  313. axis.text.x = element_text(angle = 45, hjust = 1),
  314. panel.grid.major = element_blank(),
  315. panel.grid.minor = element_blank()
  316. ) +
  317. ggtitle("Cell Type Proportions by Sample Type")
  318. print(p1)
  319. # ---- Proportions by Disease Status ----
  320. cat("\nAnalyzing proportions by disease status...\n")
  321. props_disease <- getTransformedProps(
  322. clusters = seurat_object_annotated$annotate,
  323. sample = seurat_object_annotated$Disease
  324. )
  325. # Visualize
  326. p1 <- plotCellTypeProps(
  327. clusters = seurat_object_annotated$annotate,
  328. sample = seurat_object_annotated$Disease
  329. ) +
  330. theme_bw() +
  331. theme(
  332. axis.text.x = element_text(angle = 45, hjust = 1),
  333. panel.grid.major = element_blank(),
  334. panel.grid.minor = element_blank()
  335. ) +
  336. ggtitle("Cell Type Proportions by Disease Status")
  337. print(p1)
  338. # ---- Subset CSF and PBMC Compartments ----
  339. cat("\nSubsetting CSF and PBMC compartments...\n")
  340. CSF <- subset(seurat_object_annotated, Sampletype == "CSF")
  341. cat(sprintf("CSF samples: %d cells\n", ncol(CSF)))
  342. PBMC <- subset(seurat_object_annotated, Sampletype == "PBMC")
  343. cat(sprintf("PBMC samples: %d cells\n\n", ncol(PBMC)))
  344. # ---- 5.1. CSF Compartment Analysis ----
  345. cat("=== CSF COMPARTMENT ANALYSIS ===\n")
  346. ## Cell Type Proportions in CSF
  347. props_csf <- getTransformedProps(
  348. clusters = CSF$annotate,
  349. sample = CSF$samplename
  350. )
  351. # Save proportions
  352. write.csv(
  353. props_csf,
  354. "cluster_abundances_csf_annotated.csv",
  355. quote = FALSE,
  356. row.names = FALSE
  357. )
  358. cat("CSF proportions saved to cluster_abundances_csf_annotated.csv\n")
  359. # Visualize
  360. p1 <- plotCellTypeProps(
  361. clusters = CSF$annotate,
  362. sample = CSF$samplename
  363. ) +
  364. theme_bw() +
  365. theme(
  366. axis.text.x = element_text(angle = 45, hjust = 1),
  367. panel.grid.major = element_blank(),
  368. panel.grid.minor = element_blank()
  369. ) +
  370. ggtitle("CSF: Cell Type Proportions")
  371. print(p1)
  372. ## Statistical Testing for CSF
  373. cat("\nPerforming statistical tests for CSF...\n")
  374. df_csf <- read.csv("cluster_abundances_csf_annotated.csv")
  375. # Reshape data for statistical testing
  376. df_transposed_csf <- df_csf %>%
  377. pivot_wider(
  378. names_from = Counts.clusters,
  379. values_from = Proportions.Freq,
  380. id_cols = Counts.sample
  381. )
  382. # Add group labels
  383. df_transposed_csf$Group <- ifelse(
  384. grepl("^control_", df_transposed_csf$Counts.sample),
  385. "control",
  386. "GAD"
  387. )
  388. # Prepare data for volcano plot
  389. df_processed_csf <- df_transposed_csf %>%
  390. select(-Counts.sample) %>%
  391. select(Group, everything())
  392. # Save processed data
  393. write.csv(
  394. df_processed_csf,
  395. "GAD_vs_control_csf_processed.csv",
  396. row.names = FALSE
  397. )
  398. ## CSF Volcano Plot
  399. cat("Generating CSF volcano plot...\n")
  400. GAD <- df_processed_csf[df_processed_csf$Group == "GAD", -1]
  401. control <- df_processed_csf[df_processed_csf$Group == "control", -1]
  402. results_log2FC_csf <- data.frame(
  403. Cluster = colnames(GAD),
  404. Log2FC = NA,
  405. Log10pvalue = NA
  406. )
  407. for (i in 1:ncol(GAD)) {
  408. x <- GAD[, i]
  409. y <- control[, i]
  410. # Calculate fold change
  411. Log2FC <- log2(median(x) / median(y))
  412. # Calculate p-value
  413. pvalue <- wilcox.test(x, y)$p.value
  414. Log10pvalue <- -log10(pvalue)
  415. results_log2FC_csf[i, 2] <- Log2FC
  416. results_log2FC_csf[i, 3] <- Log10pvalue
  417. }
  418. # Remove NA and infinite values
  419. results_log2FC_csf <- results_log2FC_csf[
  420. complete.cases(results_log2FC_csf$Log2FC, results_log2FC_csf$Log10pvalue) &
  421. !is.infinite(results_log2FC_csf$Log2FC) &
  422. !is.infinite(results_log2FC_csf$Log10pvalue),
  423. ]
  424. # Save results
  425. write.csv(results_log2FC_csf, "GAD_vs_control_CSF_Log2FC.csv", row.names = FALSE)
  426. cat("CSF results saved to GAD_vs_control_CSF_Log2FC.csv\n")
  427. # Create volcano plot
  428. p <- ggplot(
  429. data = results_log2FC_csf,
  430. aes(x = Log2FC, y = Log10pvalue, label = Cluster)
  431. ) +
  432. geom_point(shape = 16, size = 4, aes(color = Cluster, fill = Cluster)) +
  433. theme_minimal() +
  434. geom_vline(xintercept = c(-0.485, 0.485), col = "red", linetype = "dashed") +
  435. geom_hline(yintercept = -log10(0.05), col = "blue", linetype = "dashed") +
  436. theme(
  437. axis.line = element_line(color = "black"),
  438. axis.ticks = element_line(color = "black")
  439. ) +
  440. geom_text_repel(aes(label = Cluster), max.overlaps = 20) +
  441. labs(
  442. x = "Log2 fold change",
  443. y = "-Log10 p value",
  444. title = "CSF: GAD vs Control"
  445. )
  446. print(p)
  447. # ---- 5.2. PBMC Compartment Analysis ----
  448. cat("\n=== PBMC COMPARTMENT ANALYSIS ===\n")
  449. ## Cell Type Proportions in PBMC
  450. props_pbmc <- getTransformedProps(
  451. clusters = PBMC$annotate,
  452. sample = PBMC$samplename
  453. )
  454. # Save proportions
  455. write.csv(
  456. props_pbmc,
  457. "cluster_abundances_pbmc_annotated.csv",
  458. quote = FALSE,
  459. row.names = FALSE
  460. )
  461. cat("PBMC proportions saved to cluster_abundances_pbmc_annotated.csv\n")
  462. # Visualize
  463. p1 <- plotCellTypeProps(
  464. clusters = PBMC$annotate,
  465. sample = PBMC$samplename
  466. ) +
  467. theme_bw() +
  468. theme(
  469. axis.text.x = element_text(angle = 45, hjust = 1),
  470. panel.grid.major = element_blank(),
  471. panel.grid.minor = element_blank()
  472. ) +
  473. ggtitle("PBMC: Cell Type Proportions")
  474. print(p1)
  475. ## Statistical Testing for PBMC
  476. cat("\nPerforming statistical tests for PBMC...\n")
  477. df_pbmc <- read.csv("cluster_abundances_pbmc_annotated.csv")
  478. # Reshape data
  479. df_transposed_pbmc <- df_pbmc %>%
  480. pivot_wider(
  481. names_from = Counts.clusters,
  482. values_from = Proportions.Freq,
  483. id_cols = Counts.sample
  484. )
  485. # Add group labels
  486. df_transposed_pbmc$Group <- ifelse(
  487. grepl("^control_", df_transposed_pbmc$Counts.sample),
  488. "control",
  489. "GAD"
  490. )
  491. # Prepare data
  492. df_processed_pbmc <- df_transposed_pbmc %>%
  493. select(-Counts.sample) %>%
  494. select(Group, everything())
  495. # Save processed data
  496. write.csv(
  497. df_processed_pbmc,
  498. "GAD_vs_control_pbmc_processed.csv",
  499. row.names = FALSE
  500. )
  501. ## PBMC Volcano Plot
  502. cat("Generating PBMC volcano plot...\n")
  503. GAD_pbmc <- df_processed_pbmc[df_processed_pbmc$Group == "GAD", -1]
  504. control_pbmc <- df_processed_pbmc[df_processed_pbmc$Group == "control", -1]
  505. results_log2FC_pbmc <- data.frame(
  506. Cluster = colnames(GAD_pbmc),
  507. Log2FC = NA,
  508. Log10pvalue = NA
  509. )
  510. for (i in 1:ncol(GAD_pbmc)) {
  511. x <- GAD_pbmc[, i]
  512. y <- control_pbmc[, i]
  513. Log2FC <- log2(median(x) / median(y))
  514. pvalue <- wilcox.test(x, y)$p.value
  515. Log10pvalue <- -log10(pvalue)
  516. results_log2FC_pbmc[i, 2] <- Log2FC
  517. results_log2FC_pbmc[i, 3] <- Log10pvalue
  518. }
  519. # Clean results
  520. results_log2FC_pbmc <- results_log2FC_pbmc[
  521. complete.cases(results_log2FC_pbmc$Log2FC, results_log2FC_pbmc$Log10pvalue) &
  522. !is.infinite(results_log2FC_pbmc$Log2FC) &
  523. !is.infinite(results_log2FC_pbmc$Log10pvalue),
  524. ]
  525. # Save results
  526. write.csv(results_log2FC_pbmc, "GAD_vs_control_PBMC_Log2FC.csv", row.names = FALSE)
  527. cat("PBMC results saved to GAD_vs_control_PBMC_Log2FC.csv\n")
  528. # Create volcano plot
  529. p <- ggplot(
  530. data = results_log2FC_pbmc,
  531. aes(x = Log2FC, y = Log10pvalue, label = Cluster)
  532. ) +
  533. geom_point(shape = 16, size = 4, aes(color = Cluster, fill = Cluster)) +
  534. theme_minimal() +
  535. geom_vline(xintercept = c(-0.485, 0.485), col = "red", linetype = "dashed") +
  536. geom_hline(yintercept = -log10(0.05), col = "blue", linetype = "dashed") +
  537. theme(
  538. axis.line = element_line(color = "black"),
  539. axis.ticks = element_line(color = "black")
  540. ) +
  541. geom_text_repel(aes(label = Cluster), max.overlaps = 20) +
  542. labs(
  543. x = "Log2 fold change",
  544. y = "-Log10 p value",
  545. title = "PBMC: GAD vs Control"
  546. )
  547. print(p)
  548. ################################################################################
  549. # 6. DIFFERENTIAL GENE EXPRESSION
  550. ################################################################################
  551. cat("\n=== DIFFERENTIAL GENE EXPRESSION ANALYSIS ===\n")
  552. # Set identity to disease
  553. Idents(seurat_object_annotated) <- seurat_object_annotated$Disease
  554. # Find DEGs
  555. cat("Finding differentially expressed genes...\n")
  556. dge_control_gad <- FindMarkers(
  557. seurat_object_annotated,
  558. ident.1 = "GAD",
  559. ident.2 = "control",
  560. test.use = "wilcox",
  561. logfc.threshold = 0.2,
  562. assay = "SCT"
  563. )
  564. # Save results
  565. write.csv(
  566. dge_control_gad,
  567. "DEGs_GAD_vs_control_all_clusters.csv",
  568. row.names = TRUE
  569. )
  570. cat("DEG results saved to DEGs_GAD_vs_control_all_clusters.csv\n")
  571. ## Volcano Plot: All Clusters
  572. cat("Generating volcano plot for all clusters...\n")
  573. df_dge <- read.csv("DEGs_GAD_vs_control_all_clusters.csv", row.names = 1)
  574. df_dge$gene_symbol <- rownames(df_dge)
  575. vp <- EnhancedVolcano(
  576. df_dge,
  577. x = "avg_log2FC",
  578. y = "p_val_adj",
  579. lab = df_dge$gene_symbol,
  580. pCutoff = 1e-20,
  581. FCcutoff = 1.5,
  582. legendLabels = c(
  583. "Not significant",
  584. "Log2FC",
  585. "p-value",
  586. "p-value and Log2FC"
  587. ),
  588. legendPosition = "right",
  589. pointSize = 4.0,
  590. labSize = 5.0,
  591. labCol = "black",
  592. labFace = "bold",
  593. drawConnectors = TRUE,
  594. legendLabSize = 16,
  595. legendIconSize = 4.0,
  596. title = "GAD versus Control (All Clusters)"
  597. )
  598. print(vp)
  599. ################################################################################
  600. # 7. PSEUDOBULK VOLCANO PLOT
  601. ################################################################################
  602. cat("\n=== PSEUDOBULK DIFFERENTIAL EXPRESSION ANALYSIS ===\n")
  603. # ---- Configuration ----
  604. LOG2FC_THRESHOLD <- 0.585 # ~1.5-fold change
  605. PADJ_THRESHOLD <- 0.05
  606. N_TOP_GENES <- 10 # Number of top genes to label
  607. INPUT_FILE <- "pseudobulk_deseq2_GAD_CSF_expanded_vs_nonexpanded.csv"
  608. # ---- Load differential expression results ----
  609. cat(sprintf("Loading results from %s...\n", INPUT_FILE))
  610. de_results <- read.csv(INPUT_FILE, row.names = 1) %>%
  611. rownames_to_column(var = "gene") %>%
  612. as_tibble()
  613. cat(sprintf("Loaded %d genes\n", nrow(de_results)))
  614. # ---- Define color scheme for significance ----
  615. color_scheme <- case_when(
  616. de_results$log2FoldChange <= -LOG2FC_THRESHOLD & de_results$padj <= PADJ_THRESHOLD ~ "dodgerblue3",
  617. de_results$log2FoldChange >= LOG2FC_THRESHOLD & de_results$padj <= PADJ_THRESHOLD ~ "chartreuse3",
  618. TRUE ~ "grey"
  619. )
  620. # Replace NA values with grey
  621. color_scheme[is.na(color_scheme)] <- "grey"
  622. # Create named vector for legend
  623. names(color_scheme)[color_scheme == "chartreuse3"] <- "Up-regulated"
  624. names(color_scheme)[color_scheme == "dodgerblue3"] <- "Down-regulated"
  625. names(color_scheme)[color_scheme == "grey"] <- "Not significant"
  626. # ---- Identify top differentially expressed genes ----
  627. cat("Identifying top differentially expressed genes...\n")
  628. # Top up-regulated genes
  629. top_upregulated <- de_results %>%
  630. filter(log2FoldChange >= LOG2FC_THRESHOLD, padj <= PADJ_THRESHOLD) %>%
  631. arrange(padj, desc(log2FoldChange)) %>%
  632. head(N_TOP_GENES)
  633. # Top down-regulated genes
  634. top_downregulated <- de_results %>%
  635. filter(log2FoldChange <= -LOG2FC_THRESHOLD, padj <= PADJ_THRESHOLD) %>%
  636. arrange(padj, log2FoldChange) %>%
  637. head(N_TOP_GENES)
  638. # Combine top genes for labeling
  639. genes_to_label <- c(top_upregulated$gene, top_downregulated$gene)
  640. cat(sprintf("\nIdentified %d up-regulated and %d down-regulated genes\n",
  641. nrow(top_upregulated), nrow(top_downregulated)))
  642. cat("Top labeled genes:", paste(genes_to_label, collapse = ", "), "\n\n")
  643. # ---- Generate volcano plot ----
  644. cat("Generating enhanced volcano plot...\n")
  645. volcano_plot <- EnhancedVolcano(
  646. de_results,
  647. lab = de_results$gene,
  648. x = "log2FoldChange",
  649. y = "padj",
  650. # Significance thresholds
  651. pCutoff = PADJ_THRESHOLD,
  652. FCcutoff = LOG2FC_THRESHOLD,
  653. # Point styling
  654. pointSize = 3,
  655. colAlpha = 0.6,
  656. colCustom = color_scheme,
  657. shape = 16,
  658. # Axis labels
  659. xlab = bquote(~Log[2]~ "fold change"),
  660. ylab = bquote(~-Log[10]~ "adjusted p-value"),
  661. # Gene labels
  662. selectLab = genes_to_label,
  663. boxedLabels = TRUE,
  664. labSize = 3.5,
  665. labFace = "bold",
  666. drawConnectors = TRUE,
  667. widthConnectors = 0.5,
  668. lengthConnectors = unit(0.01, "npc"),
  669. arrowheads = FALSE,
  670. maxoverlapsConnectors = Inf,
  671. max.overlaps = Inf,
  672. # Plot annotations
  673. title = "Differential Expression: Expanded vs Non-Expanded Clones",
  674. subtitle = "GAD Patient CSF T cells (Pseudobulk Analysis)",
  675. caption = bquote(~Log[2]~ "FC cutoff: ±" * .(LOG2FC_THRESHOLD) *
  676. "; Adjusted p-value cutoff: " * .(PADJ_THRESHOLD)),
  677. # Legend
  678. legendPosition = "right",
  679. legendLabSize = 12,
  680. legendIconSize = 4.0
  681. )
  682. print(volcano_plot)
  683. # ---- Summary statistics ----
  684. summary_stats <- de_results %>%
  685. mutate(
  686. regulation = case_when(
  687. log2FoldChange >= LOG2FC_THRESHOLD & padj <= PADJ_THRESHOLD ~ "Up-regulated",
  688. log2FoldChange <= -LOG2FC_THRESHOLD & padj <= PADJ_THRESHOLD ~ "Down-regulated",
  689. TRUE ~ "Not significant"
  690. )
  691. ) %>%
  692. count(regulation)
  693. cat("\n=== Differential Expression Summary ===\n")
  694. print(summary_stats)
  695. ################################################################################
  696. # 8. SESSION INFORMATION
  697. ################################################################################
  698. cat("\n=== SESSION INFORMATION ===\n")
  699. sessionInfo()
  700. cat("\n=== ANALYSIS COMPLETE ===\n")
  701. cat("All results have been saved to the working directory.\n")

immune_cell_profiling_antiGAD65_data_analysis_visualization.R at commit 7a2bdda, under MIT · at the source

Overview

Authors: Sumanta Barman1, Saskia Räuber1, Katharina Eisenhut2,3, Daniela Esser4, Martijn van Duijn5, Madeleine Scharf6, Marisol Herrera-Rivero7, Paul Disse1, Lara-Maria Preuth1, Valeria Gulyaeva1, Ilja Schwan1, Eliza vom Stein1, Marius Jonas1, Duygu Pul1, Michael Heming8, Louisa Müller-Miny8, Manuela Paunovic5, Christine Strippel8, Ebru Haholu2,3,9, Jan Bartosch2,3,9
and 26 other authorsElisabeth Kaufmann10, Justina Dargvainiene4, Sabine Kahl11,12,13, Marius Ringelstein1,14, Eric Bindels15, Heinz Wiendl8, Nikolas H Stoecklein16, Johannes Fischer17, Norbert Goebels1, Lars Komorowski6, Michael Roden11,12,13, Andrea Rossi18, Monika Stoll19, Albert J Becker20, Motaz Hamed21, Christian G Bien22, Romana Höftberger23, Jan Bauer24, Sven G Meuth1, Maarten J Titulaer5, Frank Leypoldt4,25, Gerd Meyer zu Hörste8, Franziska Thaler2,3, Nico Melzer1, in cooperation with the Erasmus Medical Center-AIE Study Group, the German Network for Research on Autoimmune Encephalitis
25 affiliations
  1. Department of Neurology, Medical Faculty and University Hospital Düsseldorf, Heinrich Heine University, Düsseldorf 40225, Germany
  2. Institute of Clinical Neuroimmunology, University Hospital, Ludwig-Maximilians-Universität München, Munich 81377, Germany
  3. Biomedical Center, Faculty of Medicine, Ludwig-Maximilians-Universität München, Martinsried 82152, Germany
  4. Institute of Clinical Chemistry, University Hospital Schleswig-Holstein, Kiel 24105/Lübeck 23538, Germany
  5. Department of Neurology, Erasmus MC University Medical Center, Rotterdam 3015 GD, the Netherlands
  6. Institute for Experimental Immunology, affiliated to Euroimmun Medizinische Labordiagnostika Aktiengesellschaft, Lübeck 23560, Germany
  7. Institute of Epidemiology and Social Medicine, University of Münster, Münster 48149, Germany
  8. Department of Neurology, University Hospital Münster, Münster 48149, Germany
  9. Graduate School of Systemic Neurosciences, Ludwig-Maximilians-Universität München, Planegg 82152, Germany
  10. Department of Neurology, University Hospital, Ludwig-Maximilians-Universität München, Munich 81377, Germany
  11. Department of Endocrinology and Diabetology, Medical Faculty and University Hospital Düsseldorf, Heinrich-Heine-University, Düsseldorf 40225, Germany
  12. Institute for Clinical Diabetology, German Diabetes Center, Leibniz Institute for Diabetes Research at Heinrich-Heine-University, Düsseldorf 40225, Germany
  13. German Center for Diabetes Research, München-Neuherberg 85764, Germany
  14. Department of Neurology, Center for Neurology and Neuropsychiatry, Landschaftsverband Rheinland-Klinikum, Heinrich Heine University, Düsseldorf 40629, Germany
  15. Department of Hematology, Erasmus MC University Medical Center, Rotterdam 3015 GD, the Netherlands
  16. Department of General, Visceral and Pediatric Surgery, Medical Faculty and University Hospital Düsseldorf, Heinrich Heine University, Düsseldorf 40225, Germany
  17. Institute for Transplantation Diagnostics and Cell Therapeutics, Medical Faculty and University Hospital Düsseldorf, Heinrich Heine University, Düsseldorf 40225, Germany
  18. Genome Engineering and Model Development Lab, Institut für umweltmedizinische Forschung-Leibniz Research Institute for Environmental Medicine, Düsseldorf 40225, Germany
  19. Department of Genetic Epidemiology, Institute of Human Genetics, University of Münster, Münster 48149, Germany
  20. Institute of Cellular Neurosciences II, University Hospital Bonn, Bonn 53127, Germany
  21. Clinic for Neurosurgery, University Hospital of Bonn, Bonn 53127, Germany
  22. Department of Epileptology, Bethel Epilepsy Center, Medical School Ostwestfalen-Lippe, Bielefeld University, Bielefeld 33617, Germany
  23. Division of Neuropathology and Neurochemistry, Department of Neurology and Comprehensive Center for Clinical Neurosciences and Mental Health, Medical University of Vienna, Vienna 1090, Austria
  24. Department of Neuroimmunology, Centre for Brain Research, Medical University of Vienna, Vienna 1090, Austria
  25. Department of Neurology, University Hospital Schleswig-Holstein, Kiel 24105, Germany
Dates: received 8 June 2025; accepted 10 February 2026; published online 25 March 2026; in print 31 March 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1073/pnas.2514753123 · PMID 41880578 · PMCID PMC13038060 · OpenAlex W7140298212
Open access: hybrid, a free copy (OpenAlex)
Status: code verified (how the code is found and verified)
Categories: genetics / omics (modality), human (organism), other condition (population), cellular / molecular (subfield)
Keywords: anti-GAD65 autoimmune neurological syndromes, single cell transcriptomics, immune repertoire profiling
MeSH: Autoantibodies*, Autoimmune Diseases of the Nervous System*, Glutamate Decarboxylase*, Memory T Cells*, Adult, CD8-Positive T-Lymphocytes, Female, Humans, Leukocytes, Mononuclear, Male, Middle Aged, Single-Cell Analysis, Stem Cells (* major topic)
Topic: Autoimmune Neurological Disorders and Treatments (Clinical Neurology, Medicine), according to OpenAlex
Funding: Fritz Thyssen Stiftung (Thyssen Foundation) (10.23.1.015MN); HHU | Medizinische Fakultät, Heinrich-Heine-Universität Düsseldorf (2022-04); Deutsche Forschungsgemeinschaft (ERARE18-202 UltraAIE); EpilepsieNL (19-18); Stichting Dioraphte (2001 0403); Else Kröner-Fresenius-Stiftung (2023_EKMS.05); Austrian Science Fund FWF (P 34864); LMU excellent (AOST 867603-4); ZonMw (ERARE-JTC2018 202: UltraAIE); Bundesministerium für Forschung, Technologie und Raumfahrt (01GM1908A and 01GM2208A); Friedrich-Baur-Stiftung (54/23)
Citations: cited by 1 paper (Europe PMC); 63 references in the paper
Notices: A comment on this paper has been published (42114000, from Europe PMC)

Abstract

The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repository

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

sumanta-barman/immune-cell-profiling-anti-gad65

License: MIT
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 7a2bddafab023cd5287cb38983ec7dd31c4c7324, 11 March 2026
Languages: Jupyter (5), R (4), Shell (1)
Size: 16 files, 10 scripts
Software Heritage: not archived
Found in: “Data, Materials, and Software Availability”
Holds: README, license file, 7 notebooks
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (5 files), Scanpy (5 files), ggplot2 (4 files), Harmony (4 files), Matplotlib (4 files), patchwork (4 files), reticulate (4 files), Seurat (4 files), tidyverse (4 files), pandas (3 files), anndata (2 files), cowplot (2 files), edgeR (2 files), ggpubr (2 files), limma (2 files), pheatmap (2 files), rstatix (2 files), seaborn (2 files)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
12 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;
  • 10 scripts, each with its path and the digest of its content;
  • 9 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

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

Data

Datasets cited

Code and data availability statement

The paper has a code and data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1073/pnas.2514753123.

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, 30 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 46 authors, 3 keywords, 13 MeSH terms, 11 funders, 61 references, 1 integrity notice.

Cite

This paper

Barman, S., Räuber, S., Eisenhut, K., Esser, D., van Duijn, M., Scharf, M., Herrera-Rivero, M., Disse, P., Preuth, L.-M., Gulyaeva, V., Schwan, I., vom Stein, E., Jonas, M., Pul, D., Heming, M., Müller-Miny, L., Paunovic, M., Strippel, C., Haholu, E., . . . the German Network for Research on Autoimmune Encephalitis. (2026). Immune cell profiling reveals expanded stem cell-like memory T cells in anti-GAD65-associated neurological syndromes. Proceedings of the National Academy of Sciences of the United States of America, 123(13), e2514753123. https://doi.org/10.1073/pnas.2514753123

BibTeX

@article{barman2026immune,
author = {Barman, Sumanta and Räuber, Saskia and Eisenhut, Katharina and Esser, Daniela and van Duijn, Martijn and Scharf, Madeleine and Herrera-Rivero, Marisol and Disse, Paul and Preuth, Lara-Maria and Gulyaeva, Valeria and Schwan, Ilja and vom Stein, Eliza and Jonas, Marius and Pul, Duygu and Heming, Michael and Müller-Miny, Louisa and Paunovic, Manuela and Strippel, Christine and Haholu, Ebru and Bartosch, Jan and Kaufmann, Elisabeth and Dargvainiene, Justina and Kahl, Sabine and Ringelstein, Marius and Bindels, Eric and Wiendl, Heinz and Stoecklein, Nikolas H and Fischer, Johannes and Goebels, Norbert and Komorowski, Lars and Roden, Michael and Rossi, Andrea and Stoll, Monika and Becker, Albert J and Hamed, Motaz and Bien, Christian G and Höftberger, Romana and Bauer, Jan and Meuth, Sven G and Titulaer, Maarten J and Leypoldt, Frank and zu Hörste, Gerd Meyer and Thaler, Franziska and Melzer, Nico and {in cooperation with the Erasmus Medical Center-AIE Study Group} and {the German Network for Research on Autoimmune Encephalitis}},
title = {{Immune cell profiling reveals expanded stem cell-like memory T cells in anti-GAD65-associated neurological syndromes}},
journal = {Proceedings of the National Academy of Sciences of the United States of America},
year = {2026},
month = mar,
volume = {123},
number = {13},
pages = {e2514753123},
publisher = {National Academy of Sciences},
issn = {0027-8424},
doi = {10.1073/pnas.2514753123},
url = {https://doi.org/10.1073/pnas.2514753123},
pmid = {41880578},
pmcid = {PMC13038060}
}

RIS

TY - JOUR
AU - Barman, Sumanta
AU - Räuber, Saskia
AU - Eisenhut, Katharina
AU - Esser, Daniela
AU - van Duijn, Martijn
AU - Scharf, Madeleine
AU - Herrera-Rivero, Marisol
AU - Disse, Paul
AU - Preuth, Lara-Maria
AU - Gulyaeva, Valeria
AU - Schwan, Ilja
AU - vom Stein, Eliza
AU - Jonas, Marius
AU - Pul, Duygu
AU - Heming, Michael
AU - Müller-Miny, Louisa
AU - Paunovic, Manuela
AU - Strippel, Christine
AU - Haholu, Ebru
AU - Bartosch, Jan
AU - Kaufmann, Elisabeth
AU - Dargvainiene, Justina
AU - Kahl, Sabine
AU - Ringelstein, Marius
AU - Bindels, Eric
AU - Wiendl, Heinz
AU - Stoecklein, Nikolas H
AU - Fischer, Johannes
AU - Goebels, Norbert
AU - Komorowski, Lars
AU - Roden, Michael
AU - Rossi, Andrea
AU - Stoll, Monika
AU - Becker, Albert J
AU - Hamed, Motaz
AU - Bien, Christian G
AU - Höftberger, Romana
AU - Bauer, Jan
AU - Meuth, Sven G
AU - Titulaer, Maarten J
AU - Leypoldt, Frank
AU - zu Hörste, Gerd Meyer
AU - Thaler, Franziska
AU - Melzer, Nico
AU - in cooperation with the Erasmus Medical Center-AIE Study Group
AU - the German Network for Research on Autoimmune Encephalitis
TI - Immune cell profiling reveals expanded stem cell-like memory T cells in anti-GAD65-associated neurological syndromes
T2 - Proceedings of the National Academy of Sciences of the United States of America
J2 - Proc Natl Acad Sci U S A
PY - 2026
DA - 2026/03/25
VL - 123
IS - 13
SP - e2514753123
SN - 0027-8424
PB - National Academy of Sciences
DO - 10.1073/pnas.2514753123
UR - https://doi.org/10.1073/pnas.2514753123
LA - en
ER -

CSL-JSON

{
"id": "10.1073/pnas.2514753123",
"type": "article-journal",
"title": "Immune cell profiling reveals expanded stem cell-like memory T cells in anti-GAD65-associated neurological syndromes",
"container-title": "Proceedings of the National Academy of Sciences of the United States of America",
"author": [
{
"family": "Barman",
"given": "Sumanta"
},
{
"family": "Räuber",
"given": "Saskia"
},
{
"family": "Eisenhut",
"given": "Katharina"
},
{
"family": "Esser",
"given": "Daniela"
},
{
"family": "van Duijn",
"given": "Martijn"
},
{
"family": "Scharf",
"given": "Madeleine"
},
{
"family": "Herrera-Rivero",
"given": "Marisol"
},
{
"family": "Disse",
"given": "Paul"
},
{
"family": "Preuth",
"given": "Lara-Maria"
},
{
"family": "Gulyaeva",
"given": "Valeria"
},
{
"family": "Schwan",
"given": "Ilja"
},
{
"family": "vom Stein",
"given": "Eliza"
},
{
"family": "Jonas",
"given": "Marius"
},
{
"family": "Pul",
"given": "Duygu"
},
{
"family": "Heming",
"given": "Michael"
},
{
"family": "Müller-Miny",
"given": "Louisa"
},
{
"family": "Paunovic",
"given": "Manuela"
},
{
"family": "Strippel",
"given": "Christine"
},
{
"family": "Haholu",
"given": "Ebru"
},
{
"family": "Bartosch",
"given": "Jan"
},
{
"family": "Kaufmann",
"given": "Elisabeth"
},
{
"family": "Dargvainiene",
"given": "Justina"
},
{
"family": "Kahl",
"given": "Sabine"
},
{
"family": "Ringelstein",
"given": "Marius"
},
{
"family": "Bindels",
"given": "Eric"
},
{
"family": "Wiendl",
"given": "Heinz"
},
{
"family": "Stoecklein",
"given": "Nikolas H"
},
{
"family": "Fischer",
"given": "Johannes"
},
{
"family": "Goebels",
"given": "Norbert"
},
{
"family": "Komorowski",
"given": "Lars"
},
{
"family": "Roden",
"given": "Michael"
},
{
"family": "Rossi",
"given": "Andrea"
},
{
"family": "Stoll",
"given": "Monika"
},
{
"family": "Becker",
"given": "Albert J"
},
{
"family": "Hamed",
"given": "Motaz"
},
{
"family": "Bien",
"given": "Christian G"
},
{
"family": "Höftberger",
"given": "Romana"
},
{
"family": "Bauer",
"given": "Jan"
},
{
"family": "Meuth",
"given": "Sven G"
},
{
"family": "Titulaer",
"given": "Maarten J"
},
{
"family": "Leypoldt",
"given": "Frank"
},
{
"family": "zu Hörste",
"given": "Gerd Meyer"
},
{
"family": "Thaler",
"given": "Franziska"
},
{
"family": "Melzer",
"given": "Nico"
},
{
"literal": "in cooperation with the Erasmus Medical Center-AIE Study Group"
},
{
"literal": "the German Network for Research on Autoimmune Encephalitis"
}
],
"container-title-short": "Proc Natl Acad Sci U S A",
"volume": "123",
"issue": "13",
"page": "e2514753123",
"DOI": "10.1073/pnas.2514753123",
"PMID": "41880578",
"PMCID": "PMC13038060",
"ISSN": "0027-8424",
"publisher": "National Academy of Sciences",
"URL": "https://doi.org/10.1073/pnas.2514753123",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
25
]
]
}
}

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.1126/sciadv.abq7595 [code]
Translational imaging of TSPO reveals pronounced innate inflammation in human and murine CD8 T cell-mediated limbic encephalitis.
Journal: Science advances
In common: other condition, 3 references, 4 authors
[2] doi:10.1038/s41467-025-64980-0 [code]
Capturing disease severity in LIS1-lissencephaly reveals proteostasis dysregulation in patient-derived forebrain organoids.
Journal: Nature communications
In common: rstatix, pheatmap, Seurat, 5 other tools, genetics / omics, 2 authors
[3] doi:10.1038/s41467-024-45165-7 [code]
Single nuclei transcriptomics in human and non-human primate striatum in opioid use disorder.
Journal: Nature communications
In common: reticulate, edgeR, anndata, 11 other tools, genetics / omics, other condition, cellular / molecular, 1 reference
[4] doi:10.1002/ana.27157 [code]
Atlas of Cerebrospinal Fluid Immune Cells Across Neurological Diseases.
Journal: Annals of neurology
In common: pheatmap, Seurat, patchwork, 2 other tools, 3 references, 2 authors
[5] doi:10.1038/s41593-026-02300-5 [code]
Integrated single-cell and spatial transcriptomic profiling in ALS uncovers peripheral-to-central immune infiltration and reprogramming.
Journal: Nature neuroscience
In common: Harmony, edgeR, anndata, 11 other tools, genetics / omics, other condition, cellular / molecular, 1 reference
[6] doi:10.1038/s41467-024-48841-w [code]
Secretome profiling reveals acute changes in oxidative stress, brain homeostasis, and coagulation following short-duration spaceflight.
Journal: Nature communications
In common: limma, rstatix, pheatmap, 10 other tools, genetics / omics, cellular / molecular, 1 reference
[7] doi:10.1016/j.ebiom.2026.106324 [code]
Refined single-cell profiling captures a CCR5&lt;sup&gt;high&lt;/sup&gt; CD4&lt;sup&gt;+&lt;/sup&gt; cytotoxic T-cell precursor in multiple sclerosis.
Journal: EBioMedicine
In common: reticulate, limma, Seurat, 3 other tools, genetics / omics, cellular / molecular, 2 references, author Eric M. Bindels
[8] 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, reticulate, limma, 7 other tools, 2 references
[9] doi:10.1038/s41467-024-48195-3
Cell-mediated cytotoxicity within CSF and brain parenchyma in spinal muscular atrophy unaltered by nusinersen treatment.
Journal: Nature communications
In common: genetics / omics, other condition, 3 references, 2 authors
[10] doi:10.1186/s13073-022-01097-9
High-dimensional investigation of the cerebrospinal fluid to explore and monitor CNS immune responses.
Journal: Genome medicine
In common: genetics / omics, other condition, 3 references, 2 authors

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.

Add the badge to the code's README

OSCR: the badge of this paper

If you are an author or a maintainer of this paper's code, you can add this badge. It says what OSCR knows of the paper (its code, its validated tracing map) and links the code to this page. Paste one of these snippets under the README's title. Keep the two marks around it, so that the badge can be replaced in place and is never added twice. OSCR changes nothing in your repository.

Markdown
<!-- oscr-badge:start -->
[![OSCR](https://openscicode.org/badge/doi/10.1073/pnas.2514753123.svg)](https://openscicode.org/badge/doi/10.1073/pnas.2514753123)
<!-- oscr-badge:end -->
reStructuredText
.. oscr-badge:start

.. image:: https://openscicode.org/badge/doi/10.1073/pnas.2514753123.svg
   :target: https://openscicode.org/badge/doi/10.1073/pnas.2514753123
   :alt: OSCR

.. oscr-badge:end
HTML
<!-- oscr-badge:start -->
<a href="https://openscicode.org/badge/doi/10.1073/pnas.2514753123"><img src="https://openscicode.org/badge/doi/10.1073/pnas.2514753123.svg" alt="OSCR"></a>
<!-- oscr-badge:end -->

On GitHub, open the README, choose Edit (the pencil), paste the snippet under the title, then "Commit changes".

If you choose to, you can have the badge kept up to date for you, with oscr badge --write from the command line or with the GitHub Action in your repository's workflows. Every other form and option (a card, AsciiDoc, LaTeX, shields.io) is on the badge 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: code errors and mismatches between the code and the paper about this paper and its code, from readers and its authors, beside the paper and its tracing map.

Report a mismatch between the code and the paper · Report a code error (signed in)

Reproductions: reports from readers who ran the authors' code and did not get the paper's result, what they ran, with which environment, commit and data.

Report a reproduction failure (signed in)

Versions of its code: the releases of its code tied to a version of this paper (the preprint, the accepted manuscript, the version of record…), each with the tracing map versioned with it.

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