-
Notifications
You must be signed in to change notification settings - Fork 1
/
ampa.mod
91 lines (77 loc) · 1.57 KB
/
ampa.mod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}
NEURON
{
POINT_PROCESS AMPA
RANGE C, g, gmax, lastrelease, TRise, tau
NONSPECIFIC_CURRENT i
RANGE Cmax, Cdur, Alpha, Beta, Erev, Deadtime
}
UNITS
{
(nA) = (nanoamp)
(mV) = (millivolt)
(umho) = (micromho)
(mM) = (milli/liter)
}
PARAMETER
{
TRise = 2 (ms)
tau = 2(ms)
Cmax = 1 (mM) : max transmitter concentration
Erev = 0 (mV) : reversal potential
Deadtime = 1 (ms) : mimimum time between release events
gmax = 0 (umho) : maximum conductance
}
ASSIGNED
{
Alpha (/ms mM) : forward (binding) rate
Beta (/ms) : backward (unbinding) rate
Cdur (ms) : transmitter duration (rising phase)
v (mV) : postsynaptic voltage
i (nA) : current = g*(v - Erev)
g (umho) : conductance
C (mM) : transmitter concentration
lastrelease (ms) : time of last spike
}
STATE
{
R : fraction of open channels
}
INITIAL
{
R = 0
C = 0
lastrelease = -1000
Cdur=TRise
Beta=1/tau
Alpha=1/Cdur - Beta
}
BREAKPOINT
{
SOLVE states METHOD cnexp
g = (gmax * R * (Alpha+Beta)) / (Alpha*(1-1/exp(1)))
i = g*(v - Erev)
}
DERIVATIVE states
{
evaluateC() : Find out value of C
R'=Alpha * C * (1-R) - Beta * R
}
PROCEDURE evaluateC()
{
LOCAL q
q = ((t - lastrelease) - Cdur) : time since last release ended
if (q >= 0 && q <= Deadtime && C == Cmax) { : in dead time after release
C = 0.
}
}
NET_RECEIVE (weight (umho))
{
LOCAL q
q = ((t - lastrelease) - Cdur) : time since last release ended
: Spike has arrived, ready for another release?
if (q > Deadtime) {
C = Cmax : start new release
lastrelease = t
}
}