// genesis - inputs2.g - Modified functions used in the Popup menu // This file was developed by // Akira Takashima. // Department of Biological Sciences // Faculry of Science // Hokkaido University // Sapporo Japan // // Last update on 22 Jan. 2007 //======================================================================= // makeinputs - the main function to set up injection and synaptic inputs //======================================================================= function makeinputs // Default values of parameters - (global variables defined in Cable.g) float syndelay = 0 // msec float synwidth = 1000 //1000// choose width and interval to give a single spike float syninterval = 100000 create neutral /input //================================================== // spike for synaptic input - only a single spike //================================================== // pulse to gate spike train create pulsegen /input/synpulse create spikegen /input/synpulse/spike setspikes {syndelay} {synwidth} {syninterval} // setfield /input/synpulse width1 0.001 delay1 0.02 baselevel 0.0 \ // level1 1.0 trig_mode 0 width2 0.0 delay2 1 output 1 setfield /input/synpulse/spike abs_refract 0.01 output_amp 1 thresh 0.5 addmsg /input/synpulse /input/synpulse/spike INPUT output // Lastly, make connection to chemically activated dendrite channel // using a SPIKE message // set_chan_params {gsyn} {tsyn} {Vsyn} // initially, make both injection and synaptic input to the soma end// makeinputs //======================================================= // functions used in the change synaptic input menu //======================================================= function syn_toggle// toggles synaptic input ON/OFF if ({getfield /output/synapse_menu/syntoggle state} == 1) // ON setfield /input/synpulse level1 1.0 echo "Synaptic Input ON!" else // OFF setfield /input/synpulse level1 0.0 echo " Synaptic Input OFF!" end end function set_chan_params( comp_no, gsyn, tsyn, Vsyn ) int comp_no = ({getfield /output/synapse_menu/comp_no value}) str gsyn, tsyn, Vsyn /* if ({exists /cell/solve}) delete /cell/solve end */ if ((comp_no) <= 0) setfield /cell/soma/Ex_chan Ek {Vsyn} setfield /cell/soma/Ex_chan tau1 {tsyn} tau2 {tsyn} setfield /cell/soma/Ex_chan gmax {gsyn} echo "Soma Ex_chan has changed!" else setfield /cell/dend[{comp_no}]/Ex_chan Ek {Vsyn} setfield /cell/dend[{comp_no}]/Ex_chan tau1 {tsyn} tau2 {tsyn} setfield /cell/dend[{comp_no}]/Ex_chan gmax {gsyn} echo "dend["{comp_no}"] Ex_chan has changed!" end end // links channel which computes channel current (channelC2) with compartment function link_channel2(channel, compartment) addmsg {channel} {compartment} CHANNEL Gk Ek addmsg {compartment} {channel} VOLTAGE Vm end function add_syn_input // compartment # for input - #0 = Soma int comp_no int NCableSects = 492 comp_no = ({getfield /output/synapse_menu/comp_no value}) if ((comp_no) > ({NCableSects})) echo "There are only "{NCableSects}" cable compartments!" return end /* if ({exists /cell/solve}) delete /cell/solve end */ if ((comp_no) <= 0) // then input to soma addmsg /input/synpulse/spike /cell/soma/Ex_chan SPIKE setfield /cell/soma/Ex_chan synapse[0].weight 1 synapse[0].delay 0 // link_channel2 /cell/soma/Ex_chan /cell/soma echo "Synaptic input is to the soma" else addmsg /input/synpulse/spike /cell/dend[{comp_no}]/Ex_chan SPIKE setfield /cell/dend[{comp_no}]/Ex_chan synapse[0].weight 1 synapse[0].delay 0 // link_channel2 /cell/dend[{comp_no}]/Ex_chan /cell/dend[{comp_no }] echo "Synaptic input is to dendrite compartment number " {getfield /output/synapse_menu/comp_no value} end end function set_inputs// set parameters for synaptic input from dialog boxes float syndelay = 0 // msec float synwidth = 1000// choose width and interval to give a single spike float syninterval = 100000 int comp_no comp_no = ({getfield /output/synapse_menu/comp_no value}) str dialog = "/output/synapse_menu" set_chan_params {comp_no} {getfield {dialog}/gsyn value} \ {getfield {dialog}/tsyn value} {getfield {dialog}/vsyn value} // after so many changes, we need to reset everything reset echo "Maximum conductance = "{getfield {dialog}/gsyn value} echo "Time constant for conductance = "{getfield {dialog}/tsyn value} echo "Channel equilibrium potential = "{getfield {dialog}/vsyn value} end function remove_synaptic_input int i, n, nmsg int NCableSects NCableSects = 492 /* if ({exists /cell/solve}) delete /cell/solve end */ for (i = 0; i < {NCableSects}; i = i + 1) if ( i <= 0 ) nmsg = {getmsg /cell/soma/Ex_chan -incoming -count} for (n = 0; n < nmsg; n = n + 1) if ({getmsg /cell/soma/Ex_chan -in -type {n}} == "SPIKE" ) echo deleting message {n} deletemsg /cell/soma/Ex_chan {n} -incoming break end end else nmsg = {getmsg /cell/dend[{i}]/Ex_chan -incoming -count} for (n = 0; n < nmsg; n = n + 1) if ({getmsg /cell/dend[{i}]/Ex_chan -in -type {n}} == "SPIKE") echo deleting message {n} deletemsg /cell/dend[{i}]/Ex_chan {n} -incoming break end // if end // for n end end // for i if ({exists /LDS/draw/xcell2}) delete /LDS/draw/xcell2 else echo "/LDS/draw/xcell2 doesn't exist!" end if ({exists /LDS/draw/xcell3}) delete /LDS/draw/xcell3 delete /LDS/draw/xcell4 delete /LDS/draw/xcell5 delete /LDS/draw/xcell6 delete /LDS/draw/xcell7 else echo "/LDS/draw/xcell3 doesn't exist!" end if ({exists /LDS/draw/xcell8}) delete /LDS/draw/xcell8 delete /LDS/draw/xcell9 delete /LDS/draw/xcell10 delete /LDS/draw/xcell11 delete /LDS/draw/xcell12 else echo "/LDS/draw/xcell8 doesn't exist!" end if ({exists /LDS/draw/xcell13}) delete /LDS/draw/xcell13 delete /LDS/draw/xcell14 delete /LDS/draw/xcell15 delete /LDS/draw/xcell16 delete /LDS/draw/xcell17 delete /LDS/draw/xcell18 delete /LDS/draw/xcell19 delete /LDS/draw/xcell20 delete /LDS/draw/xcell21 delete /LDS/draw/xcell22 delete /LDS/draw/xcell23 else echo "/LDS/draw/xcell13 dosen't exist!" end if ({exists /LDS/draw/xcell33}) delete /LDS/draw/xcell33 delete /LDS/draw/xcell34 delete /LDS/draw/xcell35 delete /LDS/draw/xcell36 delete /LDS/draw/xcell37 delete /LDS/draw/xcell38 delete /LDS/draw/xcell39 delete /LDS/draw/xcell40 delete /LDS/draw/xcell41 delete /LDS/draw/xcell42 delete /LDS/draw/xcell43 delete /LDS/draw/xcell44 delete /LDS/draw/xcell45 delete /LDS/draw/xcell46 delete /LDS/draw/xcell47 delete /LDS/draw/xcell48 delete /LDS/draw/xcell49 delete /LDS/draw/xcell50 delete /LDS/draw/xcell51 delete /LDS/draw/xcell52 else echo "/LDS/draw/xcell33 dosen't exist!" end echo "Removing all synaptic inputs!" end //======================================================= // functions used in the change synaptic input menu //======================================================= function setspikes(delay, width, interval) str pulser = "/input/synpulse" str spiker = "/input/synpulse/spike" float delay, width, interval, width2 setfield {pulser} width1 {width} delay1 {delay} baselevel 0.0 \ trig_mode 0 delay2 100000 // free run mode with very long delay for 2nd pulse (non-repetitive) // level1 is set by the syn_toggle function setfield {spiker} abs_refract {interval} output_amp 1 thresh 0.5 end function set_input_timing str dialog = "/output/synapse_menu" // setinjection {getfield {dialog}/delay value} \ // {getfield {dialog}/width value} setspikes {getfield {dialog}/delay value} \ {getfield {dialog}/width value} \ {getfield {dialog}/interval value} // set spike amplitudes to 1.0/dt echo "Synaptic input delay = "{getfield {dialog}/delay value} echo "Synaptic input width = "{getfield {dialog}/width value} echo "Synaptic input interval = "{getfield {dialog}/interval value} end //EOF