Immune cell profiling reveals expanded stem cell-like memory T cells in anti-GAD65-associated neurological syndromes.
The 9 matches
- [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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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
- ################################################################################
- # Immune Cell Profiling in Anti-GAD65 - Data Analysis and Visualization
- ################################################################################
- #
- # Author: Sumanta Barman
- # Description: Complete R analysis pipeline for immune cell profiling in
- # anti-GAD65 encephalitis including single-cell RNA-seq processing,
- # cell type annotation, differential abundance, differential
- # expression, and immune repertoire analysis.
- #
- # GitHub: [Your repository URL]
- # License: [Your license]
- #
- ################################################################################
- ################################################################################
- # TABLE OF CONTENTS
- ################################################################################
- # 1. Setup and Library Loading
- # 2. Data Loading
- # 3. Exploratory Visualization
- # 4. Cell Type Annotation
- # 4.1. SingleR Annotation
- # 4.2. Azimuth Annotation
- # 4.3. Marker Gene Identification
- # 4.4. Manual Annotation
- # 5. Differential Cell Abundance Analysis
- # 5.1. CSF Compartment
- # 5.2. PBMC Compartment
- # 6. Differential Gene Expression
- # 7. Pseudobulk Volcano Plot
- # 8. Session Information
- ################################################################################
- ################################################################################
- # 1. SETUP AND LIBRARY LOADING
- ################################################################################
- # Set global options
- options(
- stringsAsFactors = FALSE,
- warn = -1 # Suppress warnings
- )
- # Single-cell analysis packages
- library(Seurat)
- library(SeuratDisk)
- library(tidyverse)
- library(ggplot2)
- library(gridExtra)
- library(DoubletFinder)
- library(reticulate)
- library(SeuratData)
- library(SeuratWrappers)
- library(patchwork)
- library(harmony)
- library(scuttle)
- library(sctransform)
- library(SingleR)
- library(celldex)
- library(pheatmap)
- library(Azimuth)
- library(Signac)
- library(dplyr)
- library(cowplot)
- library(enrichR)
- library(rafalib)
- library(Matrix)
- library(edgeR)
- # Differential abundance packages
- library(speckle)
- library(limma)
- # Immune repertoire analysis
- library(immunarch)
- # Visualization packages
- library(EnhancedVolcano)
- library(ggrepel)
- library(RColorBrewer)
- library(ggsci)
- library(ggpubr)
- library(rstatix)
- # Set language
- Sys.setenv(lang = "en_US")
- cat("Libraries loaded successfully!\n\n")
- ################################################################################
- # 2. DATA LOADING
- ################################################################################
- # Load the integrated Seurat object with singlets
- cat("Loading preprocessed Seurat object...\n")
- seurat_object <- readRDS(file = "seurat_object_combined_singlets_integrated.rds")
- # Display object summary
- cat("\nSeurat object loaded:\n")
- print(seurat_object)
- cat("\n")
- ################################################################################
- # 3. EXPLORATORY VISUALIZATION
- ################################################################################
- cat("Generating UMAP visualizations...\n")
- # Visualize different metadata variables on UMAP
- DimPlot(
- seurat_object,
- reduction = "umap.harmony",
- group.by = c("sample", "Center", "Disease", "harmony_clusters"),
- combine = FALSE,
- label.size = 2,
- label = TRUE
- )
- ################################################################################
- # 4. CELL TYPE ANNOTATION
- ################################################################################
- # ---- 4.1. SingleR Annotation ----
- cat("Running SingleR annotation...\n")
- # Load reference dataset
- ref <- celldex::DatabaseImmuneCellExpressionData()
- # Prepare Seurat object for SingleR
- seurat_object_singler <- seurat_object
- seurat_object_singler.counts <- GetAssayData(
- seurat_object_singler,
- slot = "counts",
- assay = "SCT"
- )
- # Run SingleR prediction
- pred <- SingleR(
- test = seurat_object_singler.counts,
- ref = ref,
- labels = ref$label.fine
- )
- # Add SingleR labels to metadata
- seurat_object_singler$singleR.labels <- pred$labels[
- match(rownames([email hidden]), rownames(pred))
- ]
- # Save annotated object
- saveRDS(seurat_object_singler, file = "immune_cell_profiling_anti_gad65_singler.rds")
- cat("SingleR annotation complete. Object saved.\n\n")
- ## SingleR Visualization
- cat("Visualizing SingleR results...\n")
- # Basic UMAP with SingleR labels
- p1 <- DimPlot(
- seurat_object_singler,
- reduction = "umap.harmony",
- group.by = "singleR.labels"
- )
- # UMAP with labels and repelling
- p2 <- DimPlot(
- seurat_object_singler,
- reduction = "umap.harmony",
- group.by = "singleR.labels",
- label = TRUE,
- repel = TRUE,
- label.size = 2
- )
- # Split by disease condition
- p3 <- DimPlot(
- seurat_object_singler,
- reduction = "umap.harmony",
- group.by = "singleR.labels",
- split.by = "Disease",
- label = TRUE,
- repel = TRUE,
- label.size = 3
- )
- print(p1 | p2)
- print(p3)
- # ---- 4.2. Azimuth Annotation ----
- cat("\nRunning Azimuth annotation...\n")
- # Prepare object for Azimuth
- seurat_object_azimuth <- seurat_object
- seurat_object_azimuth <- PrepSCTFindMarkers(
- seurat_object_azimuth,
- assay = "SCT",
- verbose = TRUE
- )
- # Run Azimuth annotation
- seurat_object_azimuth <- RunAzimuth(
- seurat_object_azimuth,
- reference = "pbmcref"
- )
- # Save annotated object
- saveRDS(seurat_object_azimuth, file = "immune_cell_profiling_anti_gad65_azimuth.rds")
- cat("Azimuth annotation complete. Object saved.\n\n")
- ## Azimuth Visualization
- cat("Visualizing Azimuth results...\n")
- # UMAP without legend
- p1 <- DimPlot(
- seurat_object_azimuth,
- reduction = "umap.harmony",
- group.by = "predicted.celltype.l2",
- label = TRUE,
- repel = TRUE,
- label.size = 2
- ) + NoLegend()
- # UMAP with legend
- p2 <- DimPlot(
- seurat_object_azimuth,
- reduction = "umap.harmony",
- group.by = "predicted.celltype.l2",
- label = TRUE,
- repel = TRUE,
- label.size = 3
- )
- # Split by disease
- p3 <- DimPlot(
- seurat_object_azimuth,
- reduction = "umap.harmony",
- group.by = "predicted.celltype.l2",
- split.by = "Disease",
- label = TRUE,
- repel = TRUE,
- label.size = 3
- ) + NoLegend()
- print(p1 | p2)
- print(p3)
- # ---- 4.3. Marker Gene Identification ----
- cat("\nIdentifying cluster marker genes...\n")
- # Prepare for marker finding
- seurat_object <- PrepSCTFindMarkers(seurat_object, assay = "SCT", verbose = TRUE)
- DefaultAssay(seurat_object)
- # Set identity to harmony clusters
- Idents(seurat_object) <- "harmony_clusters"
- # Find markers using Wilcoxon test
- markers_genes_RNA_wilcox <- FindAllMarkers(
- seurat_object,
- test.use = "wilcox",
- only.pos = TRUE,
- assay = "SCT"
- )
- # Save markers
- write.csv(
- markers_genes_RNA_wilcox,
- "cluster_markers_wilcox.csv",
- row.names = FALSE
- )
- cat("Marker genes saved to cluster_markers_wilcox.csv\n\n")
- # ---- 4.4. Manual Annotation ----
- cat("Applying manual cell type annotations...\n")
- # Create annotated object
- seurat_object_annotated <- seurat_object
- # Define cell type labels for each cluster
- replacement_names <- c(
- "0" = "CD4+ Naive T",
- "1" = "CD4+ TCM",
- "2" = "CD8+ TEM, MAIT, gDT",
- "3" = "NK1",
- "4" = "CD8+ TEM",
- "5" = "Granulo",
- "6" = "cDC2",
- "7" = "Activated CD4+ TSCM",
- "8" = "CD8+ Naive T",
- "9" = "cDC1",
- "10" = "BC1",
- "12" = "BC2",
- "13" = "CD16+ Mono",
- "14" = "NK2",
- "16" = "Mega",
- "17" = "pDC",
- "18" = "CD14+ Mono",
- "19" = "Memory BC",
- "20" = "Plasma",
- "21" = "Microglia-like",
- "24" = "BC3"
- )
- # Add annotations to metadata
- metadata <- [email hidden]
- metadata$annotate <- replacement_names[as.character(metadata$harmony_clusters)]
- [email hidden] <- metadata
- # Save annotated object
- saveRDS(seurat_object_annotated, file = "immune_cell_profiling_anti_gad65_annotated.rds")
- cat("Manual annotation complete. Object saved.\n\n")
- ## Visualization of Annotated Clusters
- cat("Visualizing annotated cell types...\n")
- # UMAP with cell type labels
- p1 <- DimPlot(
- seurat_object_annotated,
- reduction = "umap.harmony",
- group.by = "annotate",
- label = TRUE
- )
- # Split by disease
- p2 <- DimPlot(
- seurat_object_annotated,
- reduction = "umap.harmony",
- group.by = "annotate",
- split.by = "Disease"
- )
- # Split by sample type
- p3 <- DimPlot(
- seurat_object_annotated,
- reduction = "umap.harmony",
- group.by = "annotate",
- split.by = "Sampletype"
- )
- print(p1)
- print(p2)
- print(p3)
- ################################################################################
- # 5. DIFFERENTIAL CELL ABUNDANCE ANALYSIS
- ################################################################################
- cat("\n=== DIFFERENTIAL CELL ABUNDANCE ANALYSIS ===\n\n")
- # Display cell counts
- cat("Cell type distribution:\n")
- print(table(seurat_object_annotated$annotate))
- cat("\nSample distribution:\n")
- print(table(seurat_object_annotated$sample))
- # ---- Proportions by Sample Type (CSF vs PBMC) ----
- cat("\nAnalyzing proportions by sample type...\n")
- props_csf_pbmc <- getTransformedProps(
- clusters = seurat_object_annotated$annotate,
- sample = seurat_object_annotated$Sampletype
- )
- # Visualize proportions
- p1 <- plotCellTypeProps(
- clusters = seurat_object_annotated$annotate,
- sample = seurat_object_annotated$Sampletype
- ) +
- theme_bw() +
- theme(
- axis.text.x = element_text(angle = 45, hjust = 1),
- panel.grid.major = element_blank(),
- panel.grid.minor = element_blank()
- ) +
- ggtitle("Cell Type Proportions by Sample Type")
- print(p1)
- # ---- Proportions by Disease Status ----
- cat("\nAnalyzing proportions by disease status...\n")
- props_disease <- getTransformedProps(
- clusters = seurat_object_annotated$annotate,
- sample = seurat_object_annotated$Disease
- )
- # Visualize
- p1 <- plotCellTypeProps(
- clusters = seurat_object_annotated$annotate,
- sample = seurat_object_annotated$Disease
- ) +
- theme_bw() +
- theme(
- axis.text.x = element_text(angle = 45, hjust = 1),
- panel.grid.major = element_blank(),
- panel.grid.minor = element_blank()
- ) +
- ggtitle("Cell Type Proportions by Disease Status")
- print(p1)
- # ---- Subset CSF and PBMC Compartments ----
- cat("\nSubsetting CSF and PBMC compartments...\n")
- CSF <- subset(seurat_object_annotated, Sampletype == "CSF")
- cat(sprintf("CSF samples: %d cells\n", ncol(CSF)))
- PBMC <- subset(seurat_object_annotated, Sampletype == "PBMC")
- cat(sprintf("PBMC samples: %d cells\n\n", ncol(PBMC)))
- # ---- 5.1. CSF Compartment Analysis ----
- cat("=== CSF COMPARTMENT ANALYSIS ===\n")
- ## Cell Type Proportions in CSF
- props_csf <- getTransformedProps(
- clusters = CSF$annotate,
- sample = CSF$samplename
- )
- # Save proportions
- write.csv(
- props_csf,
- "cluster_abundances_csf_annotated.csv",
- quote = FALSE,
- row.names = FALSE
- )
- cat("CSF proportions saved to cluster_abundances_csf_annotated.csv\n")
- # Visualize
- p1 <- plotCellTypeProps(
- clusters = CSF$annotate,
- sample = CSF$samplename
- ) +
- theme_bw() +
- theme(
- axis.text.x = element_text(angle = 45, hjust = 1),
- panel.grid.major = element_blank(),
- panel.grid.minor = element_blank()
- ) +
- ggtitle("CSF: Cell Type Proportions")
- print(p1)
- ## Statistical Testing for CSF
- cat("\nPerforming statistical tests for CSF...\n")
- df_csf <- read.csv("cluster_abundances_csf_annotated.csv")
- # Reshape data for statistical testing
- df_transposed_csf <- df_csf %>%
- pivot_wider(
- names_from = Counts.clusters,
- values_from = Proportions.Freq,
- id_cols = Counts.sample
- )
- # Add group labels
- df_transposed_csf$Group <- ifelse(
- grepl("^control_", df_transposed_csf$Counts.sample),
- "control",
- "GAD"
- )
- # Prepare data for volcano plot
- df_processed_csf <- df_transposed_csf %>%
- select(-Counts.sample) %>%
- select(Group, everything())
- # Save processed data
- write.csv(
- df_processed_csf,
- "GAD_vs_control_csf_processed.csv",
- row.names = FALSE
- )
- ## CSF Volcano Plot
- cat("Generating CSF volcano plot...\n")
- GAD <- df_processed_csf[df_processed_csf$Group == "GAD", -1]
- control <- df_processed_csf[df_processed_csf$Group == "control", -1]
- results_log2FC_csf <- data.frame(
- Cluster = colnames(GAD),
- Log2FC = NA,
- Log10pvalue = NA
- )
- for (i in 1:ncol(GAD)) {
- x <- GAD[, i]
- y <- control[, i]
- # Calculate fold change
- Log2FC <- log2(median(x) / median(y))
- # Calculate p-value
- pvalue <- wilcox.test(x, y)$p.value
- Log10pvalue <- -log10(pvalue)
- results_log2FC_csf[i, 2] <- Log2FC
- results_log2FC_csf[i, 3] <- Log10pvalue
- }
- # Remove NA and infinite values
- results_log2FC_csf <- results_log2FC_csf[
- complete.cases(results_log2FC_csf$Log2FC, results_log2FC_csf$Log10pvalue) &
- !is.infinite(results_log2FC_csf$Log2FC) &
- !is.infinite(results_log2FC_csf$Log10pvalue),
- ]
- # Save results
- write.csv(results_log2FC_csf, "GAD_vs_control_CSF_Log2FC.csv", row.names = FALSE)
- cat("CSF results saved to GAD_vs_control_CSF_Log2FC.csv\n")
- # Create volcano plot
- p <- ggplot(
- data = results_log2FC_csf,
- aes(x = Log2FC, y = Log10pvalue, label = Cluster)
- ) +
- geom_point(shape = 16, size = 4, aes(color = Cluster, fill = Cluster)) +
- theme_minimal() +
- geom_vline(xintercept = c(-0.485, 0.485), col = "red", linetype = "dashed") +
- geom_hline(yintercept = -log10(0.05), col = "blue", linetype = "dashed") +
- theme(
- axis.line = element_line(color = "black"),
- axis.ticks = element_line(color = "black")
- ) +
- geom_text_repel(aes(label = Cluster), max.overlaps = 20) +
- labs(
- x = "Log2 fold change",
- y = "-Log10 p value",
- title = "CSF: GAD vs Control"
- )
- print(p)
- # ---- 5.2. PBMC Compartment Analysis ----
- cat("\n=== PBMC COMPARTMENT ANALYSIS ===\n")
- ## Cell Type Proportions in PBMC
- props_pbmc <- getTransformedProps(
- clusters = PBMC$annotate,
- sample = PBMC$samplename
- )
- # Save proportions
- write.csv(
- props_pbmc,
- "cluster_abundances_pbmc_annotated.csv",
- quote = FALSE,
- row.names = FALSE
- )
- cat("PBMC proportions saved to cluster_abundances_pbmc_annotated.csv\n")
- # Visualize
- p1 <- plotCellTypeProps(
- clusters = PBMC$annotate,
- sample = PBMC$samplename
- ) +
- theme_bw() +
- theme(
- axis.text.x = element_text(angle = 45, hjust = 1),
- panel.grid.major = element_blank(),
- panel.grid.minor = element_blank()
- ) +
- ggtitle("PBMC: Cell Type Proportions")
- print(p1)
- ## Statistical Testing for PBMC
- cat("\nPerforming statistical tests for PBMC...\n")
- df_pbmc <- read.csv("cluster_abundances_pbmc_annotated.csv")
- # Reshape data
- df_transposed_pbmc <- df_pbmc %>%
- pivot_wider(
- names_from = Counts.clusters,
- values_from = Proportions.Freq,
- id_cols = Counts.sample
- )
- # Add group labels
- df_transposed_pbmc$Group <- ifelse(
- grepl("^control_", df_transposed_pbmc$Counts.sample),
- "control",
- "GAD"
- )
- # Prepare data
- df_processed_pbmc <- df_transposed_pbmc %>%
- select(-Counts.sample) %>%
- select(Group, everything())
- # Save processed data
- write.csv(
- df_processed_pbmc,
- "GAD_vs_control_pbmc_processed.csv",
- row.names = FALSE
- )
- ## PBMC Volcano Plot
- cat("Generating PBMC volcano plot...\n")
- GAD_pbmc <- df_processed_pbmc[df_processed_pbmc$Group == "GAD", -1]
- control_pbmc <- df_processed_pbmc[df_processed_pbmc$Group == "control", -1]
- results_log2FC_pbmc <- data.frame(
- Cluster = colnames(GAD_pbmc),
- Log2FC = NA,
- Log10pvalue = NA
- )
- for (i in 1:ncol(GAD_pbmc)) {
- x <- GAD_pbmc[, i]
- y <- control_pbmc[, i]
- Log2FC <- log2(median(x) / median(y))
- pvalue <- wilcox.test(x, y)$p.value
- Log10pvalue <- -log10(pvalue)
- results_log2FC_pbmc[i, 2] <- Log2FC
- results_log2FC_pbmc[i, 3] <- Log10pvalue
- }
- # Clean results
- results_log2FC_pbmc <- results_log2FC_pbmc[
- complete.cases(results_log2FC_pbmc$Log2FC, results_log2FC_pbmc$Log10pvalue) &
- !is.infinite(results_log2FC_pbmc$Log2FC) &
- !is.infinite(results_log2FC_pbmc$Log10pvalue),
- ]
- # Save results
- write.csv(results_log2FC_pbmc, "GAD_vs_control_PBMC_Log2FC.csv", row.names = FALSE)
- cat("PBMC results saved to GAD_vs_control_PBMC_Log2FC.csv\n")
- # Create volcano plot
- p <- ggplot(
- data = results_log2FC_pbmc,
- aes(x = Log2FC, y = Log10pvalue, label = Cluster)
- ) +
- geom_point(shape = 16, size = 4, aes(color = Cluster, fill = Cluster)) +
- theme_minimal() +
- geom_vline(xintercept = c(-0.485, 0.485), col = "red", linetype = "dashed") +
- geom_hline(yintercept = -log10(0.05), col = "blue", linetype = "dashed") +
- theme(
- axis.line = element_line(color = "black"),
- axis.ticks = element_line(color = "black")
- ) +
- geom_text_repel(aes(label = Cluster), max.overlaps = 20) +
- labs(
- x = "Log2 fold change",
- y = "-Log10 p value",
- title = "PBMC: GAD vs Control"
- )
- print(p)
- ################################################################################
- # 6. DIFFERENTIAL GENE EXPRESSION
- ################################################################################
- cat("\n=== DIFFERENTIAL GENE EXPRESSION ANALYSIS ===\n")
- # Set identity to disease
- Idents(seurat_object_annotated) <- seurat_object_annotated$Disease
- # Find DEGs
- cat("Finding differentially expressed genes...\n")
- dge_control_gad <- FindMarkers(
- seurat_object_annotated,
- ident.1 = "GAD",
- ident.2 = "control",
- test.use = "wilcox",
- logfc.threshold = 0.2,
- assay = "SCT"
- )
- # Save results
- write.csv(
- dge_control_gad,
- "DEGs_GAD_vs_control_all_clusters.csv",
- row.names = TRUE
- )
- cat("DEG results saved to DEGs_GAD_vs_control_all_clusters.csv\n")
- ## Volcano Plot: All Clusters
- cat("Generating volcano plot for all clusters...\n")
- df_dge <- read.csv("DEGs_GAD_vs_control_all_clusters.csv", row.names = 1)
- df_dge$gene_symbol <- rownames(df_dge)
- vp <- EnhancedVolcano(
- df_dge,
- x = "avg_log2FC",
- y = "p_val_adj",
- lab = df_dge$gene_symbol,
- pCutoff = 1e-20,
- FCcutoff = 1.5,
- legendLabels = c(
- "Not significant",
- "Log2FC",
- "p-value",
- "p-value and Log2FC"
- ),
- legendPosition = "right",
- pointSize = 4.0,
- labSize = 5.0,
- labCol = "black",
- labFace = "bold",
- drawConnectors = TRUE,
- legendLabSize = 16,
- legendIconSize = 4.0,
- title = "GAD versus Control (All Clusters)"
- )
- print(vp)
- ################################################################################
- # 7. PSEUDOBULK VOLCANO PLOT
- ################################################################################
- cat("\n=== PSEUDOBULK DIFFERENTIAL EXPRESSION ANALYSIS ===\n")
- # ---- Configuration ----
- LOG2FC_THRESHOLD <- 0.585 # ~1.5-fold change
- PADJ_THRESHOLD <- 0.05
- N_TOP_GENES <- 10 # Number of top genes to label
- INPUT_FILE <- "pseudobulk_deseq2_GAD_CSF_expanded_vs_nonexpanded.csv"
- # ---- Load differential expression results ----
- cat(sprintf("Loading results from %s...\n", INPUT_FILE))
- de_results <- read.csv(INPUT_FILE, row.names = 1) %>%
- rownames_to_column(var = "gene") %>%
- as_tibble()
- cat(sprintf("Loaded %d genes\n", nrow(de_results)))
- # ---- Define color scheme for significance ----
- color_scheme <- case_when(
- de_results$log2FoldChange <= -LOG2FC_THRESHOLD & de_results$padj <= PADJ_THRESHOLD ~ "dodgerblue3",
- de_results$log2FoldChange >= LOG2FC_THRESHOLD & de_results$padj <= PADJ_THRESHOLD ~ "chartreuse3",
- TRUE ~ "grey"
- )
- # Replace NA values with grey
- color_scheme[is.na(color_scheme)] <- "grey"
- # Create named vector for legend
- names(color_scheme)[color_scheme == "chartreuse3"] <- "Up-regulated"
- names(color_scheme)[color_scheme == "dodgerblue3"] <- "Down-regulated"
- names(color_scheme)[color_scheme == "grey"] <- "Not significant"
- # ---- Identify top differentially expressed genes ----
- cat("Identifying top differentially expressed genes...\n")
- # Top up-regulated genes
- top_upregulated <- de_results %>%
- filter(log2FoldChange >= LOG2FC_THRESHOLD, padj <= PADJ_THRESHOLD) %>%
- arrange(padj, desc(log2FoldChange)) %>%
- head(N_TOP_GENES)
- # Top down-regulated genes
- top_downregulated <- de_results %>%
- filter(log2FoldChange <= -LOG2FC_THRESHOLD, padj <= PADJ_THRESHOLD) %>%
- arrange(padj, log2FoldChange) %>%
- head(N_TOP_GENES)
- # Combine top genes for labeling
- genes_to_label <- c(top_upregulated$gene, top_downregulated$gene)
- cat(sprintf("\nIdentified %d up-regulated and %d down-regulated genes\n",
- nrow(top_upregulated), nrow(top_downregulated)))
- cat("Top labeled genes:", paste(genes_to_label, collapse = ", "), "\n\n")
- # ---- Generate volcano plot ----
- cat("Generating enhanced volcano plot...\n")
- volcano_plot <- EnhancedVolcano(
- de_results,
- lab = de_results$gene,
- x = "log2FoldChange",
- y = "padj",
- # Significance thresholds
- pCutoff = PADJ_THRESHOLD,
- FCcutoff = LOG2FC_THRESHOLD,
- # Point styling
- pointSize = 3,
- colAlpha = 0.6,
- colCustom = color_scheme,
- shape = 16,
- # Axis labels
- xlab = bquote(~Log[2]~ "fold change"),
- ylab = bquote(~-Log[10]~ "adjusted p-value"),
- # Gene labels
- selectLab = genes_to_label,
- boxedLabels = TRUE,
- labSize = 3.5,
- labFace = "bold",
- drawConnectors = TRUE,
- widthConnectors = 0.5,
- lengthConnectors = unit(0.01, "npc"),
- arrowheads = FALSE,
- maxoverlapsConnectors = Inf,
- max.overlaps = Inf,
- # Plot annotations
- title = "Differential Expression: Expanded vs Non-Expanded Clones",
- subtitle = "GAD Patient CSF T cells (Pseudobulk Analysis)",
- caption = bquote(~Log[2]~ "FC cutoff: ±" * .(LOG2FC_THRESHOLD) *
- "; Adjusted p-value cutoff: " * .(PADJ_THRESHOLD)),
- # Legend
- legendPosition = "right",
- legendLabSize = 12,
- legendIconSize = 4.0
- )
- print(volcano_plot)
- # ---- Summary statistics ----
- summary_stats <- de_results %>%
- mutate(
- regulation = case_when(
- log2FoldChange >= LOG2FC_THRESHOLD & padj <= PADJ_THRESHOLD ~ "Up-regulated",
- log2FoldChange <= -LOG2FC_THRESHOLD & padj <= PADJ_THRESHOLD ~ "Down-regulated",
- TRUE ~ "Not significant"
- )
- ) %>%
- count(regulation)
- cat("\n=== Differential Expression Summary ===\n")
- print(summary_stats)
- ################################################################################
- # 8. SESSION INFORMATION
- ################################################################################
- cat("\n=== SESSION INFORMATION ===\n")
- sessionInfo()
- cat("\n=== ANALYSIS COMPLETE ===\n")
- 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
and 26 other authors
Elisabeth 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 Encephalitis25 affiliations
- Department of Neurology, Medical Faculty and University Hospital Düsseldorf, Heinrich Heine University, Düsseldorf 40225, Germany
- Institute of Clinical Neuroimmunology, University Hospital, Ludwig-Maximilians-Universität München, Munich 81377, Germany
- Biomedical Center, Faculty of Medicine, Ludwig-Maximilians-Universität München, Martinsried 82152, Germany
- Institute of Clinical Chemistry, University Hospital Schleswig-Holstein, Kiel 24105/Lübeck 23538, Germany
- Department of Neurology, Erasmus MC University Medical Center, Rotterdam 3015 GD, the Netherlands
- Institute for Experimental Immunology, affiliated to Euroimmun Medizinische Labordiagnostika Aktiengesellschaft, Lübeck 23560, Germany
- Institute of Epidemiology and Social Medicine, University of Münster, Münster 48149, Germany
- Department of Neurology, University Hospital Münster, Münster 48149, Germany
- Graduate School of Systemic Neurosciences, Ludwig-Maximilians-Universität München, Planegg 82152, Germany
- Department of Neurology, University Hospital, Ludwig-Maximilians-Universität München, Munich 81377, Germany
- Department of Endocrinology and Diabetology, Medical Faculty and University Hospital Düsseldorf, Heinrich-Heine-University, Düsseldorf 40225, Germany
- Institute for Clinical Diabetology, German Diabetes Center, Leibniz Institute for Diabetes Research at Heinrich-Heine-University, Düsseldorf 40225, Germany
- German Center for Diabetes Research, München-Neuherberg 85764, Germany
- Department of Neurology, Center for Neurology and Neuropsychiatry, Landschaftsverband Rheinland-Klinikum, Heinrich Heine University, Düsseldorf 40629, Germany
- Department of Hematology, Erasmus MC University Medical Center, Rotterdam 3015 GD, the Netherlands
- Department of General, Visceral and Pediatric Surgery, Medical Faculty and University Hospital Düsseldorf, Heinrich Heine University, Düsseldorf 40225, Germany
- Institute for Transplantation Diagnostics and Cell Therapeutics, Medical Faculty and University Hospital Düsseldorf, Heinrich Heine University, Düsseldorf 40225, Germany
- Genome Engineering and Model Development Lab, Institut für umweltmedizinische Forschung-Leibniz Research Institute for Environmental Medicine, Düsseldorf 40225, Germany
- Department of Genetic Epidemiology, Institute of Human Genetics, University of Münster, Münster 48149, Germany
- Institute of Cellular Neurosciences II, University Hospital Bonn, Bonn 53127, Germany
- Clinic for Neurosurgery, University Hospital of Bonn, Bonn 53127, Germany
- Department of Epileptology, Bethel Epilepsy Center, Medical School Ostwestfalen-Lippe, Bielefeld University, Bielefeld 33617, Germany
- Division of Neuropathology and Neurochemistry, Department of Neurology and Comprehensive Center for Clinical Neurosciences and Mental Health, Medical University of Vienna, Vienna 1090, Austria
- Department of Neuroimmunology, Centre for Brain Research, Medical University of Vienna, Vienna 1090, Austria
- Department of Neurology, University Hospital Schleswig-Holstein, Kiel 24105, Germany
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
7a2bddafab023cd5287cb38983ec7dd31c4c7324, 11 March 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
12 files
- Bash/
immune_cell_profiling_an , Shell, 275 linestiGAD65_SHM_preprocessin g.sh - Notebook/
immune_cell_profiling_an , Jupyter, 333 linestiGAD65_BCR_preprocessin g .ipynb - Notebook/
immune_cell_profiling_an , Jupyter, 652 linestiGAD65_Bcell_BCR_visual ization.ipynb - Notebook/
immune_cell_profiling_an , Jupyter, 327 linestiGAD65_TCR_preprocessin g.ipynb - Notebook/
immune_cell_profiling_an , Jupyter, 666 linestiGAD65_Tcell_TCR_visual ization.ipynb - Notebook/
immune_cell_profiling_an , Jupyter, 231 linestiGAD65_pseudobulk_prepr ocessing.ipynb - R/
immune_cell_profiling_an , R, 809 lines, 1 matchtiGAD65_QC_preprocessing .R - R/
immune_cell_profiling_an , R, 833 lines, 1 matchtiGAD65_QC_preprocessing .Rmd - R/
immune_cell_profiling_an , R, 846 lines, 4 matchestiGAD65_data_analysis_vi sualization.R - R/
immune_cell_profiling_an , R, 873 lines, 3 matchestiGAD65_data_analysis_vi sualization.Rmd - LICENSE, License, 21 lines
- README.md, Text, 23 lines
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
- geo:GSE138266, at NCBI GEO; found in “Data, Materials, and Software Availability”
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:
- it points to a dataset: NCBI GEO GSE138266
- it points to the authors' code: sumanta-barman/
immune-cell-profiling-an ti-gad65 - it says that the data are available on request
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://
BibTeX
@article{barman2026immun
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/
url = {https://
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/
VL - 123
IS - 13
SP - e2514753123
SN - 0027-8424
PB - National Academy of Sciences
DO - 10.1073/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1073/
"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":
"volume": "123",
"issue": "13",
"page": "e2514753123",
"DOI": "10.1073/
"PMID": "41880578",
"PMCID": "PMC13038060",
"ISSN": "0027-8424",
"publisher": "National Academy of Sciences",
"URL": "https://
"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 advancesIn 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 communicationsIn 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 communicationsIn 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 neurologyIn 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 neuroscienceIn 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 communicationsIn 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: EBioMedicineIn 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 agingIn 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 communicationsIn 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 medicineIn 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.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 10 scripts, and 9 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:60908263ab323707…
Add the badge to the code's README
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 -->
[](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:endHTML
<!-- 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.
