// This file contains procedures used to set the membrane properties
proc init_params() {
// Initialize user-defined membrane parameters
//passive membrane parameters determined by fitting Cs data
//nonuniform membrane resistance
celsius = 35
Rn = 50 // nodal resistivity
Vleak = -50 // leak reversal in Control
Vrest = -60 // resting potential -63 in control
target = 59.42 // input resistance target in CsCl
global_ra = 117.15 // axial resistance
rmsoma = 2.8201e+05 // specific membrane resistance at soma
rmend = 33938 // specific membrane resistance at distal dendrites
rmhalfdis = 186.04 // inflection point of sigmoidal membrane resistance curve
rmsteep = 31.681 // steepness of sigmoidal membrane resistance curve
Vrest = -63 // resting potential
Cm = 1.5657 // specific capacitance
// nonuniform H-conductance distribution
minq = 0.038794 // minimum H-conductance
maxq = 20 // maximum H-conductance
qhalfdis = 316.65 // inflection point of sigmoidal H-conductance curve
qsteep = 20.001 // steepness of sigmoidal H-conductance curve
erevh_h = -25 // These paramaters govern the reversal potential and temperature dependence of the H-conductance (see mod file)
zeta_h = 10.917
a0_h = 0.00028504
qten_h = 4.5
// Active conductance values
gkap = 0.1 //Proximal A-type conductance
gkad = 0.1 //Distal A-type conductance
dprox = 100 //Distance at which A-type switches from proximal to distal mod file
dlimit = 450 //Cutoff for A-type conductance increase
dslope = 0.005 //Rate of increase of A-type conductance
gkdr = 0.1 //KDR conductance
gkdraxon = 0.05 //Axonal KDR conductance
// User-defined properties for Na current
gnabar = 0.05 // Total Na conductance
gnanode = 1 // Na conducance at node
nalimit = 275 // cut-off limit for increase of slow-type sodium conductance proportion
distslowfrac = 1 // fraction of slow inactivating-channels in distal dendrites
isegfactor = 10
isegfrac = 0.8
basalfrac=0.6 // fraction of somatic conductance in basal dendrites (as compared to apical)
}
// Insert and initialize passive membrane properties
proc insert_pass() {
forsec all_dendrites {
insert pas
Ra = global_ra
e_pas = Vleak
}
forall {insert spines scale_spines = 1.0}
forsec all_dendrites { insert spines scale_spines=1.0 }
forsec no_spines { scale_spines = 1.0 }
forsec basals { scale_spines = 2.7 }
forsec med_spines_rad { scale_spines = 1.2 }
forsec max_spines_rad { scale_spines = 1.6 }
forsec thin_rad { scale_spines = 2.6 }
forsec med_spines_LM { scale_spines = 1.1 }
forsec thin_LM { scale_spines = 1.2 }
init_pass(Cm)
}
// Insert and initialize H-conductance
proc insert_h() {
forsec all_dendrites {
insert h
gbar_h = 0
}
init_h(a0_h*1000)
}
// Insert and initialize A-type K conductance
proc insert_ka() {
forall {
insert kap
insert kad
gbar_kap = 0
gbar_kad = 0
}
init_ka()
}
// Insert and initialize KDR-conductance
proc insert_kdr() {
forall {
insert kdr
gbar_kdr = 0
}
init_kdr()
}
// Insert and initialize Na-conductance
proc insert_na() {
forall {
insert naslow
insert nafast
}
init_na()
}
// Initialize parameters for nonuniform Rm
proc init_pass() {
// sigmoidal decrease in Rm from rmsoma to rmend
// rmsoma and rmend, and rmhalfdis and rmsteep are set in init_params
// function applies to basal dendrites also
Cm = $1
soma.sec distance()
forsec all_dendrites {
for (x) {
dis = distance(x)
rmpoint = rmend + (rmsoma - rmend)/(1 + exp((dis - rmhalfdis)/rmsteep))
g_pas(x) = 1/(rmpoint/scale_spines)
}
cm = Cm * scale_spines
Ra = global_ra
}
hill {
cm = Cm
for (x) {
dis = distance(x)
rmpoint = rmend + (rmsoma - rmend)/(1 + exp((dis - rmhalfdis)/rmsteep))
g_pas(x) = 1/(rmpoint/scale_spines)
}
}
iseg {
cm = Cm
for (x) {
dis = distance(x)
rmpoint = rmend + (rmsoma - rmend)/(1 + exp((dis - rmhalfdis)/rmsteep))
g_pas(x) = 1/(rmpoint/scale_spines)
}
}
for i = 0,2 inode[i] {
cm = Cm
for (x) {
dis = distance(x)
rmpoint = rmend + (rmsoma - rmend)/(1 + exp((dis - rmhalfdis)/rmsteep))
g_pas(x) = 1/(rmpoint/scale_spines)
}
}
for i = 0,1 node[i] {
cm = Cm
for (x) {
dis = distance(x)
rmpoint = rmend + (rmsoma - rmend)/(1 + exp((dis - rmhalfdis)/rmsteep))
g_pas(x) = 1/(rmpoint/scale_spines)
}
}
}
// Initialize nonuniform H conductance
proc init_h() {
// scale up sag conductance as a sigmoidal function of distance from the soma
// q = minq+(maxq-minq)/(1+exp((-dis-qhalfdis)/qsteep))
// basals are set to the same value as the soma
// set minq, maxq, and qhalfdis and qsteep in init_params
a0_h = $1/1000
soma.sec distance()
forsec all_dendrites {
for (x) {
dis = distance(x)
hpoint = minq + (maxq - minq)/(1 + exp(-(dis - qhalfdis)/qsteep))
gbar_h(x) = hpoint * scale_spines*(1 - hblock)
}
}
soma.sec distance()
forsec basals {
for (x) {
gbar_h(x) = minq * scale_spines * (1 - hblock)
}
}
}
// Initialize parameters for Kdr channels
proc init_kdr() {
forall {
gbar_kdr = gkdr * (1 - kdrblock)
}
hill {
gbar_kdr = gkdraxon * (1 - kablock)
}
iseg {
gbar_kdr = gkdraxon * (1 - kablock)
}
for i = 0,2 inode[i] {
gbar_kdr = gkdraxon * (1 - kablock)
}
for i = 0,1 node[i] {
gbar_kdr = gkdraxon * 0.2 * (1 - kablock)
}
}
// Initialize parameters for Na channels
proc init_na() {
nalimit = 300
soma.sec distance()
somaA {
gbar_nafast = gnabar * (1 - nablock)
gbar_naslow = 0
}
forsec new_basals {
gbar_nafast = gnabar * (1 - nablock) * basalfrac
gbar_naslow = 0
}
forsec apicals {
for (x) {
xdist = distance(x)
if (xdist>nalimit) {
xdist=nalimit
}
gbar_nafast(x)=gnabar*(1-(distslowfrac*(xdist/nalimit)))
gbar_naslow(x)=gnabar-gbar_nafast(x)
}
}
hill {
gbar_nafast= gnabar * (1 - nablock)
gbar_naslow = 0
}
iseg {
for (x) {
gbar_nafast(x) = 0
if (x < isegfrac) {
gbar_nafast(x) = gnabar * (1 - nablock)
} else {
gbar_nafast(x) = isegfactor * gnabar * (1 - nablock)
}
}
}
for i = 0,2 inode[i] {
gbar_nafast = 0
}
for i = 0,1 node[i] {
gbar_nafast = gnanode * (1 - nablock)
}
}
// Initialize parameters for A-type K channels
proc init_ka() {
soma.sec distance()
somaA {
gbar_kap = gkap * (1 - kablock)
}
forsec new_basals {
gbar_kap = gkap * (1 - kablock)
}
forsec apicals {
for (x) {
xdist = distance(x)
if (xdist > dlimit) {
xdist = dlimit
}
if (x!=1) {
gbar_kap(x) = 0
gbar_kad(x) = 0
if (xdist > dprox) {
gbar_kad(x) = gkad * (1 + xdist * dslope) * (1 - kablock)
} else {
gbar_kap(x) = gkap * (1 + xdist * dslope) * (1 - kablock)
}
}
}
}
}
proc reinit_props() {
init_pass(Cm)
init_h(a0_h*1000)
init_kdr()
init_ka()
init_na()
}