OSCR

Resolving synaptic events using subsynaptically targeted GCaMP8 variants.

Code ↔ Paper

1 match 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 1 match · it ties a paragraph to a whole file, not to given lines: a weak match, whose lines are not tinted
  1. [1] § Materials and methods › CaFire program ↔ core/calculate_decay.py, the whole file · a weak match · score 0.54 · curve fit, decay function, GUI, peak

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 · 130 lines · 5.1 KB · MIT · 1 match

  1. import numpy as np
  2. from tkinter import messagebox
  3. from scipy.optimize import curve_fit
  4. def decay_function(t, tau, y0):
  5. """
  6. Natural Logarithm of Decay Formula. y = y0 * e^{-t/tau}
  7. """
  8. return y0 * np.exp(-t / tau)
  9. def calculate_decay(app, single_peak=None, no_draw=False):
  10. total_peaks = len(app.marked_peaks)
  11. # Sort marked peaks by time
  12. app.marked_peaks = sorted(app.marked_peaks, key=lambda peak: peak[0])
  13. # If a single peak is provided, only calculate decay for that peak
  14. if single_peak:
  15. peak_index = app.marked_peaks.index(single_peak)
  16. peaks_to_process = [(peak_index, single_peak)]
  17. else:
  18. peaks_to_process = list(enumerate(app.marked_peaks))
  19. # Calculate the standard deviation range of the baseline
  20. baseline_mean = np.mean(app.baseline_values)
  21. baseline_std = np.std(app.baseline_values)
  22. peak_values = [peak[1] for peak in app.marked_peaks]
  23. mean_peak_value = np.mean(peak_values)
  24. ratio = (mean_peak_value - baseline_mean) / baseline_std
  25. if (ratio <= 5):
  26. baseline_upper = baseline_mean
  27. elif (ratio > 5 and ratio <= 10):
  28. baseline_upper = baseline_mean + baseline_std
  29. else:
  30. baseline_upper = baseline_mean + 2 * baseline_std
  31. baseline_range = (baseline_mean - 2 * baseline_std, baseline_upper)
  32. for i, (current_peak_time, current_peak_value) in peaks_to_process:
  33. # Skip if decay has already been calculated for this peak
  34. if app.decay_calculated[i]:
  35. continue
  36. current_peak_index = app.time[app.time == current_peak_time].index[0]
  37. # Define next peak index if it exists
  38. if i + 1 < len(app.marked_peaks):
  39. next_peak_index = app.time[app.time == app.marked_peaks[i + 1][0]].index[0]
  40. else:
  41. next_peak_index = len(app.df_f)
  42. # Find the first point in the range between the current peak and the next peak that is in the baseline range
  43. search_range = app.df_f[current_peak_index:next_peak_index]
  44. baseline_points = np.where((search_range >= baseline_range[0]) &
  45. (search_range <= baseline_range[1]))[0]
  46. if len(baseline_points) > 0:
  47. # Found a point in the baseline range, use the first point
  48. min_index_between_peaks = current_peak_index + baseline_points[0]
  49. else:
  50. # Not found a point in the baseline range, use the minimum value point
  51. min_index_between_peaks = np.argmin(search_range) + current_peak_index
  52. # Prepare data for fitting
  53. t_data = app.time[current_peak_index:min_index_between_peaks + 1].values
  54. t_data_range = t_data - t_data[0] # Make time start from 0
  55. y_data_original = np.array(app.df_f[current_peak_index:min_index_between_peaks + 1])
  56. # Ensure initial value is valid
  57. y0 = y_data_original[0]
  58. if np.isnan(y0) or y0 == 0:
  59. y0 = 0.001
  60. # Fit decay function
  61. try:
  62. # Calculate scaling factors for normalization
  63. t_scale = t_data_range.max()
  64. y_scale = np.max(y_data_original) - np.min(y_data_original)
  65. if y_scale < 0.01:
  66. y_scale = 0.01
  67. # Normalize both time and y data
  68. t_norm = t_data_range / t_scale
  69. y_data_norm = y_data_original / y_scale
  70. y0_norm = y0 / y_scale
  71. # Fit using normalized data
  72. popt, _ = curve_fit(
  73. lambda t, tau_norm: decay_function(t * t_scale, tau_norm * t_scale, y0_norm),
  74. t_norm,
  75. y_data_norm,
  76. p0=[0.5],
  77. bounds=(0.0001, np.inf)
  78. )
  79. # Convert normalized tau back to real scale
  80. tau_fitted = popt[0] * t_scale
  81. # Generate fitting curve using real time scale
  82. t_fit = np.linspace(0, t_data_range[-1], 100)
  83. y_fit_norm = decay_function(t_fit, tau_fitted, y0_norm)
  84. # Scale y values back to original magnitude
  85. y_fit = y_fit_norm * y_scale
  86. # Plot fitting curve
  87. decay_line, = app.ax.plot(
  88. t_data[0] + t_fit, # Add back actual starting time
  89. y_fit,
  90. color='#FF00FF',
  91. linestyle='--'
  92. )
  93. app.decay_lines.append(decay_line)
  94. app.decay_line_map[(current_peak_time, current_peak_value)] = decay_line
  95. app.tau_values[(current_peak_time, current_peak_value)] = tau_fitted
  96. app.decay_calculated[i] = True
  97. # Update progress
  98. if not single_peak:
  99. progress = 0.7 + (0.3 * (i + 1) / total_peaks)
  100. app.progress_bar.set(progress)
  101. app.update() # Force update GUI
  102. if not no_draw:
  103. app.canvas.draw()
  104. except RuntimeError:
  105. messagebox.showwarning(title="Warning", message=f"Decay fitting failed for peak at {current_peak_time}.")
  106. if not no_draw:
  107. app.update_table() # Update table

calculate_decay.py at commit bab466e, under MIT · at the source

Overview

Authors: Jiawen Chen1,2, Junhao Lin1, Kaikai He1,2, Luyi Wang1, Yifu Han1,2, Chengjie Qiu1,2, Jasmine M Wheeler3, Catherine M Daly3, Gregory T Macleod3, Dion K Dickman1
  1. University of Southern California, Department of Neurobiology Los Angeles United States
  2. USC Neuroscience Graduate Program Los Angeles United States
  3. Department of Physiology, Tulane University School of Medicine New Orleans United States
Institutions: University of Southern California (United States); Tulane University (United States)
Journal: eLife, volume 14, article RP107939
Dates: published online 2 March 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.7554/elife.107939 · PMID 41769864 · PMCID PMC12952790 · OpenAlex W4413777470
Open access: gold, a free copy (OpenAlex)
Status: code verified
Methods: Spectral & time-frequency, Statistics, Evoked potentials, Connectivity, fMRI & imaging, Single-unit activity, calcium imaging
Keywords: calcium, genetically-encoded, synaptic terminals, ratiometric, indicator, neuromuscular junction, D. melanogaster
MeSH: Calcium*, Neuromuscular Junction*, Synapses*, Animals, Drosophila, Presynaptic Terminals (* major topic)
Journal subjects: Neuroscience
Topic: Photoreceptor and optogenetics research (Cellular and Molecular Neuroscience, Neuroscience), according to OpenAlex
Funding: National Institute of Neurological Disorders and Stroke (NS123377, NS091546, NS126654)
Citations: cited by 1 paper (Europe PMC); 65 references in the paper
Research resources: chicken polyclonal anti-GFP RRID:AB_2307313, RRID:AB_2307443, mouse monoclonal anti-BRP RRID:AB_2314866, RRID:AB_2338965, RRID:AB_2340375, RRID:AB_2340839, RRID:AB_2340854, RRID:AB_2340862, RRID:AB_2492288, mouse monoclonal anti-DLG RRID:AB_528203, R27E09-GAL4 (Is-Gal4) RRID:BDSC_49227, w1118 RRID:BDSC_5905, RSET-GCaMP8m RRID:BDSC_605073, UAS-Syt::GCaMP6s RRID:BDSC_64414

Abstract

While genetically encoded Ca2+ indicators are valuable for visualizing neural activity, their speed and sensitivity have had limited performance when compared to chemical dyes and electrophysiology, particularly at synaptic compartments. We addressed these limitations by engineering a suite of next-generation GCaMP8-based indicators, targeted to presynaptic boutons, active zones, and postsynaptic compartments at the Drosophila neuromuscular junction. We first validated these sensors to be superior to previous versions and synthetic dyes. Next, we developed a Python-based analysis program, CaFire, which enables the automated quantification of evoked and spontaneous Ca²+ signals. Using CaFire, we show a ratiometric presynaptic GCaMP8m sensor accurately captures physiologically relevant presynaptic Ca2+ changes with superior sensitivity and similar kinetics compared to chemical dyes. Moreover, we test the ability of an active zone-targeted, ratiometric GCaMP8m sensor to report differences in Ca²+ between release sites. Finally, a newly engineered postsynaptic GCaMP8m, positioned near glutamate receptors, detects quantal events with temporal and signal resolution comparable to electrophysiological recordings. These next-generation indicators and analytical methods demonstrate that GCaMP8 sensors, targeted to synaptic compartments, can now achieve the speed and sensitivity necessary to resolve Ca2+ dynamics at levels previously only attainable with chemical dyes or electrophysiology.

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 1 match between paragraphs and lines of code.

linj7/CaFire

License: MIT
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: bab466e9d51dd3cbdf982051be7a0bb823a260b5, 25 February 2026
Languages: Python (17)
Size: 44 files, 17 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README, license file, environment (requirements.txt)
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: NumPy (7 files), SciPy (4 files), pandas (3 files), Pillow (3 files), Matplotlib (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
19 files

doi:10.5281/zenodo

License: none: the authors keep all their rights
State: the link is dead, verified on 28 September 2026
Evidence: found in the paper
Software Heritage: not checked
Found in: the text, “CaFire program”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 28 September 2026: the link is dead (HTTP 404)
  • 28 September 2026: the link is dead (HTTP 404)
At the source: doi.org/10.5281/zenodo

Zenodo 1552996

License: CC0-1.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Size: 1 file, 0 scripts
Software Heritage: not checked
Found in: “Data availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
  • 30 September 2026: the link answers (HTTP 200)

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:

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

All relevant data is included in the publication, primarily in Supplementary file 1. All fly stocks and molecular constructs generated in this study will be shared upon request. We are also in the process of depositing newly generated Scar8f/m, Bar8f/m, and SynapGCaMP sensors to the Bloomington Drosophila Stock Center for public dissemination. The source code for the CaFire analysis software is publicly available on GitHub at https://github.com/linj7/CaFire (Lin, 2026) and has been archived with a DOI at Zenodo: https://doi.org/10.5281/zenodo.1552996.

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, pages, dates, 10 authors, 7 keywords, 6 MeSH terms, 1 funder, 64 references, 14 RRIDs.

Cite

This paper

Chen, J., Lin, J., He, K., Wang, L., Han, Y., Qiu, C., Wheeler, J. M., Daly, C. M., Macleod, G. T., & Dickman, D. K. (2026). Resolving synaptic events using subsynaptically targeted GCaMP8 variants. eLife, 14, RP107939. https://doi.org/10.7554/elife.107939

BibTeX

@article{chen2026resolving,
author = {Chen, Jiawen and Lin, Junhao and He, Kaikai and Wang, Luyi and Han, Yifu and Qiu, Chengjie and Wheeler, Jasmine M and Daly, Catherine M and Macleod, Gregory T and Dickman, Dion K},
title = {{Resolving synaptic events using subsynaptically targeted GCaMP8 variants}},
journal = {eLife},
year = {2026},
month = mar,
volume = {14},
pages = {RP107939},
publisher = {eLife Sciences Publications, Ltd},
issn = {2050-084X},
doi = {10.7554/elife.107939},
url = {https://doi.org/10.7554/elife.107939},
pmid = {41769864},
pmcid = {PMC12952790}
}

RIS

TY - JOUR
AU - Chen, Jiawen
AU - Lin, Junhao
AU - He, Kaikai
AU - Wang, Luyi
AU - Han, Yifu
AU - Qiu, Chengjie
AU - Wheeler, Jasmine M
AU - Daly, Catherine M
AU - Macleod, Gregory T
AU - Dickman, Dion K
TI - Resolving synaptic events using subsynaptically targeted GCaMP8 variants
T2 - eLife
J2 - Elife
PY - 2026
DA - 2026/03/02
VL - 14
SP - RP107939
SN - 2050-084X
PB - eLife Sciences Publications, Ltd
DO - 10.7554/elife.107939
UR - https://doi.org/10.7554/elife.107939
LA - en
ER -

CSL-JSON

{
"id": "10.7554/elife.107939",
"type": "article-journal",
"title": "Resolving synaptic events using subsynaptically targeted GCaMP8 variants",
"container-title": "eLife",
"author": [
{
"family": "Chen",
"given": "Jiawen"
},
{
"family": "Lin",
"given": "Junhao"
},
{
"family": "He",
"given": "Kaikai"
},
{
"family": "Wang",
"given": "Luyi"
},
{
"family": "Han",
"given": "Yifu"
},
{
"family": "Qiu",
"given": "Chengjie"
},
{
"family": "Wheeler",
"given": "Jasmine M"
},
{
"family": "Daly",
"given": "Catherine M"
},
{
"family": "Macleod",
"given": "Gregory T"
},
{
"family": "Dickman",
"given": "Dion K"
}
],
"container-title-short": "Elife",
"volume": "14",
"page": "RP107939",
"DOI": "10.7554/elife.107939",
"PMID": "41769864",
"PMCID": "PMC12952790",
"ISSN": "2050-084X",
"publisher": "eLife Sciences Publications, Ltd",
"URL": "https://doi.org/10.7554/elife.107939",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
2
]
]
}
}

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.1002/advs.202510538 [code]
Temporal and Cell-Specific Regulation of Synaptic Homeostasis by the Chromatin Remodeler Chd1.
Journal: Advanced science (Weinheim, Baden-Wurttemberg, Germany)
In common: pandas, SciPy, Matplotlib, 1 other tool, drosophila, cellular / molecular, 8 references, author Chengjie Qiu
[2] doi:10.1038/s41592-026-03065-2 [code]
PinkyCaMP: an mScarlet-based calcium sensor with enhanced brightness, photostability and multiplexing capabilities.
Journal: Nature methods
In common: pandas, SciPy, Matplotlib, 1 other tool, optical imaging (calcium, voltage, 2-photon), cellular / molecular, 9 references
[3] doi:10.1016/j.isci.2026.116099
Complete muscle denervation triggers compensatory sprouting of a bystander tonic motor neuron in &lt;i&gt;Drosophila&lt;/i&gt; larvae.
Journal: iScience
In common: drosophila, cellular / molecular, 7 references
[4] doi:10.1002/advs.202515887 [code]
An Open-Source Pipeline for Calcium Imaging and All-Optical Physiology in Human Stem Cell-Derived Neurons.
Journal: Advanced science (Weinheim, Baden-Wurttemberg, Germany)
In common: pandas, SciPy, Matplotlib, 1 other tool, optical imaging (calcium, voltage, 2-photon), 4 references
[5] doi:10.1111/ejn.70480 [code]
Astrocyte Proximity Protects Synapses From Human Amyloid-Beta Induced Degeneration in a Mouse Ex Vivo Model of Early Alzheimer's Disease.
Journal: The European journal of neuroscience
In common: pandas, SciPy, Matplotlib, 1 other tool, cellular / molecular, 5 references
[6] doi:10.1111/ejn.70582 [code]
Multifiber Array-Based Photometry System for Multiregional Functional Mapping in the Mouse Brain.
Journal: The European journal of neuroscience
In common: Pillow, pandas, SciPy, 2 other tools, optical imaging (calcium, voltage, 2-photon), 3 references
[7] doi:10.1038/s41467-026-72710-3 [code]
A modular multi-color fluorescence microscope for simultaneous tracking of cellular activity and behavior.
Journal: Nature communications
In common: Pillow, pandas, SciPy, 2 other tools, optical imaging (calcium, voltage, 2-photon), drosophila, 2 references
[8] doi:10.1364/boe.600665 [code]
NeuroSeg-MF: robust neuron segmentation in two-photon Ca&lt;sup&gt;2+&lt;/sup&gt; imaging using multi-feature fusion and detection-guided SAM.
Journal: Biomedical optics express
In common: Pillow, pandas, SciPy, 2 other tools, optical imaging (calcium, voltage, 2-photon), 3 references
[9] doi:10.3389/fnsyn.2026.1832103 [code]
Automated ROI detection allows rapid quantification of synaptic activity across tens of thousands of synapses in cell culture.
Journal: Frontiers in synaptic neuroscience
In common: Pillow, pandas, SciPy, 2 other tools, optical imaging (calcium, voltage, 2-photon), cellular / molecular, 3 references
[10] doi:10.1016/j.xpro.2026.104659 [code]
Protocol for simultaneous in vivo two-photon imaging and locomotion quantification during olfactory stimulation and pharmacology in walking Drosophila.
Journal: STAR protocols
In common: Pillow, pandas, SciPy, 2 other tools, optical imaging (calcium, voltage, 2-photon), drosophila, 2 references

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.