/* * tsodyks_shortterm_bursts.sli * * This file is part of NEST. * * Copyright (C) 2004 The NEST Initiative * * NEST is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * NEST is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NEST. If not, see . * */ /* BeginDocumentation Name: tsodyks_shortterm_bursts - sli script for testing Tsodyks short term plastic synapses. Synopsis: (tsodyks_shortterm_bursts) run Description: Script to test Tsodyks short term plasticity depressing/facilitating synapses according to 'Synchrony Generation in Recurrent Networks with Frequency-Dependent Synapses' Tsodyks, Uziel, Markram JNeuroSci, Vol. 20 RC50 p. 1--5, (2000) author: Moritz Helias date: March 2006 see also: brunel.sli see also: http://ken.brainworks.uni-freiburg.de/nestwiki/index.php/Network_burst_generation_by_short-term_plasticity */ ResetKernel % clear all existing network elements /createSynapseTypes { userdict begin % set delay of static synapse to appropriate value % (needed for spike detector) /static_synapse << /delay delay /weight 1.0 >> SetDefaults % use tsodyks type synapses % configure all different synapses % set all parameters here, which are % not specifically set for each connection /tsodyks_synapse << /tau_psc Tau_psc /delay delay /u 0.0 /x 0.0 >> SetDefaults end } def %% %% I_mean delta_I N BackgroundInput %% /BackgroundInput { /N Set /delta_I Set /I_mean Set [] N { myrng drand 0.5 sub delta_I mul I_mean add append } repeat Sort %% sort in ascending order } def % initialize an array of neurons % calling sequence: % [gids] params initNeurons /initNeurons { /params Set /neurons Set %% random background current I0_dc deltaI neurons length BackgroundInput /i0s Set neurons { /i Set /gid Set params << /V_m myrng drand Theta mul %% random initial membrane potential [0, Theta] /I_e i0s i get %% i0 = i0s[i] >> join gid params SetStatus } forallindexed } def /createNeurons { userdict begin 0 ChangeSubnet % return to full network /E_net /subnet Create def % create subnet E_net ChangeSubnet % enter subnet /iaf_tum_2000 Ne Create % create neurons in subnet pop % pop gids returned by Create %% obtain array with GIDs of all excitatory neurons /E_neurons E_net GetGlobalNodes def /E_params << /tau_m Tau /tau_syn_ex Tau_psc /tau_syn_in Tau_psc /E_L U0 /V_m U0 /V_reset Vreset /V_th Theta /C_m C /t_ref_abs tau_ref_abs_e /t_ref_tot tau_ref_abs_e >> def ( Configuring excitatory neuron parameters.) = E_neurons E_params initNeurons 0 ChangeSubnet % return to full network /I_net /subnet Create def % create subnet I_net ChangeSubnet % enter subnet /iaf_tum_2000 Ni Create % create neurons in subnet pop % pop gids returned by Create % obtain array with GIDs of all excitatory neurons /I_neurons I_net GetGlobalNodes def /I_params << /tau_m Tau /tau_syn_ex Tau_psc /tau_syn_in Tau_psc /E_L U0 /V_m U0 /V_reset Vreset /V_th Theta /C_m C /t_ref_abs tau_ref_abs_i /t_ref_tot tau_ref_abs_i >> def ( Configuring inhibitory neuron parameters.) = I_neurons I_params initNeurons end % userdict } def %% %% connect randomly chosen neurons from population [sources] to target neuron %% %% N_conn sources target A_mean Tau_rec_mean Tau_fac_mean U_mean U_min U_max connectIncoming %% /connectIncoming { << >> begin /U_max Set /U_min Set /U_mean Set /Tau_fac_mean Set /Tau_rec_mean Set /A_mean Set /target Set /sources Set /N_conn Set /conn_spec << /rule (fixed_indegree) /indegree N_conn /multapses false /autapses false >> def /syn_spec << /model /tsodyks2_synapse /weight << % draw weights from clipped Gaussian distribution % with mean = A_mean, std = 0.5 A_mean % clipping bounds: min = min(0.2 A_mean, 2.0 A_mean) % max = max(0.2 A_mean, 2.0 A_mean) /distribution /normal_clipped /mu A_mean /sigma A_mean 0.5 mul abs /low A_mean dup 0.2 mul exch 2.0 mul min /high A_mean dup 0.2 mul exch 2.0 mul max >> /U << % draw random values for U from clipped Gaussian distribution /distribution /normal_clipped /mu U_mean /sigma U_mean 0.5 mul abs /low U_min /high U_max >> /tau_rec << % draw random values for tau_rec from left-clipped Gaussian distribution /distribution /normal_clipped /mu Tau_rec_mean /sigma Tau_rec_mean 0.5 mul abs /low Tau_min >> /tau_fac << % draw random values for tau_fac from left-clipped Gaussian distribution /distribution /normal_clipped /mu Tau_rec_mean /sigma Tau_rec_mean 0.5 mul abs /low Tau_min /cutoff 0.1 >> >> def sources % source population [we pick from this] [ target ] % target neuron conn_spec % connection properties syn_spec % synapse properties Connect % RandomConvergentConnect end } def /connectNeurons { userdict begin % Gaussian distribution, mean = 0, std = 1 myrng rdevdict /normal get CreateRDV /normal_tot Set % Gaussian distribution left/right clipped myrng rdevdict /normal_clipped get CreateRDV /normal_c Set % Gaussian distribution, left clipped myrng rdevdict /normal_clipped get CreateRDV /normal_cl Set % use predefined tsodyks short term plasticity synapse for all % subsequent connections /Connect << /syn_spec << /model /tsodyks_synapse >> >> SetOptions ( Connecting inputs to excitatory neurons.) = % loop through all exc neurons E_neurons { /target Set % number of source neurons from Gaussian distribution normal_tot Random Indegree_std mul Indegree_mean add round int /Ctot Set % 80 per cent excitatory incoming connections, 20 per cent inhibitory Ctot 0.8 mul round int /CE Set Ctot CE sub /CI Set CE E_neurons target A_ee Tau_rec_ee Tau_fac_ee U_ee U_ee_min U_ee_max connectIncoming CI I_neurons target A_ei Tau_rec_ei Tau_fac_ei U_ee U_ee_min U_ee_max connectIncoming } bind % bind improves efficiency forall ( Connecting inputs to inhibitory neurons.) = % loop through all inh neurons I_neurons { /target Set % number of source neurons from Gaussian distribution normal_tot Random 5.0 mul 50.0 add round int /Ctot Set % 80 per cent exc. input, 20 per cent inh. input Ctot 0.8 mul round int /CE Set Ctot CE sub /CI Set CI I_neurons target A_ii Tau_rec_ii Tau_fac_ii U_ii U_ii_min U_ii_max connectIncoming CE E_neurons target A_ie Tau_rec_ie Tau_fac_ie U_ii U_ii_min U_ii_max connectIncoming } bind % bind improves efficiency forall end } def /connectSpikeDetectors { userdict begin 0 ChangeSubnet % select standard synapse % one detector would in principle be enough, % but by recording the populations separately, % we save us a lot of sorting work later (Creating and connecting spike detector.) = /spike_detector Create /sd Set sd << /withtime true % record time of spikes /withgid true % record which neuron spiked /to_file true % write results to a file /to_memory false >> SetStatus % select the standard synapse model for subsequent connections /Connect << /syn_spec << /model /static_synapse >> >> SetOptions % connect all exc neurons to it E_neurons { % stack: neuronaddress sd % stack: neuronaddress SDaddress Connect % defaults } bind forall % connect all inh neurons to it I_neurons { % stack: neuronaddress sd % stack: neuronaddress SDaddress Connect % defaults } bind forall end } def userdict begin % global parameters 1 /local_num_threads Set 1 /total_num_virtual_procs Set 0.25 /h Set /Ne 400 def % number of excitatory neurons /Ni 100 def % number of inhibitory neurons %/Pc 0.1 def % connection probability of 2 neurons /Indegree_mean 50.0 def % mean number of incoming connections per neuron /Indegree_std 5.0 def % std of incoming connections per neuron % excitatory neurons /Tau 30.0 def % membrane time constant of ex./inh. neurons in ms /U0 0.0 def % resting potential of Vm for exc./inh. /Theta 15.0 def % threshold for exc. neuron /Vreset 13.5 def % reset potential of Vm after a spike /R 1.0 def % membrane resistance 1 GOhm /C Tau R div def % Tau [ms] / R [GOhm] = C [pF] in NEST units /Tau_psc 3.0 def % time constant of PSC in ms (=Tau_inact=Tau_I) % refractory times /tau_ref_abs_e 3.0 def /tau_ref_abs_i 2.0 def % parameters of synapses /Tau_rec_ee 800.0 def % recovery time e->e /Tau_rec_ei Tau_rec_ee def % recovery time i->e /Tau_rec_ii 100.0 def % recovery time i->i /Tau_rec_ie Tau_rec_ii def % recovery time e->i /Tau_fac_ee 0.0 def % facilitation time e->e /Tau_fac_ei Tau_fac_ee def % facilitation time i->e /Tau_fac_ii 1000.0 def % facilitation time i->i /Tau_fac_ie Tau_fac_ii def % facilitation time e->i /Tau_min 5.0 def % minimum value for Tau_rec/Tau_fac /U_ee 0.5 def % facilitation parameter U e->e, i->e /U_ee_min 0.1 def /U_ee_max 0.9 def /U_ii 0.04 def % facilitation parameter U i->i, e->i /U_ii_min 0.001 def /U_ii_max 0.07 def /A 1.8 def /A_ee A R div def % PSC weight e->e given in mV converted to pA /A_ie A 4.0 mul R div def % PSC weight e->i given in mV converted to pA /A_ii A neg 4 mul R div def % PSC weight i->i given in mV converted to pA /A_ei A neg 3 mul R div def % PSC weight i->e given in mV converted to pA /delay 0.25 def % synapse delay /Tend 10000.0 def % simulation time %% background dc input: mean = I0_dc, 2 std = deltaI %% equally distributed around threshold Theta /I0_dc Theta R div def /deltaI 0.025 2 Theta mul mul R div def % set resolution and limits on delays % limits must be set BEFORE connecting any elements 0 << /resolution h /local_num_threads local_num_threads /overwrite_files true % /total_num_virtual_procs total_num_virtual_procs >> SetStatus % all floeating numbers will be printed with 6 digits cout 6 setprecision % create one single random number generator rngdict /knuthlfg get 238 CreateRNG /myrng Set % normal distribution to draw several quantities from myrng rdevdict /normal get CreateRDV /normal_dv Set % create specific synapse types syn_ee, syn_ie, syn_ei, syn_ii createSynapseTypes % create exc/inh neuron populations createNeurons % connect the neurons among each other connectNeurons % create and connect spike detectors connectSpikeDetectors Tend Simulate end