/*
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, Axon, inj1_, injBase_, injOffset_, ihold_, all, set_active, unset_active
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_, injBase_, injOffset_, ihold_
proc init() {
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_, injOffset_, ihold_
shape()
geom()
if( name_declared("method") != 5 ) method = 1
if( method == 1 ) spinecorr()
// for May3 cell: sa 21127
if ($2==1) {
forall {diam*=0.888}
forall {L*=0.888}
//{sa=0 forall{for(x) sa+=area(x)} print sa}
}
// for Dec15 cell: sa 18155
// revised this to: sa 22684
if ($2==2) {
forall {diam*=0.724}
forall {L*=0.724}
{sa=0 forall{for(x) sa+=area(x)} print sa}
}
// for Jun24IR2i cell: sa 27232.4 - comes to 27244
if ($2==3) {
forall {diam*=0.794}
forall {L*=0.794}
{sa=0 forall{for(x) sa+=area(x)} print sa}
}
setupIClamp()
// set up an offset current if using Dec15, because in this cell the
// 0pA recording leads to a positive mem.pot. change, and the -70mV
// recording leads to no mem.pot. change, so the injected current is
// actually +70pA compared to what is stated...
if ($2==2) {
//setupOffsetClamp()
}
//setupSEClamp()
//setupOffset()
set_active()
// MRFflags 1 2 3 are all setting passive properties
if ( $1 == 1 || $1 == 2 || $1 == 3 || $1 == 5) { unset_active() }
if( method == 2 ) spinecorr()
}
proc setupIClamp() {
comp[1] {
inj1_ = new IClamp(0.5)
inj1_.dur = 2000
inj1_.del = 15
inj1_.amp = -0.15
dnap = 0
dkc = 1.6
}
comp[1] {
ihold_ = new IClamp(0.5)
ihold_.dur = 2015
ihold_.del = -2000
ihold_.amp = 0
}
}
proc setupOffsetClamp() {
comp[1] {
injOffset_ = new IClamp(0.5)
injOffset_.dur = 2000
injOffset_.del = 15
injOffset_.amp = -0.07
}
}
// SE Clamp is an IClamp that holds the resting potential of the
// cell at a specific value - i.e. the resting potential of the
// cell is not actually -70mV, but it is held there by some
// mystery current injection.
// I'm using OffsetClamp for the moment, because I'm assuming that the
// resting potential is actually -70mV, and I don't have the SEClamp set up
// to do what it is supposed to do, and all I want to do is alter the amount
// of current being injected by +70mV, without having to change the
// configuration in the setupGenerators stage... anyway...
proc setupSEClamp() {
comp[1] {
injBase_ = new IClamp(0.5)
injBase_.dur = 7015
injBase_.del = -2000
injBase_.amp = -0.070
}
}
proc setupOffset() {
comp[1] {
insert offst
Vraise_offst = -70.0
on_offst = 15
W_offst = 5
we_offst = 5
}
}
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 unset_active() {
forsec Dendrites {
//gbar_cad = 0
gbar_naf = 0
gbar_nap = 0
gbar_kdr = 0
gbar_ka = 0
gbar_kc = 0
gbar_kahp = 0
gbar_k2 = 0
gbar_km = 0
gbar_cat = 0
gbar_cal = 0
gbar_ar = 0
}
forsec Soma {
//gbar_cad = 0
gbar_naf = 0
gbar_nap = 0
gbar_kdr = 0
gbar_ka = 0
gbar_kc = 0
gbar_kahp = 0
gbar_k2 = 0
gbar_km = 0
gbar_cat = 0
gbar_cal = 0
gbar_ar = 0
}
forsec Axon {
gbar_naf = 0
gbar_kdr = 0
gbar_ka = 0
gbar_k2 = 0
}
}
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