MODELTYPE = 0 use_mcell_ran4(1) lowindex = 1001 mcell_ran4_init(lowindex) highindex = 1 print "---------------------------SIM running-----------------------------" NMDAFLAG = 0 if (NMDAFLAG == 0) { //only AMPA-R wtAmpa = 1 wtNmda = 0 } else { //NMDAFLAG = 1, with both AMPA-R, NMDA-R wtAmpa = 0.8 wtNmda = 0.2 } soma area(0.5) TOTALDEND = APIDENDMAX + BASDENDMAX + 3 //"3": counting start at 0 objref dend[TOTALDEND] /**************************************************************************** Grouping dendritic sections together in an array dend, later for being used to randomly put synapses on the proximal apical, distal apical and basal dendrite *****************************************************************************/ index = 0 forsec "dendrite" { //this will includes both dendrites and apical-dendrites dend[index] = new SectionRef() index += 1 } //quadratic function fitting result A and B are set in cell's hoc file A = 0.0036 B = 156 //synapses rise and decay time constants from andrasfalvy mody TAU1e=0.5 TAU2e=5.5 TAU1i=0.73 TAU2i=6.5 dist=1 rel=0.1 Rm = 28000 //unit: Ohm-cm^2 RmDend = Rm/1 RmSoma = Rm RmAx = Rm Cm = 1 CmSoma= Cm CmAx = Cm CmDend = Cm*1 RaAll= 50 //unit: Ohm-cm RaSoma=50 RaAx = 50 Vrest = -65 gna = .02 AXONM = 2 gkdr = 0.01 celsius = 35.0 KMULT = 0.025 KMULTP = 0.025 gcan=0.0//005 gcal=0.0//005 gcat=0.0//005 ghd=0.00005 nash=0 forsec "axon" {insert pas e_pas=Vrest g_pas = 1/RmAx Ra=RaAx cm=CmAx} forsec "soma" { insert pas e_pas=Vrest g_pas = 1/RmSoma Ra=RaSoma cm=CmSoma insert ds } forsec "dendrite" {insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend} forsec "user5" {insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend} access soma freq=50 load_file("fixnseg.hoc") geom_nseg() tot=0 forall {tot=tot+nseg} distance() maxdist=0 forsec "user5" for(x) {if (distance(x)>maxdist) {maxdist=distance(x)}} /**************************************************************************************** The following two lines of declaration are to match up ModelTypeC.hoc mapping bifurcation. They are not used in ModelTypeI.hoc & ModelPassive.hoc ****************************************************************************************/ objref outfile, sref, blist[USER5MAX+1], aplist strdef dend2, trunk forsec "axon" { insert nax gbar_nax=gna * AXONM sh_nax=nash insert kdr gkdrbar_kdr=gkdr insert kap gkabar_kap = KMULTP*0.2 } forsec "soma" { insert hd ghdbar_hd=ghd vhalfl_hd=-73 insert na3 ar_na3=1 sh_na3=nash gbar_na3=gna insert kdr gkdrbar_kdr=gkdr insert kap gkabar_kap = KMULTP } /*---------------------setting up apical oblique dendrite channel kinetics--------*/ for (i=0; i<= APIDENDMAX; i += 1) { access apical_dendrite[i] { insert ds if (diam>0.35) {factor=1} else {factor=1} insert hd ghdbar_hd=ghd insert na3 ar_na3=1 gbar_na3=gna*factor sh_na3=nash insert kdr gkdrbar_kdr=gkdr*factor insert kap gkabar_kap=0 insert kad gkabar_kad=0 for (x) if (x>0 && x<1) { xdist = distance(x) ghdbar_hd(x) = factor*ghd*(1+3*xdist/100) if (xdist > 100){ vhalfl_hd=-81 gkabar_kad(x) = factor*KMULT*(1+xdist/100) } else { vhalfl_hd=-73 gkabar_kap(x) = factor*KMULTP*(1+xdist/100) } } } } /*---------------------setting up basal dendrite channel kinetics--------*/ for (i=0; i <= BASDENDMAX; i += 1) { access dendrite[i] { if (diam>0.35) {factor=1} else {factor=1} insert hd ghdbar_hd=ghd insert na3 ar_na3=1 gbar_na3=gna*factor sh_na3=nash insert kdr gkdrbar_kdr=gkdr*factor insert kap gkabar_kap=0 insert kad gkabar_kad=0 for (x) if (x>0 && x<1) { xdist = distance(x) ghdbar_hd(x) = factor*ghd*(1+3*xdist/100) if (xdist > 100){ vhalfl_hd=-81 gkabar_kad(x) = factor*KMULT*(1+xdist/100) } else { vhalfl_hd=-73 gkabar_kap(x) = factor*KMULTP*(1+xdist/100) } } } } /*----------------------------setting up main trunk channel kinetics-------------*/ forsec "user5" { // the main trunk insert ds insert hd ghdbar_hd=ghd insert na3 ar_na3=1 gbar_na3=gna sh_na3=nash insert kdr gkdrbar_kdr=gkdr insert kap gkabar_kap=0 insert kad gkabar_kad=0 for (x) if (x>0 && x<1) { 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) } } } access soma objref pw pw = new PWManager() pw.landscape(1) proc init() { t=0 forall { v=Vrest if (ismembrane("nax") || ismembrane("na3")) {ena=55} if (ismembrane("kdr") || ismembrane("kap") || ismembrane("kad")) {ek=-90} if (ismembrane("hd") ) {ehd_hd=-30} } 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) access soma } proc advance() { fadvance() } //------------end modeltypeI dt = 0.1 steps_per_ms = 1/dt objref b,apc,rc,rd,fs,rs,rex,rob,rtrp,ror,rexfs,rexrs,pc,rci outfile = new File() /****************************************************************************** Create totSyn number(here is 1000) synapses on either proximal apical dendrite, distal apical dendrite or basal dendrite (based on the flag "choice"). Also sets the synaptic weight following Type I or Type C model based on the value of MODELTYPE. MODELTYPE is inherited. Here each synapse is connected to individual NetStim cell ******************************************************************************/ choice = 1 if (choice == 1 || choice == 2) { BEGINSECTION= 0 ENDSECTION= TOTALDEND - 1 } else { BEGINSECTION= 0 ENDSECTION= BASDENDMAX } rc = new Random() rc.MCellRan4(highindex+1) rc.uniform(BEGINSECTION, ENDSECTION) rd = new Random() rd.MCellRan4(highindex+2) rd.uniform(0,1) pc = new Random()// pc.MCellRan4(highindex+6) pc.normal(5,5) fs = new Random() // basket fs.MCellRan4(highindex+5) fs.normal(2.5,0.85) // variance= SEM*sqrt(n) from scanziani sem=.2 n=18 rs = new Random()// bistratified rs.MCellRan4(highindex+7) rs.normal(4.2,1.75) // variance= SEM*sqrt(n) from scanziani sem=.3 n=34 rex = new Random() rex.MCellRan4(highindex+8) rex.uniform(0, 28858) rexfs = new Random() rexfs.MCellRan4(highindex+9) rexfs.uniform(0,nfs) rexrs = new Random() rexrs.MCellRan4(highindex+9) rexrs.uniform(0,nrs) rob = new Random() rob.MCellRan4(highindex+10) rob.uniform(0, APIDENDMAX-1) rtrp = new Random() rtrp.MCellRan4(highindex+11) rtrp.uniform(0, USER5MAX-1) ror = new Random() ror.MCellRan4(highindex+12) ror.uniform(0, BASDENDMAX-1) cutsim=0 totSyn=28868+1379 we=0 access soma soma distance() objref Ens[3000], syn[3000], nc[3000],Ensi[3000], syni[3000], nci[3000],Ensii[3000], synii[3000], ncii[3000] while(we<1){ for r=0, sim{ // how many sims per syn # fssin=int((27.771*log(nsyn) - 65.645)*nfs*0.01) rssin=int((39.959*log(nsyn) - 160.57)*nrs*0.01) if (fssin<=0){fssin=0} if (fssin>=nfs){fssin=nfs} if (rssin<=0){rssin=0} if (rssin>=nrs){rssin=nrs} for (j=0; j <= nsyn-1; j +=1) { c=int(rex.repick()) loc=rd.repick() if (c<14425){ //obliques exc den=int(rob.repick()) apical_dendrite[den]{ Ens[j] = new NetStim(loc) syn[j] = new Exp2Syn(loc) nc[j] = new NetCon(Ens[j], syn[j],0,0,((A*distance(loc)^2)+B)*pc_sil*multp*1.e-6) } } if (c>14424 && c<14429){// trunk apical prox exc den=int(rtrp.repick()) access user5[den] if (distance(loc)<100){ user5[den]{ Ens[j] = new NetStim(loc) syn[j] = new Exp2Syn(loc) nc[j] = new NetCon(Ens[j], syn[j],0,0,((A*distance(loc)^2)+B)*pc_sil*multp*1.e-6) }}else{j=j-1}} if (c>14428 && c<14706){ //trunk apical med exc den=int(rtrp.repick()) access user5[den] if (distance(loc)>100 && distance(loc)<350){ user5[den]{ Ens[j] = new NetStim(loc) syn[j] = new Exp2Syn(loc) nc[j] = new NetCon(Ens[j], syn[j],0,0,((A*distance(loc)^2)+B)*pc_sil*multp*1.e-6) }}else{j=j-1} } if (c>14705 && c<16877){ //trunk apical distal exc den=int(rtrp.repick()) access user5[den] if (distance(loc)>350 && distance(loc)<550){ user5[den]{ Ens[j] = new NetStim(loc) syn[j] = new Exp2Syn(loc) nc[j] = new NetCon(Ens[j], syn[j],0,0,((A*distance(loc)^2)+B)*pc_sil*multp*1.e-6) }}else{j=j-1} } if (c>16876 && c<17123){//basal prox exc den=int(ror.repick()) access dendrite[den] if (distance(loc)<50){ dendrite[den]{ Ens[j] = new NetStim(loc) syn[j] = new Exp2Syn(loc) nc[j] = new NetCon(Ens[j], syn[j],0,0,((A*distance(loc)^2)+B)*pc_sil*multp*1.e-6) }}else{j=j-1} } if (c>17122){ //basal distal exc den=int(ror.repick()) access dendrite[den] if (distance(loc)>50){ dendrite[den]{ Ens[j] = new NetStim(loc) syn[j] = new Exp2Syn(loc) nc[j] = new NetCon(Ens[j], syn[j],0,0,((A*distance(loc)^2)+B)*pc_sil*multp*1.e-6) //print "PC", "----", nc[j].weight, "mult ", multp }}else{j=j-1} } Ens[j].number = 1 Ens[j].start=pc.repick() Ens[j].interval=inter Ens[j].noise=noise syn[j].e=0 syn[j].tau1 = TAU1e syn[j].tau2 = TAU2e } for (y=0; y <= fssin-1; y +=1) { loci=rd.repick() d=int(rexfs.repick()) if (d<193){// trunk apical prox inhi den=int(rtrp.repick()) access user5[den] if (distance(loci)<100){ //FS user5[den]{ Ensi[y] = new NetStim(loci) Ensi[y].number = 1 Ensi[y].interval = inter Ensi[y].start=fs.repick() Ensi[y].noise=0 syni[y] = new Exp2Syn(loci) syni[y].e=-80 syni[y].tau1 = TAU1i syni[y].tau2 = TAU2i nci[y] = new NetCon(Ensi[y],syni[y],0,0,fs_sil) }}else{y=y-1}}else{ den=int(ror.repick())//basal prox inhi access dendrite[den] if (distance(loci)<50){ //FS dendrite[den]{ Ensi[y] = new NetStim(loci) Ensi[y].number = 1 Ensi[y].interval = inter Ensi[y].start=fs.repick() Ensi[y].noise=0 syni[y] = new Exp2Syn(loci) syni[y].e=-80 syni[y].tau1 = TAU1i syni[y].tau2 = TAU2i nci[y] = new NetCon(Ensi[y],syni[y],0,0,fs_sil) }}else{y=y-1}}} for (q=0; q <= rssin-1; q +=1) { loci=rd.repick() m=int(rexrs.repick()) if (m<438){ den=int(rob.repick()) //obliques inhi apical_dendrite[den]{ Ensii[q] = new NetStim(loci) Ensii[q].number = 1 Ensii[q].interval = inter Ensii[q].noise=0 synii[q] = new Exp2Syn(loci) synii[q].e=-80 synii[q].tau1 = TAU1i synii[q].tau2 = TAU2i if (distance(loci)>100){ Ensii[q].start=fs.repick() ncii[q] = new NetCon(Ensii[q],synii[q],0,0,rs_sil) }else{ Ensii[q].start=fs.repick() ncii[q] = new NetCon(Ensii[q],synii[q],0,0,fs_sil) } } } if (m>437 && m<485){ //trunk dist inhi den=int(rtrp.repick()) access user5[den] if (distance(loci)>350 && distance(loci)<550){ user5[den]{ Ensii[q] = new NetStim(loci) Ensii[q].number = 1 Ensii[q].interval = inter Ensii[q].start=fs.repick() Ensii[q].noise=0 synii[q] = new Exp2Syn(loci) synii[q].e=-80 synii[q].tau1 = TAU1i synii[q].tau2 = TAU2i ncii[q] = new NetCon(Ensii[q],synii[q],0,0,rs_sil) }}else{q=q-1} } if (m>484 && m<890){ // oriens dist inhi den=int(ror.repick()) access dendrite[den] if (distance(loci)>50){ dendrite[den]{ Ensii[q] = new NetStim(loci) Ensii[q].number = 1 Ensii[q].interval = inter Ensii[q].start=fs.repick() Ensii[q].noise=0 synii[q] = new Exp2Syn(loci) synii[q].e=-80 synii[q].tau1 = TAU1i synii[q].tau2 = TAU2i ncii[q] = new NetCon(Ensii[q],synii[q],0,0,rs_sil) }}else{q=q-1} } if (m>889){ //trunk dist inhi den=int(rtrp.repick()) access user5[den] if (distance(loci)>100 && distance(loci)<350){ user5[den]{ Ensii[q] = new NetStim(loci) Ensii[q].number = 1 Ensii[q].interval = inter Ensii[q].start=fs.repick() Ensii[q].noise=0 synii[q] = new Exp2Syn(loci) synii[q].e=-80 synii[q].tau1 = TAU1i synii[q].tau2 = TAU2i ncii[q] = new NetCon(Ensii[q], synii[q],0,0,rs_sil) }}else{q=q-1} }} for (q=0; q <= rssin-1; q +=1) { loci=rd.repick() m=int(rexrs.repick()) if (m<438){ den=int(rob.repick()) //obliques inhi apical_dendrite[den]{ Ensii[q] = new NetStim(loci) synii[q] = new Exp2Syn(loci) if (distance(loci)>100){ Ensii[q].start=fs.repick() ncii[q] = new NetCon(Ensii[q], synii[q],0,0,rs_sil) }else{ Ensii[q].start=fs.repick() ncii[q] = new NetCon(Ensii[q],synii[q],0,0,fs_sil) } } } if (m>437 && m<485){ //trunk dist inhi den=int(rtrp.repick()) access user5[den] if (distance(loci)>350 && distance(loci)<550){ user5[den]{ Ensii[q] = new NetStim(loci) Ensii[q].start=fs.repick() synii[q] = new Exp2Syn(loci) ncii[q] = new NetCon(Ensii[q], synii[q],0,0,rs_sil) }}else{q=q-1} } if (m>484 && m<890){ // oriens dist inhi den=int(ror.repick()) access dendrite[den] if (distance(loci)>50){ dendrite[den]{ Ensii[q] = new NetStim(loci) Ensii[q].start=fs.repick() synii[q] = new Exp2Syn(loci) ncii[q] = new NetCon(Ensii[q], synii[q],0,0,rs_sil) }}else{q=q-1} } if (m>889){ //trunk dist inhi den=int(rtrp.repick()) access user5[den] if (distance(loci)>100 && distance(loci)<350){ user5[den]{ Ensii[q] = new NetStim(loci) Ensii[q].start=fs.repick() synii[q] = new Exp2Syn(loci) ncii[q] = new NetCon(Ensii[q], synii[q],0,0,rs_sil) }}else{q=q-1} } Ensii[q].number = 1 Ensii[q].interval = inter Ensii[q].noise=0 synii[q].e=-80 synii[q].tau1 = TAU1i synii[q].tau2 = TAU2i } forsec "axon[10]" { apc = new APCount(.5) apc.thresh=-20 } run() if (apc.n>0.5){ apc.n=1 time=apc.time+time } apcc=apcc+apc.n strdef b1, c1,d1 if (apcc>flag){ flag=flag+1 a1 = time/(apcc+0.00000001) b1 = " " sprint(c1,"%s%g%s",c1,a1,b1) }else{ d1 = "-" b1 = " " sprint(c1,"%s%s%s",c1,d1,b1) } } nsyn=nsyn+1 time=0 if(apcc/(sim+1)==1){ cutsim=cutsim+1 if (cutsim>2.5){ we=10000 cutsim=0 } } if((apcc/(sim+1))>=0.5&&flag2<1){ flag2=flag2+1 print "neuron#",cou, "syn#", nsyn-1,fssin,rssin, "%spike: ", apcc/(sim+1),"onsets: ",c1 outfile.aopen(filename) outfile.printf("%g %s %g %s %s %g %g %g %g %g %g %s\n",frac,filename,cou,infilename,"1",nsyn-1,fssin,rssin,apcc/(sim+1),apc.n,time/(apcc+0.00000001),c1) outfile.close() }else{ if(apcc>0||flag3>0){ flag3=flag3+1 outfile.aopen(filename) outfile.printf("%g %s %g %s %s %g %g %g %g %g %g %s\n",frac, filename,cou,infilename,"0",nsyn-1,fssin,rssin,apcc/(sim+1),apc.n,time/(apcc+0.00000001),c1) outfile.close() }} c1="" apcc=0 flag=0 } flag=0 flag2=0 flag3=0 outfile.aopen(filename) outfile.printf("%s %s %s %s % \n"," "," "," "," "," ") outfile.close()