/*
 *  test_mip_corrdet.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_mip_corrdet - sli script for testing mip_generator and correlation_detector

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


Description:
  test_mip_corrdet.sli creates two poisson spiking sources with a rate of
  50 Hz each, which have half of their events in common. The correlation
  detector records these spike trains and calculates the raw cross correlation
  in a time window of +-100 ms with a bin width of 10 ms.
  After the simulation, the accumulated number of events in the bins is displayed.

Author:  October 2007, Helias
SeeAlso: mip_generator, correlation_detector
*/

/unittest (7039) require
/unittest using



%
% Cross check generated with cross_check_test_mip_corrdet.py
% 
[ 2453  2528  2507  2439  2459  2451  2441  2523  2494  2445
  4909  2369  2410  2457  2495  2484  2369  2341  2452  2475
  2453] { cvd } Map /expected_hist Set

/run_test
{
 0.1 /h Set        % computation step size in ms 
 100000.0 /T Set   % total duration
 10.0 /delta_tau Set
 100.0 /tau_max Set
 0.5 /pc Set
 100.0 /nu Set
 
ResetKernel

userdict begin

0
<< 
    /local_num_threads 1
    /resolution h
    /overwrite_files true
    /grng_seed 0 % because test data was produced for seed = 0
>> SetStatus

% check, if we can set another rng
/mip_generator << /mother_rng rngdict/MT19937 :: 101 CreateRNG >> SetDefaults
/mip_generator << /mother_rng rngdict/knuthlfg :: 101 CreateRNG >> SetDefaults % this seed will be ignored, because explicitly set

/mip_generator Create dup /mg Set
<<
    /rate nu
    /p_copy pc
>> SetStatus


/correlation_detector Create dup /cd Set
<<
    /tau_max   tau_max 
    /delta_tau delta_tau
>> SetStatus

/spike_detector Create dup /sd Set
<<
    /to_file true
    /to_memory false
    /withtime true
    /withgid true
    /time_in_steps true
>> SetStatus

/parrot_neuron Create /pn1 Set
/parrot_neuron Create /pn2 Set

mg pn1 Connect
mg pn2 Connect

pn1 sd Connect
pn2 sd Connect

/static_synapse
<<
    /weight 1.0
    /receptor_type 0
>> SetDefaults

pn1 cd Connect

/static_synapse
<<
    /weight 1.0
    /receptor_type 1
>> SetDefaults

pn2 cd Connect

T Simulate

cd GetStatus
dup /histogram get cva /hist Set
/n_events get cva arrayload ; /n2 Set /n1 Set

n1 T tau_max sub div 1000.0 mul /lmbd1 Set
n2 T tau_max sub div 1000.0 mul /lmbd2 Set

%cout
%(rate 1=) <- lmbd1 <- (\n) <-
%(rate 2=) <- lmbd2 <- (\n) <-
%(background =) <- lmbd1 lmbd2 mul delta_tau 1000 div mul T tau_max sub 1000 div mul <- (\n) <- pop

%hist ==
%0 hist { add } forall ==


hist expected_hist eq
assert_or_die

end
} def

run_test

endusing