Skip to content

Commit

Permalink
Merge pull request #1385 from schmitts/naud_adex_patterns
Browse files Browse the repository at this point in the history
Firing patterns in the adaptive exponential integrate-and-fire model
  • Loading branch information
mstimberg committed Feb 8, 2022
2 parents e0034e5 + 1e9dbd8 commit 2e81a99
Show file tree
Hide file tree
Showing 2 changed files with 179 additions and 1 deletion.
178 changes: 178 additions & 0 deletions examples/frompapers/Naud_et_al_2008_adex_firing_patterns.py
@@ -0,0 +1,178 @@
#!/usr/bin/env python
"""
Firing patterns in the adaptive exponential integrate-and-fire model
-----------------------
Naud R et al. (2008): Firing patterns in the adaptive exponential integrate-and-fire model.
Biol Cybern. 2008; 99(4): 335–347.
doi:10.1007/s00422-008-0264-7
Parameters adapted by P. Müller to match figures, cf. http://www.kip.uni-heidelberg.de/Veroeffentlichungen/details.php?id=3445.
Sebastian Schmitt, Sebastian Billaudelle, 2022
"""
from brian2 import *
import matplotlib.pyplot as plt


def sim(ax_vm, ax_w, ax_vm_w, parameters):
"""
simulate with parameters and plot to axes
"""

# taken from Touboul_Brette_2008
eqs = """
dvm/dt = (g_l*(e_l - vm) + g_l*d_t*exp((vm-v_t)/d_t) + i_stim - w)/c_m : volt
dw/dt = (a*(vm - e_l) - w)/tau_w : amp
"""

neuron = NeuronGroup(
1,
model=eqs,
threshold="vm > 0*mV",
reset="vm = v_r; w += b",
method="euler",
namespace=parameters,
)

neuron.vm = parameters["e_l"]
neuron.w = 0

states = StateMonitor(neuron, ["vm", "w"], record=True, when="thresholds")

defaultclock.dt = 0.1 * ms
run(0.6 * second)

# clip membrane voltages to threshold (0 mV)
vms = np.clip(states[0].vm / mV, a_min=None, a_max=0)

ax_vm.plot(states[0].t / ms, vms)
ax_w.plot(states[0].t / ms, states[0].w / nA)
ax_vm_w.plot(vms, states[0].w / nA)

ax_w.sharex(ax_vm)
ax_vm.tick_params(labelbottom=False)

ax_vm.set_ylabel("V [mV]")

ax_w.set_xlabel("t [ms]")
ax_w.set_ylabel("w [nA]")

ax_vm_w.set_xlabel("V [mV]")
ax_vm_w.set_ylabel("w [nA]")

ax_vm_w.yaxis.tick_right()
ax_vm_w.yaxis.set_label_position("right")


patterns = {
"tonic spiking": {
"c_m": 200 * pF,
"g_l": 10 * nS,
"e_l": -70.0 * mV,
"v_t": -50.0 * mV,
"d_t": 2.0 * mV,
"a": 2.0 * nS,
"tau_w": 30.0 * ms,
"b": 0.0 * pA,
"v_r": -58.0 * mV,
"i_stim": 500 * pA,
},
"adaptation": {
"c_m": 200 * pF,
"g_l": 12 * nS,
"e_l": -70.0 * mV,
"v_t": -50.0 * mV,
"d_t": 2.0 * mV,
"a": 2.0 * nS,
"tau_w": 300.0 * ms,
"b": 60.0 * pA,
"v_r": -58.0 * mV,
"i_stim": 500 * pA,
},
"initial burst": {
"c_m": 130 * pF,
"g_l": 18 * nS,
"e_l": -58.0 * mV,
"v_t": -50.0 * mV,
"d_t": 2.0 * mV,
"a": 4.0 * nS,
"tau_w": 150.0 * ms,
"b": 120.0 * pA,
"v_r": -50.0 * mV,
"i_stim": 400 * pA,
},
"regular bursting": {
"c_m": 200 * pF,
"g_l": 10 * nS,
"e_l": -58.0 * mV,
"v_t": -50.0 * mV,
"d_t": 2.0 * mV,
"a": 2.0 * nS,
"tau_w": 120.0 * ms,
"b": 100.0 * pA,
"v_r": -46.0 * mV,
"i_stim": 210 * pA,
},
"delayed accelerating": {
"c_m": 200 * pF,
"g_l": 12 * nS,
"e_l": -70.0 * mV,
"v_t": -50.0 * mV,
"d_t": 2.0 * mV,
"a": -10.0 * nS,
"tau_w": 300.0 * ms,
"b": 0.0 * pA,
"v_r": -58.0 * mV,
"i_stim": 300 * pA,
},
"delayed regular bursting": {
"c_m": 100 * pF,
"g_l": 10 * nS,
"e_l": -65.0 * mV,
"v_t": -50.0 * mV,
"d_t": 2.0 * mV,
"a": -10.0 * nS,
"tau_w": 90.0 * ms,
"b": 30.0 * pA,
"v_r": -47.0 * mV,
"i_stim": 110 * pA,
},
"transient spiking": {
"c_m": 100 * pF,
"g_l": 10 * nS,
"e_l": -65.0 * mV,
"v_t": -50.0 * mV,
"d_t": 2.0 * mV,
"a": 10.0 * nS,
"tau_w": 90.0 * ms,
"b": 100.0 * pA,
"v_r": -47.0 * mV,
"i_stim": 180 * pA,
},
"irregular spiking": {
"c_m": 100 * pF,
"g_l": 12 * nS,
"e_l": -60.0 * mV,
"v_t": -50.0 * mV,
"d_t": 2.0 * mV,
"a": -11.0 * nS,
"tau_w": 130.0 * ms,
"b": 30.0 * pA,
"v_r": -48.0 * mV,
"i_stim": 160 * pA,
},
}

# loop over all patterns and plot
for pattern, parameters in patterns.items():

fig = plt.figure(figsize=(10, 5))
fig.suptitle(pattern)
gs = fig.add_gridspec(2, 2)

ax_vm = fig.add_subplot(gs[0, 0])
ax_w = fig.add_subplot(gs[1, 0])
ax_vm_w = fig.add_subplot(gs[:, 1])

sim(ax_vm, ax_w, ax_vm_w, parameters)
plt.show()

0 comments on commit 2e81a99

Please sign in to comment.