// Richy
Ri = 300 // ohm cm
Cm = 0.96857 // uf/cm2
//Rm = 59156 // ohm cm2
Rmp = 5.9156 // ohm cm2
E_L = -73.588 // mV
g_KL = 9.9005e-10 // mho/cm2
maxd = 308.919 // max distance on dendrites
if (cell == 2) {
// Starfish
Ri = 300 // ohm cm
Cm = 0.9 // uf/cm2
//Rm = 39037.7 // ohm cm2
Rmp = 3.90377 // ohm cm2
E_L = -73.8424 // mV
g_KL = 1.00115e-09 // mho/cm2
maxd = 193.142 // max distance on dendrites
}
// Report on the dendritic Ih distribution we're assigning.
if (VERBOSE) {
if (name_declared("dis")==5) {
if (dis == 0) {
printf("*** ASSIGNING LINEAR Ih DISTRIBUTION ***\n")
} else if (dis == 1) {
printf("*** ASSIGNING SIGMOIDAL Ih DISTRIBUTION ***\n")
} else if (dis == 2) {
printf("*** ASSIGNING EXPONENTIAL Ih DISTRIBUTION ***\n")
}
} else {
printf("*** ASSIGNING LINEAR Ih DISTRIBUTION ***\n")
}
}
// Provide gkhbar_scale as an argument, but don't require it. sf = scale factor. Needed so that the arg has a
// different name than the actual variable used. A messy solution, however.
gkhbar_scale = 1
if (name_declared("gkhbar_sf") == 5) {
gkhbar_scale = gkhbar_sf
}
if (VERBOSE) {
printf("*** WE HAVE gkhbar_scale %g\n", gkhbar_scale)
}
soma[0] distance()
NOT_YET_DISPLAYED = 1
proc init() {
// optimizer adjusts Ri, Cm, Rm, but NEURON uses Ra, cm, g_pas
//holdclamp.amp = -0.0011-(h*10^4/0.01)*(0.0018599+arbOff)
max_distance = 0
min_gkhbar = h
strdef min_gkhbar_secname
min_gkhbar_secname = secname()
max_gkhbar_x = 0
max_gkhbar = 0
strdef max_gkhbar_secname
max_gkhbar_secname = secname()
max_gkhbar_x = 0
Gh = h * gkhbar_scale
Rm = Rmp * 10^4
forall {
Ra = Ri
cm = Cm
if (issection("axon.*")) {
g_passaxon= 1/Rm
erev_passaxon = E_L
gkl_Kleakaxon = g_KL
} else if (issection("soma.*")) {
gkhbar_Ih = Gh
t1_Ih = t1
t2_Ih = t2
t3_Ih = t3
t4_Ih = t4
t5_Ih = t5
t6_Ih = t6
t7_Ih = t7
t8_Ih = t8
g_passsd = 1/Rm
erev_passsd = E_L
gkl_Kleaksd = g_KL
} else {
// dendrites
g_passsd = 1/Rm
erev_passsd = E_L
gkl_Kleaksd = g_KL
// Measure this here, before we get into hD issues.
if (distance(x) > max_distance) {
max_distance = distance(x)
}
}
if (issection("dend.*") && hD == 1) {
if (DEBUG) { printf("section %s nseg %d\n", secname(), nseg) }
//gkhbar_Ih = h // this is the default
for (x) {
if (DEBUG) {
printf("in x %g with nseg %g\n", x, nseg)
printf("doing something in %g\n", x)
}
// By default just assign dendIh_growth in a linear distribution
// Only set sigmoidal or exponential if specified. (Or linear if dis==0).
// This way, if uniform distribution is required, only need to set dendIh_growth to zero without
// also needing to set ``dis''.
if (name_declared("dis")==5) {
if (dis == 0) {
// linear
gkhbar_Ih(x) = (distance(x) * dendIh_growth/maxd + 1) * Gh
} else if (dis == 1) {
// sigmoidal
gkhbar_Ih(x) = Gh * ( 1 +(dendIh_growth/(1 + exp((maxd/2 - distance(x))/20))) )
} else if (dis == 2) {
// exponential
gkhbar_Ih(x) = Gh * exp(dendIh_growth*distance(x)/maxd)
}
} else {
// linear
gkhbar_Ih(x) = (distance(x) * dendIh_growth/maxd + 1) * Gh
}
// CRUCIAL: DO NOT ALLOW NEGATIVE CONDUCTANCE! (from -ve dendIh_growth)
if (gkhbar_Ih(x) < 0) { gkhbar_Ih(x) = 0 }
if (VERBOSE && NOT_YET_DISPLAYED) { printf("*** GIVING gkhbar_Ih %g to %s.v(%g) at distance %g \n", gkhbar_Ih(x), secname(), x, distance(x)) }
if (distance(x) > max_distance) {
max_distance = distance(x)
}
if (gkhbar_Ih(x) < min_gkhbar) {
min_gkhbar = gkhbar_Ih(x)
min_gkhbar_secname = secname()
min_gkhbar_x = x
}
if (gkhbar_Ih(x) > max_gkhbar) {
max_gkhbar = gkhbar_Ih(x)
max_gkhbar_secname = secname()
min_gkhbar_x = x
}
}
t1_Ih = t1
t2_Ih = t2
t3_Ih = t3
t4_Ih = t4
t5_Ih = t5
t6_Ih = t6
t7_Ih = t7
t8_Ih = t8
}
}
finitialize(v_init)
if (cvode.active()) {
cvode.re_init()
} else {
fcurrent()
}
frecord_init()
if (DEBUG && NOT_YET_DISPLAYED) {
printf("*** MAX DISTANCE IS %g\n", max_distance)
printf("*** MIN gkhbar = %g at %s.v(%g)\n", min_gkhbar, min_gkhbar_secname, min_gkhbar_x)
printf("*** MAX gkhbar = %g at %s.v(%g)\n", max_gkhbar, max_gkhbar_secname, max_gkhbar_x)
printf("*** TOTAL gkhbar = %g\n", gkhbar_tot)
}
if (VERBOSE) {
NOT_YET_DISPLAYED = 0
}
}
printf("*** [passive_props] SET CELL %d PROPS to Ri %g Cm %g Rm %g E_L %g g_KL %g\n", cell, Ri, Cm, Rm, E_L, g_KL)