Setting Resting Membrane Potential

Anything that doesn't fit elsewhere.
Post Reply
shailesh
Posts: 104
Joined: Thu Mar 10, 2011 12:11 am

Setting Resting Membrane Potential

Post by shailesh »

Hi,

I have recently begun working with active ion channels in my model and wanted some help in setting the resting membrane potential.

I am modeling a myelinated axon. A quick summary:
> Soma : pas and hh mechanisms
> Nodes: pas and hh mechanisms
> Internodes/Myelins: only pas mechanism

I require to set the resting membrane potential to -70mV. In all my prior 'passive' models, I used to get this done by simply setting:

Code: Select all

e_pas = -70
v_init = -70
Here in this model, which has active channels (H-H), this does not seem to suffice - as I assume one should expect. I see the membrane potential starting off at -70 (owing to v_init) for all sections and then drifting towards -65mV, to different extents in various sections. I believe this is owing to the default characteristics of the H-H mechanism.

I understand that RMP is a result of other factors (channels, conductance, reversal potentials etc) and merely imposing a value to it might be meaningless. Could you guide me on how one should go about in setting the RMP when active channels are involved.

Thanks in advance - and please excuse if this topic has already been discussed elsewhere. Do point me to any relevant links, if available.

Thanks,
Shailesh Appukuttan
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Setting Resting Membrane Potential

Post by ted »

First a question for you:
hh comes with its own leak current which has constant linear conductance gl_hh. What is to be gained by including pas in the sections that have hh? pas is just another linear leak current.
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Setting Resting Membrane Potential

Post by ted »

The question of whether something is to be gained by adding pas to a section that contains hh remains open.

Returning to your original question--

Initialization is an important topic that is too often neglected. Models that have nonuniform membrane properties pose a special challenge. First, one must decide whether to
1. allow nonuniform membrane potential in the resting state (but what should the potential be at each point in the model?)
or instead to
2. somehow force membrane potential in the resting state to have the same value everywhere (but how does one make that happen?).

The choice between these two alternatives may be guided by experimental observation (is there evidence that membrane potential is uniform or nonuniform at rest in the real cell?) or principle (if the issue is one of excitability or spike propagation, maybe it makes sense for all sodium channels to be in the same state of inactivation, and all potassium channels to be in the same state of activation, regardless of where they are located).

One way to ensure that resting membrane potential is uniform everywhere is to insert a current source into each compartment, then initialize all voltage-gated channels to some initial membrane potential v_init, and finally adjust the current delivered by each current source so that it cancels out the local ionic membrane current in each compartment. Since a current source has infinite source impedance, it does not affect the model's Jacobian because it introduces no shunt conductance, and consequently it does not alter system dynamics.

Source code for a density mechanism that delivers a constent current, and a custom init() procedure that adjusts the current in a single compartment model, is provided in Chapter 8 of The NEURON Book. If you don't have that book, get this preprint
http://www.neuron.yale.edu/ftp/ted/book ... xedref.pdf
(may have some typos, so be careful about its contents).

Since your model has multiple compartments, and not all sections have the same channels, you'll need a different proc init(). This one should work

Code: Select all

proc init() {
  finitialize(v_init)
  forall {
    if (ismembrane("hh")) ic_constant = -(ina + ik + il_hh)
    if (ismembrane("pas")) ic_constant = -i_pas
  }
  if (cvode.active()) {
    cvode.re_init()
  } else {
    fcurrent()
  } frecord_init()
}
assuming that
1. the "constant" mechanism has been inserted into each section
and
2. each section contains either pas or hh but not both
and
3. the code that specifies the custom proc init is executed _after_ nrngui.hoc (or stdgui.hoc) has been loaded and all other model setup code has been executed.
shailesh
Posts: 104
Joined: Thu Mar 10, 2011 12:11 am

Re: Setting Resting Membrane Potential

Post by shailesh »

Regarding your question: My mistake! I had gone about modeling my own hh mechanism (using Example 9.4 from the Neuron book and hh.mod from the library) more for nmodl practice than anything else. There I had ignored the leakage current and hence my reason for adding pas in addition to my 'modified hh' mechanism. I am unsure of any potential pitfalls in the above approach (do let me know your thoughts), but had anyways returned to using the library hh mechanism. So yes, my mistake - the sections should either have pas or hh. Can't think of a reason where having both would serve much purpose - being linear conductances, they could always be combined into a single entity.

My intention was to enforce a constant RMP across all sections. Thanks for the detailed suggestion! I will have a go with it. I might have one more question for you here, but it would be better to hold it off while I try this out.

Sorry for the delayed response (I was traveling quite a bit over the last few days). Once again, Thank you Ted for taking time out to attend to our queries.

Cheers,
Shailesh Appukuttan
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Setting Resting Membrane Potential

Post by ted »

Ah, the ambiguity of human language. I thought you were using the built-in hh mechanism.

"Initialization to a particular resting potential" can be tricky if the sections in a model cell have different collections of ion channel mechanisms. The problem is that the current balance equation may be different for different sections. Your particular situation is relatively easy because there are only two kinds of sections: those that have only pas, and those that have pas plus your own Hodgkin-Huxley mechanism. Assuming that your Hodgkin-Huxley mechanism is called myhh, a convenient proc init would be

Code: Select all

proc init() {
  finitialize(v_init)
  forall {
    if (ismembrane("myhh")) {
      ic_constant = -(ina + ik + il_hh)
    } else {
      ic_constant = -i_pas
    }
  }
  if (cvode.active()) {
    cvode.re_init()
  } else {
    fcurrent()
  } frecord_init()
}
A more general approach would be to group sections into sets (SectionLists), where each set has the same collection of ion channels. Then you can iterate over the SectionLists and apply the appropriate current balance equation for each set.

Example: suppose some sections have pas and kh, others have pas and kdr and nap, and yet others have pas, cat, naf and kdr. Your model setup code would be organized like so:

Code: Select all

// set up topology
  // create statements
  . . .
  // connect statements
  . . .
// specify geometry
  // assign L and diam or use pt3dadd statements
  . . .
// specify biophysics
  . . . statements that specify cm and Ra . . .
  objref haskh, haskdr, hascat
  haskh = new SectionList()
  . . . statements that append sections with kh to the haskh SectionList
  . . . e.g. dend1 haskh.append()
  forsec haskh {
    insert pas
    insert kh
  }
  . . . statements that append sections with kdr to haskdr
  forsec haskdr {
    insert pas
    insert kdr
    insert nap
  }
  . . . statements that append sections with cat to hascat
  forsec hascat {
    insert pas
    insert cat
    insert naf
    insert kdr
  }
  forall insert constant
Then your custom proc init() would be

Code: Select all

proc init() {
  finitialize(v_init)
  forsec haskh ic_constant = -(i_pas + i_kh)
  forsec haskdr ic_constant = -(i_pas + i_kdr + i_nap)
  forsec hascat ic_constant = -(i_pas + i_cat + i_naf + i_kdr)
  if (cvode.active()) {
    cvode.re_init()
  } else {
    fcurrent()
  } frecord_init()
}
(this assumes that each of your mechanisms has a RANGE variable called i).
shailesh
Posts: 104
Joined: Thu Mar 10, 2011 12:11 am

Re: Setting Resting Membrane Potential

Post by shailesh »

Hi Ted,

Thanks! The constant current source worked wonderfully well for realizing a specific resting membrane potential. I did test it out for perturbations (using IClamp) and it did manage to recover to RMP. But in this process I realized I had one major problem ahead (lacked foresight in this case!). I require my model to operate at 37C temperature. And 'hh' won't suffice in that case (read your comments here - http://www.neuron.yale.edu/phpBB/viewto ... ture#p4907). So will first have a try on ModelDB.

Meanwhile, I might have spotted a small correction in the documentation. For 'xpanel', one of the formats is specified as:

Code: Select all

xpanel(slider, x, y)
I tried that and got some error (arg out of range), and believe it should actually be:

Code: Select all

xpanel(x, y, slider)
That worked for me.

And, one last thing... to define the membrane resistance, we set g_pas = 1/Rm for sections where 'pas' mechanism is present. In case of sections with 'hh', is it simply be gl_hh = 1/Rm?

Thanks,
Shailesh Appukuttan
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Setting Resting Membrane Potential

Post by ted »

shailesh wrote:I require my model to operate at 37C temperature. And 'hh' won't suffice in that case
Yes, that's also too warm for Loligo pealei.
I might have spotted a small correction in the documentation.
Thanks, we'll fix that.
to define the membrane resistance, we set g_pas = 1/Rm for sections where 'pas' mechanism is present. In case of sections with 'hh', is it simply be gl_hh = 1/Rm?
Good question. You have to take the gating state of all ion channels into account. If you were to actually measure membrane resistance, you'd apply a small current and observe the resulting change of membrane potential. This would reflect 1/(total conductance of all ion channels) at the mean potential at which you made the experimental observations. At -65 mV and 6.3 degC, HH sodium channels are almost completely closed, but just enough HH potassium channels are open for potassium conductance density to be ~3.7e-4 S/cm2, slightly larger than leak conductance density which is 3 e-4 S/cm2. So specific membrane resistance (in ohm cm2) would be a bit less than 0.5/gl_hh.
shailesh
Posts: 104
Joined: Thu Mar 10, 2011 12:11 am

Re: Setting Resting Membrane Potential

Post by shailesh »

Sorry for bombarding you with posts, but here is one more:
I am not sure I followed you entirely here:
If you were to actually measure membrane resistance, you'd apply a small current and observe the resulting change of membrane potential. This would reflect 1/(total conductance of all ion channels) at the mean potential at which you made the experimental observations.
Am I right in interpreting it as:
> We have a cell, say at RMP = -65 mV
> We inject a small current (I suppose hyperpolarizing would be better so as not involve active channels) i = -0.1 nA
> The cell hyperpolarizes and attains a steady membrane potential of -70mV (for simplicity); thus change in Vm = 5mV
?? 5mV -> 1/(total conductance of all ion channels)... How do we get this relation?
How does this differ from measurement of input resistance (which is a function of both Rm and Ri)?
Also the value calculated would be Rm at -65mV or -70mV (with respect to above values)? I suppose that is why you must have suggested a "small current", so that the change in Vm is less.

Further...
If I had a cell with only HH channels and I wanted to set:
1> Membrane Resistance = 10000 ohm cm2 (say)
2> Resting Membrane Potential = -50 mV (say)

Could I approach this as follows:
1> set gl_hh = 0.5/10000 (approximation)
2> use constant.mod with v_init = -50mV (changing gl_hh would also cause a change in RMP)

Or is there more to it?
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Setting Resting Membrane Potential

Post by ted »

shailesh wrote:I am not sure I followed you entirely here:
If you were to actually measure membrane resistance, you'd apply a small current and observe the resulting change of membrane potential. This would reflect 1/(total conductance of all ion channels) at the mean potential at which you made the experimental observations.
Let me first qualify my original statement by saying that I was considering a (mostly theoretical) experimental situation in which voltage control is perfect and all membrane current is captured by a recording device.

The current injection needs to be small enough that the resulting change of membrane potential does not significantly affect gating variables. Then Rm at the particular potential at which the measurement was made = Di * Dv (read the Ds as upper case delta) is the slope resistance of the membrane.
How does this differ from measurement of input resistance (which is a function of both Rm and Ri)?
The two are identical if a cell is electrically compact. For a cell with significant electrical extent, they're different. Ri also depends on the detailed geometry of the cell.
If I had a cell with only HH channels and I wanted to set:
You mean "If you had a model cell . . . "
1> Membrane Resistance = 10000 ohm cm2 (say)
2> Resting Membrane Potential = -50 mV (say)
You have the hh equations and can calculate the gating state of the na and k channels at a steady potential of -50 mV. From that and your assumed ion channel densities you can calculate the total ionic conductance. If you want NEURON to do this for you, make a single compartment model with hh and execute finitialize(-50), then print the values of gna_hh, gk_hh, and gl_hh. If the sum isn't what you want, you'll have to decide which channel densities to adjust and by how much. In principle you could write a bit of code that makes the adjustments, but you first need to decide what rules you want the code to enforce.
shailesh
Posts: 104
Joined: Thu Mar 10, 2011 12:11 am

Re: Setting Resting Membrane Potential

Post by shailesh »

Then Rm at the particular potential at which the measurement was made = Di * Dv (read the Ds as upper case delta) is the slope resistance of the membrane.
I suppose this is basically equivalent to the slope of an I-V curve - the way we determine input resistance? In that case, wouldn't it be Rin = 1/slope = 1 / (Di / Dv) ?

I understood the second part:
If you want NEURON to do this for you, make a single compartment model with hh and execute finitialize(-50), then print the values of gna_hh, gk_hh, and gl_hh. If the sum isn't what you want, you'll have to decide which channel densities to adjust and by how much.
I was testing out this method for a model cell, with only pas mechanism (so as to keep things simple with no gating variables and easily verifiable):
> Cell was made electrically compact (I believe) with following parameters:

Code: Select all

cell {
	L = 10
	diam = 10

	Ra = 181 // I suppose this wont make a difference with nseg = 1
	cm = 1

	insert pas
	g_pas = 1 / 138000
	e_pas = -50

	nseg=1
}
- So basically we should get the value of Rm = 138000 after the calculation
> Current injected of 0.01 nA and long duration to attain steady state (being a passive system, current magnitudes should not matter)
> Simulation gave Dv = 389.3 + 50 = 439.3
> When electrically compact, Rm = Rin = 1/slope = 1 / (Di / Dv) = 1 / (0.01/439.3) = 43930
> Or, equivalently, Rin = Vmax/i = 439.3/0.01 = 43930

Why this discrepancy? Or did I interpret wrongly?
Calculating Rm via the time constant of rise of electrotonic potential, i.e. Taum = Rm * Cm does give the exact correct value of Rm. But sadly this method does not work in the presence of HH, due to its active channel properties - even for hyperpolarizing currents.
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Setting Resting Membrane Potential

Post by ted »

shailesh wrote:I suppose this is basically equivalent to the slope of an I-V curve - the way we determine input resistance? In that case, wouldn't it be Rin = 1/slope = 1 / (Di / Dv) ?
Sorry, I ususally think in terms of conductance and meant to type Dv/Di.
Cell was made electrically compact (I believe) with following parameters:

Code: Select all

cell {
	L = 10
	diam = 10
We call this the "tomato can morphology." Electrically compact, and has same surface area as a sphere with same diameter.

Code: Select all

	Ra = 181 // I suppose this wont make a difference with nseg = 1
True.

There are two errors in your calculation.
When electrically compact, Rm = Rin
Nope. Rin is the input resistance of the model cell and is in units of resistance. Rm is the specific resistance and is in units of resistance*area, i.e. it is the resistance of a patch of membrane with unit surface area. For an electrically compact cell, Rm = Rin * surface area in cm2. The surface area of the model is 100*PI um2. Also, remember that 1 cm2 = 1e8 um2.
= 1/slope = 1 / (Di / Dv) = 1 / (0.01/439.3) = 43930
But what are the units? mV/nA = megohm, not ohm
shailesh
Posts: 104
Joined: Thu Mar 10, 2011 12:11 am

Re: Setting Resting Membrane Potential

Post by shailesh »

This clinched it for me:
For an electrically compact cell, Rm = Rin * surface area in cm2.
Hadn't thought of that.

Just to complete the above discussion:
Rin = 43930 Mohm = 43930* 1e6 ohm
So, Rm = Rin * surfacearea = 43930*1e6 ohm * 100*PI*1e-8 = 138065 ohm.cm2
which is very close to out expected value of Rm = 138000 ohm.cm2

So yepp that works! Thanks a lot :)
shailesh
Posts: 104
Joined: Thu Mar 10, 2011 12:11 am

Re: Setting Resting Membrane Potential

Post by shailesh »

Had a query regarding the above approach for setting the resting membrane potential by injecting a constant current...
... I was wondering about its physiological meaning. Doesn't it reflect a constant current being injected externally... shouldn't a cell (ideally) be able to maintain its RMP using only its composition of ionic channels and other cellular mechanisms?

If I try to answer this myself, I would say that since the set of ion channels that we have equipped the 'model' cell with has proven to be insufficient to maintain the required RMP, the constant current basically reflects the missing set of channels (and other cellular mechanisms) that allows the 'real' cell to maintain the observed RMP. Is that a valid justification?
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Setting Resting Membrane Potential

Post by ted »

shailesh wrote:Had a query regarding the above approach for setting the resting membrane potential by injecting a constant current...
... I was wondering about its physiological meaning.
Don't try to read more into it than there is. It's just the modeler's (truthful) admission of lack of complete knowledge and a stratagem that allows one to set up a computational model that is useful under the assumption that membrane potential lies within a particular range of plausible values.
shailesh
Posts: 104
Joined: Thu Mar 10, 2011 12:11 am

Re: Setting Resting Membrane Potential

Post by shailesh »

Thanks for confirming that... an year back when I employed this approach I confess that I did not give it much thought and didn't think of it as a limitation in my model that I could first try working out a solution for by tweaking my channel properties... and if I didn't succeed then resort to such a strategy. Only recently when explaining the approach to others did I realize this.
Post Reply