// genesis int i,n str hstr // string for findsolvefield operations /******************************************************************** ** Modified by Carson Roberts 09/2004 From Dieter Jaeger's GP simulations ** (05/2000) for use in gnrh neurons. ** In its present form, it uses the scripts: ** gnrh_const_singlecomp.g, gnrh_actcomps.g, gnrh_chansave.g, gnrh_syns.g, ** and gnrh_current_inject.g *******************************************************************/ setenv SIMPATH {getenv SIMPATH} ./prototypes /* always include these default definitions! */ include defaults //include userprefs /* simulation constants */ include gnrh_const_singlecomp.g /***************************************************************************** ** The above file, "gnrh_const.g" holds settings for ELEAK, EREST_ACT, ** The Tabchannel xmin and xmax etc, default values CM,RM,RA (which may be over- ** written by values read in from a "parameter.asc" file). It is also the place ** to set the densities of active channels and synapses ******************************************************************************/ echo data_fname {data_fname} echo gsyn_AMPA_fname {gsyn_AMPA_fname} echo gsyn_GABA_fname {gsyn_GABA_fname} /* Skip input of parameters, take values from "gnrh_const" */ /************************************************************/ echo Cell Parameters are: RMs {RMs}, CM {CM}, RA {RA} RMd {RMd} /* scripts to create the prototypes */ include gnrh_actcomps.g /******************************************************************************** ** Sets up prototype Soma, Dendrite and Axon compartments. Differences in channel ** Types and Densities should be set up in this script. *********************************************************************************/ //include gnrh_chanload.g // This line for already saved channels include gnrh_chansave.g // This line to initially generate Table Channels /****************************************************************************** ** The two lines above will contain the actual kinetic equations for whatever ** channels are included in the model. ********************************************************************************/ include gnrh_syns.g // This script contains the definitions for various synapses include gnrh_current_inject.g // This script contains codes for various current injections /* Create the output elements */ //Create Output element for Membrane Potential create asc_file /out setfield /out filename {data_fname} initialize 1 flush 0 append 1 leave_open 1 useclock /out 9 silent -1 /* To ensure that all subsequent elements are made in the library */ ce /library //These make the prototypes of channels and compartments that can be // invoked in .p files make_Kdr_gnrh // function in gnrh_chansave.g make_NaF_gnrh // function in gnrh_chansave.g make_CaL_gnrh // function in gnrh_chansave.g make_gnrh_comps // function in gnrh_actcomps.g /* create the model and set up the run cell mode */ // read cell data from .p file AND set the cell itself up as the hsolve element readcell {dotp} {cellpath} -hsolve echo done reading cell /* Set the clocks */ for (i=0; i<=8; i=i+1) setclock {i} {dt} end setclock 9 1.0e-4 // Add Synapses //create input element tree outside of the cell path if (!{exists /inputs}) create neutral /inputs end create neutral /inputs/AMPAs create neutral /inputs/GABAs /******************************************************************/ /* Block of code to create AMPA Synapses, and set up timetables */ /* to drive them. */ /******************************************************************/ /* Generate the prototype AMPA synapse, as defined in gnrh_syns */ make_gnrh_AMPA randseed = 1234567 /* create a large number of independant synapses, */ /* receiving activation info from timetables */ /*AMPA synapses*/ create neutral /inputs/AMPAs/{syn_compt} for (i=0; i<{num_AMPA_syns}; i=i+1) copy /library/AMPA {cellpath}/{syn_compt}/AMPAs{i} addmsg {cellpath}/{syn_compt}/AMPAs{i} {cellpath}/{syn_compt} CHANNEL Gk Ek addmsg {cellpath}/{syn_compt} {cellpath}/{syn_compt}/AMPAs{i} VOLTAGE Vm create timetable /inputs/AMPAs/{syn_compt}/AMPAtt{i} // set properties of spike timing setfield /inputs/AMPAs/{syn_compt}/AMPAtt{i} \ maxtime 10 \ // Max. Time up to which table is filled act_val 1.0 \ // Value of Activation when set to ON method 2 \ // Gamma Dist. for Inter Time Intervals meth_desc1 {1/{AMPA_freq}} \ //mean Inter Time Interval (method 2) meth_desc2 0.003 \ //absolute refractory period of 3 ms (method 2) meth_desc3 2 //Order of Gamma Dist. (method 2) call /inputs/AMPAs/{syn_compt}/AMPAtt{i} TABFILL // addmsg /inputs/AMPAs/{syn_compt}/AMPAtt{i} {cellpath}/{syn_compt}/AMPAs{i} ACTIVATION activation //set up spikegen create spikegen /inputs/AMPAs/{syn_compt}/spiker{i} setfield /inputs/AMPAs/{syn_compt}/spiker{i} \ output_amp 1 \ thresh 0.5 //connect timetables to AMPA synapses addmsg /inputs/AMPAs/{syn_compt}/AMPAtt{i} \ /inputs/AMPAs/{syn_compt}/spiker{i} INPUT activation addmsg /inputs/AMPAs/{syn_compt}/spiker{i} \ {cellpath}/{syn_compt}/AMPAs{i} SPIKE end echo we have made {num_AMPA_syns} AMPA syns /******************************************************************/ /* Block of code to create GABA Synapses, and set up timetables */ /* to drive them. */ /******************************************************************/ /* Generate the prototype GABA synapse, as defined in gnrh_syns */ make_gnrh_GABA randseed = 2345671 /* create a large number of independant synapses, */ /* receiving activation info from timetables */ /*GABA synapses*/ create neutral /inputs/GABAs/{syn_compt_GABA} for (i=0; i<{num_GABA_syns}; i=i+1) copy /library/GABA {cellpath}/{syn_compt_GABA}/GABAs{i} addmsg {cellpath}/{syn_compt_GABA}/GABAs{i} {cellpath}/{syn_compt_GABA} CHANNEL Gk Ek addmsg {cellpath}/{syn_compt_GABA} {cellpath}/{syn_compt_GABA}/GABAs{i} VOLTAGE Vm create timetable /inputs/GABAs/{syn_compt_GABA}/GABAtt{i} // set properties of spike timing setfield /inputs/GABAs/{syn_compt_GABA}/GABAtt{i} \ maxtime 10 \ // Max. Time up to which table is filled act_val 1.0 \ // Value of Activation when set to ON method 2 \ // Gamma Dist. for Inter Time Intervals meth_desc1 {1/{GABA_freq}} \ //mean Inter Time Interval (method 2) meth_desc2 0.003 \ //absolute refractory period of 3 ms (method 2) meth_desc3 3 //Order of Gamma Dist. (method 2) // for the last variable, use "meth_desc3 3" for inputs independant of the AMPA synapses, and // use "meth_desc3 2" for GABA inputs coincident with AMPA ones. call /inputs/GABAs/{syn_compt_GABA}/GABAtt{i} TABFILL // addmsg /inputs/GABAs/{syn_compt_GABA}/GABAtt{i} \ // {cellpath}/{syn_compt_GABA}/GABAs{i} ACTIVATION activation //set up spikegen create spikegen /inputs/GABAs/{syn_compt_GABA}/spiker_GABA{i} setfield /inputs/GABAs/{syn_compt_GABA}/spiker_GABA{i} \ output_amp 1 \ thresh 0.5 //connect timetables to GABA synapses addmsg /inputs/GABAs/{syn_compt_GABA}/GABAtt{i} \ /inputs/GABAs/{syn_compt_GABA}/spiker_GABA{i} INPUT activation addmsg /inputs/GABAs/{syn_compt_GABA}/spiker_GABA{i} \ {cellpath}/{syn_compt_GABA}/GABAs{i} SPIKE end echo we have made {num_GABA_syns} GABA syns // make_gnrh_GABA // copy GABA {cellpath}/soma/GABA // addmsg {cellpath}/soma/GABA {cellpath}/soma CHANNEL Gk Ek // addmsg {cellpath}/soma {cellpath}/soma/GABA VOLTAGE Vm // addmsg /input/Apulse/spiketrain {cellpath}/soma/GABA SPIKE //set up current injection /**************************************************************************** * This is a bit of a hack, to get around a Genesis bug involving injecting * * current into a cell that has been taken over by the Hines solver. The * * Manual says to use code like: * * setfield {cellpath}/soma inject {curr} * * call {cellpath} HPUT {cellpath}/soma * * But, it turns out that there is a disturbance in the membrane potential * * every time the HPUT command is excecuted. The solution (as implemented * * here) is to set up a "pulse" that is actually a DC current injection, and * * in the run code for current injections to use commands like: * * setfield /pulse level1 {curr} * * step 0.05 -time * * setfield /pulse level1 0 * * to generate a pulse. The injections are set up and run from the script * * "gnrh_current_inject.g * ****************************************************************************/ create pulsegen /pulse setfield /pulse \ level1 0 \ width1 0.1 \ delay1 0 \ delay2 0 \ baselevel 0 \ trig_mode 0 addmsg /pulse {cellpath}/soma INJECT output /**************************** * SETUP THE HINES SOLVER * ****************************/ echo preparing hines solver... //create hsolve {cellpath} // The hsolve element has already been created.... It is the cell itself setfield {cellpath} \ path {cellpath}/##[][TYPE=compartment] \ comptmode 1 \ // uses less memory, and a bit slower than comptmode 1 chanmode 4 \ // Mode for efficient saving of multiple compartment values calcmode 0 \ // no linear interpolation of values from lookup tables outclock 9 \ // clock to be used for element updates storemode 2 // Total Conductances are stored call {cellpath} SETUP setmethod 11 // Crank-Nicholson Method /******************************** * OUTPUT * ********************************/ /* Output of Soma trace only: */ hstr ={findsolvefield {cellpath} {cellpath}/soma Vm} addmsg {cellpath} /out SAVE {hstr} //hstr ={findsolvefield {cellpath} {cellpath}/p0[196] Vm} // addmsg {cellpath} /out SAVE {hstr} /* uncomment above line to save only one Vm trace (for simple graphs) */ /************************************************************************/ /* Save Vm of all compartments to a file for use in making movie frames */ /* Uncomment block below for saving stuff for making movies */ /************************************************************************/ //int n //str readcompartment //openfile {outputcompsfname} r //readcompartment = {readfile {outputcompsfname}} //while (! {eof {outputcompsfname}}) // hstr ={findsolvefield {cellpath} {cellpath}/{readcompartment} Vm} // addmsg {cellpath} /out SAVE {hstr} // readcompartment = {readfile {outputcompsfname}} //end //closefile {outputcompsfname} // /* ****************************************************************************/ /* Block of code to output synaptic conductances: leave uncommented if not */ /* desired, to save time in repeated simulations (actually, it does not seem */ /* to save much time at all...... */ /******************************************************************************/ /* Create Output element for AMPA synaptic conductances */ if ({num_AMPA_syns} >0) create asc_file /out2 setfield /out2 filename {gsyn_AMPA_fname} initialize 1 flush 0 append 1 leave_open 1 useclock /out2 9 silent -1 /* Loop through and save each AMPA conductance in the output file */ for (i=0; i<{num_AMPA_syns}; i=i+1) hstr ={findsolvefield {cellpath} {cellpath}/{syn_compt}/AMPAs{i} Gk} addmsg {cellpath} /out2 SAVE {hstr} end end /* Create Output element for GABA synaptic conductances */ if ({num_GABA_syns}>0) create asc_file /out3 setfield /out3 filename {gsyn_GABA_fname} initialize 1 flush 0 append 1 leave_open 1 useclock /out3 9 silent -1 /* Loop through and save each GABA conductance in the output file */ for (i=0; i<{num_GABA_syns}; i=i+1) hstr ={findsolvefield {cellpath} {cellpath}/{syn_compt_GABA}/GABAs{i} Gk} addmsg {cellpath} /out3 SAVE {hstr} end end /* Create Output element for Injected Currents */ create asc_file /out4 setfield /out4 filename {current_data_fname} initialize 1 flush 0 append 1 leave_open 1 useclock /out4 9 silent -1 hstr ={findsolvefield {cellpath} {cellpath}/soma inject} addmsg {cellpath} /out4 SAVE {hstr} /****************************************************************************/ /* End of block for saving all voltages and synapses for movie */ /****************************************************************************/ /*************************************/ /* Start running the simulation */ /*************************************/ reset /*********************************************/ /* Restore a saved snapshot of the cell */ /* See code below for saving the snapshot */ /* Uncomment the two lines below to restore */ /*********************************************/ restore {snapshotname} call {cellpath} HRESTORE /**********************/ /* Run for some time */ /**********************/ /*********************************************************************************/ /* Use the line below to run for some time and with synapses, etc, as set up in */ /* "gnrh_const.g"... Comment it out for current injection simulations. */ /*********************************************************************************/ // step {run_time} -time /*********************************************************************************/ /* Use the line below to run for current injection protocols to match */ /* experiments as set up in "gnrh_current_inject.g.... */ /* Comment it out for synaptic activation simulations. */ /*********************************************************************************/ do_current_injections /**************************************************/ /* Take a snapshot of the cell for RESTORE */ /* Uncomment the lines below to take the snapshot */ /**************************************************/ //call {cellpath} HSAVE /* This updates all compartments from the hsolve element */ //save {cellpath}/##[] {snapshotname} /* This saves all values for all elements in the file "test.save" */ /* NOTE: Just using the wildcard /## will only save elements of the type "p0[XX]" */ /* but WILL NOT save elements of the type "p1[XX]" */ quit