//-------------------------------------------------------------------- // Simulation of a single GDP //--------------------------------------------------------------------- // ------------Definition of Parameters ------------------------------- // -------------------------------------------------------------------- seed_AMPA = 8 // seed for random function seed_GABA = seed_AMPA +2 // Define Cl--Concentration Cl_Steps = 6 // Number of Different [Cl-]i objref Cl_List Cl_List = new Vector(Cl_Steps) Cl_List.x[0] = 5 //mM Cl_List.x[1] = 10 Cl_List.x[2] = 15 Cl_List.x[3] = 25 Cl_List.x[4] = 35 Cl_List.x[5] = 50 // Determination Parameters AMPA ------------------------------------ G_AMPA = 0.000305 * 1 DECAY_AMPA = 11 nampasyn = 100 //Number of AMPA-Synapses // calculated was 107 aninputs = 1 // number of inputs per synapse AmpaCtrl_Steps = 2 // 0 = without AMPA, 1 = With AMPA // Determining Parameters GABA allone --------------------------- G_GABA = 0.000789 // synaptic weight according to miniature events DECAY_GABA = 37 P_GABA = 0.18 ngabasyn = 100 gninputs = 1 // number of inputs per synapse // Definition of various runtime parameters -------------------------- lenghtoutputvec = 6000 // Number of Lines for output (< 32000 for Excel-Figures) ndend=56 // Number of dendrites tstop = 5000 // Duration v_init = -60 // Initial voltage dt = 0.05 // Step Interval in ms // ------------Procedures and Functions ------------------------------- // -------------------------------------------------------------------- // Function MakeShort ---------------------------------------// // Inputs: $1 Objref to Inputvector // // $2 Objref to Outoutvector // // lenoutvec desired lendth of Outputvector // // // // Reduce Inputvec to Outputvev by averaging n elements // // n (reducing factor) = floor(Inputvec.size() / lenoutvec) // // ----------------------------------------------------------// obfunc MakeShort() {local i, n n = int($o1.size()/$3) $o2.resize($3) for i=0, $3-1 { $o2.x[i] = $o1.mean(i*n, (i+1)*n-1) } return $o2 } // End of function // ---------Definition of objects ------------------------------------- // -------------------------------------------------------------------- // Objects for Synapses --------------------------------------------------------- objref gabasyn[ngabasyn] // Definition of synapse objects objref ampasyn[nampasyn] // random function for localization of synapses objref rand_ampa_loc, rand_gaba_loc // random function for localization of synapses in which dendrite objref rand_ampa_dend, rand_gaba_dend // random function for synapses parameters objref rand_gaba_t, rand_gaba_g objref rand_ampa_t, rand_ampa_g // definition of Vectors for Gaba-Stimulation (t_vec = timestamps t_vecr = sorted timestamps, g_vec = rel conductance) objref gabastim[ngabasyn], gaba_t_vec[ngabasyn], gaba_t_vecr[ngabasyn], synpulsegaba[ngabasyn], gaba_g_vec[ngabasyn] // definition of Vectors for AMPA-Stimulation objref ampastim[nampasyn], ampa_t_vec[nampasyn], ampa_t_vecr[nampasyn], synpulseampa[nampasyn], ampa_g_vec[nampasyn] // Define vectors to link modelled parameter output --------------------------------- objref timevec, voltvec, clivec[ndend] // vectors linked to parameter-pointers objref clivec_aver // vectors for Averagees over all Dendrites objref shorttimevec, shortvoltvec, shortclivec, spacevec // shorter Vectors for output objref gaba_timestamp, ampa_timestamp // Matrix for output 0 = time, 1 = Voltage, 2 = average Cli , 3 to 3+ndend, Cli n Dend[i] objref Outmatrix, TimeStampMatrix // Define Name of Output-File strdef OutFileName, OutTimestampFileName // Define Output File objref OutFile, OutTimestampFile // Generate vectors and matrices ------------------------------------- voltvec = new Vector() timevec = new Vector() clivec_aver = new Vector() shortvoltvec = new Vector() shorttimevec = new Vector() shortclivec = new Vector() spacevec = new Vector() for i=0, ndend-1 { clivec[i] = new Vector() } Outmatrix = new Matrix() TimeStampMatrix = new Matrix() TimeStampMatrix = new Matrix(ngabasyn, Cl_Steps*3) gaba_timestamp = new Vector(ngabasyn) ampa_timestamp = new Vector(nampasyn) // Start of Input generation ------------------------------------------- // Initialize Random Functions ----------- rand_ampa_loc = new Random(seed_AMPA) rand_gaba_loc = new Random(seed_GABA) rand_ampa_dend = new Random(seed_AMPA) rand_gaba_dend = new Random(seed_GABA) rand_ampa_t = new Random(seed_AMPA) rand_ampa_g = new Random(seed_AMPA) rand_gaba_t = new Random(seed_GABA) rand_gaba_g = new Random(seed_GABA) //Define properties of random Function rand_gaba_t.uniform(100, 5000) rand_gaba_g.normal(1, 0.28) //rel variance of GABA according to results rand_ampa_t.uniform(100, 5000) rand_ampa_g.normal(1, 0.26) //rel variance of AMPA according to results // generate Vectors --- (gniputs, aninputs defines number of inputs per synapse) ------ for i = 0, ngabasyn- 1 { gaba_t_vec[i] = new Vector(gninputs) gaba_t_vecr[i] = new Vector(gninputs) gaba_g_vec[i] = new Vector(gninputs) } for i = 0, nampasyn-1 { ampa_t_vec[i] = new Vector(aninputs) ampa_t_vecr[i] = new Vector(aninputs) ampa_g_vec[i] = new Vector(aninputs) } // Distribute GABA synapses ----------------------------------------------------------- // here only GABA correlated synapses are generated for k=0, ngabasyn - 1 { pos = rand_gaba_loc.uniform(0,ndend-1) pos2 = rand_gaba_dend.uniform (0.001, 0.999) dend_0[pos]{ gabasyn[k] = new gaba(pos2) gabasyn[k].tau1 = 0.1 gabasyn[k].tau2 = DECAY_GABA gabasyn[k].P = P_GABA } } // distribute AMPA synapses ------------------------------------------------------------------------ for k=0, nampasyn-1 { pos = rand_ampa_loc.uniform(0,ndend-1) pos3 = rand_ampa_dend.uniform (0.001, 0.999) dend_0[pos]{ ampasyn[k] = new Exp2Syn(pos3) ampasyn[k].tau1 = 0.1 ampasyn[k].tau2 = DECAY_AMPA } } //-- Simulation starts here ----------------------------------------------------------------- //------------------------------------------------------------------------------------------- //-- Outer Loop Variation of Cl- -------------------------------------------------- Cl_Step = 0 while (Cl_Step < Cl_Steps){ // 1. define Cl- concentration ---------------------------------------------- forsec all { cli0_cldif_CA3_NKCC1_HCO3 = Cl_List.x[Cl_Step] cli_Start_cldif_CA3_NKCC1_HCO3 = Cl_List.x[Cl_Step] cli_cldif_CA3_NKCC1_HCO3 = Cl_List.x[Cl_Step] } // 2a. Generate timestamps/conductances for AMPA and correlated GABA synapses -------------------------------------- for f=0, nampasyn-1 { for i=0, aninputs-1 { t = rand_ampa_t.repick() g = rand_ampa_g.repick() ampa_t_vec[f].x[i]=t ampa_g_vec[f].x[i]=abs(G_AMPA*g) ampa_timestamp.x[f]=t t = rand_gaba_t.repick() // pick t from GABA random process anyway, so the remaining GABA events are identical g = rand_gaba_g.repick() gaba_t_vec[f].x[i]=ampa_t_vec[f].x[i] // assign the f-th GABA event to exactly the time of an AMPA event gaba_g_vec[f].x[i]=abs(G_GABA*g) gaba_timestamp.x[f]=ampa_timestamp.x[f] } } // 2b. Generate timestamps/conductances for remaining GABA synapses -------------------------------------- for f=nampasyn, ngabasyn-1 { for i=0, gninputs-1 { t = rand_gaba_t.repick() g = rand_gaba_g.repick() gaba_t_vec[f].x[i]=t gaba_g_vec[f].x[i]= abs(G_GABA*g) gaba_timestamp.x[f] = t } } // 2c. sort the vectors ------------------------------------ for f=0, ngabasyn - 1 { gaba_t_vecr[f] = gaba_t_vec[f].sort() } for f=0, nampasyn-1 { ampa_t_vecr[f] = ampa_t_vec[f].sort() } // Save the vectors to analyze the temporal correlation TimeStampMatrix.x[0][Cl_Step*3] = Cl_List.x[Cl_Step] TimeStampMatrix.setcol(Cl_Step*3+1, gaba_timestamp) TimeStampMatrix.setcol(Cl_Step*3+2, ampa_timestamp) // 3. generate Vecstim-vectors from the sorted timestamp-vectors ------------------------------- for i=0, ngabasyn -1 { gabastim[i] = new VecStim() gabastim[i].play(gaba_t_vecr[i]) // GABA stimulator } for i=0, nampasyn-1{ ampastim[i] = new VecStim() ampastim[i].play(ampa_t_vecr[i]) // AMPA stimulator } // Run the simulation for each stimulation pattern once with and once without AMPA co-stimulation for AmpaCtrl_Step = 0, AmpaCtrl_Steps-1 { // 4. Play the Vecstim objects to the synapses --------------------------------------------- for i=0, ngabasyn-1 { synpulsegaba[i] = new NetCon(gabastim[i], gabasyn[i], 0, 0, gaba_g_vec[i].x[0]) } // GABA NetCon for i=0, nampasyn-1 { synpulseampa[i] = new NetCon(ampastim[i], ampasyn[i], 0, 0, ampa_g_vec[i].x[0]*AmpaCtrl_Step) } // Ampa NetCon // 5. Link Objects to Output-Vectors ----------------------------------- timevec.record(&t) // Time vector voltvec.record(&v(.5)) // Volt vector in soma for i=0, ndend-1 { clivec[i].record(&dend_0[i].cli(0.5)) } printf("100-Correl: Sequence %g of %g; seed-%g; [Cl-]i = %g; gAMPA = %g; ",(AmpaCtrl_Steps*Cl_Step+AmpaCtrl_Step+1),(Cl_Steps*AmpaCtrl_Steps),seed_AMPA,Cl_List.x[Cl_Step],G_AMPA*1000*AmpaCtrl_Step) // 6. Run Simulation -------------------------------------------------------- run() // 8. Put Data in Output Vector ------------------------------------------------------ MakeShort(timevec, shorttimevec, lenghtoutputvec) Outmatrix.resize(shorttimevec.size()+1, Cl_Steps*AmpaCtrl_Steps*3+1) Outmatrix.setcol(0, shorttimevec) spacevec.resize(shorttimevec.size()+1) //spavevec caries information about the properties during a loop) spacevec.fill(0) spacevec.x[0] = Cl_List.x[Cl_Step] spacevec.x[1] = G_AMPA*1000*AmpaCtrl_Step spacevec.x[2] = 777 ActCol = (Cl_Step*AmpaCtrl_Steps+AmpaCtrl_Step)*3 Outmatrix.setcol(ActCol+1, spacevec) MakeShort(voltvec, shortvoltvec, lenghtoutputvec) Outmatrix.setcol(ActCol+2, shortvoltvec) // Calculate average [Cli] in dendrites ------- clivec_aver.mul(0) // empty vector for i=0, ndend-1 { clivec_aver.resize(clivec[i].size()) clivec_aver.add(clivec[i]) } clivec_aver.div(ndend) printf(", max [Cl-]i %g, min [Cl-]i %g \n", clivec_aver.max, clivec_aver.min) MakeShort(clivec_aver, shortclivec, lenghtoutputvec) Outmatrix.setcol(ActCol+3, shortclivec) } // End of with/without AMPA loop // Goto next Cl- Concentration Cl_Step+=1 } // End outer loop // Save the Data -------------------------------------------------------------------- OutTimestampFile = new File() sprint(OutTimestampFileName, "TimeStamps_RandomPsc_gGABA-0.789-nGABA-534_gAMPA-0.305_Div_Cl_100pCorrel_seed-%g.asc", seed_AMPA) OutTimestampFile.wopen(OutTimestampFileName) TimeStampMatrix.fprint(OutTimestampFile, "\t%.12g") OutTimestampFile.close // first close the file for the timestamp data OutFile = new File() sprint(OutFileName, "Result_RandomPsc_gGABA-0.789-nGABA-534_gAMPA-0.305_Div_Cl_100pCorrel_seed-%g.asc", seed_AMPA) OutFile.wopen(OutFileName) Outmatrix.fprint(OutFile, "\t%.12g") OutFile.close