// --------------------------------------------------------------
// Redefinition of the standard hoc procedure for initialization
// that allows for pre-equilibration of currents and translation
// of "rho" and "kappa" parameters into proper dendrite L and Ra
// --------------------------------------------------------------
// Taken from Zach Mainen's init routine - finds the initial RMP
// at the "steady state" with zero current
// 1/25/99 P. Manis
// Note that this is no longer a "redefinition".
proc findrmp() {
st_amp_save = istim.amp1 // preserve stimulus amplitude
istim.amp1 = 0 // turn stimulus off
old_el = el_pyr
el_pyr = $1 // try a new leak value and get the v...
t = -1e5 // back up in time
finitialize(v_init) // initialize
fcurrent()
temp_dt = dt
dt = 200 // take a few very large steps (allow Ih to settle)
for i=0,50 fadvance() // to allow currents to reach steady state
t = 0 // restore t,dt
dt = temp_dt
finitialize(v) // initialize again
fcurrent()
istim.amp1 = st_amp_save // restore stimulus
el_pyr = old_el // restore old leak
}
// adjust leak to set cell at rmp as specified
// 2/9/99 P. Manis
// Uses current balance eq'n (per NEURON manual), better choice than interative method
proc adjleak() {
finitialize($1) // sets v to target rmp, init's state variables to inf values
fcurrent() // set all assigned variables consistent with states
// use current balance: 0 = ina + ik + ih + ica + gl_pyr*(v - el_pyr)
el_pyr = (ina + ik + ih + gl_pyr*v)/gl_pyr
finitialize($1)
fcurrent() // recalculate currents (il_hh)
}
// set Rin at V to a particular value by adjusting gl_pyr
// requires 2 input values: v and Rin (in Mohm!)
// 2/9/99 P. Manis
proc setrin() {
ar=L*1E-4*diam*1E-4*3.14159 /* area of soma in cm2 */
finitialize($1)
fcurrent()
gtarget = 1/($2*ar*1e6) // make g from Rin, but assume input uints are Mohm
gtest = gtarget - (gna_pyr + gk_pyr + gkif_pyr + gkis_pyr + gh_pyr)
if(gtest < 0) {
printf("setRin: R=%7.1f requires negative gl_pyr (of %7.1f)\n", $2, 1/gtest)
return
}
gl_pyr = gtest
// verify by calling the standard routine
findRin($1)
}
// compute Rin and Tau_m by summing all conductances at rest and inverting result
// Tau_m is calculated as Rin*Cm, assuming 1 uF/cm2 (could specify cm to get actual value?)
//
proc findRin() {
finitialize($1) /* make sure parameters are set for the new voltage */
fcurrent()
gin = gna_pyr + gk_pyr + gkif_pyr + gkis_pyr + gl_pyr + gh_pyr
ar=L*1E-4*diam*1E-4*3.14159 /* area of soma in cm2 */
rin = 1/(gin*ar)
cm_soma = ar*1E-6 /* in farads, assuming 1 uF/cm2 */
taum = rin * cm_soma * 1E3 /* convert to msec */
}