Hi!
So I just started to use NEURON and I'm tring to create an extracellular cathodic current point stimulation on a passive dendrite that contains 21 compartments. Is it true that the only function that I can use for this type of stimulation is e_extracellular? Are there any functions that have already been built for extracellular current stimulation? If I can only use e_extracellular, then should I manually calculate out the extracellular voltages at each compartments, depending on the various distances r and use equation V=I/(4*pi*sigma*r), and then assign the calculated voltages to e_extracellular(x)? It's fine if I do this, but can I do these calculations in NEURON only or do I have to import the data into Matlab, calculate out the corresponding voltages, then assign the values back into NEURON? It seems like this is definitely not the easiest way.
Thanks a lot!
Apply an extracellular cathodic current
-
- Site Admin
- Posts: 6384
- Joined: Wed May 18, 2005 4:50 pm
- Location: Yale University School of Medicine
- Contact:
Re: Apply an extracellular cathodic current
There are many ways to represent extracellular stimulation. One is to use Rattay's "activating function" approach; you'll find an example of this by McIntyre et al. in ModelDB. However, extracellular will be at the core of any approach that involves a direct representation of the potential immediately adjacent to the external surface of a cell.pass1945 wrote:Is it true that the only function that I can use for this type of stimulation is e_extracellular?
That would work; a similar approach can be used with COMSOL if the extracellular medium is assumed to be dispersive.import the data into Matlab, calculate out the corresponding voltages, then assign the values back into NEURON?
Code: Select all
Are there any functions that have already been built for extracellular current stimulation?
Extracellular stimulation and recording
in the Hot tips area of the NEURON Forum.
Re: Apply an extracellular cathodic current
Hi Ted,
So I'm trying to stimulate a cell (including a soma, an apical dendrite, and a basal dendrite) extracellularly. I had an extracellular current point source that inputs in a sine wave, and then I calculated the corresponding extracellular voltages on each end points of the segments. There are 21 segments in the apical dendrite, one in soma, and 11 in the basal dendrite. Then I used .play(&e_extracellular(x),tvec) to apply the extracellular voltages (as a function of t) in the corresponding points. Theoretically, the extracellular voltages that I calculated should be a sine wave as well, since it's just current scaled by (4*pi*sigma*r). However when I plotted the e_extracellular, it gave me a really weird looking shape (it was a like a straight line but with a sudden peak somewhere around 100ms). I don't understand why.
Here's my code for first creating a sinusoidal current:
And here is my code for calculating the extracellular voltages from the current, and then applying them to the corresponding points on the apical dendrite:
Do you see anything wrong here?
Thank you!
So I'm trying to stimulate a cell (including a soma, an apical dendrite, and a basal dendrite) extracellularly. I had an extracellular current point source that inputs in a sine wave, and then I calculated the corresponding extracellular voltages on each end points of the segments. There are 21 segments in the apical dendrite, one in soma, and 11 in the basal dendrite. Then I used .play(&e_extracellular(x),tvec) to apply the extracellular voltages (as a function of t) in the corresponding points. Theoretically, the extracellular voltages that I calculated should be a sine wave as well, since it's just current scaled by (4*pi*sigma*r). However when I plotted the e_extracellular, it gave me a really weird looking shape (it was a like a straight line but with a sudden peak somewhere around 100ms). I don't understand why.
Here's my code for first creating a sinusoidal current:
Code: Select all
//Define extracellular resistivity and position of the electrode
x= 50 //um
//minimum distance between the position of the electrode and dendrite
//This is the distance between the edge of dendrites when the somas are touching each other in an complete simulation case
rhoa=2.5 //Ohm.m
// Define I0 which is the amplitude of the oscillatory extracellular current stimulation waveform
I0 = I_manual
// Create a time vector
tstop = 1000 //ms
dt = 0.025 //ms
num = tstop/dt +1
objref tvec
tvec = new Vector(num)
for i=0, tvec.size()-1{
tvec.x[i]=dt*i
//print tvec.x[i]
}
PI = 3.1415926
f = frequency
objref I //current
I = new Vector(num)
I = tvec.mul(2*PI*f*(180/PI))
I.apply("sin")
I.mul(I0) //in nA
Code: Select all
proc setStimApical(){
for i=0, napical-1{
access apical[i]
for j= 0, apicalseg{ //For every point on apical dendrite (would be apicalseg+1 points)
position1 = j*(1/apicalseg) //This is the position of the point
r1 = sqrt((x+Lsoma/2)^2+(Lsoma/2+apicalsegL*j)^2) //Distance from the extracellular stimulation point to the point
//Calculate the corresponding extracellular voltage
ve_apical[j]=new Vector()
ve_apical[j]=I.c
ve_apical[j].div(4*PI*(1/rhoa)*r1) //multiply 10^-6 converts um (from r) to m (to cancel the m in rhoa); then divide 10^-6 to convert nA to mA
print ve_apical[j].max, " ", ve_apical[j].min
//Apply the extracellular voltage onto the corresponding point on the apical dendrite
ve_apical[j].play(&e_extracellular(position1),tvec)
}
}
}
Thank you!
-
- Site Admin
- Posts: 6384
- Joined: Wed May 18, 2005 4:50 pm
- Location: Yale University School of Medicine
- Contact:
Re: Apply an extracellular cathodic current
Code: Select all
tvec = new Vector(num)
tvec.indgen()
tvec.mul(dt)
gives you a vector with contents 0,dt...(num-1)*dt
BTW, you don't need to define PI--NEURON has it already.
Code: Select all
I = tvec.mul(2*PI*f*(180/PI))
What's the (180/PI) for?
tvec.mul(foo) replaces tvec's contents with foo*old_values, not at all what you intended. You probably meant
Code: Select all
I = tvec.c
I.mul(2*PI*f/1000)
// or the faster, but maybe more prone to human misreading,
// I = tvec.c.mul(2*PI*f/1000)
// which first copies tvec, then multiplies this copy by the scale factor
Code: Select all
for i=0, napical-1{
access apical[i] . . .
sectionname statement
For this case, the code becomes
Code: Select all
for i=0,napical-1 apical[i] {
. . . statements that pertain to apical[i] . . .
}
Code: Select all
for j= 0, apicalseg{ //For every point on apical dendrite (would be apicalseg+1 points)
position1 = j*(1/apicalseg) //This is the position of the point
. . . etc. . . .
The idiom is
Code: Select all
for (x,0) {
statements that pertain to the internal node at location x
}
Attempts to reference a range variable at 0 or 1 end up affecting that range variable at the nearest internal node. You'd end up with two Vectors competing to drive e_extracellular at 0.5/nseg, and another two competing to drive e_extracellular at (nseg - 0.5)/nseg. The result would depend on execution sequence, and would not necessarily reflect your intent.
Re: Apply an extracellular cathodic current
Thank you so much Ted for the quick reply!
I fixed I and tvec, and then I used "for (x,0)" for each section. The results that came out were very similar to what I did with calculating each position, but I'm sure that with this "for (x,0)", the method was more accurate. And indeed it's much easier.
Again, thank you Ted!
I fixed I and tvec, and then I used "for (x,0)" for each section. The results that came out were very similar to what I did with calculating each position, but I'm sure that with this "for (x,0)", the method was more accurate. And indeed it's much easier.
Again, thank you Ted!
-
- Site Admin
- Posts: 6384
- Joined: Wed May 18, 2005 4:50 pm
- Location: Yale University School of Medicine
- Contact:
Re: Apply an extracellular cathodic current
You're welcome. Did the simulation produce reasonable results or do they still look weird?