begintemplate Mitral // ls - long secondary dendrites public soma, priden, secden, tuftden, hillock, initialseg public all, secdens, tufts, dendritic, somatic, somden, external_syn, synls, ncls public dampa, nsecden, ntuft public position, x, y, z create soma, priden, secden[2], tuftden[1], hillock, initialseg forall {Ra = 150} objref dendritic, somatic, somden, synodor, external_syn, all, secdens, tufts, axonal objref dampa, synls, ncls proc init() { synls = new List() synls.remove_all() ncls = new List() ncls.remove_all() nsecden = 2 ntuft = 1 subsets() topol() geometry() segments() memb() x = y = z = 0 // only change via position } proc createsec() { nsecden = $1 ntuft = $2 synls.remove_all() ncls.remove_all() create soma, priden, secden[nsecden], tuftden[ntuft], hillock, initialseg } proc subsets() { all = new SectionList() forall all.append() secdens = new SectionList() forsec "secden" secdens.append() tufts = new SectionList() forsec "tuftden" tufts.append() dendritic = new SectionList() forsec "priden" dendritic.append() forsec secdens dendritic.append() forsec tufts dendritic.append() somatic = new SectionList() soma somatic.append axonal = new SectionList() hillock axonal.append initialseg axonal.append // somden = new SectionList() // forsec somatic somden.append() // forsec dendritic somden.append() } proc topol() {local i localobj s if (numarg() > 0) if ($1 == 0) { // do not connect secondary dendrites }else{ // connect all secondary dendrites to soma (no branching) for i =0, nsecden-1 { connect secden[i](0), soma(.5) } } connect priden(0), soma(1) for i =0, ntuft-1 { connect tuftden[i](0), priden(1) } connect hillock(0), soma(0) connect initialseg(0), hillock(1) } proc segments() {local i, dx /*dx = 20 soma.nseg= 1 priden.nseg = int(priden.L/dx)+1 forsec tufts nseg = int(L/dx)+1 forsec secdens nseg = int(L/dx)+1*/ soma.nseg = 1 priden { if(n3d() > 1) nseg = n3d() - 1 } forsec tufts { if(n3d() > 1) nseg = n3d() - 1 } forsec secdens { if(n3d() > 1) nseg = n3d() - 1 } initialseg.nseg = 3 hillock.nseg = 3 } proc geometry() {local i basic_shape() soma { L = 25 diam = 20 } priden { L = 300 diam = 3 } // forsec tufts {rallbranch=20 L=300 diam(0:1)=.4:.4 } forsec tufts {L=300 diam(0:1)=.4:.4 } forsec secdens { L=1000 diam=2 } initialseg{ L=30 diam=1.5} hillock { L=5 diam(0:1) = soma.diam(0) : initialseg.diam(0) } //define_shape() } proc basic_shape() { soma {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, 1, 0, 1)} priden {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, 1, 0, 1)} forsec tufts {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, 1, 0, 1)} secden[0] {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(1, 0, 0, 1)} secden[1] {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(-1, 0, 0, 1)} hillock {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, -1, 0, 1)} initialseg {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, -1, 0, 1)} } proc memb() { local x totarea=0 forall { insert pas insert nax insert kamt insert kdrmt Ra=150 for (x) {totarea=totarea+area(x)} cm = 0.7 g_pas = 1/10000 e_pas = -65 ek = -90 ena = 50 } forsec dendritic { gbar_nax = 0.04 sh_nax=10 gbar_kdrmt = 0.001 gbar_kamt = 0.004 } forsec axonal { g_pas = 1/1000 gbar_nax = 0.8 sh_nax = 0 gbar_kamt = 0.08 gbar_kdrmt = 0.001 } forsec somatic { gbar_nax = 0.04 sh_nax = 0 gbar_kamt = 0.004 gbar_kdrmt = 0.001 } for i=0,ntuft-1 tuftden[i] { // priden { synodor = new Exp2Syn(0.1) synodor.e=0 synodor.tau1 = 20 synodor.tau2 = 200 synls.append(synodor) } soma { external_syn = new Exp2Syn(.5) external_syn.e=0 external_syn.tau1 = 5 external_syn.tau2 = 50 } } 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 } endtemplate Mitral