I'm encountering an issue obtaining the results I expect using the Vector.play method. As in Pettersen & Einevoll (Biophys J, 94, 784-802, 2008), considering some multi-compartment neuron with passive channels on all dendrites and a single active somatic compartment with somatic stimuli, the somatic membrane potential fluctuations will give rise to somatic membrane- and axial currents.
If the somatic potential obtained is played into a new, purely passive but otherwise similar model, the currents that arise should indeed be similar, any somatic membrane voltage fluctuation give rise to currents, the same currents would give equivalent membrane voltage fluctuations, which could be shown analytically for a ball-n-stick, I presume.
With the numerics in NEURON however, this is not the case. For reasonable dt's the outcome of the model appear rather low-pass filtered, evident executing the attached script, without modifying soma.cm.
I've read the documentation for Vector.play() but the means of action I need to take to get agreement is not clear to me. I've found that using ridiculously small dt's, or setting the soma.cm to some near infinite value (say 1E6) reduce the problem, but the traces will always lag behind the trace I played back in the first place.
Any explanation and solution of the issue would be very welcome indeed.
Espen.
Code: Select all
#!/usr/bin/env python
import pylab as pl
from neuron import h
def initialize():
h.finitialize(v_init)
h.fcurrent()
def integrate():
while h.t < tstop:
h.fadvance()
def go():
initialize()
integrate()
'''Main'''
pl.close('all')
h.dt = 0.05
tstop = 5
v_init = -65
'''Def some ball-n-stick with active soma, synaptic stimulus, record soma Vm'''
soma = h.Section()
dend = h.Section()
dend.connect(soma, 1, 0)
soma.L = 30
soma.nseg = 1
soma.diam = 30
dend.L = 1000
dend.nseg = 100
dend.diam = 3
for sec in h.allsec():
sec.insert('pas')
sec.Ra = 100
sec.cm = 1
sec.g_pas = 1./20000
sec.e_pas = -65
sec.insert('extracellular')
soma.insert('hh')
syn = h.AlphaSynapse(0.5, sec=soma)
syn.onset = 0.5
syn.gmax = 0.05
syn.e = 0
tvec = h.Vector()
tvec.record((h._ref_t))
vsoma_0 = h.Vector()
vsoma_0.record(soma(0.5)._ref_v)
isoma_0 = h.Vector()
isoma_0.record(soma(0.5)._ref_i_membrane)
go()
'''Define similar all-passive cell, playback of prev. obtained somapotential in soma,
should yield same somatic response and membrane currents'''
soma = h.Section()
dend = h.Section()
dend.connect(soma, 1, 0)
soma.L = 30
soma.nseg = 1
soma.diam = 30
dend.L = 1000
dend.nseg = 100
dend.diam = 3
for sec in h.allsec():
sec.insert('pas')
sec.Ra = 100
sec.cm = 1
sec.g_pas = 1./20000
sec.e_pas = -65
sec.insert('extracellular')
#soma.cm = 1E6
vsoma_0.play(soma(0.5)._ref_v, h.dt)
vsoma_1 = h.Vector()
vsoma_1.record(soma(0.5)._ref_v)
isoma_1 = h.Vector()
isoma_1.record(soma(0.5)._ref_i_membrane)
go()
'''Plottin'''
pl.figure(1)
pl.plot(tvec, vsoma_0, tvec, vsoma_1)
pl.axis('tight')
pl.xlabel('t')
pl.ylabel('soma potential')
pl.figure(2)
pl.plot(tvec, isoma_0, tvec, isoma_1)
pl.axis('tight')
pl.xlabel('t')
pl.ylabel('soma current')