Automated ROI detection allows rapid quantification of synaptic activity across tens of thousands of synapses in cell culture.
A correction to this paper has been published: the notice, 42549241, from Europe PMC.
The 9 matches
- [1] § Methods › Signal extraction and normalization ↔ src/analyze_suite2p/detector_utility.py, lines 14–76 · score 0.87 · rolling median, Suite2p ROI detection, airPLS, fluorescence compared, raw fluorescence, baseline correction
- [2] § Methods › Baseline and calcium transient detection ↔ src/analyze_suite2p/detector_utility.py, lines 207–299 · score 0.78 · baseline fluorescence, peak detection, find peaks, detect peaks, stamps, prominence
- [3] § Results ↔ src/analyze_suite2p/detector_utility.py, lines 14–76 · score 0.70 · airPLS, raw fluorescence, standard deviations, baseline corrected, suite2p, mask
- [4] § Methods › Normalizing active synapses to neurite coverage ↔ src/analyze_suite2p/export_cellprofiler_skeletons.py, lines 66–141 · score 0.69 · Neurite coverage, CellProfiler, Normalized synapses, skeletonized, exported, Threshold
- [5] § Methods › Baseline and calcium transient detection ↔ src/analyze_suite2p/plotting_utility.py, lines 19–53 · score 0.67 · peak detection, find peaks, standard deviations, prominence, width, stamps
- [6] § Results › Chronic memantine treatment reduces synaptic calcium transient amplitude ↔ R_analysis/glmm_effect_functions.R, lines 407–489 · score 0.66 · 3–102, 7–124, 8–218, synaptic event, MGO, Forest
- [7] § Results › Synaptic calcium imaging detects differential effects of patient-derived NMDAR autoantibodies ↔ R_analysis/glmm_effect_functions.R, lines 407–489 · score 0.60 · 3–102, 7–124, 8–218, MGO, model, NMDAR
- [8] § Methods › Statistical analysis ↔ R_analysis/glmm_effect_functions.R, lines 97–182 · score 0.58 · glmmTMB, Gamma, GLMMs, log, fit, models
- [9] § Results ↔ src/analyze_suite2p/export_cellprofiler_skeletons.py, lines 66–141 · score 0.56 · Thresholded neurites, CellProfiler, normalizing synapse, Skeletonized, suite2p, dendritic
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
Python · 436 lines · 17 KB · GPL-3.0 · 3 matches
- import numpy as np
- import matplotlib.pyplot as plt
- from scipy.signal import find_peaks
- import pandas as pd
- import scipy.signal as signal
- from scipy.stats import norm
- from analyze_suite2p import config_loader
- from BaselineRemoval import BaselineRemoval
- import os
- _DEFAULT_CONFIG = config_loader.load_json_config_file()
- config = _DEFAULT_CONFIG
- def calculate_deltaF(F_file, config, event_threshold = None, lambda_window = None):
- """
- Convert raw fluorescence (F.npy) into change in fluorescence compared to baseline (dF / F0).
- Args:
- -----------
- F_file : str
- Path to NumPy array containing raw flourescence (F.npy) trace from suite2p.
- config : SimpleNameSpace dictionary
- loaded automatically from config_loader.load_json_config_file(file = None)
- event_threshold : float, optional
- Threshold (in MAD units) to mask obvious events by multiplying threshold by standard deviation.
- The Default value is 2; smaller values will limit the number of baseline points used for correction.
- lambda_window :
- airPLS lambda value, smaller numbers result in more smoothing, a value of 10 or 100
- is recommended to start with
- Number of frames to subsample for rolling median calculation
- Returns:
- --------
- deltaF : 1D numpy array
- dF/F0 normalized fluorescence
- MAD baseline estimated
- ZhangFit / airPLS automated baseline correction
- deltaF is saved into the suite2p output folder generated from suite2p ROI detection.
- """
- savepath = rf"{F_file}".replace("\\F.npy","") ## make savepath original folder, indicates where deltaF.npy is saved
- F = np.load(rf"{F_file}", allow_pickle=True)
- Fneu = np.load(rf"{F_file[:-4]}"+"neu.npy", allow_pickle=True)
- deltaF= []
- if event_threshold is None:
- event_threshold = config.analysis_params.MAD_baseline_filter_threshold
- if lambda_window is None:
- lambda_window = config.analysis_params.lambda_window
- for f, fneu in zip(F, Fneu):
- corrected_trace = f - (0.7*fneu) ## neuropil correction
- #Remove bleaching to generate change in Fluorescence
- baseline_corrected = BaselineRemoval(corrected_trace)
- airPLS_corrected = baseline_corrected.ZhangFit(lambda_= lambda_window)
- #Determine baseline F0 value
- trace_median = np.median(corrected_trace)
- trace_mad = np.median(np.abs(corrected_trace - trace_median))
- norm_sigma = 1.4826*trace_mad
- baseline_mask = np.abs(corrected_trace - trace_median) < event_threshold * norm_sigma
- F0 = np.median(corrected_trace[baseline_mask])
- #calculate dF / F0
- normalized_F = (airPLS_corrected)/F0
- deltaF.append(normalized_F)
- deltaF = np.array(deltaF)
- deltaF = np.squeeze(deltaF)
- if not os.path.exists(f"{savepath}/deltaF.npy"):
- np.save(f"{savepath}/deltaF.npy", deltaF, allow_pickle=True)
- print(f"delta F traces saved as deltaF.npy under {savepath}\n")
- else:
- print(f"deltaF files already exist for {F_file[len(config.general_settings.main_folder)+1:-21]}")
- return deltaF
- def rolling_correction_deltaF(F_file, config, event_threshold = None, lambda_window = None):
- """
- Convert raw fluorescence (F.npy) into change in fluorescence compared to baseline (dF / F0)
- using rolling median baseline correction.
- Args:
- -----------
- F_file : str
- Path to NumPy array containing raw flourescence (F.npy) trace from suite2p.
- config : SimpleNameSpace dictionary
- loaded automatically from config_loader.load_json_config_file(file = None)
- event_threshold : float, optional
- Number of standard deviations above MAD to se peak filtering; default is 2
- lambda_window : int, optional
- Number of frames to subsample for rolling median calculation
- Returns:
- --------
- deltaF : 1D numpy array
- dF/F0 normalized fluorescence
- MAD baseline estimated
- rolling median automated baseline correction
- deltaF is saved into the suite2p output folder generated from suite2p ROI detection.
- """
- savepath = rf"{F_file}".replace("\\F.npy","") ## make savepath original folder, indicates where deltaF.npy is saved
- F = np.load(rf"{F_file}", allow_pickle=True)
- Fneu = np.load(rf"{F_file[:-4]}"+"neu.npy", allow_pickle=True)
- deltaF= []
- if event_threshold is None:
- event_threshold = config.analysis_params.MAD_baseline_filter_threshold
- if lambda_window is None:
- lambda_window = config.analysis_params.lambda_window
- for f, fneu in zip(F, Fneu):
- corrected_trace = f - (0.7*fneu) ## neuropil correction
- #Remove bleaching to generate change in Fluorescence
- baseline_corrected = remove_bleaching(corrected_trace, 'rolling_med', window = lambda_window) #TODO make interatable with config file
- #Determine baseline F0 value
- trace_median = np.median(corrected_trace)
- trace_mad = np.median(np.abs(corrected_trace - trace_median))
- norm_sigma = 1.4826*trace_mad
- baseline_mask = np.abs(corrected_trace - trace_median) < event_threshold * norm_sigma
- F0 = np.median(corrected_trace[baseline_mask])
- #calculate dF / F0
- normalized_F = (baseline_corrected)/F0
- deltaF.append(normalized_F)
- deltaF = np.array(deltaF)
- deltaF = np.squeeze(deltaF)
- if not os.path.exists(f"{savepath}/deltaF.npy") and not config.analysis_params.overwrite_suite2p:
- np.save(f"{savepath}/deltaF.npy", deltaF, allow_pickle=True)
- print(f"delta F traces saved as deltaF.npy under {savepath}\n")
- elif os.path.exists(f"{savepath}/deltaF.npy") and config.analysis_params.overwrite_suite2p:
- np.save(f"{savepath}/deltaF.npy", deltaF, allow_pickle=True)
- print(f"delta F traces saved as deltaF.npy under {savepath}\n")
- else:
- print(f"deltaF files already exist for {F_file[len(config.general_settings.main_folder)+1:-21]}")
- return deltaF
- def estimate_single_trace_baseline_noise_mad(F_trace, event_threshold = 2):
- """
- Estimate noise sigma from baseline-only windows using MAD.
- Args:
- -----------
- F : 1D numpy array
- Baseline-corrected ΔF/F trace.
- frame_rate : float
- Sampling rate (Hz).
- event_threshold : float
- Preserved from calculate_deltaF function above.
- Threshold (in MAD units) to mask obvious events by multiplying by estimated noise standard deviation.
- Default: 2 (SD above median)
- Smaller values will limit the number of baseline points used for correction.
- min_baseline_sec : float
- Minimum duration (seconds) of a baseline window.
- Default: 10 s
- Returns:
- --------
- sigma : float
- Estimated noise standard deviation.
- baseline_mask : boolean array
- Mask of samples classified as baseline.
- """
- trace_median = np.median(F_trace)
- mad = np.median(np.abs(F_trace - trace_median))
- sigma = 1.4826 * mad
- event_mask = np.abs(F_trace - trace_median) > event_threshold * sigma
- trace_baseline = ~event_mask
- baseline_samples = F_trace[trace_baseline]
- baseline_median = np.median(baseline_samples)
- baseline_mad = np.median(np.abs(baseline_samples - baseline_median))
- sigma = 1.4826 * baseline_mad
- return sigma, baseline_samples
- def filter_outliers(trace):
- """
- Filter outliers (peaks) from calcium trace using the trace IQR
- Args:
- -----------
- trace : 1D numpy array
- Fluorescence trace (e.g., F.npy) from suite2p output.
- Returns:
- --------
- filtered_values : 1D array
- values from 1D array that fall within the original trace IQR.
- """
- q1,q3 = np.percentile(trace, [25,75])
- iqr = q3-q1
- lower_bound = q1 - 1.5*iqr
- upper_bound = q3 + 1.5*iqr
- filtered_values = trace[(trace >= lower_bound) & (trace <= upper_bound)]
- return filtered_values
- def single_synapse_peak_detection(deltaF, return_peaks = False,
- return_decay_frames = False,
- return_amplitudes = False,
- return_decay_time = False,
- return_peak_count = False,
- extract_peaks = False):
- """
- Identify time stamps and metrics of individual calcium spikes for a single ROI.
- Args:
- -----------
- deltaF : 1D numpy array
- Normalized fluroescence trace
- return_peaks : bool, optional
- Returns time stamps (frame) for each peak
- return_decay_frames : bool, optional
- Returns time stamp (frame) for when each peak returns to threshold
- if no return to threshold --> returns NaN
- return_amplitudes : bool, optional
- Returns normalized amplitude for each detected peak
- return_decay_times : bool, optional
- Returns decay time from peak frame to crossing threshold (in seconds)
- return_peak_count : bool, optional
- Returns len(peaks)
- extract_peaks : bool, optional
- Returns peaks + 30 frames for peak library --> to be used for Tau calculations
- Returns:
- --------
- IF any==True :
- return_peaks : returns calcium spike time_stamps
- return_decay_frames : returns number of frames for calcium spike to decay to threshold
- return_amplitudes : returns amplitude of calcium spike in relation to baseline fluorescence (F0)
- return_decay_time : returns decay time in seconds (converts number of frames into seconds)
- return_peak_count : returns the total number of calcium spikes for the ROI fluorescence trace
- extract_peaks : returns deltaF window around calcium spike for calcium spike library
- """
- sigma, deltaF_baseline = estimate_single_trace_baseline_noise_mad(deltaF, event_threshold=2)
- baseline_reference = np.median(deltaF_baseline)
- peak_detection_multiplier = 4.5# float(config.analysis_params.peak_detection_threshold)
- threshold = np.median(deltaF_baseline) + (peak_detection_multiplier * sigma)
- peaks, _ = find_peaks(deltaF, height = threshold, distance = 5, prominence = baseline_reference + sigma, width = (2,None))
- amplitudes = deltaF[peaks] - baseline_reference #amplitude
- peak_count = len(peaks)
- negative_points = np.where((deltaF < threshold))[0]
- # print(negative_points)
- decay_points = []
- decay_time = []
- if return_decay_time:
- for peak1, peak2 in zip(peaks[:-1], peaks[1:]):
- negative_between_peaks = negative_points[negative_points>peak1]
- negative_between_peaks = negative_between_peaks[negative_between_peaks<peak2]
- if len(negative_between_peaks)>0:
- decay_points.append(negative_between_peaks[0])
- if len(negative_between_peaks)==0:
- decay_points.append(np.nan)
- if len(peaks)>0:
- negative_after_last_peak = negative_points[negative_points>peaks[-1]]
- if len(negative_after_last_peak)>0:
- decay_points.append(negative_after_last_peak[0])
- else:
- decay_points.append(np.nan)
- else:
- decay_points = []
- for peak,decay in zip(peaks, decay_points):
- decay_time.append(np.abs(decay - peak)/config.general_settings.frame_rate) #import framerate
- decay_points = np.array(decay_points) #decay frames crossing baseline
- decay_time = np.array(decay_time) #seconds after a calcium peak to return to baseline
- if return_peaks == True:
- return peaks
- if return_decay_frames == True:
- return decay_points
- if return_amplitudes == True:
- return amplitudes
- if return_decay_time == True:
- return decay_time
- if return_peak_count == True:
- return peak_count
- if extract_peaks:
- peak_dict = {}
- #TODO fix up these points for peak library
- # for peak in peaks:
- # peak_dict.update(f'peak_{peak}': 'deltaF[peak:peak+30]')
- return peak_dict
- def detect_spikes_by_mod_z(input_trace, **signal_kwargs):
- """
- Detect spikes by median absolute difference (MAD) of each frame from median of the trace.
- Args:
- -----------
- input_trace : 1D NumPy array
- **signal_kwargs : assorted see signal.find_peaks()
- Ex. width = (min,max), peak_prominence = type(float), height = type(float), threshold = type(float), distance = int/float
- Returns:
- --------
- peak time frames using signal.find_peaks() function
- """
- median = np.median(input_trace)
- deviation_from_med = np.array(input_trace) - median
- mad = np.median(np.abs(deviation_from_med))
- mod_zscore = deviation_from_med/(1.4826*mad)
- return signal.find_peaks(mod_zscore, **signal_kwargs)[0]
- def plot_spikes(raw_trace, detector_func, detector_trace=None, **detector_kwargs):
- """
- Plot ROI calcium trace with overlayed detected spikes as red vertical lines.
- Args:
- -----------
- raw_trace : 1D NumPy array
- detector_func : Function
- Ex. scipy.signal.find_peaks() / detect_spikes_by_mod_z()
- detector_trace : bool, optional
- **detector_kwargs : assorted, optional
- Ex. scipy.signal.find_peaks(x, height = , threshold = , peak_prominence = , width = , distance = )
- Returns:
- --------
- matplotlib.pyplot.plot line graph
- blue : detector_trace (if true) or raw trace
- red : detected spikes
- """
- if detector_trace is None:
- detector_input_trace = raw_trace.copy()
- else:
- detector_input_trace = detector_trace.copy()
- spikes = detector_func(detector_input_trace, **detector_kwargs)
- plt.plot(range(len(raw_trace)), raw_trace, color="blue")
- for spk in spikes:
- plt.axvline(spk, color="red")
- plt.show()
- def rolling_min(input_series, window_size):
- """
- Calculate rolling minimum value (input_series.rolling()) over different windows of the input trace.
- Args:
- -----------
- input_series : 1D NumPy array
- raw_trace / F.npy / deltaF.npy
- window_size : int
- Size of window to measure with each iteration
- Returns:
- --------
- m : int / float
- Smallest local minimum across all windows
- """
- r = input_series.rolling(window_size, min_periods=1)
- m = r.min()
- return m
- def rolling_med(input_series, window_size):
- """
- Calculate rolling minimum value (input_series.rolling()) over different windows of the input trace.
- Args:
- -----------
- input_series : 1D NumPy array
- raw_trace / F.npy / deltaF.npy
- window_size : int
- Size of window to measure with each iteration
- Returns:
- --------
- m : int / float
- Smallest local minimum across all windows
- """
- r = input_series.rolling(window_size, min_periods=1)
- m = r.median()
- return m
- def remove_bleaching(input_trace, baseline_correction, window = None):
- """
- Basic first-order polynomial function to remove bleaching from single ROI calcium imaging trace
- Args:
- -----------
- input_trace : 1D array
- raw fluorescence trace (F.npy or corrected: F.npy - 0.7*Fneu.npy)
- functions by processing one ROI at a time
- baseline_correction : str
- String name of function to call for removing bleaching from fluorescence trace
- Accepts 'rolling_min' or 'rolling_med' as possible values; all other values will break the function
- Returns:
- --------
- input_trace - fit(range(len(input_trace)))
- input trace adjusted by rolling minimum
- polynomial fit built on length of trace, rolling min values, and order of polynomial (e.g. 2nd)
- poly1d fits a 1 dimensional polynomial to the adjusted trace which is subtraced from the raw trace (input_Trace)
- """
- possible_corrections = ['rolling_min', 'rolling_med']
- if baseline_correction not in possible_corrections:
- print(f"Please enter a valid correction method: {possible_corrections}")
- return
- if baseline_correction == "rolling_min":
- if window is not None:
- corr_trace = rolling_min(pd.Series(input_trace), window_size = int(window))
- else:
- corr_trace = rolling_min(pd.Series(input_trace), window_size=int(len(input_trace)/10))
- if baseline_correction == "rolling_med":
- if window is not None:
- corr_trace = rolling_med(pd.Series(input_trace), window_size = int(window))
- else:
- corr_trace = rolling_med(pd.Series(input_trace), window_size = int(len(input_trace)/10))
- # fit_coefficients = np.polyfit(range(len(corr_trace)), corr_trace, 2)
- # fit = np.poly1d(fit_coefficients)
- # return input_trace - fit(range(len(input_trace)))
- return input_trace - corr_trace
detector_utility.py at commit ae19f9c, under GPL-3.0 · at the source
Overview
- Institute of Biology, Humboldt-Universität zu Berlin, Berlin, Germany
- German Center for Neurodegenerative Diseases (DZNE) Berlin, Berlin, Germany
- Einstein Center for Neurosciences Berlin, Berlin, Germany
- Shared Primary Neuron Facility (SPNF), Institute for Integrative Neuroanatomy, Charité – Universitätsmedizin, Berlin, Germany
- Department of Neurology and Experimental Neurology, Charité – Universitätsmedizin Berlin, Berlin, Germany
- Bernstein Center for Computational Neuroscience Berlin, Berlin, Germany
Abstract
Synapses are the basic unit of information transfer between neurons. Their dysfunction is a common trigger of cognitive diseases and disorders. However, high-throughput analysis methods to assess synaptic function and dysfunction are lacking. Calcium imaging in cultured neurons in the absence of Mg2+ and presence of TTX allows visualization of NMDAR-dependent spontaneous synaptic calcium transients, which report pre and postsynaptic function. Here, we introduce a high-throughput automated analysis pipeline that combines Suite2p ROI detection and Python scripts to analyze tens of thousands of synapses and quantify changes in presynaptic vesicle fusion rates (frequency), postsynaptic function (amplitude), and the number of functional synapses. We use this pipeline to test known NMDAR agonists (glycine) and antagonists (ketamine, memantine, APV), presynaptic function modulating compounds (PDBu), and encephalitis patient-derived NMDAR auto-antibodies, where our pipeline proved more sensitive in detecting dysfunction at the single-synapse level than other methods. The ability to detect, track, and quantify activity across tens of thousands of synapses and millions of synaptic calcium transients using this pipeline will aid drug discovery of compounds that protect synapse function.
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 9 matches between paragraphs and lines of code.
jay-cee-begs/synaptic_suite2p
ae19f9c5c61e324f5fb03c3cfe6d6ab73809af81, 29 May 2026Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
24 files
- R_analysis/
glmm_effect_functions.R , R, 492 lines, 3 matches - R_analysis/
synapse_effect_bootstrap , R, 200 liness.R - notebook_scripts/
run_pipeline.ipynb , Jupyter, 155 lines - setup.py, Python, 13 lines
- src/
analyze_suite2p/ , Python, 1 line__init__.py - src/
analyze_suite2p/ , Python, 763 linesanalysis_utility.py - src/
analyze_suite2p/ , Python, 89 linesconfig_loader.py - src/
analyze_suite2p/ , Python, 436 lines, 3 matchesdetector_utility.py - src/
analyze_suite2p/ , Python, 358 lines, 2 matchesexport_cellprofiler_skel etons.py - src/
analyze_suite2p/ , Python, 654 lines, 1 matchplotting_utility.py - src/
analyze_suite2p/ , Python, 306 linesrun_suite2p.py - src/
analyze_suite2p/ , Python, 354 linessuite2p_utility.py - src/
analyze_suite2p/ , Python, 82 linesxs_plots.py - src/
gui/ , Python, 348 linesconfig_editor.py - src/
gui/ , Python, 195 linesops_editor.py - src/
gui/ , Python, 6 linesrun_gui.py - src/
gui_core/ , Python, 24 linesanalysis_model.py - src/
gui_core/ , Python, 105 linesfolder_logic.py - src/
gui_core/ , Python, 49 linesgeneral_settings_model.p y - src/
gui_core/ , Python, 25 linesio.py - src/
gui_core/ , Python, 18 linesmultivid_reg_model.py - xs_code/
export_cellprofiler_skel , Python, 41 linesetons.py - LICENSE, License, 674 lines
- README.md, Text, 287 lines
Code availability
The code for synapse analysis in Python, neurite length measurement in CellProfiler, and R mixed-effect models is available here (https://
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:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 22 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
No dataset and no data link were found in the paper.
Data availability statement
The raw data supporting the conclusions of this article will be made available by the authors without undue reservation.
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, 28 September 2026: the first record
Recorded: type, language, journal, volume, pages, dates, 4 authors, 5 keywords, 70 references, 1 integrity notice.
Cite
This paper
Begley, J. C., Prüss, H., Turko, P., & Dean, C. (2026). Automated ROI detection allows rapid quantification of synaptic activity across tens of thousands of synapses in cell culture. Frontiers in synaptic neuroscience, 18, 1832103. https://
BibTeX
@article{begley2026autom
author = {Begley, John Carl and Prüss, Harald and Turko, Paul and Dean, Camin},
title = {{Automated ROI detection allows rapid quantification of synaptic activity across tens of thousands of synapses in cell culture}},
journal = {Frontiers in synaptic neuroscience},
year = {2026},
month = may,
volume = {18},
pages = {1832103},
publisher = {Frontiers Media SA},
issn = {1663-3563},
doi = {10.3389/
url = {https://
pmid = {42291802},
pmcid = {PMC13254171}
}
RIS
TY - JOUR
AU - Begley, John Carl
AU - Prüss, Harald
AU - Turko, Paul
AU - Dean, Camin
TI - Automated ROI detection allows rapid quantification of synaptic activity across tens of thousands of synapses in cell culture
T2 - Frontiers in synaptic neuroscience
J2 - Front Synaptic Neurosci
PY - 2026
DA - 2026/
VL - 18
SP - 1832103
SN - 1663-3563
PB - Frontiers Media SA
DO - 10.3389/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.3389/
"type": "article-journal",
"title": "Automated ROI detection allows rapid quantification of synaptic activity across tens of thousands of synapses in cell culture",
"container-title": "Frontiers in synaptic neuroscience",
"author": [
{
"family": "Begley",
"given": "John Carl"
},
{
"family": "Prüss",
"given": "Harald"
},
{
"family": "Turko",
"given": "Paul"
},
{
"family": "Dean",
"given": "Camin"
}
],
"container-title-short":
"volume": "18",
"page": "1832103",
"DOI": "10.3389/
"PMID": "42291802",
"PMCID": "PMC13254171",
"ISSN": "1663-3563",
"publisher": "Frontiers Media SA",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
28
]
]
}
}
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.1038/s41514-026-00391-9 [code]
- Region-specific transcriptional signatures of brain aging in the absence of neuropathology at the single-cell level.Journal: npj agingIn common: glmmTMB, broom, ggplot2, 6 other tools, cellular / molecular, 1 reference
- [2] doi:10.1126/sciadv.aec2042 [code]
- IgLON5 autoimmune antibodies activate Tau via neuronal hyperactivity.Journal: Science advancesIn common: tidyverse, cellular / molecular, 3 references, author Paul Turko
- [3] doi:10.1016/j.isci.2026.116206 [code]
- Gut distension evokes rapid neural dynamics in vagal and hindbrain populations of larval zebrafish.Journal: iScienceIn common: Suite2p, Pillow, seaborn, 4 other tools, optical imaging (calcium, voltage, 2-photon), 1 reference
- [4] doi:10.7554/elife.107088 [code]
- Development of auditory and spontaneous movement responses to music over the first postnatal year.Journal: eLifeIn common: glmmTMB, easystats, ggplot2, 6 other tools
- [5] doi:10.1093/nc/niag029 [code]
- A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception.Journal: Neuroscience of consciousnessIn common: easystats, broom, ggplot2, 6 other tools, 1 reference
- [6] doi:10.1016/j.celrep.2026.117505 [code]
- Impaired spatial coding and neuronal hyperactivity in the medial entorhinal cortex of aged APP knock-in mice.Journal: Cell reportsIn common: glmmTMB, easystats, broom, 5 other tools
- [7] doi:10.1002/hbm.70605 [code]
- BrainEnrich: Revealing Biological Insights for Imaging-Derived Phenotypes Through Transcriptomic Enrichment.Journal: Human brain mappingIn common: easystats, broom, ggplot2, 6 other tools
- [8] doi:10.1093/cercor/bhag113 [code]
- Long-term reliability and stability of parameterized resting state EEG: evidence from a five-year follow-up.Journal: Cerebral cortex (New York, N.Y. : 1991)In common: easystats, broom, ggplot2, 6 other tools
- [9] doi:10.1038/s41467-026-73865-9 [code]
- Histamine shapes the neurocomputational dynamics of human learning.Journal: Nature communicationsIn common: easystats, broom, ggplot2, 6 other tools
- [10] doi:10.1038/s41467-026-70287-5 [code]
- Cortical-limbic circuit dynamics of approach-avoidance conflict in humans.Journal: Nature communicationsIn common: easystats, broom, ggplot2, 6 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.
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, 22 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:31e3dbacb9e4157d…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
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.
