load_file("nrngui.hoc") cvode_active(1) objref g,p,k,vbox,stim,syn,nc,si,param,apct, apco Dtaper=1 // setting the initial morphological parameters Ddend=1 lc=1 Dtrunk=1 ed=0.3 // synapse position in the oblique ed1=0.15 // recording position in the trunk weight=.3 // starting synaptic strenght delta=.05 // increase in synaptic strenght on each simulation ns=100 // nseg for each compartment param = new File() RmDend = 28000 CmDend = 1 RaAll= 150 Vrest = -65 dt = 0.1 gna =0.025 gkdr =0.01 celsius = 35.0 KMULT =0.03 KMULTP =0.03 ghd =0.00005 tstop = 20 create dend[3] // creates 3 dendrites connect dend[1](0), dend[0](0.5) // connecting the trunk with the branch point connect dend[2](0), dend[1](1) // connecting the branch point with the oblique dendrite dend[0] {nseg = ns diam=1 L = 240 insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend} dend[1] {nseg = ns diam=1 L = lc insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend} dend[2] {nseg = ns diam=1 L = 120 insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend} g = new Graph() // vtrunk graph g.size(0,tstop,-70,30) g.addvar("dend[0].v(ed1)",1,1,tstop,0,2) g.label(0.75,0.75,"time (ms)") g.label(0,0.95,"vtrunk (mV)") p = new PlotShape() //Shape plot p.exec_menu("Shape Plot") p.variable("v") p.show(0) p.label(0.6,0.7,"Regular branches") k = new Graph() // Fig. 6, inset k.size(0.1,0.4,0,20) k.label(0.15,0.7,"AP") k.label(0.15,0.25,"d-spike",2, 1, 0.1, 0.1, 9) k.label(0.05,0.95,"threshold (nS)") k.label(0.7,0.15,"d_dend/d_trunk") // k.label(0.7,0.95,"FIG. 1E, inset") access dend[0] distance() forsec "dend" { //Ion channels insert hd ghdbar_hd=ghd insert na3 gbar_na3=gna insert kdr gkdrbar_kdr=gkdr insert kap gkabar_kap=0 insert kad gkabar_kad=0 for (x,0) { xdist = distance(x) ghdbar_hd(x) = ghd*(1+3*xdist/100) if (xdist > 100){ vhalfl_hd=-81 gkabar_kad(x) = KMULT*(1+xdist/100) } else { vhalfl_hd=-73 gkabar_kap(x) = KMULTP*(1+xdist/100) } } } proc init() { t=0 forall { insert ds v=Vrest if (ismembrane("nax") || ismembrane("na3")) {ena=55} if (ismembrane("kdr") || ismembrane("kap") || ismembrane("kad")) {ek=-90} if (ismembrane("hd") ) {ehd_hd=-30} for (x,0) { xdist = distance(x) if (xdist > 100){ vhalfl_hd=-81 gkabar_kad(x) = KMULT*(1+xdist/100) } else { vhalfl_hd=-73 gkabar_kap(x) = KMULTP*(1+xdist/100) } } } finitialize(Vrest) fcurrent() forall { for (x) { if (ismembrane("na3")||ismembrane("nax")){e_pas(x)=v(x)+(ina(x)+ik(x))/g_pas(x)} if (ismembrane("hd")) {e_pas(x)=e_pas(x)+i_hd(x)/g_pas(x)} } } cvode.re_init() cvode.event(tstop) g.begin() } proc advance() { fadvance() g.plot(t) g.flush() p.flush() k.flush() doNotify() } forsec "dend[2]"{ objectvar syn // putting a synapse in the oblique syn = new Exp2Syn(ed) syn.e=0 syn.tau1 = 0.5 syn.tau2 = 3 si= new NetStimm(ed) si.interval=0 si.number = 1 si.start=1 si.noise=0 } param.ropen("morph.txt") //opens the file with the branch morphological parameters proc run_simulation() { while(!param.eof()){ branch=branch+1 Ddend= param.scanvar() lc= param.scanvar() Dtaper= param.scanvar() Dtrunk= param.scanvar() dend[0] {diam(0:1)=Dtrunk:Dtrunk} dend[1] {diam(0:1)=Dtaper:Ddend L = lc} dend[2] {diam(0:1)=Ddend:Ddend} define_shape() dend[0] apct = new APCount(ed1) //AP count in the trunk apct.thresh=-20 dend[2] apco = new APCount(ed) //AP count in the oblique apco.thresh=-40 dend[2] syn.loc(ed) a=0 while(weight<20 && apct.n<1){ // increases the syn weight until 20 nS or until there is an AP weight=weight+delta nc = new NetCon(si,syn,0,0,weight*1.e-3) run() if (apco.n > 0){ a=a+1 if (a==1){ loc=weight delta=.25 k.mark(Ddend/Dtrunk, loc, "o",4,9,4) } } if (apct.n > 0){ print "branch",branch,"; d_dend/d_trunk",Ddend/Dtrunk,"; dspike(nS) ",loc,"; AP(nS) ",weight k.mark(Ddend/Dtrunk, weight, "o",7,1,2) } } weight=.15 if(apct.n<1){ print branch, ";", Ddend/Dtrunk, ";", loc, ";", "noAP" } } } xpanel("Run simulation") xbutton("Run simulation (takes 2 1/2 hours)","run_simulation()") xpanel()