//---------------------------------------------------------------------------- // load define general NEURON menus //---------------------------------------------------------------------------- xopen("$(NEURONHOME)/lib/hoc/noload.hoc") // avoid time to search with load_proc //nrnmainmenu() // create main menu //nrncontrolmenu() // crate control menu //---------------------------------------------------------------------------- // load TEMPLATE files //---------------------------------------------------------------------------- xopen("./cellsIAF.template") // load template for RE cell //---------------------------------------------------------------------------- // define basic NEURON and RUN parameters //---------------------------------------------------------------------------- dt=0.05 tstop = 25 runStopAt = tstop steps_per_ms = 10 celsius = 36 v_init = -60 trial = 1 // dummy variable used in PARAM.oc //---------------------------------------------------------------------------- // NETWORK PARAMETERS //---------------------------------------------------------------------------- // NUMBER OF CELLS nEx = 21 nInh = 10 ExINPUT = 20 // cutoff so only some Ex cells receive input ExINPUT_block_size = 1 // nr of inputs that will be increasingly firing till ExINPUT ExINPUT_end = 20 InhINPUT = 0 // NUMBER OF SYNAPSES onto post nEx_Ex = ExINPUT nEx_Inh = ExINPUT nInh_Ex = nInh // TOTAL SYNAPTIC INPUT FOR INITIAL CONDITIONS (AVERAGE) //print "Dividing total synaptic strength onto Ex neuron by number of input fibers" totEx_Ex = 0.000 // Changed before run in synspace.oc totEx_Inh = 0.008 totInh_Ex = 0.000 // Changed before run in synspace.oc AmpaMaxExEx = 0.00 AmpaMaxExInh = 0.00 GabaMax = 0.00 AMPANMDARATIO_EPlasSyn = 0 gainLTP_EPlasSyn = 0.005 gainLTD_EPlasSyn = 0.005 tauLTP_EPlasSyn=10 tauLTD_EPlasSyn=20 gainLTP_IPlasSyn = 0.01 gainLTD_IPlasSyn = 0.01 tauLTP_IPlasSyn=20 tauLTD_IPlasSyn=20 //TARGET 'Ca' LEVELS// SetCaEx = 1 SetCaInh = 1 GainConst_ExIAF = 0.1 // 0.1 Learning rate (ExIAF.mod) GainConst_InhIAF = 0.1 // 0.1 //---------------------------------------------------------------------------- // MAKE CELLS andd SYNAPTOGENESIS //---------------------------------------------------------------------------- xopen("./SYNAPTOGENESIS.oc") CHANGE_W() // Sets INITIAL synaptic weights //---------------------------------------------------------------------------- // FILES //---------------------------------------------------------------------------- xopen("FILES.oc") objectvar fileV // for some reason this has to stay out of the IF statment... if (WRITE_VOLTAGE_FILE) { fileV = new File() fileV.wopen("voltage.dat") } //---------------------------------------------------------------------------- // GRAPHICS //---------------------------------------------------------------------------- xopen("./GRAPHICS.oc") //xopen("GRAPHICSSMALL.oc") // I will have a bunch of 0 and 1's printed now if (GRAPHICS) { // xopen("graph_wnds.ses") print "Start GRAPHICS (network.oc)\n" addgraph("Ex[0].soma.v", -80,500, 555,0,400,150) // -80 = ystart coordinates; 300 = yend coordinates strdef dummystr for (i=1;i<nEx;i=i+1) { sprint(dummystr,"Ex[%d].soma.v+%d*20",i,i) color=i%5 + 2 addline(0,dummystr,color) } addgraph("Inh[0].soma.v",-80,300, 555,260,400,150) for (i=1;i<nInh;i=i+1) { sprint(dummystr,"Inh[%d].soma.v+%d*20",i,i) color=i%5 + 2 addline(1,dummystr,color) } } // end if (GRAPHICS) //---------------------------------------------------------------------------- // RUN-TIME PROCESSES //---------------------------------------------------------------------------- objref v_trace v_trace = new Vector(tstop/dt) // Array that will hold the voltage, so that slope can be computed without needing to plot double Exflag[nEx] double Inhflag[nInh] proc init() { for (i=0;i<nEx;i=i+1) { //i = 1 Exflag[i] = 1 } for (i=0;i<nInh;i=i+1) { Inhflag[i] = 1 } tstop_ExIAF = tstop tstop_InhIAF = tstop finitialize(v_init) fcurrent() } proc advance() { // To compute slope the voltage trace needs to be stored in a VECTOR if (COMPUTE_SLOPE) { //v_trace.x[t/dt] = Ex[ExINPUT].soma.v v_trace.x[t/dt] = Ex[ExINPUT].soma.v } if (WRITE_RASTER_FILE) { //FIND CELLS THAT SPIKED, finds the offset of spike (gON) for (i=0;i<nEx;i=i+1) { if (Exflag[i]) { if (Ex[i].soma.gON_ExIAF == 1) {Exflag[i] = 0} //reset flag to 0 } else { if (Ex[i].soma.gON_ExIAF == 0) { Exflag[i] = 1 //print"Ex=",i,">>>>>",t,"ms" //if (FILE) {fraster.printf(" %4d %4d %5.3g\n",trial,i,t) } fraster.printf(" %4d %4d %5.3g\n",trial,i,t) } } } for (i=0;i<nInh;i=i+1) { if (Inhflag[i]) { if (Inh[i].soma.gON_InhIAF == 1) {Inhflag[i] = 0} //reset flag to 0 } else { if (Inh[i].soma.gON_InhIAF == 0) { Inhflag[i] = 1 //print"Inh=",i,">>>>>",t,"ms" //if (FILE) {fraster.printf(" %4d %4d %5.3g\n",trial,nEx+i,t) } fraster.printf(" %4d %4d %5.3g\n",trial,nEx+i,t) } } } } if (WRITE_VOLTAGE_FILE) { // if (t%1<dt/2 || t%1>1-dt/2) { // for (i=0;i<nEx;i=i+1) { // fileV.printf(" %4d %5.3g %5.3g\n",trial,Ex[i].soma.v,t) // } // for (i=0;i<nInh;i=i+1) { // fileV.printf(" %4d %5.3g %5.3g\n",trial,Inh[i].soma.v,t) // } // Writes only for Ex Cell, all time steps!! fileV.printf("%5.3g\t%4.4g\n", Ex[ExINPUT].soma.v, t) // } } /////////////////////////// UPDATE MOD FILES ////////////////////////////// fadvance() } // end advance()