//======================== TurtleVisCortex Model =======================// // // // This is the large scale model of turtle visual cortex described in // // // // Nenadic, Z, Ghosh, BK and Ulinski, P (2002) Modeling and // // Estimation Problems in the Turtle Visual Cortex, // // IEEE Trans. Bio-Med. Eng., 49:753-762 // // // // Nenadic, Z, Ghosh, BK and Ulinski, P (2003) Propagating Waves // // in Visual Cortex: A Large Scale Model of Turtle Visual // // Cortex", J. Computational Neuroscience 14:161-184. // // // // The model proceeds as follows // // 1. Create the 6 neuronal populations // // 2. Create the synapses for the populations // // 3. Set the clocks to control the time step for the simulation // // 4. Set up the monitoring and control panel // // 5. Set up the input stimulus // // 6. Create the desired output files // // 7. Start the simulation // // // // Setup: // // 1. Must provide coordinate files for neuron positions for the 6 // // populations of neurons // // 2. Must set the hierarchy root name for each neuron population // // // // Notes: // // 1. To create a different number of neurons or to locate neurons in // // different positions, modify the corresponding coordinate file // // 2. To change the input stimulus, set the appropiate flag(s) and // // and modify the stimulation parameters in this file // // stimulus.g and call it in place of make_diffuse_flash // // 3. To output different variables, add an appropriate function to // // utilities_output.g and call it in place of or in addition to // // dump_neuron_soma_voltages // // 4. To prevent overwriting of the output data when starting a new // // run, change the value of the string variable "responseName" // // // //======================================================================// include ../lib/global_constants.g // ==================== INITIAL EXPERIMENTAL SETUP ==================== // // ==================================================================== // // IMPORTANT -- Don't forget to change the responseName or your // old datafiles will be overwritten!! str responseName = "TurtleVisCortex_diffuse_" // == Set stimulation type(s) ========================================== // int DIFFUSE_LIGHT_FLASH = 1 int STATIONARY_LIGHT_SPOT = 0 int MOVING_LIGHT_SPOT = 0 int DIRECT_NEURON_STIM_REC = 0 int DIRECT_NEURON_STIM_CIR = 0 // == Select data type(s) to save ===================================== // int voltage_flag = 1 int AMPA_flag = 1 int NMDA_flag = 1 int GABA_A_flag = 1 int GABA_B_flag = 1 int sodium_flag = 1 int calcium_flag = 1 int potassium_flag = 1 int KAHP_flag = 1 int LGN_flag = 1 // ==================================================================== // // =================== END INITIAL EXPERIMENTAL SETUP ================= // //================INPUT FILES FOR NEURONAL COORDINATES ==================// str horizontal_coords = "../coords/horizontal.dat" str lateral_coords = "../coords/lateral.dat" str lgn_coords = "../coords/lgn.dat" str medial_coords = "../coords/medial.dat" str stellate_coords = "../coords/stellate.dat" str subpial_coords = "../coords/subpial.dat" str varicosity_coords = "../coords/varicosities.dat" //==========ROOT HIERARCHY NAMES FOR NEURONAL POPULATIONS ================// str HOR_ROOT = "/network_horizontal" str LAT_ROOT = "/network_lateral" str LGN_ROOT = "/network_lgn" str MED_ROOT = "/network_medial" str STE_ROOT = "/network_stellate" str SUB_ROOT = "/network_subpial" //==========ROOT HIERARCHY NAMES FOR NEURONAL STIMULATIONS ===============// str INPUT_ROOT1 = "/input1/funky" str INPUT_ROOT2 = "/input2/funky" str INPUT_ROOT3 = "/input3/funky" str INPUT_ROOT4 = "/input4/funky" str INPUT_ROOT5 = "/input5/funky" //==================== CREATING GENICULATE CELLS =========================// int TOTAL_LGN_NEURONS = 0 include ../lib/neurons_geniculate.g make_geniculate_cells {lgn_coords} {LGN_ROOT} //======================= CREATING LATERAL CELLS =========================// include ../lib/neurons_lateral.g make_lateral_cells {lateral_coords} {LAT_ROOT} //======================= CREATING MEDIAL CELLS ==========================// include ../lib/neurons_medial.g make_medial_cells {medial_coords} {MED_ROOT} //===================== CREATING STELLATE CELLS ==========================// include ../lib/neurons_stellate.g make_stellate_cells {stellate_coords} {STE_ROOT} //===================== CREATING HORIZONTAL CELLS ========================// include ../lib/neurons_horizontal.g make_horizontal_cells {horizontal_coords} {HOR_ROOT} //===================== CREATING SUBPIAL CELLS ===========================// include ../lib/neurons_subpial.g make_subpial_cells {subpial_coords} {SUB_ROOT} //================== CREATING SYNAPSES FROM GENICULATE CELLS =============// include ../lib/synapses_geniculate.g make_lgn_synapses {varicosity_coords} {LGN_ROOT} {LAT_ROOT} \ {MED_ROOT} {STE_ROOT} {SUB_ROOT} //================== CREATING SYNAPSES FROM LATERAL CELLS ================// include ../lib/synapses_lateral.g make_lateral_synapses {LAT_ROOT} {HOR_ROOT} {MED_ROOT} \ {STE_ROOT} {SUB_ROOT} //================= CREATING SYNAPSES FROM MEDIAL CELLS ==================// include ../lib/synapses_medial.g make_medial_synapses {MED_ROOT} {HOR_ROOT} {LAT_ROOT} \ {STE_ROOT} {SUB_ROOT} //================= CREATING SYNAPSES FROM STELLATE CELLS ================// include ../lib/synapses_stellate.g make_stellate_synapses {STE_ROOT} {LAT_ROOT} {MED_ROOT} //================ CREATING SYNAPSES FROM HORIZONTAL CELLS ===============// include ../lib/synapses_horizontal.g make_horizontal_synapses {HOR_ROOT} {LAT_ROOT} {MED_ROOT} //================= CREATING SYNAPSES FROM SUBPIAL CELLS =================// include ../lib/synapses_subpial.g make_subpial_synapses {SUB_ROOT} {LAT_ROOT} {MED_ROOT} //======================== SET CLOCK AND STEPSIZE ========================// float tmax = 1.50 // Time in seconds for the simulation to run float dt = 0.00005 // Internal time stepsize setclock 0 {dt} // Clock for controlling internal integration step setclock 1 {0.001} // Clock for controlling dump values display setclock 2 {2*tmax} // Clock set larger than the simulation running time //====================== SET THE INPUT STIMULUS ==========================// // To stimulate the model, set one or more of the flags below to true (1) // // // // Available stimulation modes are: // // DIFFUSE_LIGHT_STIM simultaneously stimulate all LGN neurons // // STATIONARY_LIGHT_SPOT stimulate a contiguous subset of LGN neurons // // MOVING_LIGHT_SPOT sequentially stimulate LGN neurons at a specified // // speed. A positive speed means the light spot is moving in a // // nasal-to-temporal direction; a negative speed means the spot // // is moving in a temporal-to-nasal direction // // DIRECT_NEURON_STIM_REC apply a current to a target population // // of neurons (e.g. lateral cells) in a specified rectangular area // // DIRECT_NEURON_STIM_CIR apply a current to a target population // // of neurons (e.g. lateral cells) in a specified circular area // //========================================================================// include ../lib/stimulus.g // Change parameters below for each stimulus type if (DIFFUSE_LIGHT_FLASH == 1) float FLASH_DUR = 0.150 // Duration of flash in sec float INPUT_LEVEL = 0.2e-9 // Injected current in amps float STIM_DELAY = 0.0 // Stim onset delay in sec make_diffuse_flash {INPUT_ROOT1} {{LGN_ROOT}@"/cell"} \ {INPUT_LEVEL} {FLASH_DUR} {tmax} {STIM_DELAY} end if (STATIONARY_LIGHT_SPOT == 1) int FIRST_LGN = 1 // First LGN cell stimulated int LAST_LGN = 20 // Last LGN cell stimulated float FLASH_DUR = 0.150 // Duration of flash in sec float INPUT_LEVEL = 0.2e-9 // Injected current in amps float STIM_DELAY = 0.0 // Stim onset delay in sec make_stationary_spot {FIRST_LGN} {LAST_LGN} \ {INPUT_ROOT2} {{LGN_ROOT}@"/cell"} {INPUT_LEVEL} \ {FLASH_DUR} {tmax} {STIM_DELAY} end if (MOVING_LIGHT_SPOT == 1) int SPOT_SPEED = -1.0 // Speed in LGN neurons per ms // sign of speed determines // the movement direction float FLASH_DUR = 0.150 // Duration of flash in sec float INPUT_LEVEL = 0.2e-9 // Injected current in amps float STIM_DELAY = 0.0 // Stim onset delay in sec make_moving_spot {SPOT_SPEED} {INPUT_ROOT3} \ {{LGN_ROOT}@"/cell"} {INPUT_LEVEL} {FLASH_DUR} \ {tmax} {STIM_DELAY} end if (DIRECT_NEURON_STIM_REC == 1) float X1 = 0.0 // Left x coordinate of rectangle float X2 = 5.0e-002 // Right x coordinate of rectangle float Y1 = 0.0 // Bottom y coordinate of rectangle float Y2 = 1.0 // Top y coordinate of rectangle str NEURON_TARGET // Neuron target str TARGET_EREST // Target resting membrane potential float STIM_DUR = 0.05 // Stim duration in sec float INPUT_LEVEL = 1.0e-9 // Injected current in amps float STIM_DELAY = 0.0 // Stim onset delay in sec //Set target neurons NEURON_TARGET = {LAT_ROOT} TARGET_EREST = {LAT_EREST} make_neuron_stim_rec {X1} {X2} {Y1} {Y2} \ {INPUT_ROOT4} {{NEURON_TARGET}@"/cell"} \ {INPUT_LEVEL} {TARGET_EREST} {STIM_DUR} {tmax} {STIM_DELAY} end if (DIRECT_NEURON_STIM_CIR == 1) float X1 = 1.0 // Stim center x float Y1 = 0.5 // Stim center y float STIM_RAD = 0.100 // Radius of stimulation str NEURON_TARGET // Neuron target str TARGET_EREST // Target resting membrane potential float STIM_DUR = 0.150 // Stim duration in sec float INPUT_LEVEL = 0.2e-9 // Injected current in amps float STIM_DELAY = 0.0 // Stim onset delay in sec //Set target neurons NEURON_TARGET = {LAT_ROOT} TARGET_EREST = {LAT_EREST} make_neuron_stim_cir {X1} {Y1} {STIM_RAD} \ {INPUT_ROOT5} {{NEURON_TARGET}@"/cell"} \ {INPUT_LEVEL} {TARGET_EREST} {STIM_DUR} {tmax} {STIM_DELAY} end //=======================SETUP OUTPUT FILES===============================// include ../lib/utilities_output.g echo "Creating output directories if necessary..." str responseDirectoryBase = {"../output/"@{responseName}} mkdir {responseDirectoryBase} str responseDir = {{responseDirectoryBase}@"/data"} mkdir {responseDir} str dataClock = "1" // Dump data if flag is set if (voltage_flag == 1) dump_neuron_soma_voltages {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (calcium_flag == 1) dump_neuron_calcium_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (sodium_flag == 1) dump_neuron_sodium_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (potassium_flag == 1) dump_neuron_potassium_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (KAHP_flag == 1) dump_neuron_kahp_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (LGN_flag == 1) dump_synapse_lgn_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (AMPA_flag == 1) dump_synapse_ampa_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (NMDA_flag == 1) dump_synapse_nmda_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (GABA_A_flag == 1) dump_synapse_gaba_a_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end if (GABA_B_flag == 1) dump_synapse_gaba_b_currents {responseDir} {responseName} {dataClock} \ {HOR_ROOT} {LAT_ROOT} {LGN_ROOT} {MED_ROOT} {STE_ROOT} {SUB_ROOT} end //=========== RUN SIMULATION WHILE MONITORING PROGRESS ===================// include ../lib/utilities_control.g int num_steps = tmax/dt + 1 int view_flag = 1 // 1 = show 4 plots for monitoring, 0 = don't show run_simulation {tmax} -0.1 0.05 {num_steps} {view_flag} check reset