OSCR

Neurons with granulovacuolar degeneration bodies are resilient to tau-induced protein synthesis impairment.

Code ↔ Paper

3 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 3 matches
  1. [1] § MATERIALS AND METHODS › Proteomics analysis of primary neurons › Data analysis ↔ R/quickstart.R, lines 2–107 · score 0.69 · MSqRob, quality control, MS DAP, batch, abundance, DIA
  2. [2] § MATERIALS AND METHODS › Proteomics analysis of primary neurons › Data analysis ↔ R/parse_longformat_generic.R, lines 562–605 · score 0.56 · spectral library, UniMod, fragment, modification, precursor, charge
  3. [3] § MATERIALS AND METHODS › Proteomics analysis of primary neurons › Data analysis ↔ README.Rmd, lines 63–124 · score 0.50 · DIA NN, MS DAP, batch, MSqRob, abundance, quantified

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 · 293 lines · 22 KB · GPL-3.0 · 1 match

  1. #' Quickstart for analyses in this pipeline
  2. #'
  3. #' all-in-one function that covers the vast majority of use-cases of analyzing a dataset imported into MS-DAP.
  4. #' (assuming you already loaded peptide data, sample metadata and fasta files using MS-DAP import functions).
  5. #'
  6. #' @section Filtering:
  7. #'
  8. #' Peptide filter criteria applied to replicate samples within a sample group.
  9. #' params; filter_min_detect, filter_fraction_detect, filter_min_quant, filter_fraction_quant.
  10. #' You only have to provide active filters (but specify at least 1), filters/settings you do not specify don't do anything by default.
  11. #'
  12. #' Settings:
  13. #' for DDA: at least 1~2 detect (MS/MS ID) and quantified in at least ~75% of replicates.
  14. #' for DIA: detect (confidence score < threshold) in at least ~75% of replicates (because for DIA, you typically have an abundance value in each sample regardless of the identifier confidence score).
  15. #' If there are only 3 replicates, we recommend filtering such that there are at least 3 datapoints to work with in differential expression analysis.
  16. #'
  17. #' Taken together, recommended settings for a DDA dataset with 3~8 replicates in each sample group look like this;
  18. #'
  19. #' \code{
  20. #' filter_min_detect = 1 (or zero to fully rely on MBR), filter_fraction_detect = 0.25 (or zero to fully rely on MBR), filter_min_quant = 3, filter_fraction_quant = 0.75
  21. #' }
  22. #'
  23. #' Analogous for DIA;
  24. #'
  25. #' \code{
  26. #' filter_min_detect = 3, filter_fraction_detect = 0.75
  27. #' }
  28. #'
  29. #' @section Filter within contrast vs using all groups:
  30. #'
  31. #' Two distinct approaches to selecting peptides can be used for differential expression analysis: 1) 'within contrast' and 2) 'apply filter to all sample groups'.
  32. #'
  33. #' 1) Determine within each contrast (eg; group A vs group B) what peptides can be used by applying above peptide filter criteria and then apply normalization to this data subset.
  34. #' Advantaguous in datasets with many groups; this maximizes the number of peptides used in each contrast (eg; let peptide p be observed in groups A and B, not in C. we'd want to use it in A vs B, not in A vs C).
  35. #' As a disadvantage, this complicates interpretation since the exact data used is different in each contrast (slightly different peptides and normalization in each contrast).
  36. #'
  37. #' 2) Apply above filter criteria to each sample group (eg; a peptide must past these filter rules in every sample group) and then apply normalization
  38. #'
  39. #' This data matrix is then used for all downstream statistics
  40. #'
  41. #' Advantage; simple and robust
  42. #'
  43. #' Disadvantage; potentially miss out on (group-specific) peptides/data-points that may fail filter criteria in just 1 group, particularly in large datasets with 4+ groups
  44. #'
  45. #' Set \code{filter_within_contrast = FALSE} for this option
  46. #'
  47. #' Note; if there are just 2 sample groups (eg; WT vs KO), this point is moot as both approaches are the same
  48. #'
  49. #' @section Normalization:
  50. #' normalization algorithms are applied to the peptide-level data matrix.
  51. #' options: "" (empty string disables normalization), "vsn", "loess", "rlr", "msempire", "vwmb", "modebetween", "modebetween_protein" (this balances foldchanged between sample groups. Highly recommended, see MS-DAP manuscript)
  52. #' Refer to `normalization_algorithms()` function documentation for available options and a brief description of each.
  53. #'
  54. #' You can combine normalizations by providing an array of options to apply subsequential normalizations.
  55. #'
  56. #' For instance, \code{norm_algorithm = c("vsn", "modebetween_protein")} applies the vsn algorithm (quite strong normalization reducing variation) and then balances between-group protein-level foldchanges with modebetween normalization.
  57. #'
  58. #' Benchmarks have shown that c("vwmb", "modebetween_protein") and c("vsn", "modebetween_protein") are the optimal strategies, see MS-DAP manuscript.
  59. #'
  60. #' @section Differential Expression Analysis:
  61. #'
  62. #' Statistical models for differential expression analysis
  63. #'
  64. #' MSqRob is recommended for most cases; a peptide-level model that is highly sensitive and quite robust. Reference: https://github.com/statOmics/MSqRob
  65. #'
  66. #' MS-EmpiRe a peptide-level model that works especially well for DDA data. Reference: https://github.com/zimmerlab/MS-EmpiRe
  67. #'
  68. #' eBayes is robust but conservative, using the limma package to apply moderated t-tests on protein-level abundances. Reference: https://doi.org/doi:10.18129/B9.bioc.limma
  69. #'
  70. #' options: ebayes, deqms, msempire, msqrob, msqrobsum. Refer to `dea_algorithms()` function documentation for available options and a brief description of each.
  71. #'
  72. #' You can simply apply multiple DEA models in parallel by supplying an array of options. The output of each model will be visualized in the PDF report and data included in the output Excel report.
  73. #' e.g.; \code{dea_algorithm = c("ebayes", "deqms", "msempire", "msqrob")}
  74. #'
  75. #'
  76. #'
  77. #' @param dataset a valid dataset object generated upstream by an MS-DAP import function. For instance, import_dataset_skyline() or import_dataset_maxquant_evidencetxt()
  78. #' @param filter_min_detect in order for a peptide to 'pass' in a sample group, in how many replicates must it be detected?
  79. #' @param filter_fraction_detect in order for a peptide to 'pass' in a sample group, what fraction of replicates must it be detected?
  80. #' @param filter_min_quant in order for a peptide to 'pass' in a sample group, in how many replicates must it be quantified?
  81. #' @param filter_fraction_quant in order for a peptide to 'pass' in a sample group, what fraction of replicates must it be quantified?
  82. #' @param filter_min_peptide_per_prot in order for a peptide to 'pass' in a sample group, how many peptides should be available after detect filters? 1 is default, but 2 can be a good choice situationally (eg; to not rely on proteins with just 1 quantified peptide)
  83. #' @param filter_topn_peptides maximum number of peptides to maintain for each protein (from the subset that passes above filters, peptides are ranked by the number of samples where detected and their variation between replicates).
  84. #' @param filter_by_contrast should the above filters be applied to all sample groups, or only those tested within each contrast? Enabling this optimizes available data in each contrast, but increases the complexity somewhat as different subsets of peptides are used in each contrast and normalization is applied separately.
  85. #' @param norm_algorithm normalization algorithm(s), or provide an empty string to skip normalization. Refer to `normalization_algorithms()` function documentation for available options and a brief description of each. Provide an array of options to run each algorithm consecutively, for instance; c("vsn", "modebetween_protein") to first apply vsn normalization and then correct between-group ratios such that the protein-level log2-foldchange mode is zero
  86. #' @param rollup_algorithm rollup_algorithm strategy for combining peptides to proteins as used in DEA algorithms that first combine peptides to proteins and then apply statistics, like eBayes and DEqMS. Options: maxlfq, tukey_median, sum. See further documentation for function `rollup_pep2prot()`
  87. #' @param dea_algorithm algorithm for differential expression analysis (provide an array of strings to run multiple, in parallel). Refer to `dea_algorithms()` function documentation for available options and a brief description of each. To use a custom DEA function, provide the respective R function name as a string (see GitHub documentation on custom DEA functions for more details)
  88. #' @param dea_qvalue_threshold threshold for significance of adjusted p-values in figures and output tables. Output tables will also include all q-values as-is
  89. #' @param dea_log2foldchange_threshold threshold for significance of log2 foldchanges. Set to zero to disregard or a positive value to apply a cutoff to absolute log2 foldchanges. MS-DAP can also perform a bootstrap analyses to infer a reasonable threshold by setting this parameter to NA
  90. #' @param diffdetect_min_peptides_observed for differential detection only; minimum number of peptides that a protein must be detected with in either group (within at least `diffdetect_min_samples_observed`) in order to be included in the differential detection z-score results. Set to NA to disable differential detection
  91. #' @param diffdetect_min_samples_observed for differential detection only; minimum number of samples where a protein should be observed at least once by any of its peptides (in either group) when comparing a contrast of group A vs B. Set to NA to disable differential detection
  92. #' @param diffdetect_min_fraction_observed for differential detection only; analogous to `diffdetect_min_samples_observed`, but here you can specify the fraction of samples where a protein needs to be detected in either group (within the respective contrast). default; 0.5 (50% of samples)
  93. #' @param pca_sample_labels whether to use sample names or a numeric ID as labels in the PCA plot. options: "auto" (let code decide, default), "shortname" (use sample shortnames), "index" (auto-generated numeric ID), "index_asis" (same as index option and specifically disable label overlap reduction)
  94. #' @param var_explained_sample_metadata optionally, enable variance-explained analysis. This is slow, even for small datasets, and even moreso as the number of experiment metadata grows (so to save time in routine analyses, this is disabled by default). Set to NULL to disable (default), NA to automatically infer column names from `dataset@samples` to be used, or provide an array of column names from `dataset@samples` to be used (e.g. `c("group","batch","sex")`)
  95. #' @param multiprocessing_maxcores optionally, integer parameter to set the maximum number of cores to use when running MSqRob/MSqRobSum DEA algorithms. If other DEA methods are used, this setting doesn't do anything. Set to NA (default) to automatically select all available CPU cores minus 1. For systems with many CPU cores that run into errors related to "socketConnection" or "PSOCK", try limiting this to a lower number (e.g. 8)
  96. #' @param output_dir output directory where all output files should be stored. If the provided file path is not an existing directory, it will be created. Optionally, disable the creation of any output files (QC report, DEA table, etc.) by setting this parameter to NA (also overrides the 'dump_all_data' parameter)
  97. #' @param output_within_timestamped_subdirectory optionally, automatically create a subdirectory (within output_dir) that has the current date&time as name and store results there. options: FALSE, TRUE
  98. #' @param output_abundance_tables whether to write peptide- and protein-level data matrices to file. options: FALSE, TRUE
  99. #' @param output_qc_report whether to create the Quality Control report. options: FALSE, TRUE . Highly recommended to set to TRUE (default). Set to FALSE to skip the report PDF (eg; to only do differential expression analysis and skip the time-consuming report creation)
  100. #' @param dump_all_data if you're interested in performing custom bioinformatic analyses and want to use any of the data generated by this tool, you can dump all intermediate files to disk. Has performance impact so don't enable by default. options: FALSE, TRUE
  101. #' @seealso `dea_algorithms()` and `normalization_algorithms()` for available algorithms and documentation.
  102. #' @importFrom parallel stopCluster
  103. #' @importFrom openxlsx write.xlsx
  104. #' @importFrom data.table fwrite
  105. #' @export
  106. analysis_quickstart = function(
  107. dataset,
  108. # peptide filter criteria applied within each sample group
  109. filter_min_detect = 0, filter_fraction_detect = 0, filter_min_quant = 0, filter_fraction_quant = 0,
  110. # respective criteria on protein level
  111. filter_min_peptide_per_prot = 1, filter_topn_peptides = 0,
  112. # apply filter to each sample group, or only apply filter within relevant sample groups being compared in a contrast?
  113. filter_by_contrast = FALSE,
  114. # normalization algorithms for peptide-level data. Available options at msdap::normalization_algorithms() and are detailed in this function's documentation. Provide an array of options to run multiple sequentially
  115. norm_algorithm = c("vsn", "modebetween_protein"),
  116. rollup_algorithm = "maxlfq",
  117. # DEA algorithms. Available options at msdap::dea_algorithms() and are detailed in this function's documentation. Provide an array of options to run multiple DEA algorithms in parallel / independently
  118. dea_algorithm = c("deqms", "msqrob", "msempire"),
  119. # define thresholds for significant proteins
  120. dea_qvalue_threshold = 0.01,
  121. dea_log2foldchange_threshold = 0, # if NA, infer from bootstrap
  122. # differential detection
  123. diffdetect_min_peptides_observed = 2,
  124. diffdetect_min_samples_observed = 3,
  125. diffdetect_min_fraction_observed = 0.5,
  126. # plot options
  127. pca_sample_labels = "auto",
  128. var_explained_sample_metadata = NULL,
  129. # multithreading control
  130. multiprocessing_maxcores = NA,
  131. # output data
  132. output_abundance_tables = TRUE,
  133. output_qc_report = TRUE,
  134. output_dir, # no default, required to be explicitly set
  135. output_within_timestamped_subdirectory = TRUE,
  136. dump_all_data = FALSE
  137. ) {
  138. # check if the user is trying to apply filtering/dea on a dataset object that is incompatible with MS-DAP version 1.2 or later
  139. error_legacy_contrast_definitions(dataset)
  140. output_disabled = length(output_dir) == 0 || (length(output_dir) == 1 && all(is.na(output_dir)))
  141. if(output_disabled) {
  142. append_log("no output files will be generated, output_dir was set to NA", type = "info")
  143. }
  144. if(!output_disabled && (length(output_dir) != 1 || !is.character(output_dir) || output_dir == "")) {
  145. append_log("parameter 'output_dir' should be a character string describing a valid output path", type = "error")
  146. }
  147. if(!output_disabled) {
  148. # convert to absolute paths. example; user used setwd() and now sets "output" as the output_dir
  149. # only forward slashes and remove redundant. normalizePath() also cleans slashes etc. like our path_clean_slashes (which does more)
  150. output_dir = normalizePath(paste0(output_dir, "/"), winslash = "/", mustWork = FALSE)
  151. # create output directory if it does not exist
  152. if(!dir.exists(output_dir)) {
  153. append_log(paste("output directory does not exist yet, creating;", output_dir), type = "info")
  154. dir.create(output_dir, recursive = T)
  155. if(!dir.exists(output_dir)) {
  156. append_log(paste("failed to create output directory;", output_dir), type = "error")
  157. }
  158. }
  159. if(file.access(output_dir, mode = 2) != 0) {
  160. append_log(paste("no write access to the output directory;", output_dir), type = "error")
  161. }
  162. # output to timestamped subdir
  163. if(output_within_timestamped_subdirectory) {
  164. # If there is an environment variable that hardcodes the timezone (an integer offset from UTC), use it to adjust the timezone
  165. # We use it to control timezone differences between the Docker host and the Docker container
  166. # (windows host systems uses different timezone abbreviations than unix. This solution is straight forward to implement and does introduce additional dependencies)
  167. # Windows PowerShell: [System.TimeZone]::CurrentTimeZone.GetUtcOffset([datetime]::Now).TotalHours (yields integer)
  168. # Unix: date +%z = +hhmm numeric time zone (e.g., -0400)
  169. UTC_N_hours_offset = as.integer(substr(Sys.getenv("HOST_TIMEZONE_UTC_OFFSET"), 1, 3))
  170. if(!is.na(UTC_N_hours_offset)) {
  171. timestamp_prettyprint = format(Sys.time() + UTC_N_hours_offset * 3600, format = "%Y-%m-%d_%H-%M-%S", tz = "UTC")
  172. } else {
  173. timestamp_prettyprint = format(Sys.time(), format = "%Y-%m-%d_%H-%M-%S")
  174. }
  175. output_dir = path_clean_slashes(paste0(output_dir, "/", timestamp_prettyprint, "/"))
  176. }
  177. if(!dir.exists(output_dir)) {
  178. dir.create(output_dir, recursive = T)
  179. }
  180. if(!dir.exists(output_dir)) {
  181. append_log(paste("failed to create directory;", output_dir), type = "error")
  182. }
  183. # check if all output files we want to write to are accessible, before running any time-consuming code
  184. fname_samples = path_append_and_check(output_dir, "samples.xlsx")
  185. remove_file_if_exists(fname_samples)
  186. fname_stats = path_append_and_check(output_dir, "differential_abundance_analysis.xlsx")
  187. remove_file_if_exists(fname_stats)
  188. fname_dataset = path_append_and_check(output_dir, "dataset.RData")
  189. remove_file_if_exists(fname_dataset)
  190. if(output_qc_report) {
  191. remove_file_if_exists(path_append_and_check(output_dir, "report.pdf"))
  192. }
  193. if(output_abundance_tables) {
  194. fname_abundances = path_append_and_check(output_dir, "peptide_and_protein_abundances.xlsx")
  195. remove_file_if_exists(fname_abundances)
  196. }
  197. # add output dir to the dataset object
  198. dataset$output_dir = output_dir
  199. }
  200. if(filter_min_detect == 0 && filter_fraction_detect == 0 && filter_min_quant == 0 && filter_fraction_quant == 0) {
  201. append_log("must specify at least one parameter for filtering peptides. Any of; filter_min_detect, filter_fraction_detect, filter_min_quant, filter_fraction_quant", type = "error")
  202. }
  203. ##### prior to any analyses, check if the data is fractionated. If so, merge all sample fractions prior to downstream analyses
  204. if("fraction" %in% colnames(dataset$samples)) {
  205. append_log("sample metadata contains samples with multiple fractions, 'sample_id' with the same 'shortname' are now merged by summation of their respective peptide intensities", type = "info")
  206. dataset = merge_fractionated_samples(dataset)
  207. }
  208. ##### after dealing with fractions, dataset object integrity check
  209. check_dataset_integrity(dataset)
  210. # extra check; don't include any decoys in downstream data analysis
  211. if(any(dataset$peptides$isdecoy)) {
  212. append_log("peptides tibble must contain no decoy entries at this point (all values in 'isdecoy' column must be FALSE). For typical workflows, make sure to set return_decoys=FALSE when importing data.", type = "error")
  213. }
  214. # facilitate multiprocessing, this is only used for our custom implementation of msqrob at the moment
  215. if(any(grepl("msqrob", dea_algorithm, ignore.case = T))) {
  216. # speed up your analysis by using multiple processor cores (default; all cores but one)
  217. cl <<- initialize_multiprocessing(multiprocessing_maxcores)
  218. # finally, shut down multithreading clusters. use on.exit to execute regardless of downstream errors
  219. on.exit({ suppressWarnings(parallel::stopCluster(cl)); rm(cl, envir = .GlobalEnv) })
  220. }
  221. ##### all filters; global, local, by_group (for CoV plots). adds additional columns to peptide table with filtered and normalized peptide intensities
  222. dataset = filter_dataset(dataset,
  223. filter_min_detect = filter_min_detect, filter_fraction_detect = filter_fraction_detect, filter_min_quant = filter_min_quant, filter_fraction_quant = filter_fraction_quant,
  224. filter_min_peptide_per_prot = filter_min_peptide_per_prot, filter_topn_peptides = filter_topn_peptides,
  225. norm_algorithm = norm_algorithm, rollup_algorithm = rollup_algorithm,
  226. by_group = (output_abundance_tables || output_qc_report), all_group = (!filter_by_contrast || output_abundance_tables || output_qc_report || length(var_explained_sample_metadata) > 0), by_contrast = filter_by_contrast)
  227. ##### DE analysis
  228. # quantitative analysis; eBayes/MSqRob/MS-EmpiRe/MSqRobSum
  229. dataset = dea(dataset, qval_signif = dea_qvalue_threshold, fc_signif = dea_log2foldchange_threshold, dea_algorithm = dea_algorithm, rollup_algorithm = rollup_algorithm, output_dir_for_eset = ifelse(dump_all_data, output_dir, ""))
  230. # debug; print(dataset$de_proteins %>% filter(signif) %>% left_join(dataset$proteins))
  231. # qualitative analysis
  232. dataset = differential_detect(dataset, min_peptides_observed = diffdetect_min_peptides_observed, min_samples_observed = diffdetect_min_samples_observed, min_fraction_observed = diffdetect_min_fraction_observed, count_mode = "auto", rescale_counts_per_sample = TRUE, return_wide_format = FALSE)
  233. ##### export data tables to file
  234. if(!output_disabled) {
  235. openxlsx::write.xlsx(dataset$samples %>% select(!!grep("^key_", colnames(dataset$samples), ignore.case = T, value = T, invert = T)), fname_samples)
  236. export_statistical_results(dataset, output_dir)
  237. if(output_abundance_tables) {
  238. export_protein_abundance_matrix(dataset, rollup_algorithm = rollup_algorithm, output_dir = output_dir)
  239. export_peptide_abundance_matrix(dataset, output_dir = output_dir)
  240. }
  241. # since version 1.6 we always store the dataset RData object in the output folder
  242. save(dataset, file = path_append_and_check(output_dir, "dataset.RData"), compress = T)
  243. # write all data tables to compressed .tsv files
  244. if(dump_all_data) {
  245. data.table::fwrite(dataset$peptides, path_append_and_check(output_dir, "peptides.tsv.gz"), sep="\t", col.names = T, row.names = F, quote = F, na = "")
  246. data.table::fwrite(dataset$proteins, path_append_and_check(output_dir, "proteins.tsv.gz"), sep="\t", col.names = T, row.names = F, quote = F, na = "")
  247. data.table::fwrite(dataset$samples, path_append_and_check(output_dir, "samples.tsv.gz"), sep="\t", col.names = T, row.names = F, quote = F, na = "")
  248. if(is_tibble(dataset$de_proteins) && nrow(dataset$de_proteins) > 0) {
  249. data.table::fwrite(dataset$de_proteins, path_append_and_check(output_dir, "de_proteins.tsv.gz"), sep="\t", col.names = T, row.names = F, quote = F, na = "")
  250. }
  251. if(is_tibble(dataset$dd_proteins) && nrow(dataset$dd_proteins) > 0) {
  252. data.table::fwrite(dataset$dd_proteins, path_append_and_check(output_dir, "dd_proteins.tsv.gz"), sep="\t", col.names = T, row.names = F, quote = F, na = "")
  253. }
  254. }
  255. # QC report
  256. if(output_qc_report) {
  257. generate_pdf_report(dataset, output_dir = output_dir, norm_algorithm = norm_algorithm, rollup_algorithm = rollup_algorithm, pca_sample_labels = pca_sample_labels, var_explained_sample_metadata = var_explained_sample_metadata)
  258. }
  259. append_log(paste("output directory;", output_dir), type = "info")
  260. }
  261. return(dataset)
  262. }

quickstart.R at commit 8af3905, under GPL-3.0 · at the source

Overview

  1. Dept. of Human Genetics, Amsterdam UMC - Vrije Universiteit Amsterdam, Amsterdam, The Netherlands
  2. Dept. of Functional Genomics, Vrije Universiteit Amsterdam, Amsterdam, The Netherlands
  3. Dept. of Molecular and Cellular Neuroscience, Center for Neurogenomics and Cognitive Research, Amsterdam Neuroscience, Vrije Universiteit Amsterdam, Amsterdam, The Netherlands
Institutions: Amsterdam University Medical Centers (Netherlands); Vrije Universiteit Amsterdam (Netherlands); Amsterdam Neuroscience (Netherlands)
Journal: Science advances, volume 12, issue 10, article eaea8940
Dates: received 25 July 2025; accepted 30 January 2026; published online 6 March 2026; in print March 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1126/sciadv.aea8940 · PMID 41790889 · PMCID PMC12965320 · OpenAlex W7134116531
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: human (organism), mouse (organism), Alzheimer's / dementia (population), cellular / molecular (subfield)
Methods: Statistics, Evoked potentials, Single-unit activity, calcium imaging
MeSH: Neurons*, Protein Biosynthesis*, tau Proteins*, Vacuoles*, Alzheimer Disease, Animals, Autophagy, Casein Kinase Idelta, Humans, Long-Term Potentiation, Mice (* major topic)
Journal subjects: Neuroscience, Cellular Neuroscience
Topic: Alzheimer's disease research and treatments (Physiology, Medicine), according to OpenAlex
Funding: Nederlandse Organisatie voor Wetenschappelijk Onderzoek (OCENW.M.21.123); Alzheimer Nederland (WE.03-2017-10); Hersenstichting/Coby van Nieuwkerkfonds (DR-2019-00278)
Citations: cited by 3 papers (Europe PMC); 100 references in the paper

Abstract

In Alzheimer’s disease, many surviving neurons with tau pathology contain granulovacuolar degeneration bodies (GVBs), neuron-specific lysosomal structures induced by pathological tau assemblies. This could indicate a neuroprotective role for GVBs; however, the mechanism of GVB formation and its functional implications are elusive. Here, we demonstrate that casein kinase 1δ (CK1δ) activity is required for GVB formation. CK1δ is sequestered in the GVB during this process in an autophagy-dependent manner. We show that neurons with GVBs (GVB+) are resilient to tau-induced impairment of global protein synthesis and are protected against tau-mediated neurodegeneration. GVB+ neurons do not exhibit differential activation of transient translational stress responses but have increased ribosomal content. Unlike neurons without GVBs, GVB+ neurons fully retain the capacity to induce long-term potentiation–induced protein synthesis in the presence of tau pathology. Our results have identified CK1δ as a key regulator of GVB formation that confers a protective neuron-specific stress response to tau pathology. These findings provide opportunities for targeting neuronal resilience in tauopathies.

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

Repository

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

ftwkoopmans/msdap

License: GPL-3.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 8af39053b3b0df82601ee63d75eda275b7cedf6a, 9 May 2026
Languages: R (74), Rust (1), Shell (1)
Size: 358 files, 76 scripts
Software Heritage: not archived
Found in: the references
Holds: README, license file, environment (DESCRIPTION, docker/Dockerfile), tests, documentation, 10 notebooks
Not found: CITATION.cff, continuous integration
Tools: tidyverse (33 files), data.table (15 files), ggpubr (9 files), limma (7 files), ggplot2 (4 files), lme4 (2 files), pROC (2 files), patchwork (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
78 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;
  • 76 scripts, each with its path and the digest of its content;
  • 3 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, code, and materials availability

All data and code needed to evaluate and reproduce the results in the paper are present in the paper and/or the Supplementary Materials. New materials will be made available upon reasonable request. The mass spectrometry proteomics data have been deposited to the ProteomeXchange Consortium via the PRIDE (99) partner repository with the dataset identifier PXD061887.

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

Recorded: type, language, journal, volume, issue, pages, dates, 8 authors, 11 MeSH terms, 3 funders, 98 references.

Cite

This paper

Smits, J. F. M., Ligthart, T. W., Jorge-Oliva, M., Middelhoff, S., Schipper, F., Pita-Illobre, D., Li, K. W., & Scheper, W. (2026). Neurons with granulovacuolar degeneration bodies are resilient to tau-induced protein synthesis impairment. Science advances, 12(10), eaea8940. https://doi.org/10.1126/sciadv.aea8940

BibTeX

@article{smits2026neurons,
author = {Smits, Jasper F. M. and Ligthart, Thijmen W. and Jorge-Oliva, Marta and Middelhoff, Skip and Schipper, Fleur and Pita-Illobre, Débora and Li, Ka Wan and Scheper, Wiep},
title = {{Neurons with granulovacuolar degeneration bodies are resilient to tau-induced protein synthesis impairment}},
journal = {Science advances},
year = {2026},
month = mar,
volume = {12},
number = {10},
pages = {eaea8940},
publisher = {American Association for the Advancement of Science},
issn = {2375-2548},
doi = {10.1126/sciadv.aea8940},
url = {https://doi.org/10.1126/sciadv.aea8940},
pmid = {41790889},
pmcid = {PMC12965320}
}

RIS

TY - JOUR
AU - Smits, Jasper F. M.
AU - Ligthart, Thijmen W.
AU - Jorge-Oliva, Marta
AU - Middelhoff, Skip
AU - Schipper, Fleur
AU - Pita-Illobre, Débora
AU - Li, Ka Wan
AU - Scheper, Wiep
TI - Neurons with granulovacuolar degeneration bodies are resilient to tau-induced protein synthesis impairment
T2 - Science advances
J2 - Sci Adv
PY - 2026
DA - 2026/03/06
VL - 12
IS - 10
SP - eaea8940
SN - 2375-2548
PB - American Association for the Advancement of Science
DO - 10.1126/sciadv.aea8940
UR - https://doi.org/10.1126/sciadv.aea8940
LA - en
ER -

CSL-JSON

{
"id": "10.1126/sciadv.aea8940",
"type": "article-journal",
"title": "Neurons with granulovacuolar degeneration bodies are resilient to tau-induced protein synthesis impairment",
"container-title": "Science advances",
"author": [
{
"family": "Smits",
"given": "Jasper F. M."
},
{
"family": "Ligthart",
"given": "Thijmen W."
},
{
"family": "Jorge-Oliva",
"given": "Marta"
},
{
"family": "Middelhoff",
"given": "Skip"
},
{
"family": "Schipper",
"given": "Fleur"
},
{
"family": "Pita-Illobre",
"given": "Débora"
},
{
"family": "Li",
"given": "Ka Wan"
},
{
"family": "Scheper",
"given": "Wiep"
}
],
"container-title-short": "Sci Adv",
"volume": "12",
"issue": "10",
"page": "eaea8940",
"DOI": "10.1126/sciadv.aea8940",
"PMID": "41790889",
"PMCID": "PMC12965320",
"ISSN": "2375-2548",
"publisher": "American Association for the Advancement of Science",
"URL": "https://doi.org/10.1126/sciadv.aea8940",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
6
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1016/j.xcrm.2026.102682 [code]
TET CpG sequence-context-specific DNA demethylation shapes progression of IDH-mutant gliomas.
Journal: Cell reports. Medicine
In common: pROC, limma, lme4, 5 other tools, 2 references
[2] doi:10.1016/j.xcrm.2026.102766 [code]
A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.
Journal: Cell reports. Medicine
In common: pROC, limma, lme4, 5 other tools, cellular / molecular
[3] doi:10.1038/s41593-026-02367-0 [code]
A reproducible three-dimensional model of human brain tissue to investigate physiological and disease-associated microglia phenotypes.
Journal: Nature neuroscience
In common: limma, ggpubr, data.table, 3 other tools, Alzheimer's / dementia, cellular / molecular, 2 references
[4] doi:10.1093/bioinformatics/btag592 [code]
Network-based stratification of allele-specific expression reveals patient subgroups in Huntington's disease.
Journal: Bioinformatics (Oxford, England)
In common: pROC, limma, lme4, 5 other tools
[5] doi:10.3390/ijms27104466 [code]
Uncovering the Key Circuit FOSL2/FOS/EGR3/EGR1, Contributing to the Hyperexcitability of Excitatory Neurons in the Epileptic Temporal Cortex and Hippocampus.
Journal: International journal of molecular sciences
In common: pROC, limma, lme4, 5 other tools
[6] doi:10.7717/peerj.21426 [code]
Integrated transcriptomic identification and validation reveal key autophagy-associated biomarkers in sleep deprivation.
Journal: PeerJ
In common: pROC, limma, ggpubr, 4 other tools, mouse, cellular / molecular
[7] doi:10.1038/s41467-026-74968-z [code]
Activity-dependent ribosome profiling reveals the landscape of canonical and non-canonical translation in brain tissue.
Journal: Nature communications
In common: pROC, data.table, ggplot2, 1 other tool, mouse, cellular / molecular, 3 references
[8] doi:10.1038/s41467-026-77170-3 [code]
DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression.
Journal: Nature communications
In common: pROC, limma, lme4, 4 other tools, cellular / molecular
[9] doi:10.3390/ijms27156925 [code]
XGBoost-SHAP Interpretable Modeling Identifies and Validates an Eight-Gene Biomarker for Hepatic Encephalopathy Risk Prediction in Cirrhosis.
Journal: International journal of molecular sciences
In common: pROC, limma, ggpubr, 4 other tools
[10] doi:10.1016/j.isci.2026.115657 [code]
Integration of machine learning to develop a disulfidptosis model for predicting glioma prognosis, immunotherapy response, and drug.
Journal: iScience
In common: pROC, limma, ggpubr, 4 other tools

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.