/*
* test_corr_det.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_corr_det - minimal test of correlation detector
Synopsis: (test_corr_det) run -> dies if assertion fails
Description:
Feeds correlation detector with two hand-crafted spike trains with
known correlation. Correlation detector parameters are set in model.
Remarks:
The test does not test weighted correlations.
Author: July 2008, Plesser
SeeAlso: correlation_detector
*/
/unittest (8831) require
/unittest using
/d_tau 2.0 def
/tau_max 20.0 def
% First test: parameter setting on model and instance
{
ResetKernel
/cd1 /correlation_detector Create def
cd1 << /delta_tau d_tau /tau_max tau_max >> SetStatus
/correlation_detector << /delta_tau d_tau /tau_max tau_max >> SetDefaults
/cd2 /correlation_detector Create def
cd1 [[/delta_tau /tau_max]] get
cd2 [[/delta_tau /tau_max]] get
eq
} assert_or_die
clear
ResetKernel
% Second test: error if uncommensurable delta_tau
{
ResetKernel
0 << /resolution 0.1 >> SetStatus
/correlation_detector << /delta_tau 0.25 >> SetDefaults
} fail_or_die
% Third test: error if uncommensurable tau_max
{
ResetKernel
0 << /resolution 0.1 >> SetStatus
/correlation_detector << /delta_tau 1.0 /tau_max 2.5 >> SetDefaults
} fail_or_die
% Fourth test: error if uncommensurable change of resolution
{
ResetKernel
0 << /resolution 0.1 >> SetStatus
/correlation_detector << /delta_tau 0.1 >> SetDefaults
0 << /resolution 1.0 >> SetStatus
/correlation_detector Create % cannot create now with delta_tau==0.1
} fail_or_die
% Fifth test: proper number of histogram bins under resolution changes
{
ResetKernel
0 << /resolution 0.1 >> SetStatus
/correlation_detector << /delta_tau 1.0 /tau_max 5.0 >> SetDefaults
0 << /resolution 0.2 >> SetStatus
/correlation_detector Create
1 Simulate % must simulate to force creation of histogram
[/histogram] get cva length
11 eq
} assert_or_die
% Functions for actual correlation tests
% [spike_times_1 spike_times_2] cdsim -> histogram n_events cd_gid
/cdsim
{
<< >> begin
/st Set
% build and connect
/correlation_detector Create /cdt Set
[0 1] {
/i Set
/spike_generator Create /sg Set
sg << /precise_times false /spike_times st i get >> SetStatus
/static_synapse << /receptor_type i >> SetDefaults
sg cdt Connect
sg
} Table /sgens Set
% simulate to max spike time plus 2 min_delay
st Flatten Max 0 [/min_delay] get 2 mul add Simulate
% get spike counts and histogram
cdt [ /histogram ] get cva
cdt [ /n_events ] get cva
cdt
end
}
def
% spike_times_1 spike_times_2 hist cdtest -> true/false
/cdtest
{
<< >> begin
/ehist Set
2 arraystore /st Set
st cdsim ;
% check spike counts
st { length } Map eq
% check histogram
exch
ehist { cvd } Map eq
and
end
} def
% Sixth test: correlation histogram for time differences in bin centers
{
ResetKernel
0 << /resolution 0.1 >> SetStatus
/correlation_detector << /delta_tau 1.0 /tau_max 5.0 >> SetDefaults
[ 1.0 2.0 6.0 ] % input 0
[ 2.0 4.0 ] % input 1
[ 0 1 0 1 0 1 1 1 1 0 0] % histogram
cdtest
} assert_or_die
% Seventh test: correlation histogram for time differences at bin edges
{
ResetKernel
0 << /resolution 0.1 >> SetStatus
/correlation_detector << /delta_tau 1.0 /tau_max 5.0 >> SetDefaults
[ 6.0 ] % input 0
[ 0.5 5.4 5.5 5.6 6.4 6.5 6.6 11.5 ] % input 1
[ 1 0 0 0 1 3 2 0 0 0 0 ] % histogram
cdtest
} assert_or_die
% Eight test: test to ensure [1 1] not allowed for /n_events
{
/correlation_detector Create
<< /n_events [1 1] >> SetStatus
} fail_or_die
% Ninth test: test that reset works
{
ResetKernel
0 << /resolution 0.1 >> SetStatus
/correlation_detector << /delta_tau 1.0 /tau_max 5.0 >> SetDefaults
% expected histogram: [ 0 1 0 1 0 1 1 1 1 0 0]
[ [ 1.0 2.0 6.0 ] % input 0
[ 2.0 4.0 ] % input 1
]
cdsim
/cdt Set
; % pop n_events
Plus 0 gt % ensure we have non-zeros in histogram
{
cdt << /n_events [0 0] >> SetStatus
cdt [/n_events] get cva Plus 0 eq
cdt [/histogram] get cva Plus 0.0 eq
and
}
{ false }
ifelse
} assert_or_die
endusing