OSCR

Two-factor synaptic plasticity enables memory consolidation during neuronal burst firing.

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
  1. [1] § Results › Coupling gain and initial state affect consolidation dynamics during burst firing ↔ Fig4/julia/Simu_SNR_GB2012_VAR.jl, lines 145–183 · score 0.54 · 0.1–5 Hz, 73–76 Hz, 73 Hz, 0.1 Hz, neuron, burst

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

Julia · 243 lines · 6.7 KB · no license · 1 match

  1. # Defines output directory
  2. directory_name = "/Users/kathleen/Documents/PhD/2023-Project/Fig5"
  3. # Loads packages
  4. using Plots
  5. using DelimitedFiles
  6. using Statistics
  7. using Images, ImageView
  8. using DifferentialEquations
  9. using DataFrames
  10. using Printf
  11. using CSV
  12. using LinearAlgebra
  13. using Distributions
  14. using DataStructures
  15. using DSP
  16. # STRUCTURAL plasticity
  17. #const tauG = 400 # (strong) or 800 (weak)
  18. #gCAMPA = 0.001*ones(nPre,nPost)
  19. ## Include model
  20. include("model_SNR_GB2012_VAR.jl")
  21. include("PARAMS_cycle.jl")
  22. const new_network=0
  23. const fMax = 50
  24. const bound_type = "SB"
  25. const experiment_type = "normal" #high-dep
  26. experiment_name = "Graupner2012_VAR"
  27. # Network parameters
  28. const ncellsI = 1
  29. const nPre = 100
  30. const nPost = 1
  31. const ncellsC = nPre+nPost
  32. const ncells = ncellsI+ncellsC
  33. ## Simulation parameters
  34. const dt = 0.01
  35. const N_cycles=5
  36. const Duration_cycle = 30000
  37. const Tdt_cycle = convert(Int64, Duration_cycle/dt)
  38. const N_patterns = 1
  39. const Duration_state = convert(Int64, Duration_cycle/2)
  40. const Tdt_state = convert(Int64, Duration_state/dt)
  41. const N_samples = 1
  42. const Duration_sample = convert(Int64, Duration_state/N_samples)
  43. const Tdt_sample = convert(Int64, Duration_sample / dt)
  44. const T = N_cycles*Duration_cycle
  45. const Tdt = convert(Int64, T / dt)
  46. const t = range(dt, T, length = Tdt)
  47. const Duration_set = Duration_cycle
  48. const Tdt_set = convert(Int64, Duration_set/dt)
  49. const state = zeros(Tdt,1)
  50. for idx_cycle=1:1:N_cycles
  51. # wake
  52. state[(idx_cycle-1)*Tdt_set+1: (idx_cycle-1)*Tdt_set+Tdt_state] .= 0
  53. # sleep
  54. #if(SD=="yes")
  55. # state[(idx_cycle-1)*Tdt_set+Tdt_state+1:(idx_cycle-1)*Tdt_set+Tdt_cycle ] .= -1
  56. #else
  57. state[(idx_cycle-1)*Tdt_set+Tdt_state+1:(idx_cycle-1)*Tdt_set+Tdt_cycle ] .= 1
  58. #end
  59. end
  60. ## Neurons' model parameters
  61. # Global parameters
  62. const C = 1
  63. const VNa = 50
  64. const VK = -85
  65. const VCa = 120
  66. const Vl = -55
  67. const VH = -20
  68. const Kd = 170
  69. # Cells parameters
  70. const gl = 0.055
  71. const gNa = 170.0
  72. const gKd = 40
  73. const k1 = 1.e-1
  74. const k2 = 0.1e-1
  75. const gH = 0.01
  76. const gKCa = 4
  77. const gCaT = 0.55
  78. if(new_network==1 && fMax==50)
  79. const gamma = 0.10 #1 #10% of variability in the network put 0.1 to get 10% etc
  80. const gl_cells = rand(Uniform(gl*(1-gamma),gl*(1+gamma)),ncells)
  81. const gNa_cells = rand(Uniform(gNa*(1-gamma),gNa*(1+gamma)),ncells)
  82. const gKd_cells = rand(Uniform(gKd*(1-gamma),gKd*(1+gamma)),ncells)
  83. const k1_cells = rand(Uniform(k1*(1-gamma),k1*(1+gamma)),ncells) #k1*ones(ncells)
  84. const k2_cells = rand(Uniform(k2*(1-gamma),k2*(1+gamma)),ncells) #k2*ones(ncells)
  85. const gH_cells = rand(Uniform(gH*(1-gamma),gH+(gamma*gH)),ncells)
  86. const gKCa_cells = rand(Uniform(gKCa*(1-gamma),gKCa*(1+gamma)),ncells)
  87. const gCaT_cells = rand(Uniform(gCaT*(1-gamma),gCaT*(1+gamma)),ncells)
  88. const g_cond = [gNa_cells'; gKd_cells'; gCaT_cells'; gH_cells'; gKCa_cells'; gl_cells'; k1_cells'; k2_cells']'
  89. writedlm(@sprintf("%s/data/%s/gion.dat",directory_name, experiment_name), g_cond, header=false)
  90. else
  91. gion = readdlm(@sprintf("%s/data/%s/gion.dat",directory_name, experiment_name))
  92. const gl_cells = gion[:,6]
  93. const gNa_cells = gion[:,1]
  94. const gKd_cells = gion[:,2]
  95. const k1_cells = gion[:,end-1]
  96. const k2_cells = gion[:,end]
  97. const gH_cells = gion[:,4]
  98. const gKCa_cells = gion[:,5]
  99. const gCaT_cells = gion[:,3]
  100. end
  101. const IappI = 3.
  102. const IappC = 0.
  103. const spike_duration = 3
  104. const IstepI = -1.2-IappI
  105. const IstepC = 50.0
  106. IstepI_cell = IstepI .* ones(ncellsI)
  107. IstepC_cell = IstepC .* ones(ncellsC)
  108. Istep_cell = [IstepI_cell; IstepC_cell]
  109. const N_states = N_cycles*2
  110. if(new_network==1)
  111. gamma=0.1
  112. neurons_freq = zeros(N_samples*N_states, ncells)
  113. neurons_freq[:,1] .= 1 # inhibitory cell
  114. neurons_freq[:,2:6] = round.(rand(Uniform(50,60),N_samples*N_states,5))
  115. neurons_freq[:,7:end-1] = round.(rand(Uniform(0.1,1),N_samples*N_states,95))
  116. neurons_freq[:,end] .= 25.00
  117. #=
  118. neurons_freq[:,2:6] = round.(rand(Uniform(73,76),N_samples*N_states,5))
  119. neurons_freq[:,7:end-1] = round.(rand(Uniform(0.1,5),N_samples*N_states,95))
  120. neurons_freq[:,end] .= 25.00
  121. =#
  122. writedlm(@sprintf("%s/data/%s/neurons_freq.dat", directory_name, experiment_name), neurons_freq, header=false)
  123. else
  124. neurons_freq= readdlm(@sprintf("%s/data/%s/neurons_freq.dat",directory_name, experiment_name))
  125. end
  126. Iapp_cell = zeros(ncells, Tdt)
  127. for idx_cycle= 1:1:N_cycles
  128. for idx=1:1:N_samples
  129. T1 = (idx_cycle-1)*Tdt_set +(idx-1)*Tdt_sample+1
  130. T2 = (idx_cycle-1)*Tdt_set + idx*Tdt_sample
  131. Iapp_cell[:, T1:T2] = get_Iapp(Duration_sample, dt, neurons_freq[(idx_cycle-1)*N_samples+idx,:], spike_duration)
  132. end
  133. end
  134. Iapp_cell[1:ncellsI,:] .= IappI
  135. const BurstTime = zeros(1,N_cycles)
  136. for idx=1:1:N_cycles
  137. BurstTime[idx] = Duration_state + (idx-1)*Duration_set
  138. end
  139. const BurstDuration = Duration_state #20000
  140. const StateTime = zeros(1,N_cycles*2)
  141. let idx_count
  142. idx_count=1
  143. for idx_cycle=1:1:N_cycles
  144. StateTime[idx_count] = (idx_cycle-1)*Duration_set+Duration_state
  145. StateTime[idx_count+1] = (idx_cycle-1)*Duration_set+Duration_cycle
  146. idx_count = idx_count+2
  147. end
  148. end
  149. ## synaptic plasticity
  150. const expm = "Control"
  151. # SJO param
  152. const tau_Ca = 22.6936 #[ms]
  153. const C_Pre = 0.56#17539
  154. const C_Post = 1.24#23964
  155. const D_pre = 4.60#98 #[ms]
  156. const tau_w = 346.3615e3 #[s>ms]
  157. const gamma_p = 725.085*1.1#*0.7
  158. const gamma_p_sleep = 725.085*0.95
  159. const gamma_d = 331.909#*0.7
  160. const theta_p = 1.3
  161. const theta_d = 1.
  162. const wfix = 0.5
  163. ## CONNECTIVITY
  164. const gIGABAA_unit = 2.0
  165. const gIGABAB_unit = 1.5
  166. if(new_network==1 && fMax==50)
  167. const gIGABAA = rand(Uniform(gIGABAA_unit*(1-gamma),gIGABAA_unit*(1+gamma)),ncellsC)./ ncellsI
  168. const gIGABAB = rand(Uniform(gIGABAB_unit*(1-gamma),gIGABAB_unit*(1+gamma)),ncellsC)./ ncellsI
  169. const g_syn = [gIGABAA'; gIGABAB']'
  170. writedlm(@sprintf("%s/data/%s/gsyn.dat",directory_name, experiment_name), g_syn, header=false)
  171. else
  172. gsyn = readdlm(@sprintf("%s/data/%s/gsyn.dat",directory_name, experiment_name))
  173. const gIGABAA = gsyn[:,1]
  174. const gIGABAB = gsyn[:,2]
  175. end
  176. w_init = 0.5*ones(nPre,nPost)
  177. #idx_wl = convert(Matrix{Int64}, readdlm("idx_wl.dat"))
  178. gCAMPA_init_mat = [0.0001 0.00025 0.0005 0.00075 0.001 0.0025 0.005 0.0075 0.01]
  179. tauG_mat = [10 20 30 40 50 60 70 80 90 100 200 300 400 500 600 700 800 900 1000 2000 ]
  180. for idx_tauG=1:1:length(tauG_mat)
  181. for idx_gCAMPA_init=1:1:length(gCAMPA_init_mat)
  182. println("tauG=", tauG_mat[idx_tauG])
  183. println("gCAMPA0=", gCAMPA_init_mat[idx_gCAMPA_init])
  184. @time () = simulateTOY_ncellsScenarioNMOD(
  185. ncells,
  186. ncellsI,
  187. ncellsC,
  188. Iapp_cell,
  189. Istep_cell,
  190. gCAMPA_init_mat[idx_gCAMPA_init],
  191. tauG_mat[idx_tauG],
  192. idx_gCAMPA_init
  193. )
  194. end
  195. end

Simu_SNR_GB2012_VAR.jl at commit 30b9289, no license · at the source

Overview

  1. Biology Department, Marder Lab, Brandeis University, 415 South Street, Waltham, MA 02453, USA
  2. Department of Electrical Engineering and Computer Science, University of Liège, Allée de la Découverte 10, Liège 4000, Belgium
  3. Center for Theoretical Neuroscience, Columbia University, 3227 Broadway, New York, NY 10027, USA
  4. Viterbi School of Engineering, University of Southern California, 3670 Trousdale Parkway, Los Angeles, CA 90089, USA
Institutions: University of Liège (Belgium); Brandeis University (United States); University of Southern California (United States); Columbia University (United States)
Journal: PNAS nexus, volume 5, issue 7, article pgag213
Dates: received 29 November 2025; accepted 1 June 2026; published online 12 June 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1093/pnasnexus/pgag213 · PMID 42394754 · PMCID PMC13323795 · OpenAlex W7164503266
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: cellular / molecular (subfield)
Methods: Spectral & time-frequency
Keywords: neuromodulation, eligibility trace, structural synaptic plasticity, neuromodulated synaptic plasticity
Journal subjects: Physical Sciences and Engineering, Biophysics and Computational Biology
Topic: Neural dynamics and brain function (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: Fonds De La Recherche Scientifique - FNRS (ASP40006590); Belgian Government
Citations: not cited yet (Europe PMC); 74 references in the paper

Abstract

How can brain circuits remain plastic enough to encode new information while still stabilizing synaptic changes that support long-term memory? Many circuits switch between tonic spiking, which encodes external inputs, and burst firing, which is generated collectively; yet how these firing-state changes interact with synaptic plasticity to support consolidation remains unclear. Here, we ask whether burst epochs can provide a minimal, mechanistically interpretable route to stabilizing memories encoded during tonic firing. We introduce a two-factor synaptic plasticity rule in a conductance-based spiking network that switches robustly between tonic and burst regimes. The effective synaptic strength is expressed as the product of two factors: a primary, flexible factor updated by a Hebbian mechanism, and a secondary factor that captures stabilizing processes. The secondary factor is adjusted according to the rate of change of the primary factor. In a pattern recognition case study, the network encodes new inputs during tonic firing and undergoes burst epochs. This two-factor rule stabilizes previously learned patterns, integrates information across samples to support generalization, and improves robustness to noise. Ablation experiments show that these outcomes require a synergy between neural bursting activity and the two-factor plasticity rule: blocking secondary plasticity prevents stable retention, replacing bursts with quiescence leads to fading memories, and replacing bursts with additional tonic firing causes interference and noise sensitivity. Finally, a signal-to-noise ratio analysis across tonic-burst cycles identifies parameter regimes in which bursts either sharpen or weaken synaptic representations, consistent with consolidation or pruning, respectively.

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

KJacquerie/Two-Factor-Plasticity

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 30b928968796ce98b3a27f8f31b99ee4d5d0d039, 7 December 2025
Languages: Julia (33), MATLAB (15)
Size: 1,821 files, 48 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: DataFrames.jl (16 files), DifferentialEquations.jl (16 files), Distributions.jl (16 files), Plots.jl (16 files)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
49 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;
  • 48 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 original data in this work were generated using the Julia programming language (74). Analyses were performed in Matlab. The code files are freely available at https://github.com/KJacquerie/Two-Factor-Plasticity. Any additional information can be requested from the lead contact ().

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, 4 authors, 4 keywords, 2 funders, 70 references.

Cite

This paper

Jacquerie, K., Tyulmankov, D., Sacré, P., & Drion, G. (2026). Two-factor synaptic plasticity enables memory consolidation during neuronal burst firing. PNAS nexus, 5(7), pgag213. https://doi.org/10.1093/pnasnexus/pgag213

BibTeX

@article{jacquerie2026two,
author = {Jacquerie, Kathleen and Tyulmankov, Danil and Sacré, Pierre and Drion, Guillaume},
title = {{Two-factor synaptic plasticity enables memory consolidation during neuronal burst firing}},
journal = {PNAS nexus},
year = {2026},
month = jun,
volume = {5},
number = {7},
pages = {pgag213},
publisher = {Oxford University Press},
issn = {2752-6542},
doi = {10.1093/pnasnexus/pgag213},
url = {https://doi.org/10.1093/pnasnexus/pgag213},
pmid = {42394754},
pmcid = {PMC13323795}
}

RIS

TY - JOUR
AU - Jacquerie, Kathleen
AU - Tyulmankov, Danil
AU - Sacré, Pierre
AU - Drion, Guillaume
TI - Two-factor synaptic plasticity enables memory consolidation during neuronal burst firing
T2 - PNAS nexus
J2 - PNAS Nexus
PY - 2026
DA - 2026/06/12
VL - 5
IS - 7
SP - pgag213
SN - 2752-6542
PB - Oxford University Press
DO - 10.1093/pnasnexus/pgag213
UR - https://doi.org/10.1093/pnasnexus/pgag213
LA - en
ER -

CSL-JSON

{
"id": "10.1093/pnasnexus/pgag213",
"type": "article-journal",
"title": "Two-factor synaptic plasticity enables memory consolidation during neuronal burst firing",
"container-title": "PNAS nexus",
"author": [
{
"family": "Jacquerie",
"given": "Kathleen"
},
{
"family": "Tyulmankov",
"given": "Danil"
},
{
"family": "Sacré",
"given": "Pierre"
},
{
"family": "Drion",
"given": "Guillaume"
}
],
"container-title-short": "PNAS Nexus",
"volume": "5",
"issue": "7",
"page": "pgag213",
"DOI": "10.1093/pnasnexus/pgag213",
"PMID": "42394754",
"PMCID": "PMC13323795",
"ISSN": "2752-6542",
"publisher": "Oxford University Press",
"URL": "https://doi.org/10.1093/pnasnexus/pgag213",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
12
]
]
}
}

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.1371/journal.pcbi.1014001 [code]
Burst firing creates an attractor in synaptic weight dynamics.
Journal: PLoS computational biology
In common: DifferentialEquations.jl, DataFrames.jl, Plots.jl, 1 other tool, 31 references, author Kathleen Jacquerie
[2] doi:10.1371/journal.pcbi.1014549 [code]
Inward rectifier potassium channels interact with calcium channels to promote robust and physiological bistability.
Journal: PLoS computational biology
In common: DifferentialEquations.jl, DataFrames.jl, Plots.jl, 1 other tool, cellular / molecular, author Pierre Sacré
[3] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: DifferentialEquations.jl, DataFrames.jl, Plots.jl, 1 other tool, cellular / molecular
[4] doi:10.1523/eneuro.0379-25.2026 [code]
Next-Generation Neural Mass Models Reproduce Features of Speech Processing.
Journal: eNeuro
In common: DifferentialEquations.jl, DataFrames.jl, Plots.jl, 1 other tool
[5] doi:10.1371/journal.pcbi.1014222 [code]
Neural population models for EEG: From Canonical models to alternative model structures.
Journal: PLoS computational biology
In common: DifferentialEquations.jl, DataFrames.jl, Plots.jl, 1 other tool
[6] doi:10.1038/s41540-026-00749-5 [code]
A novel approach to quantify out-of-distribution uncertainty in Neural and Universal Differential Equations.
Journal: NPJ systems biology and applications
In common: DifferentialEquations.jl, DataFrames.jl, Plots.jl, 1 other tool
[7] doi:10.1371/journal.pcbi.1014177 [code]
Activity-dependent neuromodulation and calcium homeostasis cooperate to produce robust and modulable neuronal function.
Journal: PLoS computational biology
In common: DifferentialEquations.jl, Plots.jl, 3 references
[8] doi:10.7554/elife.89629 [code]
Active dendrites enable robust spiking computations despite timing jitter.
Journal: eLife
In common: DifferentialEquations.jl, Plots.jl, Distributions.jl, 1 reference
[9] doi:10.1371/journal.pcbi.1014730 [code]
A unified model of short- and long-term plasticity: Effects on network connectivity and information capacity.
Journal: PLoS computational biology
In common: 6 references
[10] doi:10.1371/journal.pcbi.1014575 [code]
Remembering the "when": Hebbian memory models for the time of past events.
Journal: PLoS computational biology
In common: DataFrames.jl, Distributions.jl, 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.