I want to use NEURON's Impedance class to calculate steady state transfer impedances from every dendritic or axonal compartment to the soma for a number of cell models. To make sure I'm doing this correctly, I wanted to generate plots identical to the histograms of transfer impedance in Fig. 4 of the 1996 Mainen and Sejnowski Nature paper using their cortical cell models on ModelDB. I believe for their paper they actually injected long current pulses in the soma and recording the membrane potential in every dendritic compartment to get each compartment's transfer impedance (Z=V/I), and then incremented the histogram bin for each impedance by that compartment's surface area. My approach has been to compute transfer(x) and area(x) in every dendritic compartment while setting loc() to the soma, which I think is the equivalent measurement, but so far both the impedance and area measurements appear to be different. I'm currently loading their cell models with extracellular to use for stimulation with extracellular fields, and I left the axon attached for these measurements, although when I deleted the initial segment and ran it I got the same results. I normally initialize to steady state, so I tried just initializing to the default v_init from the models and this also had no effect. Otherwise, I don't think I've made any other changes to the original models in the way I run them.
Here's my code:
Code: Select all
// For Transfer Impedance between soma and dendrites in Mainen cells (cellids 1-4)
proc measureImpDendMain() { localobj local_sect
local_sect = $o1
access local_sect.sec
strdef local_sect_name
local_sect_name = secname()
freq = $2
imp = new Impedance()
local_sect.sec imp.loc(0.5)
Zvec = new Vector() // transfer impedances (MOhm)
Avec = new Vector() // compartment surface areas (µm^2)
Dvec = new Vector() // compartment diameters (µm)
//forall if(issection("dend.*") && !issection(local_sect_name) ){
//forall if(issection("a.*") && !issection(local_sect_name) ){
forsec dendritic_only if(!issection(local_sect_name)) {
for(x,0) {
imp.compute(freq)
Zvec.append(imp.transfer(x))
//Avec.append(L/nseg)
Avec.append(area(x))
Dvec.append(diam(x))
}
}
}
And here's a comparison of their figure and my results:
My results
Mainen 1996 Fig. 4
Any suggestions for figuring this out would be appreciated