/* 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