OSCR

An electrophysiological and proteomics roadmap for human induced glutamatergic neurons: fine-tuning of culture conditions for pathophysiological studies.

Code ↔ Paper

6 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 6 matches · 1 of them tie a paragraph to a whole file, not to given lines: a weak match, whose lines are not tinted
  1. [1] § Materials and methods › Taxonomic-based peptide annotation ↔ R/main.r, lines 2–52 · score 0.85 · mono culture sample, Rattus norvegicus, Spectronaut peptide, peptides quantified, annotate peptides, Proteoclade
  2. [2] § Materials and methods › Differential protein abundance analysis ↔ R/main.r, lines 2–52 · score 0.83 · median normalization, peptide quantification, proDa, annotated peptides, transformed, raw
  3. [3] § Materials and methods › Taxonomic-based peptide annotation ↔ python/main.py, the whole file · a weak match · score 0.66 · create pcdb, merge fastas, species, Spectronaut, max, peptides
  4. [4] § Results › PEI and PLO adhesion factors did not affect the neuronal networks’ electrophysiology ↔ R/main.r, lines 54–111 · score 0.60 · NB HD, NB LD, BP HD, BP LD, fitting, BrainPhys
  5. [5] § Results › Functional synaptic characterization of the best culture conditions to maintain long term and highly functional network ↔ R/main.r, lines 313–368 · score 0.56 · synaptic transmission, term synaptic, presynaptic, signals, synapses, Neurobasal
  6. [6] § Materials and methods › Gene set enrichment analysis ↔ R/main.r, lines 371–422 · score 0.54 · enrichment score, Gene Ontology, neuro, axon, filtered

Paper

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

The paper is loaded when this pane is shown.

The authors' code

R · 422 lines · 21 KB · no license · 5 matches

  1. #################################
  2. # Differential abundance analysis
  3. #################################
  4. ## Reading Proteoclade- and Spectronaut-annotate peptide raw intensity matrix
  5. suppressPackageStartupMessages(library(dplyr))
  6. # 1 - Filtering out peptides quantified in rat mono-culture and peptides not quantified in human cultures with rat-only annotation
  7. # 2 - Re-arrange Spectronaut peptide gene annotation, more accurate than corresponding Proteoclade annotation, to accomodate further median averagin of peptide intensity
  8. # 3 - Exclude Rat mono-culture samples from differential abundance analysis
  9. annotated_peptide_matrix <- read.delim("../inputs/annotated_raw_peptide_intensity_matrix.txt")
  10. annotated_peptide_matrix <- annotated_peptide_matrix %>%
  11. rename(Proteoclade_gene_anno = genes, Proteoclade_species_anno = species) %>%
  12. select(!organisms) %>%
  13. mutate(Rn_mono_intensity_sum = rowSums(annotated_peptide_matrix %>% select(grep(colsample_ids(.), pattern = "Rat_Astro")), na.rm = T),
  14. Hs_mono_intensity_sum = rowSums(annotated_peptide_matrix %>% select(grep(colsample_ids(.), pattern = paste(c("iPSC", "NPC"), collapse = "|"))), na.rm = T),
  15. Spectronaut_bool_hs_only_anno = ifelse(grepl(Spectronaut_species_anno, pattern = "Rattus norvegicus"), FALSE, TRUE),
  16. Proteoclade_bool_hs_only_anno = ifelse(grepl(Proteoclade_species_anno, pattern = "Rattus norvegicus"), FALSE, TRUE)) %>%
  17. filter(Rn_mono_intensity_sum == 0) %>%
  18. filter(Hs_mono_intensity_sum != 0 & Spectronaut_bool_hs_only_anno == TRUE | Hs_mono_intensity_sum != 0 & Proteoclade_bool_hs_only_anno == TRUE) %>%
  19. select(!c(Sequence, Rn_mono_intensity_sum, Hs_mono_intensity_sum, Spectronaut_bool_hs_only_anno, Proteoclade_bool_hs_only_anno, Spectronaut_species_anno, Proteoclade_gene_anno, Proteoclade_species_anno)) %>%
  20. mutate(Spectronaut_gene_anno = unlist(lapply(Spectronaut_gene_anno, function(x) {
  21. gene_anno <- unique(unlist(stringr::str_split(toupper(x), pattern = ";")));
  22. gene_anno <- paste(gene_anno[setdiff(1:length(gene_anno), which(gene_anno %in% ""))], collapse = "|")
  23. }))) %>%
  24. select(!grep(colnames(.), pattern = "Rat_Astro"))
  25. ## Formatting peptide matrix to fit proDa differential analysis pipeline
  26. suppressPackageStartupMessages(library(proDA))
  27. # Median averaging of peptide raw intensity followed by log2 transformation and median normalization
  28. median_collapsed_peptide_matrix <- apply(annotated_peptide_matrix[,-ncol(annotated_peptide_matrix)], 2, function(x) {
  29. tapply(x, annotated_peptide_matrix$Spectronaut_gene_anno, function(y) {
  30. mvec <- median(y, na.rm = T);
  31. })
  32. }) %>%
  33. log2() %>%
  34. median_normalization() %>%
  35. `colnames<-`(sub(colnames(.), pattern = "\\.raw.*", replacement = ".Median.Normalized.Pep.Quantity"))
  36. # Sample metadata organization to fit proDA model
  37. metadata <- read.delim("../inputs/proDA_formatted_sample_metadata.txt")
  38. fit_concat_variables <- proDA(median_collapsed_peptide_matrix, design = ~ 0 + Concat_variables + Cell_line, col_data = metadata)
  39. fit_phenotype <- proDA(median_collapsed_peptide_matrix, design = ~ 0 + Phenotype + Cell_line, col_data = metadata)
  40. contrasts <- lapply(c("Concat_variablesiNeurons_Neurobasal_HD-Concat_variablesiNeurons_Brainphysis_HD",
  41. "Concat_variablesiNeurons_Neurobasal_LD-Concat_variablesiNeurons_Brainphysis_LD",
  42. "Concat_variablesiNeurons_Brainphysis_LD-Concat_variablesiNeurons_Brainphysis_HD",
  43. "Concat_variablesiNeurons_Neurobasal_LD-Concat_variablesiNeurons_Neurobasal_HD",
  44. "Concat_variablesiNeurons_Neurobasal_LD-Concat_variablesiNeurons_Brainphysis_HD"),
  45. function(x) {
  46. test_diff(fit, x)
  47. }) %>%
  48. `names<-` (c("iNeu_NB_HD vs iNeu_BP_HD",
  49. "iNeu_NB_LD vs iNeu_BP_LD",
  50. "iNeu_BP_LD vs iNeu_BP_HD",
  51. "iNeu_NB_LD vs iNeu_NB_HD",
  52. "iNeu_NB_LD vs iNeu_BP_HD"))
  53. # openxlsx::write.xlsx(contrasts, "/home/ennio/repo/rna_seq_tutorial/cytof_tutorial/pclade/contrast_cc/contrasts.xlsx", quote = F, rowNames = F)
  54. # Target gene distribution heatmap accross iNeurons culture conditions
  55. target_gene_list <- openxlsx::read.xlsx("../resources/Common interested genes iN vs iPSC_Mod.xlsx")
  56. Concat_variables <- c("iPSC", "iNeurons_Brainphysis_LD", "iNeurons_Brainphysis_HD", "iNeurons_Neurobasal_LD", "iNeurons_Neurobasal_HD"),
  57. median_collapsed_concat_variables <- t(apply(t(median_collapsed_peptide_matrix), 2, function(x) {
  58. tapply(x, metadata$Concat_variables, function(y) median(y, na.rm = T))
  59. })) %>%
  60. `rownames<-`(NULL)
  61. pdf("iNeurons vs iPSC - Common interesting genes_median.pdf", height = 12, width = 12);
  62. p <- Heatmap(median_collapsed_concat_variables[target_gene_list[,1], Concat_variables], name = "Normalized Median",
  63. column_order = Concat_variables,
  64. row_order = target_gene_list[,1],
  65. na_col = "black",
  66. right_annotation = NULL,
  67. cluster_rows = FALSE,
  68. cluster_columns = FALSE,
  69. col = circlize::colorRamp2(c(min(median_collapsed_concat_variables, na.rm = T), max(median_collapsed_concat_variables, na.rm = T)), c("lightyellow", "darkred")),
  70. column_names_gp = gpar(fontsize = 10, fontface = "bold"),
  71. column_title_gp = gpar(fontface = "bold"),
  72. row_names_gp = gpar(fontface = "bold"),
  73. row_title_gp = gpar(fontface = "bold"));
  74. plot(p);
  75. dev.off()
  76. # Expression heatmap of target protein list
  77. suppressPackageStartupMessages(library(ComplexHeatmap))
  78. sample_info_df_ineu_filt <- sample_info_df %>% filter(phenotype == "iNeurons") %>% mutate(medium_density = paste0(medium, " ", density))
  79. target_gene_list <- openxlsx::read.xlsx("../resources/Lista geni sinapsi per Ennio.xlsx") %>% pull()
  80. target_gene_list <- c("ADGRB1", target_gene_list)
  81. # LFC hmap
  82. contrasts <- c("Neurobasal_LD vs Brainphysis_LD", "Neurobasal_LD vs Brainphysis_HD", "Neurobasal_LD vs Neurobasal_HD")
  83. daa_tabs_syngo_filtered <- do.call("rbind", lapply(1:3, function(x) { tab <- openxlsx::read.xlsx("../results/daa_table_syngo_filtered.xlsx", sheet = x) %>% mutate(contrast = rep(contrasts[x], nrow(.))) })) %>%
  84. filter(name %in% target_gene_list) %>%
  85. dplyr::select(name, LogFC = diff, contrast) %>%
  86. tidyr::spread(contrast, LogFC) %>%
  87. tibble::column_to_rownames("name") %>%
  88. as.matrix()
  89. col_fun <- circlize::colorRamp2(c(min(daa_tabs_syngo_filtered, na.rm = T), 0, max(daa_tabs_syngo_filtered, na.rm = T)), c("blue", "black", "red"));
  90. colnames(daa_tabs_syngo_filtered) <- NULL
  91. pdf("../article_graphs/iNeu_contrast_logFC_hmap.pdf", height = 1, width = 8)
  92. p <- Heatmap(daa_tabs_syngo_filtered, name = "LogFC",
  93. row_split = NULL,
  94. na_col = "darkgrey",
  95. right_annotation = NULL,
  96. cluster_rows = FALSE,
  97. cluster_columns = FALSE,
  98. col = col_fun,
  99. column_split = contrasts,
  100. column_title_rot = 45,
  101. column_names_gp = gpar(fontface = "bold", fontsize = 8),
  102. column_title_gp = gpar(fontface = "bold"),
  103. row_names_gp = gpar(fontface = "bold"),
  104. row_title_gp = gpar(fontface = "bold"))
  105. plot(p)
  106. dev.off()
  107. # PCA score plots displaying first two dimensions respectively labelled by Concat_variable and Cell_line
  108. pca <- prcomp(t(na.omit(median_collapsed_peptide_matrix)), center = TRUE, scale = TRUE)
  109. summ <- summary(pca)$importance
  110. panel <- ggarrange(score_plot1 <- cbind(as.data.frame(pca$x), metadata) %>% ggplot(aes(x = PC1, y = PC2, color = Concat_variables)) +
  111. geom_point(size = 5) +
  112. ggprism::theme_prism() +
  113. xlab(paste0("PC1 (", summ[2,1]*100, "%)")) +
  114. ylab(paste0("PC1 (", summ[2,2]*100, "%)")),
  115. score_plot2 <- cbind(as.data.frame(pca$x), metadata) %>% ggplot(aes(x = PC1, y = PC2, color = Cell_line)) +
  116. geom_point(size = 5) +
  117. ggprism::theme_prism() +
  118. xlab(paste0("PC1 (", summ[2,1]*100, "%)")) +
  119. ylab(paste0("PC1 (", summ[2,2]*100, "%)")), ncol = 2, align = "h", common.legend = F)
  120. pdf("../article_graphs/pca_pc1_pc2_merged_cond_1.pdf", height = 8, width = 16)
  121. annotate_figure(panel, top = text_grob("Pattern Recognition Analysis - Score Plot",
  122. face = "bold", size = 18))
  123. dev.off()
  124. ##################################################
  125. # Geneset enrichment analysis (GSEA) - GO database
  126. ##################################################
  127. suppressPackageStartupMessages(library(clusterProfiler))
  128. suppressPackageStartupMessages(library(org.Hs.eg.db))
  129. dir <- "../results/"
  130. files <- list.files(dir)[grep(list.files(dir), pattern ="iNeurons.*iPSC")]
  131. contrasts <- lapply(files, function(x) {openxlsx::read.xlsx(paste0(dir, x)) }) %>% `names<-`(files)
  132. # Converting HUGO gene symbols to ENTREZID
  133. ids <- bitr(unlist(stringr::str_split(contrasts[[1]][,"name"], pattern = "\\|")), fromType="SYMBOL", toType=c("ENTREZID"), OrgDb="org.Hs.eg.db")
  134. # GSEA of iNeurons vs iPSC contrasts
  135. gseas <- lapply(contrasts, function(x) {
  136. lfc_gene_vector <- x[match(ids$SYMBOL, x$name), "diff"] %>%
  137. arrange(desc(diff)) %>%
  138. select(diff) %>%
  139. pull() %>%
  140. `names<-`(ids[match(x$name, ids$SYMBOL),])
  141. ego <- gseGO(geneList = lfc_gene_vector,
  142. OrgDb = org.Hs.eg.db,
  143. ont = "BP",
  144. pvalueCutoff = 0.05,
  145. eps = 0,
  146. verbose = FALSE)
  147. })
  148. # Heatmap of top 20 down-regulated gene ontologies - iNeurons vs iPSC contrasts
  149. suppressPackageStartupMessages(library(ggplot2))
  150. heatmap_titles <- c("iNeurons_Brainphysis_HD vs iPSC",
  151. "iNeurons_Brainphysis_LD vs iPSC",
  152. "iNeurons_Neurobasal_HD vs iPSC",
  153. "iNeurons_Neurobasal_LD vs iPSC")
  154. pdf("../article_graphs/iNeu_v_iPSC_hmap_top_20_downregulated_ontologies.pdf", height = 16, width = 16)
  155. hmap <- do.call("rbind", lapply(c(1:4), function(x) {
  156. gseas[[x]][c(1:20),] %>%
  157. mutate(contrast = rep(titles[x], nrow(.)))})) %>%
  158. select(Description, contrast, NES) %>%
  159. merge(expand.grid(nes_matrix_top_20_dr_ont$Description, nes_matrix_top_20_dr_ont$contrast) %>%
  160. dplyr::rename(Description = Var1, contrast = Var2),., by = c("Description", "contrast"), all = T) %>%
  161. ggplot(aes(x = contrast, y = Description, fill = NES)) +
  162. geom_tile() +
  163. ggprism::theme_prism() +
  164. labs(fill = "NES") +
  165. theme(axis.title.y = element_blank(),
  166. axis.title.x = element_blank(),
  167. axis.text.x = element_text(hjust = 1, vjust = 1, angle = 45),
  168. legend.text = element_text(face = "bold"),
  169. legend.title = element_text(face = "bold")) +
  170. scale_fill_gradient(low="darkblue", high="skyblue", na.value = "grey") +
  171. ggtitle("GSEA - Gene Ontology Biological Process")
  172. plot(hmap)
  173. dev.off()
  174. # Tables of top 20 down-regulated gene ontologies - iNeurons vs iPSC contrasts
  175. ont_lists <- lapply(gseas, function(x) {
  176. x@result[order(x@result$NES, decreasing = F)[1:20],] %>%
  177. dplyr::select(Description, enrichmentScore, NES, p.adjust, core_enrichment_entrez_id = core_enrichment) %>%
  178. mutate(core_enrichment_hugo_symbol = unlist(lapply(x@result[order(x@result$NES, decreasing = F)[1:20], "core_enrichment"]), function(y) {
  179. ncbi_id <- as.integer(unlist(stringr::str_split(y, pattern = "/")))
  180. paste(ids[which(ids$ENTREZID %in% ncbi_id), "SYMBOL"], collapse = "/")
  181. }))
  182. }) %>% `names<-`(heatmap_titles)
  183. openxlsx::write.xlsx(ont_lists, "../results/iNeu_v_iPSC_table_top_20_downregulated_ontologies.xlsx", quote = F, rowNames = F)
  184. # Heatmap of target gene ontologies - iNeurons vs iPSC contrasts
  185. pathway_of_interest <- openxlsx::read.xlsx("../resources/Files to re-order the heatmap.xlsx")
  186. pathway_of_interest <- reord[-nrow(pathway_of_interest),]
  187. nes_matrix <- do.call("rbind", lapply(as.list(c(1:4)), function(x) {
  188. gseas[[x]] %>%
  189. filter(Description %in% pathway_of_interest$Description) %>%
  190. mutate(contrast = rep(heatmap_titles[x], nrow(.)))
  191. })) %>%
  192. select(contrast, Description, NES) %>%
  193. tidyr::spread(contrast, NES) %>%
  194. tibble::column_to_rownames("Description") %>%
  195. t()
  196. nes_matrix <- nes_matrix[c("iNeurons_Neurobasal_HD vs iPSC",
  197. "iNeurons_Neurobasal_LD vs iPSC",
  198. "iNeurons_Brainphysis_HD vs iPSC",
  199. "iNeurons_Brainphysis_LD vs iPSC"),]
  200. rownames(nes_matrix) <- NULL
  201. col_fun <- circlize::colorRamp2(c(min(nes_matrix, na.rm = T), max(nes_matrix, na.rm = T)), c("yellow", "red"));
  202. pdf("../article_graphs/iNeu_v_iPSC_hmap_target_ontologies.pdf", height = 16, width = 18)
  203. p <- Heatmap(nes_matrix, name = "NES",
  204. row_split = c("iNeurons_Neurobasal_HD vs iPSC",
  205. "iNeurons_Neurobasal_LD vs iPSC",
  206. "iNeurons_Brainphysis_HD vs iPSC",
  207. "iNeurons_Brainphysis_LD vs iPSC"),
  208. column_order = colnames(nes_matrix),
  209. na_col = "darkgrey",
  210. right_annotation = NULL,
  211. cluster_rows = FALSE,
  212. cluster_columns = FALSE,
  213. col = col_fun,
  214. column_names_gp = gpar(fontsize = 14, fontface = "bold"),
  215. column_title_gp = gpar(fontface = "bold"),
  216. row_names_gp = gpar(fontface = "bold"),
  217. row_title_gp = gpar(fontface = "bold"),
  218. column_names_max_height = unit(18, "cm"))
  219. plot(p)
  220. dev.off()
  221. # Tables of target gene ontologies - iNeurons vs iPSC contrasts
  222. ont_lists <- lapply(gseas, function(x) {
  223. x@result %>%
  224. filter(Description %in% pathway_of_interest$Description) %>%
  225. dplyr::select(Description, enrichmentScore, NES, p.adjust, core_enrichment_entrez_id = core_enrichment) %>%
  226. mutate(core_enrichment_hugo_symbol = unlist(lapply(x@result[order(@result$NES, decreasing = F)[1:20], "core_enrichment"]), function(y) {
  227. ncbi_id <- as.integer(unlist(stringr::str_split(y, pattern = "/")))
  228. paste(ids[which(ids$ENTREZID %in% ncbi_id), "SYMBOL"], collapse = "/")
  229. })) %>%
  230. arrange(desc(NES))
  231. }) %>%
  232. `names<-`(heatmap_titles)
  233. openxlsx::write.xlsx(ont_lists, "../results/iNeu_v_iPSC_table_target_ontologies.xlsx", quote = F, rowNames = F)
  234. # GSEA of contrasts between iNeurons culture conditions
  235. files <- list.files(dir)[grep(list.files(dir), pattern ="iNeurons.*iNeurons")][-1]
  236. contrasts <- lapply(as.list(files), function(x) {openxlsx::read.xlsx(paste0(dir, x)) %>% mutate(name = toupper(name))})
  237. gseas <- lapply(contrasts, function(x) {
  238. lfc_gene_vector <- x[match(ids$SYMBOL, x$name), "diff"] %>%
  239. arrange(desc(diff)) %>%
  240. select(diff) %>%
  241. pull() %>%
  242. `names<-`(ids[match(x$name, ids$SYMBOL),])
  243. <- gs(geneList = lfc_gene_vector,
  244. OrgDb = org.Hs.eg.db,
  245. ont = "BP",
  246. pvalueCutoff = 0.05,
  247. eps = 0,
  248. verbose = FALSE)
  249. })
  250. heatmap_titles <- c("iNeurons_Brainphysis_LD vs iNeurons_Brainphysis_HD ", "iNeurons_Neurobasal_HD vs iNeurons_Brainphysis_HD", "iNeurons_Neurobasal_LD vs iNeurons_Brainphysis_LD", "iNeurons_Neurobasal_LD vs iNeurons_Neurobasal_HD")
  251. ont_ind_to_exclude <- list(
  252. c("synaptic signaling", "regulation of trans-synaptic signaling", "chemical synaptic transmission"),
  253. c("anterograde trans-synaptic signaling", "trans-synaptic signaling", "chemical synaptic transmission","synapse organization","long-term synaptic potentiation","regulation of long-term synaptic potentiation","synapse assembly"),
  254. c("trans-synaptic signaling", "synapse organization", "synapse assembly", "regulation of synapse assembly","presynapse organization","synapse organization")
  255. )
  256. # Tables of target gene ontologies - contrasts between iNeurons culture conditions
  257. ont_lists <- lapply(as.list(c(1:3)), function(x) {
  258. gseas[[x]] %>%
  259. filter(grepl(Description, pattern = paste(c("axon", "synap", "neuro"), collapse = "|"))) %>%
  260. filter(!Description %in% ont_ind_to_exclude[[x]]) %>%
  261. dplyr::select(Description, enrichmentScore, NES, p.adjust, core_enrichment_entrez_id = core_enrichment) %>%
  262. mutate(core_enrichment_hugo_symbol = unlist(lapply(x@result[order(@result$NES, decreasing = F)[1:20], "core_enrichment"]), function(y) {
  263. ncbi_id <- as.integer(unlist(stringr::str_split(y, pattern = "/")))
  264. paste(ids[which(ids$ENTREZID %in% ncbi_id), "SYMBOL"], collapse = "/")
  265. })) %>%
  266. arrange(desc(NES))
  267. }) %>%
  268. `names<-`(heatmap_titles)
  269. openxlsx::write.xlsx(ont_lists, "../results/iNeu_v_iNeu_hmap_target_ontologies_list.xlsx", quote = F, rowNames = F)
  270. # Heatmap of target gene ontologies - contrasts between iNeurons culture conditions
  271. nes_matrix <- expand.grid(tab4$Description, heatmap_titles) %>%
  272. dplyr::rename(Description = Var1, contrast = Var2) %>%
  273. merge(.,do.call("rbind", lapply(as.list(c(1:3)), function(x) {
  274. gseas[[x]][-ro[[x]],] %>% mutate(contrast = rep(titles[x], nrow(.)))
  275. })), by = c("Description", "contrast"), all = T) %>%
  276. select(contrast, Description, NES) %>% distinct(NES, .keep_all = TRUE) %>%
  277. tidyr::spread(., contrast, NES) %>%
  278. tibble::column_to_rownames("Description") %>%
  279. t() %>%
  280. `rownames<-`(NULL)
  281. col_fun <- circlize::colorRamp2(c(min(nes_matrix, na.rm = T), max(nes_matrix, na.rm = T)), c("yellow", "red"));
  282. pdf("./article_graphs/iNeu_v_iNeu_hmap_target_ontologies.pdf", height = 10, width = 14)
  283. p <- Heatmap(nes_matrix, name = "NES",
  284. row_split = contrast,
  285. column_order = colnames(nes_matrix),
  286. na_col = "darkgrey",
  287. right_annotation = NULL,
  288. cluster_rows = FALSE,
  289. cluster_columns = FALSE,
  290. col = col_fun,
  291. column_names_gp = gpar(fontsize = 12, fontface = "bold"),
  292. column_title_gp = gpar(fontface = "bold"),
  293. row_names_gp = gpar(fontface = "bold"),
  294. row_title_gp = gpar(fontface = "bold"),
  295. column_names_max_height = unit(11, "cm"))
  296. plot(p)
  297. dev.off()

main.r at commit b2eed08, no license · at the source

Overview

Authors: Martina Servetti1,2, Giulia Parodi3, Martino Caramia2, Ennio Nano3, Martina Bartolucci4, Antonella Marte1,3, Giacomo Mazzoni1, Simone Giubbolini1, Farah Diab1, Andrea Petretto4, Pierluigi Valente1,3, Sergio Martinoia3,5, Simona Baldassari6,7, Anna Fassio1,3, Fabio Benfenati2,3, Anna Corradi1,3, Bruno Sterlini1,3
  1. Dipartimento di Medicina Sperimentale, Università di Genova,Genoa, Italy
  2. Center for Synaptic Neuroscience and Technology, Istituto Italiano di Tecnologia,Genoa, Italy
  3. IRCCS Azienda Ospedaliera Metropolitana,Genoa, Italy
  4. Core Facility for Omics Science, IRCCS Istituto Giannina Gaslini,Genoa, Italy
  5. Department of Informatics, Bioengineering, Robotics, and Systems Engineering (DIBRIS), University of Genova,Genoa, Italy
  6. Unit of Medical Genetics, IRCCS Istituto Giannina Gaslini,Genoa, Italy
  7. Department of Neurosciences, Rehabilitation, Ophthalmology, Genetics, Maternal and Child Health (DiNOGMI), University of Genova,Genoa, Italy
Journal: Cell death discovery, volume 12, issue 1, article 333
Dates: received 28 August 2025; accepted 26 May 2026; published online 5 June 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1038/s41420-026-03185-w · PMID 42248859 · PMCID PMC13458295 · OpenAlex W7163688118
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: genetics / omics (modality), human (organism)
Methods: Spectral & time-frequency, Statistics, Smoothing, state filtering, decompositions, Connectivity, fMRI & imaging, Single-unit activity, calcium imaging
Keywords: Development of the nervous system, Stem-cell differentiation, Neurophysiology
Topic: Pluripotent Stem Cells Research (Molecular Biology, Biochemistry, Genetics and Molecular Biology), according to OpenAlex
Funding: Ministero dell’Istruzione, dell’Università e della Ricerca (#NEXTGENERATIONEU, PRIN2022MPCKWW); #NEXTGENERATIONEU (NGEU) and funded by the Ministry of University and Research (MUR), National Recovery and Resilience Plan (NRRP), project MNESYS (PE0000006) – A Multiscale integrated approach to the study of the nervous system in health and disease (DN. 1553 11.10.2022); Fondazione Telethon (Telethon Foundation) (GMR24T1085, GJC22066); Ricerca Corrente and “5X1000”, IRCCS San MArtino, Genova, Italy
Citations: not cited yet (Europe PMC); 88 references in the paper

Abstract

Induced glutamatergic neurons (iGluNeurons) generated by Neurogenin-2 (NGN2) overexpression in human pluripotent stem cells are a powerful model for studying human neuronal maturation and function; however, NGN2-based protocols still lack standardized culture conditions that critically affect neuronal development and function. Three key factors have been identified by previous literature, namely the composition of extracellular matrix coating, the initial plating density, and the choice of culture medium, but the differential effects of their combination have not been thoroughly analyzed. Here, we investigated the combinatorial effects of these three variables, testing eight distinct culture conditions resulting from the combinations of two coatings (poly-L-ornithine and polyethyleneimine), two media (BrainPhys and Neurobasal), and two cell densities (4800 and 1200 cells/mm²). We assessed electrophysiological properties at the single-cell and network levels, characterized morphofunctional and proteomic features across multiple developmental stages. Electrophysiological data indicate that medium composition and plating density, rather than substrate coating, determine neuronal maturation dynamics, with BrainPhys and high density promoting rapid but transient maturation while Neurobasal and low density supporting gradual and sustained network development. Morphofunctional analyzes of synapses and the axon initial segment, together with neuronal maturation markers, support an early BrainPhys-driven acceleration of development that is later exceeded by Neurobasal. To enable accurate proteome profiling of the iGluNeuron system—comprising human neurons and rat astrocytes—we developed a robust taxonomic filtering algorithm that selectively identifies human-specific proteins. This approach confirmed the presence of a conserved core of NGN2-driven differentiation pathways across all settings, in addition to condition-specific signatures. Finally, in the optimal conditions identified through our experimental analyzes, robust spontaneous and evoked synaptic activity was observed. These results provide a framework for optimizing iGluNeuron cultures, balancing rapid maturation and long-term functional stability, and establishing a benchmark for human neuronal models in disease research and drug screening.

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

Repositories

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

mathworks.com/matlabcentral/fileexchange

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: the link answers
Software Heritage: not checked
Found in: the text, “Quantitative image analysis with ImageJ”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 2 checks, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: unreachable at the last attempt (HTTP 403)

ennionano/functional_roadmap_for_induced_glut-neurons

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: b2eed084c19115a196048dfda737faecfdc5ff9f, 11 March 2026
Languages: R (1), Python (1)
Size: 3 files, 2 scripts
Software Heritage: not archived
Found in: “Code availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: circlize (1 file), clusterProfiler (1 file), ComplexHeatmap (1 file), ggplot2 (1 file), tidyverse (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
3 files

Code availability

The code is available on the following GitHub page “https://github.com/ennionano/functional_roadmap_for_induced_glut-neurons.” and will be fully accessible upon request.

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

Tracing map

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

What the map holds:

  • 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 2 scripts, each with its path and the digest of its content;
  • 6 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

No dataset and no data link were found in the paper.

Data availability

The data that support the findings of this study are available from the corresponding author upon reasonable request.

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

Versions

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

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 17 authors, 3 keywords, 4 funders, 88 references.

Cite

This paper

Servetti, M., Parodi, G., Caramia, M., Nano, E., Bartolucci, M., Marte, A., Mazzoni, G., Giubbolini, S., Diab, F., Petretto, A., Valente, P., Martinoia, S., Baldassari, S., Fassio, A., Benfenati, F., Corradi, A., & Sterlini, B. (2026). An electrophysiological and proteomics roadmap for human induced glutamatergic neurons: fine-tuning of culture conditions for pathophysiological studies. Cell death discovery, 12(1), 333. https://doi.org/10.1038/s41420-026-03185-w

BibTeX

@article{servetti2026electrophysiological,
author = {Servetti, Martina and Parodi, Giulia and Caramia, Martino and Nano, Ennio and Bartolucci, Martina and Marte, Antonella and Mazzoni, Giacomo and Giubbolini, Simone and Diab, Farah and Petretto, Andrea and Valente, Pierluigi and Martinoia, Sergio and Baldassari, Simona and Fassio, Anna and Benfenati, Fabio and Corradi, Anna and Sterlini, Bruno},
title = {{An electrophysiological and proteomics roadmap for human induced glutamatergic neurons: fine-tuning of culture conditions for pathophysiological studies}},
journal = {Cell death discovery},
year = {2026},
month = jun,
volume = {12},
number = {1},
pages = {333},
publisher = {Nature Publishing Group},
issn = {2058-7716},
doi = {10.1038/s41420-026-03185-w},
url = {https://doi.org/10.1038/s41420-026-03185-w},
pmid = {42248859},
pmcid = {PMC13458295}
}

RIS

TY - JOUR
AU - Servetti, Martina
AU - Parodi, Giulia
AU - Caramia, Martino
AU - Nano, Ennio
AU - Bartolucci, Martina
AU - Marte, Antonella
AU - Mazzoni, Giacomo
AU - Giubbolini, Simone
AU - Diab, Farah
AU - Petretto, Andrea
AU - Valente, Pierluigi
AU - Martinoia, Sergio
AU - Baldassari, Simona
AU - Fassio, Anna
AU - Benfenati, Fabio
AU - Corradi, Anna
AU - Sterlini, Bruno
TI - An electrophysiological and proteomics roadmap for human induced glutamatergic neurons: fine-tuning of culture conditions for pathophysiological studies
T2 - Cell death discovery
J2 - Cell Death Discov
PY - 2026
DA - 2026/06/05
VL - 12
IS - 1
SP - 333
SN - 2058-7716
PB - Nature Publishing Group
DO - 10.1038/s41420-026-03185-w
UR - https://doi.org/10.1038/s41420-026-03185-w
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41420-026-03185-w",
"type": "article-journal",
"title": "An electrophysiological and proteomics roadmap for human induced glutamatergic neurons: fine-tuning of culture conditions for pathophysiological studies",
"container-title": "Cell death discovery",
"author": [
{
"family": "Servetti",
"given": "Martina"
},
{
"family": "Parodi",
"given": "Giulia"
},
{
"family": "Caramia",
"given": "Martino"
},
{
"family": "Nano",
"given": "Ennio"
},
{
"family": "Bartolucci",
"given": "Martina"
},
{
"family": "Marte",
"given": "Antonella"
},
{
"family": "Mazzoni",
"given": "Giacomo"
},
{
"family": "Giubbolini",
"given": "Simone"
},
{
"family": "Diab",
"given": "Farah"
},
{
"family": "Petretto",
"given": "Andrea"
},
{
"family": "Valente",
"given": "Pierluigi"
},
{
"family": "Martinoia",
"given": "Sergio"
},
{
"family": "Baldassari",
"given": "Simona"
},
{
"family": "Fassio",
"given": "Anna"
},
{
"family": "Benfenati",
"given": "Fabio"
},
{
"family": "Corradi",
"given": "Anna"
},
{
"family": "Sterlini",
"given": "Bruno"
}
],
"container-title-short": "Cell Death Discov",
"volume": "12",
"issue": "1",
"page": "333",
"DOI": "10.1038/s41420-026-03185-w",
"PMID": "42248859",
"PMCID": "PMC13458295",
"ISSN": "2058-7716",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41420-026-03185-w",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
5
]
]
}
}

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.1523/jneurosci.0912-25.2026 [code]
Hierarchical Afferent Connectivity Drives Population-Wide Bursting Dynamics in a Computational Model of Human-Derived Excitatory Neuronal Networks.
Journal: The Journal of neuroscience : the official journal of the Society for Neuroscience
In common: 4 references, author Sergio Martinoia
[2] doi:10.1038/s41467-026-74753-y [code]
A human-specific microRNA controls the timing of excitatory synaptogenesis.
Journal: Nature communications
In common: circlize, ComplexHeatmap, ggplot2, 1 other tool, 4 references
[3] doi:10.1016/j.isci.2026.115488 [code]
An integrated &lt;i&gt;i&lt;/i&gt; &lt;i&gt;n vitro&lt;/i&gt; platform and biophysical modeling approach for studying synaptic transmission in isolated neuronal pairs.
Journal: iScience
In common: 7 references
[4] doi:10.1073/pnas.2609132123 [code]
A human lysosomal storage disorder toolkit for decoding proteome landscapes in cortical-like and dopaminergic-like induced neurons.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: circlize, clusterProfiler, ComplexHeatmap, 2 other tools, genetics / omics, 2 references
[5] doi:10.1242/dev.205342 [code]
Proteomic profile of hippocampal growth cones through early postnatal development.
Journal: Development (Cambridge, England)
In common: circlize, clusterProfiler, ComplexHeatmap, 2 other tools, genetics / omics, 2 references
[6] doi:10.1186/s11689-026-09713-0 [code]
DRP1 mutations associated with EMPF1 encephalopathy perturb the transcriptional profile and maturation of cortical neurons.
Journal: Journal of neurodevelopmental disorders
In common: circlize, clusterProfiler, ComplexHeatmap, 2 other tools, 3 references
[7] doi:10.1016/j.isci.2026.116412 [code]
KOLF2.1J iTF-Microglia: A standardized platform to study microglial transcriptional regulatory networks in CNS disease.
Journal: iScience
In common: circlize, clusterProfiler, ComplexHeatmap, 2 other tools, genetics / omics, 2 references
[8] doi:10.1038/s41586-026-10214-2 [code]
Multidimensional profiling of heterogeneity in supratentorial ependymomas.
Journal: Nature
In common: circlize, clusterProfiler, ComplexHeatmap, 2 other tools, genetics / omics, 2 references
[9] doi:10.7554/elife.107393 [code]
Chromosome-scale genome assembly of the European common cuttlefish &lt;i&gt;Sepia officinalis&lt;/i&gt;.
Journal: eLife
In common: circlize, clusterProfiler, ComplexHeatmap, 2 other tools, 2 references
[10] doi:10.1016/j.xcrm.2026.102682 [code]
TET CpG sequence-context-specific DNA demethylation shapes progression of IDH-mutant gliomas.
Journal: Cell reports. Medicine
In common: circlize, clusterProfiler, ComplexHeatmap, 2 other tools, genetics / omics, 1 reference

Contribute

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

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

Request its removal

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

Discussion, reproductions, activity

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

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

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