Wang Buzaki PymoNNto Implementation

The following code creates a neuron which is updated with ruled derived from the "Wang Buzaki 1996" paper.

# /Examples_Classical/Wang_Buzaki.py
from PymoNNto import *

#https://brian2.readthedocs.io/en/stable/examples/frompapers.Wang_Buszaki_1996.html

def exp(x):
    return np.e**x

def exprel(x):
    return (exp(x) - 1)/x

class Wang_Buzaki_main(Behavior):

    def initialize(self, n):
        self.set_parameters_as_variables(self)
        self.dt = 0.01# * ms

        #Cm = 1# * uF  # /cm**2
        #Iapp = 2# * uA
        #gL = 0.1# * msiemens
        #EL = -65# * mV
        #ENa = 55# * mV
        #EK = -90# * mV
        #gNa = 35# * msiemens
        #gK = 9# * msiemens

        n.v = n.vector()-70
        n.h = n.vector()+1
        n.n = n.vector()


    def iteration(self, neurons):
        v, h, n=neurons.v.copy(), neurons.h.copy(), neurons.n.copy()

        alpha_m = 0.1 * 10 / exprel(-(v + 35) / 10)#: Hz
        beta_m = 4 * exp(-(v + 60) / (18))#: Hz
        m = alpha_m / (alpha_m + beta_m)  #: 1
        alpha_h = 0.07 * exp(-(v + 58) / (20))#: Hz
        beta_h = 1. / (exp(-0.1 * (v + 28)) + 1)#: Hz
        alpha_n = 0.01 * 10 / exprel(-(v + 34) / (10))#: Hz
        beta_n = 0.125 * exp(-(v + 44) / (80))#: Hz

        neurons.v += (-self.gNa * m ** 3 * h * (v - self.ENa) - self.gK * n ** 4 * (v - self.EK) - self.gL * (v - self.EL) + self.Iapp) / self.Cm * self.dt#: volt
        neurons.h += 5 * (alpha_h * (1 - h) - beta_h * h) * self.dt#: 1
        neurons.n += 5 * (alpha_n * (1 - n) - beta_n * n) * self.dt#: 1


My_Network = Network()

N_e = NeuronGroup(net=My_Network, tag='excitatory_neurons', size=1, behavior={
    1: Wang_Buzaki_main(Cm=1, Iapp=2, gL=0.1, EL=-65, ENa=55, EK=-90, gNa=35, gK=9),
    9: Recorder('v', tag='my_recorder')
})

My_Network.initialize()

My_Network.simulate_iterations(10000, measure_block_time=True)

import matplotlib.pyplot as plt

plt.plot(My_Network['v', 0, 'np'][:, 0])
plt.show()