Axonal delay for simplified synapse kinetic model

NMODL and the Channel Builder.
Post Reply
tort
Posts: 8
Joined: Thu May 18, 2006 6:16 pm
Location: Boston University

Axonal delay for simplified synapse kinetic model

Post by tort »

Hi, I have the following code for a point process describing an inhibitory synapse:

Code: Select all

NEURON {
  POINT_PROCESS Isyn
  RANGE gmax, g, i,e
  GLOBAL alpha,beta,thetasyn
  NONSPECIFIC_CURRENT i
  POINTER vpre
}

UNITS {
  (nA) = (nanoamp)
  (mV) = (millivolt)
  (uS) = (microsiemens)
}

PARAMETER {
  gmax=0.00001 (uS)
  alpha=15 (/ms)
  beta=0.11 (/ms)
  e=-80	   (mV)
  thetasyn=0 (mV) 
}

ASSIGNED { vpre (mV) v (mV) i (nA)  g (uS) }

STATE { s }

INITIAL {
  s =  alpha*F(vpre)/(alpha*F(vpre)+beta)
}

BREAKPOINT {
 g = gmax * s
  i = g*(v - e)
}

DERIVATIVE state {
  s' = alpha*F(vpre)*(1-s) - beta*s
}

FUNCTION F (w (mV)) {
UNITSOFF
  F = 1/(1+ exp(-(w-thetasyn)/2))
UNITSON
  } 
Now I want to implement an axonal delay, but I'm not figuring out how to do it. I've been reading about netcon, but its "delay" doesn't seem to be useful in my case...

What I want is simply to set say a new variable z = s(t-delay) and then make g=gmax*z or else keep "s" as it is and make a delay in the pointer vpre, ie make it represent the voltage of my presynaptic cell a delayed time ago.

Can you help me?

Thank you for your attention!
ted
Site Admin
Posts: 6384
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Post by ted »

I suppose you could stick a VERBATIM block in your mod file that implements a big ring
buffer (size dependent on how many time steps are equivalent to the necessary delay).
Or maybe the buffer itself could be external to the mod file (e.g. a Vector), and the
Verbatim block could just operate the data storage and retrieval that march through it
with advancing time. An ugly thought, but it might work. For implementational details I'll
have to ask Michael Hines.
hines
Site Admin
Posts: 1710
Joined: Wed May 18, 2005 3:32 pm

Post by hines »

You can use:

Code: Select all

NEURON {RANGE delay}
PARAMETER {delay = 1 (ms)}
DERIVATIVE state {
  LAG vpre BY delay
  s' = alpha*F(lag_vpre_delay)*(1-s) - beta*s
}
but you should test with printf statements since I have never used it with the variable step methods. Also, the implementation does not scale to large numbers of synapses since a list of pointers is searched and the memory requirements are large. If the delay is not large and synaptic transmission is graded, you can get an effective delay with a short cascade of diffeq or raise the result to a large power a la HH. If you are talking about an axonal delay where the presynaptic voltage is always a stereotypical action potential, then it is best to abandon the POINTER and use the NetCon idioms.
tort
Posts: 8
Joined: Thu May 18, 2006 6:16 pm
Location: Boston University

Post by tort »

Ok, I tested this last option proposed by Hines and it seems to be working fine (except by a unit complain in lag_vpre_delay), though I still didn't implement it in a larger network.

Thank you again!

ps just for the record, in my code above the sentence "SOLVE state METHOD cnexp" was missing inside BREAKPOINT
Post Reply