Conduction Velocity & spikes' characteristics recording

The basics of how to develop, test, and use models.
Post Reply
makrseke
Posts: 16
Joined: Mon Apr 03, 2017 6:43 am

Conduction Velocity & spikes' characteristics recording

Post by makrseke »

Dear all,

I am very new at programming in hoc language so please bear with me if what I ask feels very basic. I have managed to model a neural cell (single cell in the Ball and Stick configuration, with myelinated compartments and a separate section for the AIS node, but no dendrites). On this single cell, I wish to test several things. One is the conduction velocity changes when I change certain parameters (i.e. capacitance, conductance, etc). To do so however, I need to obtain the characteristics of the Action Potentials (APs) in order to later calculate the conduction velocity. Such characteristics are:

(i) Magnitude of the peak of the spikes at the specified recording location,
(ii) Timing that reaches the peaks,

Personal Approach:
I read about NetCon but this requires to have synaptic inputs, which I don't (stimulation is given via an IClamp point process, at the center of the soma), so I do not think I can use the NetCon.record() method to pick the signal. At least not if I understood the NetCon correctly. Thus, I was considering of using the vector.record() like this:

Code: Select all

stim_pos = 0.5  // stimulation site at the soma with an IClamp
pos1 = 1 // at the soma
pos2 = 1 // at the axon
objref recvol1, rectim1, recvol2, rectim2
proc APstimVT() {           // Get voltage AP-value and timing of peak-reaching

      // First point
      recvol1 = new Vector() 
      rectim1 = new Vector()
      rectim1.record(&t)
      soma recvol1.record(&soma.v(pos1),rectim1)
      APpeak1 = recvol1.max()
      APpeak1_index = recvol1.max_ind()
      print "The max voltage is = ", APpeak1, " [mV]"

       APpeakTime1 = rectim1.get(APpeak1_index) // has a problem with out-of range values
      //APpeakTime1 = rectim1.where(&soma.v(pos1),"==", APpeak1) //expects string value so this does not work
      print "The timing of the max voltage is = ", APpeakTime1, " [ms]"
      print APpeakTime1

      //Second point
      recvol2 = new Vector() 
      rectim2 = new Vector()
      rectim2.record(&t)
      axon recvol2.record(&axon.v(pos2),rectim2)
      APpeak2 = recvol2.max()
      APpeak2_index = recvol2.max_ind()
      print "The max voltage is = ", APpeak2, " [mV]"

       APpeakTime2 = rectim2.get(APpeak2_index) // has a problem with out-of range values
      //axon recvol2.where(&axon.v(pos2),"==", APpeak2)
      print "The timing of the max voltage is = ", APpeakTime2, " [ms]"
      print APpeakTime2
}

run()
APstimVT()

However, it doesn't work properly:
- The maximum value of the voltage is returned as a zero, which is not accurate (from the graph, it seems to be ~22 [mV]). Can it be that the recording location is not the proper one or is it a matter of coding? Can it be that it is not obtaining the total-maximum voltage amplitude, but only a local-maximum that is just the highest one from the sampled values?
- It prints right after the 0 voltage: out of range in user function. This is probably because I have index = -1, which is weird though and I think it is cause I am probably misunderstanding some programming aspects/functions of vectors.

Finally, I believe it is important to mention that I use cvode.active(1) in the beginning of my code cause I noticed I was getting unwanted artifacts before (hence, for better accuracy).

Can someone help please? What am I doing wrong/have misunderstood?

Thank you very much in advance!
Best,
Last edited by makrseke on Thu May 04, 2017 10:08 am, edited 2 times in total.
ted
Site Admin
Posts: 5810
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Conduction Velocity & spikes' characteristics recording

Post by ted »

Forget about programming and programming languages for a moment, and think like an experimentalist.

Does your model cell have an axon? It doesn't make sense to discuss conduction velocity (CV) if there is no axon.

CV = path length / time for the spike to propagate over that length
so you need to determine the times t1 and t2 at which the spike passes two points x1 and x2. x1 and x2 should be separated by a distance that is long enough for t2-t1 to be a large multiple of dt, the integration time step. Furthermore, x1 and x2 should be far enough away from the point of spike initiation and the distal termination of the axon that the amplitude, time course, and conduction velocity of the spike are not affected by phenomena that occur at the proximal or distal end of the axon.

Everybody gets stuck on the idea of using the time of the spike peak as the indicator of when the spike passes a point. What's wrong with that idea? In the vicinity of the peak, dv/dt is nearly 0, so real-world measurements are susceptible to noise. In a simulation, it requires an algorithm that first identifies peaks, decides if it's a spike peak or not, and finally determines the time of occurrence. It's much easier and more robust to detect the time at which a rising waveform crosses a threshold. Run a few (computational) experiments to see what your parameter changes do to spike amplitude, and then just look for times at which membrane potential rises above the half-amplitude level. Doable easily with the NetCon class's record() method--read about it in the Programmer's Reference.

Use NEURON's distance() function to determine the distance between your selected x1 and x2 locations.

Avoid unnecessary compexity. Do everything with fixed time steps.
makrseke
Posts: 16
Joined: Mon Apr 03, 2017 6:43 am

Re: Conduction Velocity & spikes' characteristics recording

Post by makrseke »

Dear Ted,

Thank you very much for your quick reply, it is really helpful! I will try as you suggested and will test a few things out.

To answer your question, yes, there is an axon. The topology consists of a soma, an Axon Initial Segment (AIS) and an axon with some myelin. The CV measurement I was aiming to make was between the end of the soma (x1 at soma.v(1)) and the end of the bare axon (x2 at axon.v(1)). Nonetheless, as you pointed out it might be a good idea to avoid taking the very end of the bare axon for x2, or taking an x1 very close to the stimulation site, as the measurements there may be affected by the biological phenomena occuring at these points.

One more thing that I am still not certain about: can I use the record() of the NetCon class even though I am having one single cell that doesn't even have dendrites (the latter is pointed out because I thought NetCon requires to have synaptic inputs, which I don't; stimulation is given via an IClamp point process, at the center of the soma)? Is it ok to simply identify the cell as a network cell even though it is just one? I had given up the idea of NetCon before because of that, but I might try it out since you suggested it.

Thanks again!
ted
Site Admin
Posts: 5810
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Conduction Velocity & spikes' characteristics recording

Post by ted »

makrseke wrote:The CV measurement I was aiming to make was between the end of the soma (x1 at soma.v(1)) and the end of the bare axon (x2 at axon.v(1)). Nonetheless, as you pointed out it might be a good idea to avoid taking the very end of the bare axon for x2, or taking an x1 very close to the stimulation site, as the measurements there may be affected by the biological phenomena occuring at these points.
Not may. Absolutely WILL be affected. You know, there is an experimental literature that contains descriptions of methods for measuring conduction velocity. It's old, but quite readable, and much of it is freely available online.
One more thing that I am still not certain about: can I use the record() of the NetCon class even though I am having one single cell that doesn't even have dendrites (the latter is pointed out because I thought NetCon requires to have synaptic inputs
What does the Programmer's Reference documentation about the NetCon class's record() method say?
Post Reply