strdef cmd
objref pr
gapstyle=1 //change this number as I change the parameters such as gmax, gap junctions, or recurrents, number of
//signal cells, etc
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 = 1000 //how many ms long this simulation will run
{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/TGnet.tem")} //this is the main network creation
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 TGnet()}
{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()
//for SR, will use all five of the following. For CR, just the top
{pr.activeSynapsesRandom(Tstop, pyrthr, basketthr)} // this is the main program function when just noise is added.
//{pr.signalSynapse(Tstop, 0, sigfreq, 1)} // these four commands would also place a periodic signal at four pyramidal cells
///{pr.signalSynapse(Tstop, 0, sigfreq, 11)} // $1 is duration, $2 is start time, $3 is frequency of stim, $4 is the cell number receiving the stim
//{pr.signalSynapse(Tstop, 0, sigfreq, 21)}
//{pr.signalSynapse(Tstop, 0, sigfreq, 31)}
{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,sigfreq)
} 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,sigfreq)
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,sigfreq)}
{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,sigfreq)}
{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
pyrthr=95
DoRun()
pyrthr=85
DoRun()
pyrthr=75
DoRun()
return() //just forces a quit with an error
pyrthr=80
DoRun()
pyrthr=75
DoRun()
pyrthr=70
DoRun()
pyrthr=65
DoRun()
pyrthr=60
DoRun()
return() //this return just forces a quit error to stop the function