//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // MAKE CELLS //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- objectvar rand seed = 8746 rand = new Random(seed) ExNoise = 0.02 // Noise in Vm, in miliAmps InhNoise = 0.010 Thr_IAF_noise = 0 // Noise around threshold for firing in IAF's spkgenmode_INPUT = 0 // EX CELLS------------------------------------------------------------------ objectvar Ex[nEx] // create an array of object variables dummy = rand.normal(ThrConst_ExIAF, abs(ThrConst_ExIAF)*Thr_IAF_noise) //setup to use r.repick (muuuch quicker) // Creates the INPUT for(i=0; i<ExINPUT; i=i+1) { Ex[i] = new INPUTSoma() Ex[i].soma.imax_NOISE = ExNoise // 0.01 Ex[i].soma.SetCa_ExIAF = SetCaEx //Ex[i].soma.Thr_ExIAF = rand.repick() // Threshold for firing generates random number from 4 lines above distribution (normal) ///// OBJECT FOR PRESYNAPTIC SYNAPTIC MECHANISM ///// } // Creates THE Ex cell for(i=ExINPUT; i<nEx; i=i+1) { Ex[i] = new ExSoma() Ex[i].soma.imax_NOISE = ExNoise // 0.01 Ex[i].soma.SetCa_ExIAF = SetCaEx //Ex[i].soma.Thr_ExIAF = rand.repick() // Threshold for firing generates random number from 4 lines above distribution (normal) ///// OBJECT FOR PRESYNAPTIC SYNAPTIC MECHANISM ///// } // ADD INPUT MODEL for ExINPUT cells dummy = rand.normal(10,1) for(i=0; i<ExINPUT; i=i+1) { access Ex[i].soma insert INPUT Ex[i].soma.start_INPUT = 10 //rand.repick() // Time in which pulse will be given Ex[i].soma.burst_len_INPUT = 1 Ex[i].soma.fast_invl_INPUT = 1 Ex[i].soma.slow_invl_INPUT = 50 Ex[i].soma.end_INPUT = 0 //Ex[i].soma.start_INPUT + 5//+ IN[i].soma.slow_invl_INPUT for(j=0;j<10;j=j+1) { Ex[i].soma.on_times_INPUT[j] = 9e4 } } // TO PREVENT INPUT CELL FROM FIRING MORE THAN ONCE (because extra dend compartment buffers the current) //print "--Changing length of input cell dendrite" //Ex[0].dend.L = 1 // INH CELLS------------------------------------------------------------------ objectvar Inh[nInh] // create an array of object variables dummy = rand.normal(ThrConst_InhIAF,abs(ThrConst_InhIAF)*Thr_IAF_noise) for(i=0; i<nInh; i=i+1) { Inh[i] = new InhSoma() // create RE cells from template Inh[i].soma.imax_NOISE = InhNoise // 0.01 Inh[i].soma.SetCa_InhIAF = SetCaInh Inh[i].soma.Thr_InhIAF = rand.repick() ///// OBJECT FOR PRESYNAPTIC SYNAPTIC MECHANISM ///// } // ADD INPUT MODEL for InhINPUT cells dummy = rand.normal(10,1) for(i=0; i<InhINPUT; i=i+1) { access Inh[i].soma insert INPUT Inh[i].soma.start_INPUT = rand.repick() //Inh[i].soma.start_INPUT = 10 Inh[i].soma.burst_len_INPUT = 1 Inh[i].soma.fast_invl_INPUT = 1 Inh[i].soma.slow_invl_INPUT = 50 Inh[i].soma.end_INPUT = Inh[i].soma.start_INPUT + 5 //+ IN[i].soma.slow_invl_INPUT for(j=0;j<10;j=j+1) { Inh[i].soma.on_times_INPUT[j] = 9e4 } } //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // SYNAPTOGENESIS //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- //objectvar rand //rand = new Random(13) objectvar sInhEx[nEx][nInh_Ex] // 1=Postsynaptic cell; 2=synapse number objectvar sExEx[nEx][nEx_Ex] objectvar sExInh[nInh][nEx_Inh] print "Making EXCITATORY synapses *ONTO* EXCITATORY neurons (ExEx)" //Ex->Ex //CONNECTS ALL INPUTS TO THE *SAME SINGLE* POSTSYNAPTIC CELL for(k=0; k<ExINPUT; k=k+1) { // My innovation: RUNS THROUGH ALL 'pre' INPUTS, 'k' is the input for(i=ExINPUT; i<nEx; i=i+1) { // Runs through all POSTSYNAPTIC EX cells, 'i' is the postsynaptic cell j = k // Only connect 1 input to Ex pre = k // PRESYNAPTIC CELL // 'i' is the POSTSYNAPTIC CELL sExEx[i][j] = new EPlasSyn() // Matrix that will hold the synaptic weights. Ex[i].dend sExEx[i][j].loc(0.5) // Synapse ONTO ExSOMA dendrite //Ex[i].soma sExEx[i][j].loc(0.5) // Prepares soma of Ex[i] to receive a synapse in specific location sExEx[i][j].precell = pre // Makes the above synapse to come from 'pre' cell //SET PRESYNAPTIC POINTERS setpointer sExEx[i][j].ampa, Ex[pre].soma.ampa_EPlasSom setpointer sExEx[i][j].nmda, Ex[pre].soma.nmda_EPlasSom setpointer sExEx[i][j].lastprespike, Ex[pre].soma.lastspike_EPlasSom setpointer sExEx[i][j].PreAvgCa, Ex[pre].soma.AvgCa_ExIAF //SET POSTSYNAPTIC POINTERS setpointer sExEx[i][j].ScaleFactor, Ex[i].soma.ScaleFactor_ExIAF setpointer sExEx[i][j].Induction, Ex[i].soma.Induction_ExIAF setpointer sExEx[i][j].AMPAMAX, AmpaMaxExEx setpointer sExEx[i][j].lastpostspike, Ex[i].soma.lastspike_EPlasSom setpointer sExEx[i][j].postB, Ex[i].soma.B_ExIAF //} } } print "Making INHIBITORY synapses *ONTO* EXCITATORY neurons (InhEx)" //Inh->Ex for(k=0; k<nInh; k=k+1) { // Runs through all Inh PRESYNAPTIC CELLS for(i=ExINPUT; i<nEx; i=i+1) { // Runs through all Ex POSTSYNAPTIC CELLS //for(j=0;j<nInh_Ex;j=j+1) { // Runs through all synapses j = k // Connect 1 Inhibitory neuron to only1 pre = k sInhEx[i][j] = new IPlasSyn() //Ex[i].dend sInhEx[i][j].loc(0) Ex[i].soma sInhEx[i][j].loc(0.5) // Puts synapse in POSTSYNAPTIC Ex cell sInhEx[i][j].precell = pre // Links above synapse with presynaptic cell //SET PRESYNAPTIC POINTERS setpointer sInhEx[i][j].gaba, Inh[pre].soma.gaba_IPlasSom setpointer sInhEx[i][j].lastprespike, Inh[pre].soma.lastspike_IPlasSom setpointer sInhEx[i][j].PreAvgCa, Inh[pre].soma.AvgCa_InhIAF //SET POSTSYNAPTIC POINTERS setpointer sInhEx[i][j].ScaleFactor, Ex[i].soma.ScaleFactor_ExIAF setpointer sInhEx[i][j].Induction, Ex[i].soma.Induction_ExIAF setpointer sInhEx[i][j].GABAMAX, GabaMax setpointer sInhEx[i][j].lastpostspike, Ex[i].soma.lastspike_EPlasSom //} } } // Ex->Inh print "Making EXCITATORY synapses *ONTO* INHIBITORY neurons (ExInh), from ALL INPUTS" double ExInhPost[nInh][nEx_Inh] for(i=0; i<nInh; i=i+1) { // Runs through all POSTSYNATIC Inh cells for(j=0;j<nEx_Inh;j=j+1) { // Runs through all synapses pre = j // Input connects to SINGLE Inh cell. Ex[0]->Inh[0]; Ex[1]->Inh[1],... post = i ExInhPost[i][j] = post sExInh[i][j] = new EPlasSyn() Inh[post].soma sExInh[i][j].loc(0.5) sExInh[i][j].precell = pre //SET PRESYNAPTIC POINTERS setpointer sExInh[i][j].ampa, Ex[pre].soma.ampa_EtoIPlasSom setpointer sExInh[i][j].nmda, Ex[pre].soma.nmda_EtoIPlasSom setpointer sExInh[i][j].lastprespike, Ex[pre].soma.lastspike_EtoIPlasSom setpointer sExInh[i][j].PreAvgCa, Ex[pre].soma.AvgCa_ExIAF //SET POSTSYNAPTIC POINTERS setpointer sExInh[i][j].ScaleFactor, Inh[post].soma.ScaleFactor_InhIAF setpointer sExInh[i][j].Induction, Inh[post].soma.Induction_InhIAF setpointer sExInh[i][j].AMPAMAX, AmpaMaxExInh setpointer sExInh[i][j].lastpostspike, Inh[post].soma.lastspike_IPlasSom setpointer sExInh[i][j].postB, Inh[post].soma.B_InhIAF } } //} //---------------------------------------------------------------------------- // SET INITIAL SYNAPTIC WEIGHTS AND DELAYS //---------------------------------------------------------------------------- sdW = 0.00 //0.001 this is really variance of synaptic weights //sdW=0.00000005 ///// **INITIAL** SYNAPTIC WEIGHTS ///// proc CHANGE_W() { WEx_Ex = totEx_Ex/nEx_Ex avgW = WEx_Ex Wmin=avgW/50 print "SETTING Ex SYNAPSES ONTO EXCITATORY NEURONS" W = rand.normal(avgW,avgW*sdW) //setup to use r.repick (muuuch quicker T: lollll) //W = rand.normal(avgW,sdW) //setup to use r.repick (muuuch quicker) for(i=ExINPUT; i<nEx; i=i+1) { // ALL POSTSYNAPTIC Ex CELLS (doesn't start at 0 because INPUT has no synapses ONTO it!) for(j=0;j<nEx_Ex;j=j+1) { W = rand.repick() if (W<=Wmin) { W=Wmin } else if (W>=AmpaMaxExEx) {W=AmpaMaxExEx} sExEx[i][j].gmaxAMPA = W sExEx[i][j].gmaxNMDA = AMPANMDARATIO_EPlasSyn*sExEx[i][j].gmaxAMPA } //end nEx_Ex }// end nEx print "SETTING Inh SYNAPSES ONTO EXCITATORY NEURONS" // Delays for Inh->Ex Synapses WInh_Ex = totInh_Ex/nInh_Ex avgW = WInh_Ex Wmin=avgW/50 W = rand.normal(avgW,sdW*avgW) for(i=ExINPUT; i<nEx; i=i+1) { // ALL POSTSYNAPTIC Ex CELLS (doesn't start at 0 because INPUT has no synapses ONTO it!) for(j=0;j<nInh_Ex;j=j+1) { W = rand.repick() if (W<=Wmin) W=Wmin //W=Wmin sInhEx[i][j].gmaxGABA = W } //end nInh_Ex } // end nEx //sdW=0.0000005 print "SETTING Ex SYNAPSES ONTO INHIBITORY NEURONS" // Delays for In->Inh and Ex->Inh Synapses WEx_Inh = totEx_Inh/nEx_Inh avgW = WEx_Inh Wmin=avgW/50 for(i=0; i<nInh; i=i+1) { W = rand.normal(avgW,sdW*avgW) for(j=0;j<nEx_Inh;j=j+1) { W = rand.repick() if (W<Wmin) {W=Wmin // Wmin } else if (W>=AmpaMaxExInh) {W=AmpaMaxExInh} sExInh[i][j].gmaxAMPA = W sExInh[i][j].gmaxNMDA = AMPANMDARATIO_EPlasSyn*sExInh[i][j].gmaxAMPA } //end nEx_Inh } // end nInh } // end CHANGEW()