// Setting synaptic stimuli to cell model // Stimuli are single synchronous spikes to a set of input synapses // (more complicated stimuli, such as bursts, with repetitions, are possible) // Last update: BPG 2-5-14 // number of synaptic contacts (initial values setting in calling file) nCA3max = nCA3 // apical nCA3bmax = nCA3b // basal nECmax = nEC nBCmax = nBC nBSCmax = nBSC // PC synapse types AMPA = 1 AMNM = 2 // AMPA/NMDA GABAA = 3 GABAB = 4 flag_spines = 1 // set to 1 if SR spines required flag_ECspines = 1 // set to 1 if spines required in SLM tot_spines = 0 if (flag_spines == 1) tot_spines = nCA3+nCA3b if (flag_ECspines == 1) tot_spines = tot_spines+nEC flag_ECbranch = 0 // set to 1 if EC synapses on single branch flag_SRbranch = 0 // set>0 if SR synapses on single branch: 1=proximal, 2=distal soma_caR = 0.03 soma_sAHP = 0.001 soma_mAHP = 0.001 caR_init = 0.03 sAHP_init = 0.001 mAHP_init = 0.001 caR_spine = 0.03 sAHP_spine = 0.001 mAHP_spine = 0.001 STARTDEL = 50 // msecs THETA = 200 // msecs (5 Hz) GAMMA = 10 // msecs (100 Hz) ECCA3DEL = 0 // msecs SIMDUR = STARTDEL + (THETA*5) // simulation duration (msecs) // EC (PP) excitation ECNUM = 100 // number of EC spikes ECSTART = STARTDEL // time of first EC spike ECNOISE = 0 // EC ISI noise ECINT = 1000 // EC spike ISI (one spike for simulation period) ECBINT = 1000 // EC burst interval ECBLEN = 10 // EC burst length //ECINT = GAMMA // EC spike ISI //ECBINT = THETA // EC burst interval //ECBLEN = GAMMA*5 // EC burst length ECWGT = 0.0001 // EC weight to PCs (AMPA) ECNWGT = 0.0008 // EC weight to PCs (NMDA) ECDEL = 1 // EC delay // SC (SR) excitation CNUM = 100 // number of cue spikes CSTART = STARTDEL+ECCA3DEL // time of first cue spike CNOISE = 0 // cue ISI noise CINT = 1000 // EC spike ISI (one spike for simulation period) CBINT = 1000 // EC burst interval CBLEN = 10 // EC burst length //CINT = GAMMA // cue spike ISI //CBINT = THETA // EC burst interval //CBLEN = GAMMA*5 // EC burst length CAWGT = 0.0005 // cue weight (AMPA) CNWGT = 0.001 // excitatory weights (NMDA) CAWGTb = 0.0005 // cue weight (basal AMPA) CNWGTb = 0.001 // excitatory weights (basal NMDA) CDEL = 1 // cue delay // BC inhibition BCNUM = 100 // number of BC spikes BCSTART = STARTDEL+1000 // time of first cue spike BCINT = GAMMA // BC spike ISI BCNOISE = 0.05 // BC ISI noise BCBINT = THETA-(GAMMA*5) // BC burst interval BCBLEN = THETA*10 // BC burst length (continuous inhib) //BCBLEN = GAMMA*10 // BC burst length BCWGT = 0.0 // BC weight (GABAA) BCDEL = 3 // BC delay // BSC inhibition BSCNUM = 100 // number of BC spikes BSCSTART = STARTDEL+1000 // time of first cue spike BSCINT = GAMMA // BC spike ISI BSCNOISE = 0.05 // BC ISI noise BSCBINT = THETA-(GAMMA*5) // BC burst interval BSCBLEN = THETA*10 // BC burst length (continuous inhib) //BSCBLEN = GAMMA*10 // BC burst length BSCWGT = 0.0 // BC weight (GABAA) BSCDEL = 3 // BC delay {load_file("ranstream.hoc")} // to give each cell its own sequence generator {load_file("randomlocation.hoc")} {load_file("CA1PC.hoc")} //{load_file("stim_cell.hoc")} {load_file("burst_cell.hoc")} objref cell objref CA3list, EClist, BClist, BSClist objref ncCA3list, ncCA3Nlist, ncEClist, ncECNlist, ncBClist, ncBSClist mcell_ran4_init(connect_random_low_start_) cell = new PyramidalCell() access cell.soma print "Segments: ", cell.totnseg, "; Area: ", cell.totarea objref rs, nil rs = new RandomStream(my_seed) rs.start() proc makeCA3() {local i if (flag_SRbranch == 0) { cell.newsyn(AMNM, nCA3, cell.SR_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SR } else { if (flag_SRbranch == 1) { // proximal branch cell.newsyn(AMNM, nCA3, cell.SRbrp_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SR } else if (flag_SRbranch == 2) { // distal branch cell.newsyn(AMNM, nCA3, cell.SRbrd_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SR } else if (flag_SRbranch == 3) { // all proximal cell.newsyn(AMNM, nCA3, cell.SRprox_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SR } else if (flag_SRbranch == 4) { // all distal cell.newsyn(AMNM, nCA3, cell.SRdist_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SR } else if (flag_SRbranch == 5) { // trunk 1 cell.newsyn(AMNM, nCA3, cell.SRbrt_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SR } else if (flag_SRbranch == 6) { // trunk 2 cell.newsyn(AMNM, nCA3, cell.SRbrt2_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SR } else { // trunk combined cell.newsyn(AMNM, nCA3, cell.SRbrtc_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SR } } CA3list = new List() ncCA3list = new List() // AMPA synapses ncCA3Nlist = new List() // NMDA synapses for (i=0; i < nCA3; i=i+1) { CA3list.append(new BurstCell()) CA3list.o(i).connect2target(nil) // attach spike detector to cell ncCA3list.append(new NetCon(CA3list.o(i).stim, cell.pre_list.o(2*i))) ncCA3Nlist.append(new NetCon(CA3list.o(i).stim, cell.pre_list.o(2*i+1))) CA3list.o(i).stim.number = CNUM CA3list.o(i).stim.start = CSTART CA3list.o(i).stim.interval = CINT CA3list.o(i).stim.noise = CNOISE CA3list.o(i).stim.burstint = CBINT CA3list.o(i).stim.burstlen = CBLEN ncCA3list.o(i).weight = CAWGT ncCA3list.o(i).delay = CDEL ncCA3Nlist.o(i).weight = CNWGT ncCA3Nlist.o(i).delay = CDEL } } // NOTE: must be created after CA3 SR inputs proc makeCA3b() {local i cell.newsyn(AMNM, nCA3b, cell.basal_list, rs.r, flag_spines, tot_spines) // CA3 AMPA/NMDA synapses in SO for (i=nCA3; i < nCA3+nCA3b; i=i+1) { CA3list.append(new BurstCell()) CA3list.o(i).connect2target(nil) // attach spike detector to cell ncCA3list.append(new NetCon(CA3list.o(i).stim, cell.pre_list.o(2*i))) ncCA3Nlist.append(new NetCon(CA3list.o(i).stim, cell.pre_list.o(2*i+1))) CA3list.o(i).stim.number = CNUM CA3list.o(i).stim.start = CSTART CA3list.o(i).stim.interval = CINT CA3list.o(i).stim.noise = CNOISE CA3list.o(i).stim.burstint = CBINT CA3list.o(i).stim.burstlen = CBLEN ncCA3list.o(i).weight = CAWGTb ncCA3list.o(i).delay = CDEL ncCA3Nlist.o(i).weight = CNWGTb ncCA3Nlist.o(i).delay = CDEL } } // NOTE: synapse indexing on basis that CA3 AMPA/NMDA synapses created first proc makeEC() {local i if (flag_ECbranch == 0) { cell.newsyn(AMNM, nEC, cell.SLM_list, rs.r, flag_ECspines, tot_spines) // EC AMPA/NMDA synapses in SLM } else if (flag_ECbranch == 1) { // one branch cell.newsyn(AMNM, nEC, cell.SLMbr_list, rs.r, flag_ECspines, tot_spines) // EC AMPA/NMDA synapses in SLM } else { // trunk group cell.newsyn(AMNM, nEC, cell.SLMbrt_list, rs.r, flag_ECspines, tot_spines) // EC AMPA/NMDA synapses in SLM } EClist = new List() ncEClist = new List() ncECNlist = new List() for (i=0; i < nEC; i=i+1) { EClist.append(new BurstCell()) EClist.o(i).connect2target(nil) // attach spike detector to cell ncEClist.append(new NetCon(EClist.o(i).stim, cell.pre_list.o(2*i+2*(nCA3+nCA3b)))) ncECNlist.append(new NetCon(EClist.o(i).stim, cell.pre_list.o(2*i+2*(nCA3+nCA3b)+1))) EClist.o(i).stim.number = ECNUM EClist.o(i).stim.start = ECSTART EClist.o(i).stim.interval = ECINT EClist.o(i).stim.noise = ECNOISE EClist.o(i).stim.burstint = ECBINT EClist.o(i).stim.burstlen = ECBLEN ncEClist.o(i).weight = ECWGT ncEClist.o(i).delay = ECDEL ncECNlist.o(i).weight = ECNWGT ncECNlist.o(i).delay = ECDEL } } // NOTE: synapse indexing on basis that CA3/EC AMPA/NMDA synapses created first proc makeBC() {local i cell.newsyn(GABAA, nBC, cell.soma_list, rs.r, 0, 0) // BC GABAA synapses in soma BClist = new List() ncBClist = new List() for (i=0; i < nBC; i=i+1) { BClist.append(new BurstCell()) BClist.o(i).connect2target(nil) // attach spike detector to cell ncBClist.append(new NetCon(BClist.o(i).stim, cell.pre_list.o(i+2*(nCA3+nCA3b+nEC)))) BClist.o(i).stim.number = BCNUM BClist.o(i).stim.start = BCSTART BClist.o(i).stim.interval = BCINT BClist.o(i).stim.noise = BCNOISE BClist.o(i).stim.burstint = BCBINT BClist.o(i).stim.burstlen = BCBLEN ncBClist.o(i).weight = BCWGT ncBClist.o(i).delay = BCDEL } } // NOTE: synapse indexing on basis that CA3/EC AMPA/NMDA synapses created first proc makeBSC() {local i cell.newsyn(GABAA, nBSC, cell.SR_list, rs.r, 0, 0) // BSC GABAA synapses in SR BSClist = new List() ncBSClist = new List() for (i=0; i < nBC; i=i+1) { BSClist.append(new BurstCell()) BSClist.o(i).connect2target(nil) // attach spike detector to cell ncBSClist.append(new NetCon(BSClist.o(i).stim, cell.pre_list.o(i+2*(nCA3+nCA3b+nEC)+nBC))) BSClist.o(i).stim.number = BSCNUM BSClist.o(i).stim.start = BSCSTART BSClist.o(i).stim.interval = BSCINT BSClist.o(i).stim.noise = BSCNOISE BSClist.o(i).stim.burstint = BSCBINT BSClist.o(i).stim.burstlen = BSCBLEN ncBSClist.o(i).weight = BSCWGT ncBSClist.o(i).delay = BSCDEL } } proc setCA3() {local i for (i=0; i < nCA3; i=i+1) { CA3list.o(i).stim.number = CNUM CA3list.o(i).stim.start = CSTART CA3list.o(i).stim.interval = CINT CA3list.o(i).stim.noise = CNOISE CA3list.o(i).stim.burstint = CBINT CA3list.o(i).stim.burstlen = CBLEN ncCA3list.o(i).weight = CAWGT ncCA3list.o(i).delay = CDEL ncCA3Nlist.o(i).weight = CNWGT ncCA3Nlist.o(i).delay = CDEL } // silence any extra synapses for (i=nCA3; i < nCA3max; i=i+1) { CA3list.o(i).stim.number = 0 ncCA3list.o(i).weight = 0 ncCA3Nlist.o(i).weight = 0 } } proc setCA3b() {local i for (i=nCA3max; i < nCA3max+nCA3b; i=i+1) { CA3list.o(i).stim.number = CNUM CA3list.o(i).stim.start = CSTART CA3list.o(i).stim.interval = CINT CA3list.o(i).stim.noise = CNOISE CA3list.o(i).stim.burstint = CBINT CA3list.o(i).stim.burstlen = CBLEN ncCA3list.o(i).weight = CAWGTb ncCA3list.o(i).delay = CDEL ncCA3Nlist.o(i).weight = CNWGTb ncCA3Nlist.o(i).delay = CDEL } // silence any extra synapses for (i=nCA3max+nCA3b; i < nCA3max+nCA3bmax; i=i+1) { CA3list.o(i).stim.number = 0 ncCA3list.o(i).weight = 0 ncCA3Nlist.o(i).weight = 0 } } proc setEC() {local i for (i=0; i < nEC; i=i+1) { EClist.o(i).stim.number = ECNUM EClist.o(i).stim.start = ECSTART EClist.o(i).stim.interval = ECINT EClist.o(i).stim.noise = ECNOISE EClist.o(i).stim.burstint = ECBINT EClist.o(i).stim.burstlen = ECBLEN ncEClist.o(i).weight = ECWGT ncEClist.o(i).delay = ECDEL ncECNlist.o(i).weight = ECNWGT ncECNlist.o(i).delay = ECDEL } // silence any extra synapses for (i=nEC; i < nECmax; i=i+1) { EClist.o(i).stim.number = 0 ncEClist.o(i).weight = 0 ncECNlist.o(i).weight = 0 } } proc setBC() {local i for (i=0; i < nBC; i=i+1) { BClist.o(i).stim.number = BCNUM BClist.o(i).stim.start = BCSTART BClist.o(i).stim.interval = BCINT BClist.o(i).stim.noise = BCNOISE BClist.o(i).stim.burstint = BCBINT BClist.o(i).stim.burstlen = BCBLEN ncBClist.o(i).weight = BCWGT ncBClist.o(i).delay = BCDEL } } proc setBSC() {local i for (i=0; i < nBC; i=i+1) { BSClist.o(i).stim.number = BSCNUM BSClist.o(i).stim.start = BSCSTART BSClist.o(i).stim.interval = BSCINT BSClist.o(i).stim.noise = BSCNOISE BSClist.o(i).stim.burstint = BSCBINT BSClist.o(i).stim.burstlen = BSCBLEN ncBSClist.o(i).weight = BSCWGT ncBSClist.o(i).delay = BSCDEL } } proc showsyn() { //cell.showsyn() // show all synapses cell.showlayersyn(0, $1*2-1, 2, 1) // CA3 apical synapses cell.showlayersyn(nCA3max*2, (nCA3max+$1)*2-1, 5, 0) // CA3 basal synapses cell.showlayersyn((nCA3max+nCA3bmax)*2, (nCA3+nCA3b+$1)*2-1, 3, 0) // EC synapses //cell.showlayersyn((nCA3+nCA3b+nEC)*2, (nCA3+nCA3b+nEC)*2+nBC-1, 4, 0) // BC synapses //cell.showlayersyn((nCA3+nCA3b+nEC)*2+nBC, (nCA3+nCA3b+nEC)*2+nBC+nBSC-1, 3, 0) // BSC synapses } proc analcamx() {localobj cam // analyse max ca across spine heads // parameters provide spine list and start and end indices of required spines cam=new Vector() forsec $o1 { cam.append(camax_dca(0.5)) } if ($2 <= $3) { print cam.mean($2,$3), cam.max($2,$3), cam.min($2,$3), cam.stdev($2,$3) } } proc analcasp() { // analyse max ca across spine heads // parameters provide start and end indices of required spines // assumes that spines are present in all layers print "EC spines" analcamx(cell.spine_list, nCA3max+nCA3bmax, nCA3max+nCA3bmax+nEC-1) print "SR spines" analcamx(cell.spine_list, 0, nCA3-1) print "SO spines" analcamx(cell.spine_list, nCA3max, nCA3max+nCA3b-1) } proc makexsyns() { xpanel("Synapses") xlabel("CA3 apical") xvalue("Number", "nCA3", 1, "setCA3()") xvalue("AMPA", "CAWGT", 1, "setCA3()") xvalue("NMDA", "CNWGT", 1, "setCA3()") xlabel("CA3 basal") xvalue("Number", "nCA3b", 1, "setCA3b()") xvalue("AMPA", "CAWGTb", 1, "setCA3b()") xvalue("NMDA", "CNWGTb", 1, "setCA3b()") xlabel("EC") xvalue("Number", "nEC", 1, "setEC()") xvalue("AMPA", "ECWGT", 1, "setEC()") xvalue("NMDA", "ECNWGT", 1, "setEC()") xlabel("GABAA") xvalue("BC", "BCWGT", 1, "setBC()") xvalue("BSC", "BSCWGT", 1, "setBSC()") xpanel() } proc makexchans() { xpanel("Ion Channels") xlabel("KA") xvalue("gka", "cell.gka", 1, "cell.set_dendrite()") xlabel("Ih") xvalue("gh", "cell.ghd", 1, "cell.set_dendrite()") xpanel() } proc makexstim() { xpanel("Stimuli") xlabel("CA3 apical") xvalue("Start time", "CSTART", 1, "setCA3()") xvalue("Total spikes", "CNUM", 1, "setCA3()") xvalue("Spike interval", "CINT", 1, "setCA3()") xvalue("Interval noise", "CNOISE", 1, "setCA3()") xvalue("Burst interval", "CBINT", 1, "setCA3()") xvalue("Burst length", "CBLEN", 1, "setCA3()") xlabel("CA3 basal") xvalue("Start time", "CSTART", 1, "setCA3b()") xvalue("Total spikes", "CNUM", 1, "setCA3b()") xvalue("Spike interval", "CINT", 1, "setCA3b()") xvalue("Interval noise", "CNOISE", 1, "setCA3b()") xvalue("Burst interval", "CBINT", 1, "setCA3b()") xvalue("Burst length", "CBLEN", 1, "setCA3b()") xlabel("EC") xvalue("Start time", "ECSTART", 1, "setEC()") xvalue("Total spikes", "ECNUM", 1, "setEC()") xvalue("Spike interval", "ECINT", 1, "setEC()") xvalue("Interval noise", "ECNOISE", 1, "setEC()") xvalue("Burst interval", "ECBINT", 1, "setEC()") xvalue("Burst length", "ECBLEN", 1, "setEC()") xpanel() } proc makexplots() { xpanel("Plots") xlabel("Max voltage plots") xbutton("Spine heads", "cell.plotvmx(cell.spine_list)") xbutton("Dendrites", "cell.plotvmx(cell.dendrite_list)") xbutton("Apical", "cell.plotvmx(cell.apical_list)") xbutton("Apical trunk", "cell.plotvmx(cell.trunk_list)") xbutton("Apical obliques", "cell.plotvmx(cell.oblique_list)") xbutton("SR", "cell.plotvmx(cell.SR_list)") xbutton("SLM", "cell.plotvmx(cell.SLM_list)") xbutton("Basal", "cell.plotvmx(cell.basal_list)") xlabel("Max calcium plots") xbutton("Spine heads", "cell.plotcamx(cell.spine_list, tot_spines, 1.0)") //xbutton("Anal spines", "analcasp()") xbutton("Dendrites", "cell.plotcamxd(cell.dendrite_list)") xbutton("Apical", "cell.plotcamxd(cell.apical_list)") xbutton("Apical trunk", "cell.plotcamxd(cell.trunk_list)") xbutton("Apical obliques", "cell.plotcamxd(cell.oblique_list)") xbutton("SR", "cell.plotcamxd(cell.SR_list)") xbutton("SLM", "cell.plotcamxd(cell.SLM_list)") xbutton("Basal", "cell.plotcamxd(cell.basal_list)") xpanel() }