prev=use_mcell_ran4(1) numSynapses = numCells = 250 //num hipp cells in network noiseRandom=1 //const noise parameters noiseNumber=1e15 noiseStart=0 seed=netstimSeed=2 //initialize seed /*---------------------CREATE SEED FROM SYSTEM DATE--------------------*/ strdef strSeed,strNSSeed objref szFunctionsObject //setting date to seed szFunctionsObject = new StringFunctions() proc setSeed(){ system("date +%m%d%H%M%S",strSeed) szFunctionsObject.left(strSeed,10) sscanf(strSeed,"%lf",&seed) system("date +%d%H%M%S",strNSSeed) szFunctionsObject.left(strNSSeed,9) sscanf(strNSSeed,"%lf",&netstimSeed) } /*----------------------RANDOM NUMBER GENERATOR------------------------*/ objref r r = new Random() //index = r.MCellRan4() func randNum(){ //generates real number between two arguments rand=r.uniform(0,$1) return rand } func randIntNum(){ //generates integers between two arguments rand=r.discunif(0, $1) return rand } /*---------------------Makes array of cell types----------------*/ objref cellr cellr = new Random() objref veccelltype, vectest veccelltype = new Vector(numCells) proc makeCelltypevec(){ veccelltype = new Vector(numCells) vectest=new Vector() cellr.uniform(0,1) veccelltype.setrand(cellr) vectest.where(veccelltype,"<",$1) while(abs(vectest.size()/250 - $1)>0){ //how accurate must %mix be dummy=r.uniform(0,1) veccelltype.setrand(r) vectest.where(veccelltype,"<",$1) } } /*----------------------------CREATE CELLS-----------------------------*/ //makeCell(cellindexnumber, %tI) objectvar cell[numCells], dendsynapses[numSynapses], veccelltype veccelltype=new Vector(numCells) proc makeCell(){ makeCelltypevec($1) for (i=0;iveccelltype.x[i]){ cell[i] = new cellA() veccelltype.x[i] = 1 }else if($1<=veccelltype.x[i]){ cell[i] = new cellD() veccelltype.x[i] = 2 }else {print "uhoh"} } } /*----------------------CREATE NETWORK WITH NOISE---------------------*/ //makeNetwork() proc makeNetwork(){ numI=0 //initialises counter for heterogeneous net pop makeCell(mixratio) //loop creating cells for i=0, numCells-1 { //loop popping on synapses cell[i].dendrite dendsynapses[i] = new ExpSyn(1) } //syntax for connecting cells SThcells[1].soma SThcells[0].nclist.append(new NetCon(&v(1), syn[0], -20, 0.5, synWeight)) for i=0, numSynapses-1{ //connect cells numConn=radius while(numConn>0){ connCells(i, numConn) numConn=numConn-1 } addNoise(i,noiseRandom, noiseNumber, noiseStart, noiseInterval) } } //add noise process objectvar pp[numCells] proc addNoise(){ pp[$1] = new NetStim() pp[$1].noise=$2 pp[$1].number=$3 pp[$1].start=$4 pp[$1].interval=$5 pp[$1].seed(netstimSeed) cell[$1].nclist.append(new NetCon(pp[$1], dendsynapses[$1], -20, .5, noisesynWeight)) } //syntax for netcon: new NetCon(&source_v, synapse, threshold, delay, weight) proc connCells(){ if(randNum(1)=0){ cell[$1].soma cell[$1-$2].nclist.append(new NetCon(&v(1), dendsynapses[$1-$2], -20, .5, synWeight)) }else{ cell[$1].soma cell[numCells+($1-$2)].nclist.append(new NetCon(&v(1), dendsynapses[numCells+($1-$2)], -20, .5, synWeight)) } } objref timevec, idvec, recncs, tobj, nil, indeces timevec = new Vector() idvec = new Vector() indeces = new Vector() recncs = new List() objref tobj, f, f2,strf /*-----------------CREATE RASTER PLOT AND OUTPUT FILES-----------------*/ objref g proc plotraster(){ xmin=700 xmax=1300 g= new Graph() g.size(xmin, xmax, 0, numCells) indeces.indvwhere(timevec,"[]",xmin, xmax) idvec.remove(0,indeces.x[0]) timevec.remove(0,indeces.x[0]) idvec.mark(g,timevec,"O",2) g.exec_menu("View = plot") } /*------------------------PROCS FOR BATCH RUN--------------------------*/ proc myrun(){ //setSeed() uncomment for seed from system date newhighindex=r.MCellRan4(seed) makeNetwork() for i=0,numCells-1 { //netcons for raster plots and data output cell[i].soma tobj = new NetCon(&v(0.5),nil) tobj.record(timevec, idvec, i+1) recncs.append(tobj) } run() plotraster() }