AMPA synapses#

AMPA receptors are the most common type of ionotropic glutamate receptors in the brain. They have fast kinetics and are responsible for excitatory synaptic transmission.

In this example we show:

  • How to add and activate AMPA synapses at various model compartments.

  • How to adjust the synaptic conductance and kinetics of AMPA synapses.

import brian2 as b
from brian2.units import ms, mV, nS, pF

from dendrify import Dendrite, NeuronModel, Soma

b.prefs.codegen.target = 'numpy'  # faster for simple simulations

# Create a simple 3-compartment neuron model
soma = Soma('soma', cm_abs=100*pF, gl_abs=10*nS)
dend1 = Dendrite('dend1', cm_abs=50*pF, gl_abs=5*nS)
dend2 = Dendrite('dend2', cm_abs=50*pF, gl_abs=5*nS)

# Add AMPA synapse with rise and decay kinetics to dend1
dend1.synapse('AMPA', tag='slow', g=1*nS, t_rise=2*ms, t_decay=5*ms)

# Add AMPA synapse with instantaneous rise and decay kinetics to dend2
dend2.synapse('AMPA', tag='fast', g=1*nS,  t_decay=5*ms)

# Merge the compartments into a single neuron model
model = NeuronModel([(soma, dend1, 10*nS),
                     (dend1, dend2, 10*nS)],
                    v_rest=-60*mV)

# Create 2 neurons (no somatic spiking for simplicity)
neurons = model.make_neurongroup(2, method='euler')

# Each neuron receives a spike at t=10ms at different dendrites
input_spikes = b.SpikeGeneratorGroup(2, [0, 1], [10, 10]*ms)
slow_ampa = b.Synapses(input_spikes, neurons, on_pre='s_AMPA_slow_dend1 += 1')
slow_ampa.connect(i=0, j=0)
fast_ampa = b.Synapses(input_spikes, neurons, on_pre='s_AMPA_fast_dend2 += 1')
fast_ampa.connect(i=1, j=1)

# Create monitors
variables = ['V_dend1', 'V_dend2', 'I_AMPA_slow_dend1', 'I_AMPA_fast_dend2']
M = b.StateMonitor(neurons, variables, record=True)

# Run the simulation
b.run(80*ms)

# Visualize results
time = M.t/ms
vd1 = M.V_dend1[0]/mV
vd2 = M.V_dend2[1]/mV
ampa1 = M.I_AMPA_slow_dend1[0]/nS
ampa2 = M.I_AMPA_fast_dend2[1]/nS

fig, axes = b.subplots(2, 1, sharex=True, figsize=(6, 6))
ax0, ax1 = axes

ax0.set_title('Excitatory postsynaptic potentials')
ax0.plot(time, vd1, label='Dendrite 1 (slow rise)')
ax0.plot(time, vd2, label='Dendrite 2 (instant rise)')
ax0.set_ylabel('Membrane potential (mV)')
ax0.legend()

ax1.set_title('Excitatory postsynaptic currents')
ax1.plot(time, ampa1, c='black', label='slow rise')
ax1.plot(time, ampa2, c='crimson', label='instant rise')
ax1.set_xlabel('Time (ms)')
ax1.set_ylabel('Current (nS)')
ax1.legend()

fig.tight_layout()
b.show()
../_images/syn_ampa.png