//====== CREATE SYNAPSES FROM GENICULATE NEURONS FOR NGU MODEL =======// // This file contains functions to create a synapses from the LGN // // based on varicosity positions that are read from a file. // // // // Setup: // // 1. Specify the varicosities by creating a text file of x y z // // coordinates for the varicosities, one varicosity per line. // // 2. Call make_lgn_synapses // // // // Modeling notes: // // The turtle visual cortex is characterized by long range input // // connections that go from the lateral geniculate across the entire // // cortex. The model assumes that the synapses to target neurons are // // made through varicosities, which are nodules that appear along // // these long range input connections. The lgn has synapses to the // // lateral, medial, stellate and subpial neurons, but not the // // horizontal neurons. Neurons that are within a specified distance // // from these varicosities have a synapse target. The lateral, medial // // and stellate neurons have a single target, but the subpial cells // // contain a range of target compartments. // //====================================================================// include ../lib/global_constants.g include ../lib/synapses.g //============ LOCATION OF LGN SYNAPSE TARGETS ======================// str LGN_LAT_TARGET = "/basal2" // Lateral target for geniculate synapses str LGN_MED_TARGET = "/dend3" // Medial target for geniculate synapses str LGN_STE_TARGET = "/dend16" // Stellate target for geniculate synapses str LGN_SUB_TARGET = "/dend" // Subpial target base for geniculate synapses // Subpial targets are dendrites [LGN_SUB_TARGET_LO, LGN_SUB_TARGET_HI] int LGN_SUB_TARGET_LO = 2 int LGN_SUB_TARGET_HI = 29 //=============== LGN SYNAPSE TARGET NAMES =========================// str LGN_LAT_SYNAPSE = "lgn_lat" str LGN_MED_SYNAPSE = "lgn_med" str LGN_STE_SYNAPSE = "lgn_stel" str LGN_SUB_SYNAPSE = "lgn_subp" //================LGN SYNAPTIC WEIGHTS ============================// float LGN_LAT_W = 1.87 float LGN_MED_W = 0.25 float LGN_STE_W = 0.25 float LGN_SUB_W = 0.25 //========LGN EFFECTIVE DISTANCE TO VARICOSITIES (in mm)==========// float LGN_LAT_R = 0.026 float LGN_MED_R = 0.06 float LGN_STE_R = 0.025 float LGN_SUB_R = 0.025 //=====================LGN SYNAPTIC PARAMETERS ===================// float LGN_GS = 5e-9 float LGN_DELAY_FACTOR = 1e-3/ 0.18 //============= LGN PARAMETERS FOR AMPA RECEPTORS ===============// float LGN_TA = 3.0e-3 float LGN_TTA = 0.3e-3 float LGN_EA = 0.0e-3 //============= SYNAPSE COUNTS FOR DEBUGGING ===================// int lgn_lat_count = 0 int lgn_med_count = 0 int lgn_ste_count = 0 int lgn_sub_count = 0 /* ****************************************************************** create_geniculate_synapses_for_group Create a synapse for each member of the root group. The synapse contains an AMPA receptor that will sum the contributions of all geniculate neuron sources that impinge on the neuron Parameters: root root of the neuron group hierarchy target target compartment for the group syn_name base name of synapse for this group ****************************************************************** */ function create_geniculate_synapses_for_group (root, target, syn_name) str root, target, syn_name str name, dest str syn_chan_a = {syn_name}@"_a" foreach name ({el {{root}@"/cell"}#}) dest = {name}@{target} // AMPA receptor make_synapse {dest} {syn_chan_a} {LGN_GS} {LGN_EA} {LGN_TA} {LGN_TTA} end end /* ****************************************************************** create_geniculate_synapses_for_interval_group Create a synapse for each member of the root group. The synapse contains an AMPA receptor that will sum the contributions of all geniculate neuron sources that impinge on the neuron Parameters: root root of the neuron group hierarchy target target compartment for the group syn_name base name of synapse for this group low lowest index compartment to be connected high highest index compartment to be connected ****************************************************************** */ function create_geniculate_synapses_for_interval_group (root, target, \ syn_name, low, high) str root, target, syn_name int low, high str syn_chan_a = {syn_name}@"_a" str name, dest int i foreach name ({el {{root}@"/cell"}#}) for (i = low; i <= high; i = i + 1) dest = {name}@{{target}@{i}} // AMPA receptor make_synapse {dest} {syn_chan_a} {LGN_GS} {LGN_EA} {LGN_TA} {LGN_TTA} end end end /* ****************************************************************** connect_geniculate_synapse_group Connects synapses for each member of the root group within a specified radius of the src varicosity. Parameters: root root of the neuron group hierarchy src lgn soma source syn_name base name of synapse for this group target target compartment for the group x_var x coordinate for the varicosity y_var y coordinate for the varicosity dist_var distance from lgn src to varicosity radius effective distance of synapse weight synaptic weight Returns: number of synapses created for this src and varicosity ****************************************************************** */ function connect_geniculate_synapse_group(root, src, syn_name, target, \ x_var, y_var, dist_var, radius, weight) str root, src, syn_name, target float x_var, y_var, dist_lgn_var, radius, weight str dest, name str syn_chan_a = {syn_name}@"_a" int syn_count = 0 float x, y, dist, tdelay foreach name ({el {{root}@"/cell"}#}) x = {getfield {name} x} y = {getfield {name} y} dist = {sqrt {(x_var - x)**2 + (y_var - y)**2} } if (dist <= radius) tdelay = ({dist_var} + {dist}) * LGN_DELAY_FACTOR //sec dest = {name}@{target} connect_synapse {src} {dest} {syn_chan_a} {tdelay} {weight} syn_count = syn_count + 1 end end return syn_count end /* ****************************************************************** connect_geniculate_synapse_interval_group Connects synapses for each member of the root group within a specified radius of the src varicosity. Multiple synaptic connections are made to each target neuron. In particular, all compartments with base name target and index in [low, high] are connected. Parameters: root root of the neuron group hierarchy src lgn soma source syn_name base name of synapse for this group target target compartment for the group x_var x coordinate for the varicosity y_var y coordinate for the varicosity dist_lgn_var distance from lgn src to varicosity radius effective distance of synapse weight synaptic weight low lowest index compartment to be connected high highest index compartment to be connected Returns: number of synapses created for this src and varicosity ****************************************************************** */ function connect_geniculate_synapse_interval_group(root, src, syn_name, target, \ x_var, y_var, dist_lgn_var, radius, weight, low, high) str root, src, syn_name, target int low, high float x_var, y_var, dist_lgn_var, radius, weight str syn_chan_a = {syn_name}@"_a" str dest, name int i int syn_count = 0 float x, y, dist, tdelay foreach name ({el {{root}@"/cell"}#}) x = {getfield {name} x} y = {getfield {name} y} dist = {sqrt {(x_var - x)**2 + (y_var - y)**2} } if (dist <= radius) tdelay = ({dist_lgn_var} + {dist}) * LGN_DELAY_FACTOR //sec for (i = low; i <= high; i = i + 1) dest = {name}@{{target}@{i}} connect_synapse {src} {dest} {syn_chan_a} {tdelay} {weight} syn_count = syn_count + 1; end end end return syn_count end /* ****************************************************************** connect_geniculate_lateral_synapses Connects the synapses from lgn to lateral neurons Parameters: root root of lateral neuron hierarchy src lgn soma source x_var x coordinate of the varicosity y_var y coordinate of the varicosity dist_var distance of source lgn neuron to varicosity Synapses with weight LGN_LAT_W are created for lateral neurons within distance LGN_LAT_R of a varicosity. The lateral target compartment for the synapse is LGN_LAT_TARGET, and the synapse is stored in the object hierachy under the lateral target compartment under the name LGN_LAT_SYNAPSE#. ****************************************************************** */ function connect_geniculate_lateral_synapses (root, src, x_var, \ y_var, dist_var) str root, src float x_var, y_var, dist_var lgn_lat_count = lgn_lat_count + {connect_geniculate_synapse_group \ {root} {src} {LGN_LAT_SYNAPSE} {LGN_LAT_TARGET} \ {x_var} {y_var} {dist_var} {LGN_LAT_R} {LGN_LAT_W}} end /* ****************************************************************** connect_geniculate_medial_synapses Connects the synapses from lgn to medial neurons Parameters: root root of medial neuron hierarchy src lgn soma source x_var x coordinate of the varicosity y_var y coordinate of the varicosity dist_var distance of source lgn neuron to varicosity Synapses with weight LGN_MED_W are created for medial neurons within distance LGN_MED_R of a varicosity. The medial target compartment for the synapse is LGN_MED_TARGET, and the synapse is stored in the object hierachy under the medial target compartment with the name LGN_MED_SYNAPSE@syn_index. ****************************************************************** */ function connect_geniculate_medial_synapses (root, src, x_var, \ y_var, dist_var) str root, src float x_var, y_var, dist_var lgn_med_count = lgn_med_count + {connect_geniculate_synapse_group \ {root} {src} {LGN_MED_SYNAPSE} {LGN_MED_TARGET} \ {x_var} {y_var} {dist_var} {LGN_MED_R} {LGN_MED_W}} end /* ****************************************************************** connect_geniculate_stellate_synapses Connects the synapses from lgn to stellate neurons Parameters: root root of stellate neuron hierarchy src lgn soma source x_var x coordinate of the varicosity y_var y coordinate of the varicosity dist_var distance of source lgn neuron to varicosity Synapses with weight LGN_STE_W are created for stellate neurons within distance LGN_STE_R of a varicosity. The stellate target compartment for the synapse is LGN_STE_TARGET, and the synapse is stored in the object hierachy under the stellate target compartment under the name LGN_STE_SYNAPSE#. ****************************************************************** */ function connect_geniculate_stellate_synapses (root, src, x_var, \ y_var, dist_var) str root, src float x_var, y_var, dist_var lgn_ste_count = lgn_ste_count + {connect_geniculate_synapse_group \ {root} {src} {LGN_STE_SYNAPSE} {LGN_STE_TARGET} \ {x_var} {y_var} {dist_var} {LGN_STE_R} {LGN_STE_W}} end /* ****************************************************************** connect_geniculate_subpial_synapses Connects the synapses from lgn to subpial neurons Parameters: root root of subpial neuron hierarchy src lgn soma source x_var x coordinate of the varicosity y_var y coordinate of the varicosity dist_var distance of source lgn neuron to varicosity Synapses with weight LGN_SUB_W are created for subpial neurons within distance LGN_SUB_R of a varicosity. However, instead of targeting a single neuronal compartment, the synapse targets all subpial compartments of the form LGN_SUB_TARGET# where # ranges from LGN_SUB_TARGET_LO to LGN_SUB_TARGET_HI. The default specifies 28 compartments (#s 2 through 29). The synapses are stored in the object hierachy under the subpial target compartment under the name LGN_STE_SYNAPSE#. ****************************************************************** */ function connect_geniculate_subpial_synapses (root, src, x_var, \ y_var, dist_var) str root, src int var_index float x_var, y_var, dist_var lgn_sub_count = lgn_sub_count + {connect_geniculate_synapse_interval_group \ {root} {src} {LGN_SUB_SYNAPSE} {LGN_SUB_TARGET} \ {x_var} {y_var} {dist_var} {LGN_SUB_R} {LGN_SUB_W} \ {LGN_SUB_TARGET_LO} {LGN_SUB_TARGET_HI}} end /* ****************************************************************** make_lgn_synapses Creates the synapses from lgn in the NGU model Parameters: varicosity_coords name of file containing varicosity coordinates lgn_root root of the hierarchy for geniculate neurons lat_root root of the hierarchy for lateral neurons med_root root of the hierarchy for medial neurons ste_root root of the hierarchy for stellate neurons sub_root root of the hierarchy for subpial neurons ****************************************************************** */ function make_lgn_synapses(varicosity_coords, lgn_root, lat_root, \ med_root, ste_root, sub_root) str varicosity_coords, lat_root, lgn_root, med_root, ste_root, sub_root //Start by creating a representative synapse for each potential target neuron create_geniculate_synapses_for_group {lat_root} {LGN_LAT_TARGET} {LGN_LAT_SYNAPSE} create_geniculate_synapses_for_group {med_root} {LGN_MED_TARGET} {LGN_MED_SYNAPSE} create_geniculate_synapses_for_group {ste_root} {LGN_STE_TARGET} {LGN_STE_SYNAPSE} create_geniculate_synapses_for_interval_group {sub_root} {LGN_SUB_TARGET} \ {LGN_SUB_SYNAPSE} {LGN_SUB_TARGET_LO} {LGN_SUB_TARGET_HI} //Now create spikes from varicosities for geniculate source neurons openfile {varicosity_coords} r str name, src str line = {readfile {varicosity_coords} -linemode} float x_var, y_var, x_lgn, y_lgn, dist_lgn_var, lgn_index_temp int lgn_index int count = 0 while (!{eof {varicosity_coords}}) count = count + 1 x_var = {getarg {arglist {line}} -arg 1} y_var = {getarg {arglist {line}} -arg 2} lgn_index_temp = {getarg {arglist {line}} -arg 3} lgn_index = lgn_index_temp name = {lgn_root}@{"/cell"@{lgn_index}} x_lgn = {getfield {name} x} y_lgn = {getfield {name} y} dist_lgn_var = {sqrt {(x_var - x_lgn)**2 + (y_var - y_lgn)**2} } src = {name}@"/soma/spike" connect_geniculate_lateral_synapses {lat_root} {src} \ {x_var} {y_var} {dist_lgn_var} connect_geniculate_medial_synapses {med_root} {src} \ {x_var} {y_var} {dist_lgn_var} connect_geniculate_stellate_synapses {ste_root} {src} \ {x_var} {y_var} {dist_lgn_var} connect_geniculate_subpial_synapses {sub_root} {src} \ {x_var} {y_var} {dist_lgn_var} line = {readfile {varicosity_coords} -linemode} end closefile {varicosity_coords} if (ECHO_ON == 1) echo "Created lgn synapses for" {count} "varicosities:" echo " " {lgn_lat_count} "synapses from lgn to lateral neurons" echo " " {lgn_med_count} "synapses from lgn to medial neurons" echo " " {lgn_ste_count} "synapses from lgn to stellate neurons" echo " " {lgn_sub_count} "synapses from lgn to subpial neurons" end end