begintemplate pyramidalCA1
public init, topol, basic_shape, subsets, geom, biophys, geom_nseg, biophys_inhomo
public synlist, x, y, z, position, x_index, y_index, rotateOY
public connect2targetSoma, connect2targetCollat, connect2targetSomaSpikelet
public soma, basal, shaft, apical, ais, axon, collat, axonal, NoR
public all, level1, level2, level3, level4, level5, level6
public level7, level8, level9, level10, level11
public setcurrentbias_soma, setcurrentbias_AIS, reduceCa, setindexXY
objref synlist
proc init() {
topol()
subsets()
geom()
geom_nseg()
biophys()
reduceCa(0.5)
double_dend_cond()
synlist = new List()
synapses()
x = y = z = 0 // only change via position
}
create soma, basal[28], shaft, apical[34], ais, axon[3], collat[2], NoR[2]
proc topol() { local i
for i = 0, 1 connect basal[i](0), soma(0)
for i = 2, 3 connect basal[i](0), soma(0)
for i = 4, 5 connect basal[i](0), basal(1)
for i = 6, 7 connect basal[i](0), basal[1](1)
for i = 8, 9 connect basal[i](0), basal[2](1)
for i = 10, 11 connect basal[i](0), basal[3](1)
for i = 12, 13 connect basal[i](0), basal[4](1)
for i = 14, 15 connect basal[i](0), basal[5](1)
for i = 16, 17 connect basal[i](0), basal[6](1)
for i = 18, 19 connect basal[i](0), basal[7](1)
for i = 20, 21 connect basal[i](0), basal[8](1)
for i = 22, 23 connect basal[i](0), basal[9](1)
for i = 24, 25 connect basal[i](0), basal[10](1)
for i = 26, 27 connect basal[i](0), basal[11](1)
connect shaft(0), soma(1)
for i = 0, 1 connect apical[i](0), shaft(1)
for i = 2, 3 connect apical[i](0), apical[i-2](1)
for i = 4, 5 connect apical[i](0), apical[i-4](1)
for i = 6, 7 connect apical[i](0), apical[4](1)
for i = 8, 9 connect apical[i](0), apical[5](1)
for i = 10, 11 connect apical[i](0), apical[6](1)
for i = 12, 13 connect apical[i](0), apical[7](1)
for i = 14, 15 connect apical[i](0), apical[8](1)
for i = 16, 17 connect apical[i](0), apical[9](1)
for i = 18, 19 connect apical[i](0), apical[11](1)
for i = 20, 21 connect apical[i](0), apical[13](1)
for i = 22, 23 connect apical[i](0), apical[15](1)
for i = 24, 25 connect apical[i](0), apical[17](1)
for i = 26, 33 connect apical[i](0), apical[i-8](1)
connect ais(0), soma(0)
connect axon[0](0), ais(1)
connect collat[0](0), ais(1)
connect axon[1](0), axon[0](1)
connect NoR[0](0), axon[1](1)
connect axon[2](0), NoR[0](1)
connect collat[1](0), NoR[0](1)
connect NoR[1](0), axon[2](1)
basic_shape()
}
proc basic_shape() {
soma {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, 15, 0, 1)}
basal {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(-74, -44, 0, 1)}
basal[1] {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(-14, -59, 0, 1)}
basal[2] {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(14, -59, 0, 1)}
basal[3] {pt3dclear() pt3dadd(15, 0, 0, 1) pt3dadd(90, -44, 0, 1)}
basal[4] {pt3dclear() pt3dadd(-74, -44, 0, 1) pt3dadd(-119, -44, 0, 1)}
basal[5] {pt3dclear() pt3dadd(-74, -44, 0, 1) pt3dadd(-94, -89, 0, 1)}
basal[6] {pt3dclear() pt3dadd(-14, -59, 0, 1) pt3dadd(-29, -89, 0, 1)}
basal[7] {pt3dclear() pt3dadd(-14, -59, 0, 1) pt3dadd(0, -89, 0, 1)}
basal[8] {pt3dclear() pt3dadd(30, -59, 0, 1) pt3dadd(15, -89, 0, 1)}
basal[9] {pt3dclear() pt3dadd(30, -59, 0, 1) pt3dadd(45, -89, 0, 1)}
basal[10] {pt3dclear() pt3dadd(90, -44, 0, 1) pt3dadd(110, -89, 0, 1)}
basal[11] {pt3dclear() pt3dadd(90, -44, 0, 1) pt3dadd(135, -44, 0, 1)}
basal[12] {pt3dclear() pt3dadd(-119, -44, 0, 1) pt3dadd(-164, -14, 0, 1)}
basal[13] {pt3dclear() pt3dadd(-119, -44, 0, 1) pt3dadd(-164, -74, 0, 1)}
basal[14] {pt3dclear() pt3dadd(-89, -89, 0, 1) pt3dadd(-119, -104, 0, 1)}
basal[15] {pt3dclear() pt3dadd(-89, -89, 0, 1) pt3dadd(-89, -134, 0, 1)}
basal[16] {pt3dclear() pt3dadd(-29, -89, 0, 1) pt3dadd(-59, -104, 0, 1)}
basal[17] {pt3dclear() pt3dadd(-29, -89, 0, 1) pt3dadd(-29, -119, 0, 1)}
basal[18] {pt3dclear() pt3dadd(0, -89, 0, 1) pt3dadd(-5, -119, 0, 1)}
basal[19] {pt3dclear() pt3dadd(0, -89, 0, 1) pt3dadd(0, -119, 0, 1)}
basal[20] {pt3dclear() pt3dadd(15, -89, 0, 1) pt3dadd(15, -119, 0, 1)}
basal[21] {pt3dclear() pt3dadd(15, -89, 0, 1) pt3dadd(20, -119, 0, 1)}
basal[22] {pt3dclear() pt3dadd(45, -89, 0, 1) pt3dadd(45, -119, 0, 1)}
basal[23] {pt3dclear() pt3dadd(45, -89, 0, 1) pt3dadd(75, -104, 0, 1)}
basal[24] {pt3dclear() pt3dadd(105, -89, 0, 1) pt3dadd(105, -134, 0, 1)}
basal[25] {pt3dclear() pt3dadd(105, -89, 0, 1) pt3dadd(135, -104, 0, 1)}
basal[26] {pt3dclear() pt3dadd(135, -44, 0, 1) pt3dadd(180, -74, 0, 1)}
basal[27] {pt3dclear() pt3dadd(135, -44, 0, 1) pt3dadd(180, -14, 0, 1)}
shaft {pt3dclear() pt3dadd(15, 0, 0, 1) pt3dadd(15, 30, 0, 1)}
apical {pt3dclear() pt3dadd(15, 30, 0, 1) pt3dadd(-44, 60, 0, 1)}
apical[1] {pt3dclear() pt3dadd(15, 30, 0, 1) pt3dadd(75, 60, 0, 1)}
apical[2] {pt3dclear() pt3dadd(-44, 60, 0, 1) pt3dadd(-74, 90, 0, 1)}
apical[3] {pt3dclear() pt3dadd(75, 60, 0, 1) pt3dadd(105, 90, 0, 1)}
apical[4] {pt3dclear() pt3dadd(-44, 60, 0, 1) pt3dadd(-44, 105, 0, 1)}
apical[5] {pt3dclear() pt3dadd(75, 60, 0, 1) pt3dadd(75, 105, 0, 1)}
apical[6] {pt3dclear() pt3dadd(-44, 105, 0, 1) pt3dadd(-74, 135, 0, 1)}
apical[7] {pt3dclear() pt3dadd(-44, 105, 0, 1) pt3dadd(-29, 135, 0, 1)}
apical[8] {pt3dclear() pt3dadd(75, 105, 0, 1) pt3dadd(60, 135, 0, 1)}
apical[9] {pt3dclear() pt3dadd(75, 105, 0, 1) pt3dadd(105, 135, 0, 1)}
apical[10] {pt3dclear() pt3dadd(-74, 135, 0, 1) pt3dadd(-89, 165, 0, 1)}
apical[11] {pt3dclear() pt3dadd(-74, 135, 0, 1) pt3dadd(-74, 180, 0, 1)}
apical[12] {pt3dclear() pt3dadd(-29, 135, 0, 1) pt3dadd(0, 150, 0, 1)}
apical[13] {pt3dclear() pt3dadd(-29, 135, 0, 1) pt3dadd(-29, 180, 0, 1)}
apical[14] {pt3dclear() pt3dadd(60, 135, 0, 1) pt3dadd(30, 150, 0, 1)}
apical[15] {pt3dclear() pt3dadd(60, 135, 0, 1) pt3dadd(60, 180, 0, 1)}
apical[16] {pt3dclear() pt3dadd(105, 135, 0, 1) pt3dadd(120, 165, 0, 1)}
apical[17] {pt3dclear() pt3dadd(105, 135, 0, 1) pt3dadd(105, 180, 0, 1)}
apical[18] {pt3dclear() pt3dadd(-74, 180, 0, 1) pt3dadd(-89, 195, 0, 1)}
apical[19] {pt3dclear() pt3dadd(-74, 180, 0, 1) pt3dadd(-59, 195, 0, 1)}
apical[20] {pt3dclear() pt3dadd(-29, 180, 0, 1) pt3dadd(-44, 195, 0, 1)}
apical[21] {pt3dclear() pt3dadd(-29, 180, 0, 1) pt3dadd(-14, 195, 0, 1)}
apical[22] {pt3dclear() pt3dadd(60, 180, 0, 1) pt3dadd(45, 195, 0, 1)}
apical[23] {pt3dclear() pt3dadd(60, 180, 0, 1) pt3dadd(75, 195, 0, 1)}
apical[24] {pt3dclear() pt3dadd(105, 180, 0, 1) pt3dadd(90, 195, 0, 1)}
apical[25] {pt3dclear() pt3dadd(105, 180, 0, 1) pt3dadd(120, 195, 0, 1)}
apical[26] {pt3dclear() pt3dadd(-89, 195, 0, 1) pt3dadd(-89, 225, 0, 1)}
apical[27] {pt3dclear() pt3dadd(-59, 195, 0, 1) pt3dadd(-59, 225, 0, 1)}
apical[28] {pt3dclear() pt3dadd(-44, 195, 0, 1) pt3dadd(-44, 225, 0, 1)}
apical[29] {pt3dclear() pt3dadd(-14, 195, 0, 1) pt3dadd(-14, 225, 0, 1)}
apical[30] {pt3dclear() pt3dadd(45, 195, 0, 1) pt3dadd(45, 225, 0, 1)}
apical[31] {pt3dclear() pt3dadd(75, 195, 0, 1) pt3dadd(75, 225, 0, 1)}
apical[32] {pt3dclear() pt3dadd(90, 195, 0, 1) pt3dadd(90, 225, 0, 1)}
apical[33] {pt3dclear() pt3dadd(120, 195, 0, 1) pt3dadd(120, 225, 0, 1)}
ais {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, -44, 0, 1)}
axon[0] {pt3dclear() pt3dadd(0, -44, 0, 1) pt3dadd(0, -144, 0, 1)}
axon[1] {pt3dclear() pt3dadd(0, -144, 0, 1) pt3dadd(0, -244, 0, 1)}
axon[2] {pt3dclear() pt3dadd(0, -244, 0, 1) pt3dadd(0, -344, 0, 1)}
collat[0] {pt3dclear() pt3dadd(0, -144, 0, 1) pt3dadd(-200, -144, 0, 1)}
collat[1] {pt3dclear() pt3dadd(0, -244, 0, 1) pt3dadd(200, -244, 0, 1)}
}
objref all, level1, level2, level3, level4, level5, level6
objref level7, level8, level9, level10, level11, soma_dendrites, dendrites, axonal
proc subsets() { local i
objref all, level1, level2, level3, level4, level5, level6
objref level7, level8, level9, level10, level11
all = new SectionList()
soma_dendrites = new SectionList()
dendrites = new SectionList()
axonal = new SectionList()
soma { all.append() soma_dendrites.append() }
for i=0, 27 basal[i] { all.append() soma_dendrites.append() dendrites.append()}
shaft { all.append() soma_dendrites.append() dendrites.append()}
for i=0, 33 apical[i] {all.append() soma_dendrites.append() dendrites.append()}
ais { all.append() axonal.append() }
for i=0, 2 axon[i] { all.append() axonal.append() }
for i=0, 1 collat[i] { all.append() axonal.append() }
for i=0, 1 NoR[i] { all.append() axonal.append() }
level1 = new SectionList()
for i=12, 27 basal[i] { level1.append() }
level2 = new SectionList()
for i=4, 11 basal[i] { level2.append() }
level3 = new SectionList()
for i=0, 3 basal[i] { level3.append() }
level4 = new SectionList()
soma { level4.append() }
level5 = new SectionList()
{ shaft level5.append() }
level6 = new SectionList()
for i=0, 1 apical[i] { level6.append() }
level7 = new SectionList()
for i=2, 5 apical[i] { level7.append() }
level8 = new SectionList()
for i=6, 9 apical[i] { level8.append() }
level9 = new SectionList()
for i=10, 17 apical[i] { level9.append() }
level10 = new SectionList()
for i=18, 25 apical[i] { level10.append() }
level11 = new SectionList()
for i=26, 33 apical[i] { level11.append() }
}
proc geom() {
forsec level1 { L = 70 diam = 2 }
forsec level2 { L = 40 diam = 3.14 }
forsec level3 { L = 15 diam = 5 }
forsec level4 { L = 25.5 diam = 30 } //soma
forsec level5 { L = 50 diam = 10 } //shaft
forsec level6 { L = 50 diam = 6.3 }
forsec level7 { L = 50 diam = 5 }
for i=2, 3 apical[i] { L = 70 diam = 2.78 } // oblique, level 7
forsec level8 { L = 60 diam = 3.14 }
forsec level9 { L = 60 diam = 2.5 }
apical[10] { L = 50 diam = 1.4 } //oblique, level 9
apical[12] { L = 50 diam = 1.4 } //oblique, level 9
apical[14] { L = 50 diam = 1.4 } //oblique, level 9
apical[16] { L = 50 diam = 1.4 } //oblique, level 9
forsec level10 { L = 60 diam = 1.6 }
forsec level11 { L = 60 diam = 1.6 }
ais { L = 40 diam = 2 }
axon[0] { L = 10 diam = 1 }
axon[1] { L = 60 diam = 1.4 } //now myelinated
axon[2] { L = 60 diam = 1.4 } //now myelinated
for i=0, 1 NoR[i] { L = 1 diam = 1.1 } // Nodes of Ranvier
for i=0, 1 collat[i] { L = 200 diam = 0.5 }
}
external lambda_f
proc geom_nseg() {
forsec all { nseg = int((L/(0.1*lambda_f(100))+.9)/2)*2 + 1 }
}
// apply the biophysical properties of Traub et al 2005 model to the cell
// $o1 is the cell
proc biophys(){
//general params:
forsec all {
insert pas
cm = 0.75
}
forsec soma_dendrites {
g_pas = 2.E-05
Ra = 200.
}
forsec axonal {
g_pas = 0.001
Ra = 100.
insert NaFax
gbar_NaFax = 0.300
insert Kdrax
gbar_Kdrax = 0.400
}
// overwrite the general params:
for i=0,1 NoR[i] {
g_pas = 0.4
}
for i=1,2 axon[i]{ //myelinated parts of the axon
cm = 0.02
gbar_NaFax = 0.010
gbar_Kdrax = 0.013
}
soma {
insert NaFsd
gbar_NaFsd = 0.070
insert Kdrsd
gbar_Kdrsd = 0.170
insert Ca
gbar_Ca = 0.001
insert Cad
phi_Cad = 24
beta_Cad = 0.001
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.020
insert Ka
gbar_Ka = 0.0005
}
forsec level1 { // distal basal dend
insert Ca
gbar_Ca = 0.001
insert Cad
phi_Cad = 148
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.004
}
forsec level2 { // middle basal dend
insert Ca
gbar_Ca = 0.001
insert Cad
phi_Cad = 164
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.004
insert Ka
gbar_Ka = 0.0005
}
forsec level3 { // proximal basal dend
insert NaFsd
gbar_NaFsd = 0.001
insert Kdrsd
gbar_Kdrsd = 0.015
insert Ca
gbar_Ca = 0.001
insert Cad
phi_Cad = 123
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.008
insert Ka
gbar_Ka = 0.0005
}
// level4 is soma
// level5 is shaft
shaft {
insert NaFsd
gbar_NaFsd = 0.003
insert Kdrsd
gbar_Kdrsd = 0.020
insert Ca
gbar_Ca = 0.001
insert Cad
phi_Cad = 18
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.008
insert Ka
gbar_Ka = 0.0005
}
forsec level6 {
insert NaFsd
gbar_NaFsd = 0.003
insert Kdrsd
gbar_Kdrsd = 0.020
insert Ca
gbar_Ca = 0.001
insert Cad
phi_Cad = 29
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.008
insert Ka
gbar_Ka = 0.0005
}
forsec level7 {
insert Ca
gbar_Ca = 0.002
insert Cad
phi_Cad = 37
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.004
}
forsec level8 {
insert Ca
gbar_Ca = 0.003
insert Cad
phi_Cad = 13
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.012
}
forsec level9 {
insert Ca
gbar_Ca = 0.003
insert Cad
phi_Cad = 16
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.012
}
forsec level10 {
insert Ca
gbar_Ca = 0.001
insert Cad
phi_Cad = 25
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.004
}
forsec level11 {
insert Ca
gbar_Ca = 0.001
insert Cad
phi_Cad = 25
beta_Cad = 0.05
insert Kahp
gbar_Kahp = 0.0008
insert Kc
gbar_Kc = 0.004
}
// reversal potentials
forsec axonal {
ek = -90.
e_pas = -65.
ena = 50.
}
forsec soma_dendrites {
ek = -80.
e_pas = -65.
if (ismembrane("NaFsd")) { ena = 50. }
}
forall {
insert extracellular
xraxial = 1e+09
xraxial[1] = 1e+09
xg = 1e+09
xg[1] = 1e+09
xc = 0
xc[1] = 0
e_extracellular = 0
}
}
proc biophys_inhomo(){}
proc position() { local i
soma for i = 0, n3d()-1 {
pt3dchange(i, $1-x+x3d(i), $2-y+y3d(i), $3-z+z3d(i), diam3d(i))
}
x = $1 y = $2 z = $3
}
obfunc connect2target() { localobj nc //$o1 target point process, optional $o2 returned NetCon
soma nc = new NetCon(&v(1), $o1)
nc.threshold = 10
if (numarg() == 2) { $o2 = nc } // for backward compatibility
return nc
}
proc synapses() {}
// adds steady current to soma
// $1 is the current in nA, "-" for hyperpolarizing, "+" for depolarizing
proc setcurrentbias_soma(){ local i, area_soma
soma {
area_soma = PI*diam*L*1e-8 // unts converted [mcm2->cm2], area_soma is the area of a soma membrane
if (ismembrane("bias")!=1) {insert bias}
amp_bias = -$1*1e-6/area_soma //note conversion [nA->mA] by 1e-6 and change of sign
}
}
proc setcurrentbias_AIS(){ local i, area_section
ais {
area_section = PI*diam*L*1e-8 // unts converted [mcm2->cm2], area_section is the area of a section membrane
if (ismembrane("bias")!=1) {insert bias}
amp_bias = -$1*1e-6/area_section //note conversion [nA->mA] by 1e-6 and change of sign
}
}
proc double_dend_cond() {
spine_area_multiplier = 2.0
forsec dendrites {
if (ismembrane("NaFsd")) { gbar_NaFsd *= spine_area_multiplier }
if (ismembrane("Kc")) { gbar_Kc *= spine_area_multiplier }
if (ismembrane("Kdrsd")) { gbar_Kdrsd *= spine_area_multiplier }
if (ismembrane("Ka")) { gbar_Ka *= spine_area_multiplier }
if (ismembrane("Kahp")) { gbar_Kahp *= spine_area_multiplier }
if (ismembrane("Ca")) { gbar_Ca *= spine_area_multiplier }
if (ismembrane("pas")) { g_pas *= spine_area_multiplier }
cm = cm * spine_area_multiplier
}
}
proc reduceCa() {
forsec all {
if (ismembrane("Ca")) { gbar_Ca *= $1 }
}
}
proc setindexXY() {
x_index = $1
y_index = $2
}
obfunc connect2targetSoma() { localobj nc //$o1 target point process, optional $o2 returned NetCon
soma nc = new NetCon(&v(1), $o1)
nc.threshold = -10
if (numarg() == 2) { $o2 = nc } // for backward compatibility
return nc
}
obfunc connect2targetSomaSpikelet() { localobj nc //$o1 target point process, optional $o2 returned NetCon
soma nc = new NetCon(&v(1), $o1)
nc.threshold = -55
if (numarg() == 2) { $o2 = nc } // for backward compatibility
return nc
}
obfunc connect2targetCollat() { localobj nc //$o1 target point process, optional $o2 returned NetCon
collat[0] nc = new NetCon(&v(1), $o1)
nc.threshold = 0
if (numarg() == 2) { $o2 = nc } // for backward compatibility
return nc
}
proc rotateOY(){ local alpha, i, xcenter, zcenter
// rotate cell along axis OY (vertical), argument in radians
alpha = $1
soma { xcenter = x3d(0) zcenter = z3d(0) }
forsec all {
for i = 0, n3d()-1 {
pt3dchange(i, xcenter + (x3d(i) - xcenter)*cos(alpha) - (z3d(i) - zcenter)*sin(alpha), y3d(i), zcenter + (x3d(i) - xcenter)*sin(alpha) + (z3d(i) - zcenter)*cos(alpha), diam3d(i))
}
}
}
endtemplate pyramidalCA1