ANNarchy 4.8.2
  • ANNarchy
  • Installation
  • Tutorial
  • Manual
  • Notebooks
  • Reference

Synaptic transmission

  • List of notebooks
  • Rate-coded networks
    • Echo-state networks
    • Neural field
    • Bar Learning
    • Miconi network
    • Structural plasticity
  • Spiking networks
    • AdEx
    • PyNN/Brian
    • Izhikevich
    • Synaptic transmission
    • Gap junctions
    • Hodgkin-Huxley
    • COBA/CUBA
    • STP
    • STDP I
    • STDP II
    • Homeostatic STDP - Ramp
    • Homeostatic STDP - SORF
  • Advanced features
    • Hybrid networks
    • Parallel run
    • Bayesian optimization
  • Extensions
    • Image
    • Tensorboard
    • BOLD monitor I
    • BOLD monitor II
    • ANN to SNN I
    • ANN to SNN II

Synaptic transmission

Download JupyterNotebook Download JupyterNotebook

#!pip install ANNarchy

This notebook simply demonstrates the three main type of synaptic transmission for spiking neurons:

  1. Instantaneous
  2. Exponentially-decreasing
  3. Alpha-shaped
import numpy as anp

import ANNarchy as ann
ann.clear()
ANNarchy 4.8 (4.8.2) on darwin (posix).

We use here a simple LIF neuron receving three types of projections (a, b, c). The conductance g_a uses instantaneous transmission, as it is reset to 0 after each step. g_b decreases exponentially with time following a first order ODE. g_c is integrated twice in alpha_c, leading to the alpha shape.

All methods use the exponential numerical method, as they are first order linear ODEs and can be solved exactly.

LIF = ann.Neuron(
    parameters="""
        tau = 20.
        E_L = -70.
        v_T = 0.
        v_r = -58.
        tau_b = 10.0
        tau_c = 10.0
    """,
    equations="""
        # Membrane potential
        tau * dv/dt = (E_L - v) + g_a + g_b + alpha_c : init=-70.
        
        # Exponentially decreasing
        tau_b * dg_b/dt = -g_b : exponential
        
        # Alpha-shaped
        tau_c * dg_c/dt = -g_c : exponential
        tau_c * dalpha_c/dt = exp((tau_c - dt/2.0)/tau_c) * g_c - alpha_c  : exponential
    """,
    spike="v >= v_T",
    reset="v = v_r",
    refractory = 2.0
)

The LIF neuron will receive a single spike at t = 10 ms, using the SpikeSourceArray specific population.

inp = ann.SpikeSourceArray([10.])
pop = ann.Population(1, LIF)

We implement three different projections between the same neurons, to highlight the three possible transmission mechanisms.

proj = ann.Projection(inp, pop, 'a')
proj.connect_all_to_all(weights=1.0)

proj = ann.Projection(inp, pop, 'b')
proj.connect_all_to_all(weights=1.0)

proj = ann.Projection(inp, pop, 'c')
proj.connect_all_to_all(weights=1.0)
<ANNarchy.core.Projection.Projection at 0x10d5ea0d0>
ann.compile()
Compiling ...  OK 

We monitor the three conductances:

m = ann.Monitor(pop, ['g_a', 'g_b', 'alpha_c'])
inp.clear()
ann.simulate(100.)
data = m.get()
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 10))
plt.subplot(311)
plt.plot(data['g_a'][:, 0])
plt.ylabel("Instantaneous")
plt.subplot(312)
plt.plot(data['g_b'][:, 0])
plt.ylabel("Exponential")
plt.subplot(313)
plt.plot(data['alpha_c'][:, 0])
plt.xlabel("Time (ms)")
plt.ylabel("Alpha")
plt.show()

Izhikevich
Gap junctions
 

Copyright Julien Vitay, Helge Ülo Dinkelbach, Fred Hamker