COMMENT
ALE - 08.06.2011
NTDiffusion model using analytic solution [A1.2] of savtchenko - The optimal height of the synaptic cleft - 2007
ENDCOMMENT
DEFINE NDates 10
:DEFINE NDates 20
NEURON {
POINT_PROCESS NTDiffusion
RANGE Radius, CleftWidth, Diffusivity, BasalNTConcentration, NTi, k, Nused
RANGE NTConcentration
RANGE comp
RANGE NTRatio
RANGE tDiff
}
UNITS {
(molar) = (1/liter) : moles do not appear in units
(mM) = (millimolar)
(um) = (micron)
(mA) = (milliamp)
(msM) = (ms mM)
}
CONSTANT{
PI = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Nav = 6.02214179e23
}
PARAMETER {
Radius = 1 (um) : Radius, position of the receptor (DEFAULT 1) (50 nanometers is nominal)
CleftWidth = 0.02 (um) : CleftWidth
Diffusivity = 0.33 (um.um/ms) : Diffusivity coefficient of the NT in the cleft (DEFAULT 0.4)
BasalNTConcentration = 0.0 (mM) : resting NT concentration
k = 1.0 : variable d'ajustement
comp = 0
tRound = 0
tDiff = 0
NTRatio = 0
}
ASSIGNED {
NTConcentration
NTi
tr[NDates]
Nused
}
STATE {
NT1
NT2
NT3
NT4
NT5
NT6
NT7
NT8
NT9
}
INITIAL {
NTConcentration = BasalNTConcentration
NTi = 0
FROM i = 0 TO NDates-1{
tr[i] = -1e12
}
Nused = 0
}
: LOCAL comp
BREAKPOINT {
SOLVE state METHOD cnexp
NTConcentration = BasalNTConcentration
FROM i = 0 TO Nused-1{
if(i == 0) {
NTRatio = NT1
tDiff = t-tr[i]
} else if(i == 1) {
NTRatio = NT2
} else if(i == 2) {
NTRatio = NT3
} else if(i == 3) {
NTRatio = NT4
} else if(i == 4) {
NTRatio = NT5
} else if(i == 5) {
NTRatio = NT6
} else if(i == 6) {
NTRatio = NT7
} else if(i == 7) {
NTRatio = NT8
} else if(i == 8) {
NTRatio = NT9
} else {
:printf("Warning: More NT events than expected")
NTRatio = 0
}
if(Radius == 0){
comp = NTRatio * 1e18 * NTi / (4 * PI * CleftWidth * Diffusivity) : en mM
} else {
comp = NTRatio * 1e18 * NTi / (4 * PI * CleftWidth * Diffusivity) * exp(- NTRatio * (Radius*Radius)/(4*Diffusivity)) : en mM
}
:printf("comp : %4.5f\n", comp)
:printf("t = %f :\t %1.0f / %1.0f\t : comp = %f \n", t, i+1, Nused, comp)
if(comp >= 0.001*NTConcentration){
NTConcentration = NTConcentration + comp
} else if(t==tr[i]){
NTConcentration = BasalNTConcentration
} else {
Nused = i
:printf("component used until %1.0f, %f / %f \n", Nused, comp, NTConcentration)
}
}
: NTConcentration = NTConcentration/.06 : testing modifying the amplitude of glutamate
}
DERIVATIVE state {
NT1' = - (NT1 * NT1)
NT2' = - (NT2 * NT2)
NT3' = - (NT3 * NT3)
NT4' = - (NT4 * NT4)
NT5' = - (NT5 * NT5)
NT6' = - (NT6 * NT6)
NT7' = - (NT7 * NT7)
NT8' = - (NT8 * NT8)
NT9' = - (NT9 * NT9)
}
NET_RECEIVE(w){
if(flag == 0){ : external event coming from netcon object
if(Nused < NDates){
Nused = Nused +1
} else {
printf("Size of the NTDiffusion Glu array might be too small")
}
NTi = k*3000/Nav : en moles : (Nav*PI*1e-9*ri*ri*CleftWidth)
FROM i = 1 TO Nused{
tr[Nused+1-i] = tr[Nused-i]
}
tr[0] = t
NT9 = NT8
NT8 = NT7
NT7 = NT6
NT6 = NT5
NT5 = NT4
NT4 = NT3
NT3 = NT2
NT2 = NT1
NT1 = 1
:printf("NTi : %4.5f\n", NTi)
}
}