/*
This port was made from the FORTRAN code into the NEURON enviroment based on
Traub RD, Buhl EH, Gloveli T, Whittington MA. Fast Rhythmic Bursting Can Be Induced in Layer 2/3 Cortical Neurons by Enhancing Persistent Na(+) Conductance or by Blocking BK Channels.J Neurophysiol. 2003 Feb;89(2):909-21.
This port was made by Roger D Traub and Maciej Lazarewicz (mlazarew@seas.upenn.edu)
Thanks to Ashlen P Reid for help with porting a morphology of the cell.
*/
begintemplate pyr3
public comp, Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9, Level10, Level11, Level12, Dendrites, Basal, Oblique, Prox, Dist, SD, Soma, inj1_, inj2_
create comp[75]
create aux10to13[4], aux69, aux38, aux2to9[8]
objref all, Dist, Oblique, Basal, Soma, Axon, Dendrites, SD, Prox
objref Aux
objref Level0, Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9, Level10, Level11, Level12
objref inj1_, inj2_
proc init() {
titlePrint()
create comp[75]
create aux10to13[4], aux69, aux38, aux2to9[8]
comp[0] delete_section()
objref all, Dist, Oblique, Basal, Soma, Axon, Dendrites, SD, Prox
objref Aux
objref Level0, Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9, Level10, Level11, Level12
objref inj1_, inj2_
shape()
geom()
if( name_declared("method") != 5 ) method = 1
if( method == 1 ) spinecorr()
setupfig( $1 )
set_active()
if( method == 2 ) spinecorr()
}
proc titlePrint() {
print ""
print "-----"
print ""
print "Layer 2/3 Cortical Neurons Model based on Traub RD (2003)"
print ""
print "-----"
}
// 21 - figure 2, current injection 1.5 nA
// 22 - figure 2, current injection 2.5 nA
// 41 - figure 4, current injection 2.5 nA
// 42 - figure 4, current injection 1.5 nA
// 43 - figure 4, current injection 1.1 nA
// 44 - figure 4, current injection 0.6 nA
// 51 - figure 5, current injection 0.75 nA
// 52 - figure 5, current injection 1.3 nA
// 61 - figure 6, current injection 0.6 nA
// 62 - figure 6, current injection 1.3 nA
// 71 - figure 7, uper
// 72 - figure 7, middle
// 73 - figure 7, bottom
proc setupfig() {
fig = $1
if ( fig == -1 ) comp[1] {
dnap = 0.0
dkc = 1.6
}
if ( fig == -2 ) comp[1] {
dnap = 1.25
dkc = 1.0
}
if ( fig == 21 || fig == 22 ) comp[43] {
g_pas = g_pas + 2.5/area(0.5) // in the paper is 20 nS, here is 25 nS
inj1_ = new IClamp(0.5)
inj1_.dur = 150
inj1_.del = 0
inj1_.amp = -0.15
inj2_ = new IClamp(0.5)
inj2_.dur = 800
inj2_.del = 150
if( fig == 21 ) inj2_.amp = 1.5
if( fig == 22 ) inj2_.amp = 2.5
dnap = 0.0
dkc = 1.6
}
if ( fig == 41 || fig == 42 || fig == 43 || fig == 44 ) comp[1] {
inj1_ = new IClamp(0.5)
inj1_.dur = 150
inj1_.del = 0
inj1_.amp = -0.15
inj2_ = new IClamp(0.5)
inj2_.dur = 250
inj2_.del = 150
if( fig == 41 ) inj2_.amp = 2.5
if( fig == 42 ) inj2_.amp = 1.5
if( fig == 43 ) inj2_.amp = 1.1
if( fig == 44 ) inj2_.amp = 0.6
dnap = 0.0
dkc = 1.3
}
if ( fig == 51 || fig == 52 ) comp[1] {
inj1_ = new IClamp(0.5)
inj1_.dur = 150
inj1_.del = 0
inj1_.amp = -0.15
inj2_ = new IClamp(0.5)
inj2_.dur = 1000
inj2_.del = 150
if( fig == 51 ) inj2_.amp = 0.75
if( fig == 52 ) inj2_.amp = 1.3
dnap = 0
dkc = 1.6
}
if ( fig == 61 || fig == 62 ) comp[1] {
inj1_ = new IClamp(0.5)
inj1_.dur = 150
inj1_.del = 0
inj1_.amp = -0.15
inj2_ = new IClamp(0.5)
inj2_.dur = 2500
inj2_.del = 150
if( fig == 61 ) inj2_.amp = 0.6
if( fig == 62 ) inj2_.amp = 1.3
dnap = 0.7
dkc = 1.6
}
if ( fig == 71 || fig == 72 || fig == 73 ) comp[1] {
inj1_ = new IClamp(0.5)
inj1_.dur = 150
inj1_.del = 0
inj1_.amp = -0.15
inj2_ = new IClamp(0.5)
inj2_.dur = 2500
inj2_.del = 150
inj2_.amp = 0.7
if( fig == 71 ) dnap = 0
if( fig == 72 ) dnap = 0.7
if( fig == 73 ) dnap = 1.0
dkc = 1.6
}
}
proc spinecorr() {
forsec Dendrites {
if (method == 1) {
L = L * 2
Ra = Ra / 2
}
if (method == 2) {
g_pas = g_pas * 2
cm = cm * 2
phi_cad = phi_cad / 2
gbar_naf = gbar_naf * 2
gbar_nap = gbar_nap * 2
gbar_kdr = gbar_kdr * 2
gbar_ka = gbar_ka * 2
gbar_kc = gbar_kc * 2
gbar_kahp = gbar_kahp * 2
gbar_k2 = gbar_k2 * 2
gbar_km = gbar_km * 2
gbar_cat = gbar_cat * 2
gbar_cal = gbar_cal * 2
gbar_ar = gbar_ar * 2
}
}
print "Spine correction with method: ", method
}
proc set_active() {
forsec Dendrites {
insert cad
insert naf
insert nap
insert kdr
insert ka
insert kc
insert kahp
insert k2
insert km
insert cat
insert cal
insert ar
}
forsec Soma {
insert cad
insert naf
insert nap
insert kdr
insert ka
insert kc
insert kahp
insert k2
insert km
insert cat
insert cal
insert ar
}
forsec Axon {
insert naf
insert kdr
insert ka
insert k2
gbar_naf = 400e-3
gbar_kdr = 400e-3
gbar_ka = 2e-3
gbar_k2 = 0.1e-3
}
comp[1] ceiling_cad = 1000
forsec Soma {
phi_cad = 52 / 2e-3
beta_cad = 1 / 100 // in the paper beta = 50 [ms]
gbar_naf = 150e-3 * 1.25
gbar_nap = dnap * 0.0032 * gbar_naf
gbar_kdr = 125e-3
gbar_ka = 30e-3
gbar_kc = dkc * 7.5e-3 // in tha paper 'dkc * 12e-3'
gbar_kahp = 0.1e-3
gbar_k2 = 0.1e-3
gbar_km = 2.5 * 1.5e-3 * 2
gbar_cat = 0.1e-3
gbar_cal = 0.5e-3
gbar_ar = 0.25e-3
}
forsec Dendrites {
phi_cad = 52 / 2e-3
beta_cad = 1 / 20
gbar_naf = 6.25e-3
gbar_nap = dnap * 0.0032 * gbar_naf
gbar_kdr = 0
gbar_ka = 2e-3
gbar_kc = 0
gbar_kahp = 0.1e-3
gbar_k2 = 0.1e-3
gbar_km = 2.5 * 1.5e-3 * 2
gbar_cat = 0.1e-3
gbar_cal = 0.5e-3
gbar_ar = 0.25e-3
}
forsec Prox {
gbar_naf = 75e-3 * 1.25
gbar_nap = dnap * 0.0032 * gbar_naf
gbar_kdr = 75e-3 * 1.25
gbar_kc = dkc * 7.5e-3 // in tha paper 'dkc * 12e-3'
}
forsec Dist {
gbar_cal = 3e-3
}
comp[38] {
gbar_ka = 30e-3
gbar_naf = 125e-3
gbar_nap = dnap * 0.0032 * gbar_naf // in the FORTRAN code 0.004
gbar_kdr = 125e-3 // in tha paper '75e-3 * 1.25'
gbar_kc = dkc * 7.5e-3 // in tha paper 'dkc * 12e-3'
}
forsec Axon {
ena = 50
ek = -95
}
forsec Dendrites {
ena = 50
ek = -95
eca = 125
}
forsec Soma {
ena = 50
ek = -95
eca = 125
}
}
proc geom() {
//Apical
for i=61,68 connect comp[i](0), comp[i-8](1)
for i=53,60 connect comp[i](0), comp[i-8](1)
for i=49,52 connect comp[i](0), comp[44](1)
for i=45,48 connect comp[i](0), comp[43](1)
for i=43,44 connect comp[i](0), comp[i-2](1)
for i=41,42 connect comp[i](0), comp[40](1)
connect comp[40](0), comp[39](1)
connect comp[39](0), comp[38](1)
// connect comp[38](0), comp[1](1)
connect comp[38](0), aux38(1)
connect aux38(0), comp[1](0.5)
// Oblique apical
for i=0,3 connect aux10to13[i](0), comp[38](0.5)
for i=0,3 connect comp[i+10](0), aux10to13[i](1)
// for i=0,3 connect comp[i+10](0), comp[38](0.5)
for i=0,3 connect comp[i+22](0), comp[i+10](1)
for i=0,3 connect comp[i+34](0), comp[i+22](1)
// Basal
for i=0,7 connect aux2to9[i](0), comp[1](0.5)
for i=0,7 connect comp[i+2](0), aux2to9[i](1)
// for i=0,7 connect comp[i+2](0), comp[1](0)
for i=0,7 connect comp[i+14](0), comp[i+2](1)
for i=0,7 connect comp[i+26](0), comp[i+14](1)
// Axon
connect aux69(0), comp[1](0.5)
connect comp[69](0), aux69(1)
// connect comp[69](0), comp[1](0.5)
connect comp[70](0), comp[69](1)
for i=0,1 connect comp[71+i*2](0), comp[70](1)
for i=0,1 connect comp[72+i*2](0), comp[71+i*2](1)
Level0 = new SectionList()
for i=69,74 comp[i] Level0.append()
Level1 = new SectionList()
comp[1] Level1.append()
Level2 = new SectionList()
for i=2,13 comp[i] Level2.append()
Level3 = new SectionList()
for i=14,25 comp[i] Level3.append()
Level4 = new SectionList()
for i=26,37 comp[i] Level4.append()
Level5 = new SectionList()
comp[38] Level5.append()
Level6 = new SectionList()
comp[39] Level6.append()
Level7 = new SectionList()
comp[40] Level7.append()
Level8 = new SectionList()
for i=41,42 comp[i] Level8.append()
Level9 = new SectionList()
for i=43,44 comp[i] Level9.append()
Level10 = new SectionList()
for i=45,52 comp[i] Level10.append()
Level11 = new SectionList()
for i=53,60 comp[i] Level11.append()
Level12 = new SectionList()
for i=60,68 comp[i] Level12.append()
all = new SectionList()
for i=1,74 comp[i] all.append()
Axon = new SectionList()
for i=69,74 comp[i] Axon.append()
Dendrites = new SectionList()
for i=2,68 comp[i] Dendrites.append()
SD = new SectionList()
for i=1,68 comp[i] SD.append()
Dist = new SectionList()
forsec Level10 Dist.append()
forsec Level11 Dist.append()
forsec Level12 Dist.append()
Basal = new SectionList()
for i=2,9 comp[i] Basal.append()
for i=14,21 comp[i] Basal.append()
for i=26,33 comp[i] Basal.append()
Oblique = new SectionList()
for i=10,13 comp[i] Oblique.append()
for i=22,25 comp[i] Oblique.append()
for i=34,37 comp[i] Oblique.append()
Prox = new SectionList()
forsec Level2 Prox.append()
forsec Level6 Prox.append()
Soma = new SectionList()
comp[1] Soma.append()
Aux = new SectionList()
for i=0,3 aux10to13[i] Aux.append()
aux69 Aux.append()
aux38 Aux.append()
for i=0,7 aux2to9[i] Aux.append()
forsec Dist { diam = 1.6 }
forsec Oblique { diam = 1 }
forsec Basal { diam = 1 }
forsec Soma { L = 15 diam = 16 }
forsec Dendrites { L = 50 }
forsec Aux { L = 15 / 2 diam = 16 }
for i=0,3 aux10to13[i] { L = 50 / 2 diam = 8 }
comp[38] { diam = 8 }
comp[39] { diam = 8 * 0.9 }
comp[40] { diam = 8 * 0.8 }
forsec Level8 { diam = 4 }
forsec Level9 { diam = 4 }
comp[69] { L = 25 diam = 1.8 }
comp[70] { L = 50 diam = 1.4 }
for i=71,74 comp[i] { L = 50 diam = 1 }
forsec Aux {
Ra = 250
cm = 0
}
forsec Soma {
Ra = 250
cm = 0.9
insert pas
g_pas = 2e-05
e_pas = -70
}
forsec Axon {
Ra = 100
cm = 0.9
insert pas
g_pas = 0.001
e_pas = -70
}
forsec Dendrites {
Ra = 250
cm = 0.9
insert pas
g_pas = 2e-05
e_pas = -70
}
access comp[1]
}
proc shape() {
aux10to13[0] {pt3dclear() pt3dadd(-134, -14, 0, 1) pt3dadd(-104, -14, 0, 1)}
aux10to13[1] {pt3dclear() pt3dadd(-134, -14, 0, 1) pt3dadd(-104, -14, 0, 1)}
aux10to13[2] {pt3dclear() pt3dadd(-134, -14, 0, 1) pt3dadd(-104, -14, 0, 1)}
aux10to13[3] {pt3dclear() pt3dadd(-134, -14, 0, 1) pt3dadd(-104, -14, 0, 1)}
aux69 {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux38 {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux2to9[0] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux2to9[1] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux2to9[2] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux2to9[3] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux2to9[4] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux2to9[5] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux2to9[6] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
aux2to9[7] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
comp[1] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-134, -14, 0, 1)}
comp[38] {pt3dclear() pt3dadd(-134, -14, 0, 1) pt3dadd(-104, -14, 0, 1)}
comp[39] {pt3dclear() pt3dadd(-104, -14, 0, 1) pt3dadd(-74, -14, 0, 1)}
comp[40] {pt3dclear() pt3dadd(-74, -14, 0, 1) pt3dadd(-44, -14, 0, 1)}
comp[41] {pt3dclear() pt3dadd(-44, -14, 0, 1) pt3dadd(-14, 30, 0, 1)}
comp[43] {pt3dclear() pt3dadd(-14, 30, 0, 1) pt3dadd(0, 45, 0, 1)}
comp[45] {pt3dclear() pt3dadd(0, 45, 0, 1) pt3dadd(45, 75, 0, 1)}
comp[46] {pt3dclear() pt3dadd(0, 45, 0, 1) pt3dadd(45, 60, 0, 1)}
comp[47] {pt3dclear() pt3dadd(0, 45, 0, 1) pt3dadd(45, 30, 0, 1)}
comp[48] {pt3dclear() pt3dadd(0, 45, 0, 1) pt3dadd(45, 15, 0, 1)}
comp[53] {pt3dclear() pt3dadd(45, 75, 0, 1) pt3dadd(75, 75, 0, 1)}
comp[54] {pt3dclear() pt3dadd(45, 60, 0, 1) pt3dadd(75, 60, 0, 1)}
comp[55] {pt3dclear() pt3dadd(45, 30, 0, 1) pt3dadd(75, 30, 0, 1)}
comp[56] {pt3dclear() pt3dadd(45, 15, 0, 1) pt3dadd(75, 15, 0, 1)}
comp[61] {pt3dclear() pt3dadd(75, 75, 0, 1) pt3dadd(90, 90, 0, 1)}
comp[62] {pt3dclear() pt3dadd(75, 60, 0, 1) pt3dadd(90, 75, 0, 1)}
comp[63] {pt3dclear() pt3dadd(75, 30, 0, 1) pt3dadd(90, 15, 0, 1)}
comp[64] {pt3dclear() pt3dadd(75, 15, 0, 1) pt3dadd(90, 0, 0, 1)}
comp[42] {pt3dclear() pt3dadd(-44, -14, 0, 1) pt3dadd(-14, -59, 0, 1)}
comp[44] {pt3dclear() pt3dadd(-14, -59, 0, 1) pt3dadd(0, -74, 0, 1)}
comp[49] {pt3dclear() pt3dadd(0, -74, 0, 1) pt3dadd(45, -44, 0, 1)}
comp[50] {pt3dclear() pt3dadd(0, -74, 0, 1) pt3dadd(45, -59, 0, 1)}
comp[51] {pt3dclear() pt3dadd(0, -74, 0, 1) pt3dadd(45, -89, 0, 1)}
comp[52] {pt3dclear() pt3dadd(0, -74, 0, 1) pt3dadd(45, -104, 0, 1)}
comp[57] {pt3dclear() pt3dadd(45, -44, 0, 1) pt3dadd(75, -44, 0, 1)}
comp[58] {pt3dclear() pt3dadd(45, -59, 0, 1) pt3dadd(75, -59, 0, 1)}
comp[59] {pt3dclear() pt3dadd(45, -89, 0, 1) pt3dadd(75, -89, 0, 1)}
comp[60] {pt3dclear() pt3dadd(45, -104, 0, 1) pt3dadd(75, -104, 0, 1)}
comp[65] {pt3dclear() pt3dadd(75, -44, 0, 1) pt3dadd(90, -29, 0, 1)}
comp[66] {pt3dclear() pt3dadd(75, -59, 0, 1) pt3dadd(90, -44, 0, 1)}
comp[67] {pt3dclear() pt3dadd(75, -89, 0, 1) pt3dadd(90, -104, 0, 1)}
comp[68] {pt3dclear() pt3dadd(75, -104, 0, 1) pt3dadd(90, -119, 0, 1)}
comp[10] {pt3dclear() pt3dadd(-104, -14, 0, 1) pt3dadd(-119, 0, 0, 1)}
comp[22] {pt3dclear() pt3dadd(-119, 0, 0, 1) pt3dadd(-119, 30, 0, 1)}
comp[34] {pt3dclear() pt3dadd(-119, 30, 0, 1) pt3dadd(-119, 60, 0, 1)}
comp[11] {pt3dclear() pt3dadd(-104, -14, 0, 1) pt3dadd(-89, 0, 0, 1)}
comp[23] {pt3dclear() pt3dadd(-89, 0, 0, 1) pt3dadd(-89, 30, 0, 1)}
comp[35] {pt3dclear() pt3dadd(-89, 30, 0, 1) pt3dadd(-89, 60, 0, 1)}
comp[12] {pt3dclear() pt3dadd(-104, -14, 0, 1) pt3dadd(-119, -29, 0, 1)}
comp[24] {pt3dclear() pt3dadd(-119, -29, 0, 1) pt3dadd(-119, -59, 0, 1)}
comp[36] {pt3dclear() pt3dadd(-119, -59, 0, 1) pt3dadd(-119, -89, 0, 1)}
comp[13] {pt3dclear() pt3dadd(-104, -14, 0, 1) pt3dadd(-89, -29, 0, 1)}
comp[25] {pt3dclear() pt3dadd(-89, -29, 0, 1) pt3dadd(-89, -59, 0, 1)}
comp[37] {pt3dclear() pt3dadd(-89, -59, 0, 1) pt3dadd(-89, -89, 0, 1)}
comp[2] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-164, 30, 0, 1)}
comp[14] {pt3dclear() pt3dadd(-164, 30, 0, 1) pt3dadd(-179, 45, 0, 1)}
comp[26] {pt3dclear() pt3dadd(-179, 45, 0, 1) pt3dadd(-194, 60, 0, 1)}
comp[3] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-179, 30, 0, 1)}
comp[15] {pt3dclear() pt3dadd(-179, 30, 0, 1) pt3dadd(-194, 45, 0, 1)}
comp[27] {pt3dclear() pt3dadd(-194, 45, 0, 1) pt3dadd(-209, 60, 0, 1)}
comp[4] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-194, 15, 0, 1)}
comp[16] {pt3dclear() pt3dadd(-194, 15, 0, 1) pt3dadd(-209, 30, 0, 1)}
comp[28] {pt3dclear() pt3dadd(-209, 30, 0, 1) pt3dadd(-224, 45, 0, 1)}
comp[5] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-194, 0, 0, 1)}
comp[17] {pt3dclear() pt3dadd(-194, 0, 0, 1) pt3dadd(-209, 15, 0, 1)}
comp[29] {pt3dclear() pt3dadd(-209, 15, 0, 1) pt3dadd(-224, 30, 0, 1)}
comp[6] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-194, -29, 0, 1)}
comp[18] {pt3dclear() pt3dadd(-194, -29, 0, 1) pt3dadd(-209, -44, 0, 1)}
comp[30] {pt3dclear() pt3dadd(-209, -44, 0, 1) pt3dadd(-224, -59, 0, 1)}
comp[7] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-164, -59, 0, 1)}
comp[19] {pt3dclear() pt3dadd(-164, -59, 0, 1) pt3dadd(-179, -74, 0, 1)}
comp[31] {pt3dclear() pt3dadd(-179, -74, 0, 1) pt3dadd(-194, -89, 0, 1)}
comp[8] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-194, -44, 0, 1)}
comp[20] {pt3dclear() pt3dadd(-194, -44, 0, 1) pt3dadd(-209, -59, 0, 1)}
comp[32] {pt3dclear() pt3dadd(-209, -59, 0, 1) pt3dadd(-224, -74, 0, 1)}
comp[9] {pt3dclear() pt3dadd(-149, -14, 0, 1) pt3dadd(-179, -59, 0, 1)}
comp[21] {pt3dclear() pt3dadd(-179, -59, 0, 1) pt3dadd(-194, -74, 0, 1)}
comp[33] {pt3dclear() pt3dadd(-194, -74, 0, 1) pt3dadd(-209, -89, 0, 1)}
comp[69] {pt3dclear() pt3dadd(-134, -14, 0, 1) pt3dadd(-134, -44, 0, 1)}
comp[70] {pt3dclear() pt3dadd(-134, -44, 0, 1) pt3dadd(-134, -74, 0, 1)}
comp[71] {pt3dclear() pt3dadd(-134, -74, 0, 1) pt3dadd(-149, -89, 0, 1)}
comp[72] {pt3dclear() pt3dadd(-149, -89, 0, 1) pt3dadd(-149, -129, 0, 1)}
comp[73] {pt3dclear() pt3dadd(-134, -74, 0, 1) pt3dadd(-134, -104, 0, 1)}
comp[74] {pt3dclear() pt3dadd(-134, -104, 0, 1) pt3dadd(-134, -134, 0, 1)}
}
endtemplate pyr3