/*
* test_dcgen_versus_I_e.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_dcgen_versus_I_e - sli script to test if setting I_e and applying a DC generator yields the same results.
Synopsis: (test_dcgen_versus_I_e) run
Description:
This testscript checks consistency between currents coming from dc_generator and internal variable I_e;
The approach is to simulate both situations for some time and compare membrane potentials at the end;
Any model which supports current events and setting I_e is checked, other models are skipped.
SeeAlso: testsuite::test_iaf_i0
FirstVersion: January 2011
Author: Sven Schrader
*/
M_ERROR setverbosity
/unittest (8831) require
/unittest using
{
% set amplitude in pA for both DC generator and I_e
/amp 123.456 def
/res [] def % array to collect bool results
modeldict keys{
/model Set
% check if both membrane potential can be measured....
/record_VM model GetDefaults /recordables known def
record_VM { model GetDefaults /recordables get { /V_m eq {true} if } forall count 1 eq {; /record_VM true def} {/record_VM false def} ifelse } if
% .... and I_e can be set
model GetDefaults /I_e known record_VM and
{
ResetKernel
% special case for Poisson Neuron
model /pp_psc_delta eq { model << /c_2 0.0 >> SetDefaults} if
model =only (\t: ) =only
%executive
model Create /n1 Set
model Create /n2 Set
%take into account synaptic delay
/dc_generator <</start 99. >> Create /dc Set
% todo: make sure that this procedure is 'stopped' if and only if current events are not supported!
{dc n1 Connect
dc << /amplitude amp >> SetStatus
100 Simulate
n2 << /I_e amp >> SetStatus
300 Simulate
% compare final membrane potentials
n1 GetStatus /V_m get n2 GetStatus /V_m get eq dup {(pass) =}{ (failed: unequal voltages) = executive } ifelse res exch append /res Set
} stopped { clear (DC not allowed) = errordict /newerror false put } if % skip models that don't support current event
}
if % model GetDefaults /I_e known record_VM and
} forall % modeldict keys
% combine results, one bool left on stack
res First res Rest { and } Fold
} assert_or_die
endusing