/*
 *  test_stdp_hom_poiss.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 <http://www.gnu.org/licenses/>.
 *
 */

 /* BeginDocumentation
Name: testsuite::test_stdp_hom_poiss - sli script to test stdp_synapse_hom model 
implementing spike time dependent plasticity syanpses 
according to Guetig et al. (2003), Journal of Neuroscience. It uses the version of these synapses, which uses homogeneous parameter, i.e. all STDP synapses have the same parameters. 
This script performs repeated spike pairing of two neurons connected by a stdp_synapse.
The synapse strength is recorded after 60 paired spikes in a file.



Synopsis: (test_stdp) run -> compare cout with comments in file

Author: Moritz Helias, Wiebke Potjans, Abigail Morrison, Markus Diesmann
FistVersion: April 2006
*/


ResetKernel   % clear all existing network elements



userdict begin

 0.1 /h Set	     % simulation timestep [ms]

 [0]
    <<
        /resolution h
        /total_num_virtual_procs  2
      >>
      SetStatus


/delay h def	     % dendritic delay [ms]



10000              /K Set
0.8                /f_ex Set
f_ex K mul         /K_ex Set
1.0 f_ex sub K mul /K_in Set

10.0                /nu_ex  Set
10.0                /nu_in  Set

45.0               /w_ex  Set     % in pA, background PSC amplitude
3.83               /g     Set     % 
w_ex neg g mul         /w_in  Set



% synapse constants 




      

/poisson_generator Create /pg_ex Set
pg_ex << /rate K_ex nu_ex mul >> SetStatus

/poisson_generator Create /pg_in Set
pg_in << /rate K_in nu_in mul >> SetStatus



/spike_detector Create /sd Set
sd << /withtime true /withgid true  /to_file true >> SetStatus


/voltmeter Create /vm Set
vm << /withtime true /withgid true  /to_file true >> SetStatus

      
            
/iaf_psc_alpha Create /neuron1 Set
/iaf_psc_alpha Create /neuron2 Set



neuron1 << /tau_syn_ex 0.3 /tau_syn_in 0.3 >> SetStatus
neuron2 << /tau_syn_ex 0.3 /tau_syn_in 0.3  >> SetStatus

pg_ex neuron1 w_ex delay Connect
pg_ex neuron2 w_ex delay Connect 

pg_in neuron1 w_in delay Connect 
pg_in neuron2 w_in delay Connect 

neuron1 sd Connect
neuron2 sd Connect

%vm neuron1 Connect
vm neuron2 Connect

/stdp_synapse_hom <<
   /delay delay
   /weight 35.
   /Wmax 70.
   /alpha 0.95
   /lambda 0.025
   /mu_plus 0.05
   /mu_minus 0.05
>> SetDefaults

neuron1 neuron2 /stdp_synapse_hom Connect



neuron2 GetStatus /local get
{
 (weight.gdf) (w) file /f_weight Set
} if




40000.0 /T Set

100.0 /dt Set
%76.0 /dt Set
50.0 /dt Set
%10000.0 /dt Set

0 dt T
{
 /t Set

 neuron2 GetStatus /local get
 {
  << /source neuron1 /synapse_model /stdp_synapse_hom >> FindConnections 0 get
  GetStatus /weight get /w Set
  
  w ==
  
  f_weight t <- (\t) <- w <- endl pop
 } if

 dt Simulate  
} for


neuron2 GetStatus /local get   
{
 cout  (expected  weight at T=40000 ms: 33.8466 pA) <- endl pop 
 cout  (weight at last event:           ) <- w <- ( pA) <- endl pop
} if


end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%
% Expected output of this program:
% 
% The output send to std::cout is a superposition of the output of  
% the voltmeter and the spike detector. Both, voltmeter and spike 
% detector are connected to the same neuron. 
%
%
% The expected output of the program for a simulation time of
% 40000.0ms is 33.8466pA.
%
% The result is independent of the length of the interval dt in which
% Simulate is called as long as the last pre-synaptic spike included 
% in the simulation remains the same.
%