I´m trying to find the passive membrane properties of detailled reconstruced neurons. The spines are modelled explicitly.
We use normal cells and cells of an epilepsy model. The epilepsy cells have half of the Rin and taum compared to normal cells.
When I´m trying my fitting routines on normal cells I can reproduce the already published values, but in the epileptic cells I am not able to fit the charging curves with feasible values. In the normal cells I find Ra ~ 300, cm ~1 and g_pas ~ 3e-5; in the others Ra ~ 600, cm ~ 2, g_pas ~ 7e-5.
I checked the surfaces very often, these are correct.
I tried then to distribute the passive leak conductance with a sigmoidal shape along the neuron. But know my fitting routine doesn´t work anymore. The program inserts negative conductances, then I get strange oscilliating charging curves and then the program stops. The error which is printed is really small, but the found curve doesn´t fit the experimental at all.
Here my questions:
- What about cm values larger than 1 (see Santos-Sacchi 2001)?
- Is it possible that I don´t find a passive model, because the currents are not passive (which I checked, I can superimpose all hyper- and depolarized curves)?
- Is my routine working right?
Would be great to get some answers to my questions, thanks in advance, Micha
Here my code:
Code: Select all
func error() {local i,k, dendnr, spinenr, d, error localobj vec, SaveVoltage, datafile, voltages
vec = new Vector()
vec.record(&soma.v(.5))
SaveVoltage = new File()
SaveVoltage.wopen("254a_Voltage.dat") //open file for writing
dt = 1
CC.del = 0
CC.dur = 100
CC.amp = 0.01
tstop = 100
forall {
insert pas
Ra = 200 + $&2[1] * 10
cm = 1 + $&2[2] * 0.01
e_pas = 0
}
access soma
g_pas = $&2[4]
distance()
dendnr = 0
for dendnr = 0, 41 {
access apic[dendnr]
k = 0
for k = 1, nseg {
apicloc = ((2*k-1)/(2*nseg))
d=distance(apicloc)
g_pas(apicloc) = $&2[4] + (($&2[5] - $&2[4])/(1+exp(($&2[3]-d)/($&2[0]))))
}
}
spinenr = 0
for spinenr = 0, 1218 {
access spines[spinenr]
d=distance(0.5)
g_pas(0.5) = $&2[4] + (($&2[5] - $&2[4])/(1+exp(($&2[3]-d)/($&2[0]))))
access neck[spinenr]
g_pas(0.5) = $&2[4] + (($&2[5] - $&2[4])/(1+exp(($&2[3]-d)/($&2[0]))))
}
access soma
init()
run()
vec.printf(SaveVoltage) //writes values of the vector vec to file SaveVoltage
SaveVoltage.close()
voltages = new Vector()
datafile = new File() //original dataset; voltages, dt = 20 kHz
datafile.ropen("254a_long_pulse_average.txt")
voltages.scanf(datafile)
datafile.close()
start_voltage_exp = voltages.x[2000]
end_file_exp = voltages.size()
for i = 0, end_file_exp-1 {
voltages.x[i] = ((voltages.x[i] - start_voltage_exp))//*(1000)//normalizing data; don´t forget faktors for mv and neg currents!!!!!!
}
error = 0
for i= 0, 100 -1
error += (voltages.x[20*i+2000]-vec.x[i])*(voltages.x[20*i+2000]-vec.x[i]) //factors due to samplerate
}
return error
}
n_p = 6
double params[n_p]
proc fit() {local n_p
params[0] = -1.25687
params[1] = 18.8636
params[2] = 50.5069
params[3] = 81.5979
params[4] = 1e-5
params[5] = 10e-5
attr_praxis(0.001,0.1,3)
fit_praxis(n_p, "error", ¶ms[0])
}