strdef cmd numiters =2 objref pr, pn[numiters] //gapstyle=14 //now with high .01 pyr-pyr gaps 0-81, 1-82, 2-83 ... 19-100 gapstyle=15 //now with low .001 gaps pyrthr=100 //this is the threshold at which pyramidal cells will have a noise event at each 0.5 ms // the TGnet.tem will compare if a uniformly distributed number from 0-100 is > this threshold basketthr=100 //noise threshold for basket cells basktopyrgmax=5.5 //not used pyrgapgmax =0.005 //not used sigfreq=16 //frequency in Hz of the input signal realrunFlag=1 singlerunFlag=0 noiserunFlag=0 Tstop = 1600 //how many ms long this simulation will run driverthr=80 //this is the threshold for noise input to the Drivers //the four levels tested were: 55 (95 Hz), 65 (75 hz), 80 (50 hz), 85 (40 Hz) //this number is held constant, and saved in the filename as "_f##" {load_file("nrngui.hoc") } {load_file("stdrun.hoc")} {load_file("stdlib.hoc")} {load_file("netparmpi.hoc")} //this gets loaded, but it was never run in parallel--several functions are not // parallel-safe {load_file("./templates/recruitnet.tem")} //this creates the network proc init() { {pr.setScatteredVoltages(-85, -60)} //randomly starts each cell at different start voltages finitialize() finitialize() } celsius = 34 iteration=0 {cvode.active(0)} proc DoRun() { localobj fo, fo1 {pr = new Recruitnet()} {pr.recordVoltages()} if (noiserunFlag) {pr.recordnoise()} //this is to record just the response of the noise, not the whole net {pr.pnm.set_maxstep(0.01)} {pr.pnm.want_all_spikes()} runningTime = startsw() stdinit() {pr.activeSynapsesRandom(Tstop, pyrthr, basketthr, driverthr)} // pyr threshold, bask threshold, driving pyr thresh //that function creates all the noise events {pr.pnm.psolve(Tstop)} //solve the simulation //below is a function to save files when I am recording from just one cell //or check if this is a full "realrun" with the whole network //or else just save a generic data file if (singlerunFlag) {pr.writesingleVoltage(basketthr,pyrthr,sigfreq) } else if (realrunFlag) {pr.writeVoltages(basketthr,pyrthr,gapstyle,driverthr) } else {pr.writeVoltages()} //now check if it is also recording the noise sources if (noiserunFlag) {pr.writenoise(pyrthr)} {pr.pnm.pc.runworker()} //this was not doing anything at present runningTime = startsw() - runningTime iteration=iteration+1 print "Running Time: ", runningTime, "iteration: ",iteration //now will save a spike raster {pr.pnm.gatherspikes()} fo = new File() fo1= new File() sprint(cmd, "data/spikes.dat") {fo1.wopen(cmd)} sprint(cmd, "data/spikes_b%d_p%d_g%d_f%d.dat",basketthr,pyrthr,gapstyle,driverthr) if (realrunFlag) {fo.wopen(cmd)} for i=0, pr.pnm.spikevec.size-1 { if (realrunFlag) fo.printf("%-10.6lf, %d\n", pr.pnm.spikevec.x[i], pr.pnm.idvec.x[i]) fo1.printf("%-10.6lf, %d\n", pr.pnm.spikevec.x[i], pr.pnm.idvec.x[i]) } if (realrunFlag) {fo.close()} {fo1.close()} {pr.pnm.pc.done()} // now will save a history file for later use, to keep track of all files done if (realrunFlag){ {fo=new File()} {sprint(cmd, "spikes_b%d_p%d_g%d_f%d.dat",basketthr,pyrthr,gapstyle,driverthr)} {fo.aopen("data/spikelog.dat")} {fo.printf("%s\n",cmd)} {fo.close()} {fo=new File()} {sprint(cmd, "sum_b%d_p%d_g%d_f%d.dat",basketthr,pyrthr,gapstyle,driverthr)} {fo.aopen("data/sumlog.dat")} {fo.printf("%s\n",cmd)} {fo.close()} } if (singlerunFlag){ {fo=new File()} {sprint(cmd, "1_b%d_p%d_single_f%d.dat",basketthr,pyrthr,sigfreq)} {fo.aopen("data/singlelog.dat")} {fo.printf("%s\n",cmd)} {fo.close()} {fo=new File()} } if (noiserunFlag){ {fo=new File()} {sprint(cmd, "noise_b%d.dat",pyrthr)} {fo.aopen("data/noiselog.dat")} {fo.printf("%s\n",cmd)} {fo.close()} {fo=new File()} } {pr.pnm.pc.gid_clear()} //need to clear GIDs to reset the system } //this is how I do multiple runs. //from other testing I have determined that pyrthr 95 yields input noise of 0.008 nA2, 85 is 0.06 nA2, and 75 is 0.11 nA2 sigfreq=0 basketthr=100 driverthr=85 //40 Hz Drivers pyrthr=92 //0.02 nA2 Neighbors DoRun() driverthr=65 //75 Hz Drivers pyrthr=70 //0.15 nA2 Neighbors DoRun() driverthr=55 //95 hz Drivers pyrthr=85 //0.06 nA2 Neighbors DoRun() return() //just makes an error to cancel the program