/* * test_mat2.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_mat2 - sli script for overall test of mat2_neuron model Synopsis: (test_mat2) run -> compares response to current step with reference data Description: test_mat2.sli is an overall test of the mat2_neuron model connected to some useful devices. A DC current is injected into the neuron using a current generator device. The membrane potential, the threshold potential as well as the spiking activity are recorded by corresponding devices. It can be observed how the current charges the membrane, a spike is emitted, the threshold potential is updated and evaluated whereas the membrane potential is not resetted and further evaluated, too. Additionally the neuron becomes refractory after emitting a spike. The timing of the various events on the simulation grid is of particular interest and crucial for the consistency of the simulation scheme. Although 0.1 cannot be represented in the IEEE double data type, it is safe to simulate with a resolution (computation step size) of 0.1 ms because by default nest is built with a timebase enabling exact representation of 0.1 ms. The expected output is documented and briefly commented at the end of the script. The textual output of the multimeter documented in this file can be regenerated by setting adding /to_screen true to the SetStatus call of mm below. Other test programs discuss the various aspects of this script in detail, see the SeeAlso key below. Author: October 2009, T. Pfeil SeeAlso: testsuite::test_iaf, testsuite::test_iaf_i0, testsuite::test_iaf_i0_refractory, testsuite::test_iaf_dc */ /unittest (8418) require /unittest using 0.1 /h Set ResetKernel 0 << /local_num_threads 1 /resolution h >> SetStatus % explicitly set threshold omega here to ensure that after % change of definition of omega from relative to E_L to absolute % we still get the original results; see #506. /mat2_psc_exp << /omega -51.0 >> Create /neuron Set /dc_generator Create /dc_gen Set dc_gen << /amplitude 2400. >> SetStatus /multimeter Create /mm Set mm << /withtime true /interval h /record_from [/V_m /V_th] % record non-resetting membrane potential % and evaluated threshold potential /time_in_steps true >> SetStatus /spike_detector Create /sp_det Set sp_det << /withtime true /time_in_steps true /withgid true >> SetStatus dc_gen neuron 1.0 h Connect mm neuron 1.0 h Connect neuron sp_det 1.0 h Connect 8 Simulate %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Expected output of this program: % % The output send to std::cout is a superposition of the output of % the multimeter and the spike detector. Both, multimeter and spike % detector are connected to the same neuron. % { sp_det [/events [/times]] get cva % array of recorded data eq % compare } %%%%%%%%%% % spike times (in steps) [[11 32 54]] % The threshold potential crosses the membrane potential at time % step 31. But due to the refractory period of 2 ms the neuron % is not allowed to fire until time step 32. exch assert_or_die { % reference data dup Transpose First /test_times Set % times of reference mm [/events [/times /V_m /V_th]] get cva % array of recorded data 6 ToUnitTestPrecision % to precision of reference Transpose % all recorded tuples {First test_times exch MemberQ } Select % those with reference eq % compare } %%%%%%%%%% % time (in steps) membrane potential V_m (in mV) threshold V_th (in mV) [ [ 1 -70 -51 ] % <--- dc_gen is switched on [ 2 -70 -51 ] % <--- The DC current arrives at neuron, [ 3 -67.6238 -51 ] % <- but has not affected the potential yet [ 4 -65.2947 -51 ] % | [ 5 -63.0117 -51 ] % - First evaluation of the DC current. The [ 6 -60.774 -51 ] % threshold potential stays constant, [ 7 -58.5805 -51 ] % because it is at its resting level. [ 8 -56.4305 -51 ] [ 9 -54.323 -51 ] [ 10 -52.2573 -51 ] [ 11 -50.2324 -12 ] % <--- The membrane potential crossed the [ 12 -48.2477 -12.3692 ] % <- threshold potential the first time. [ 13 -46.3023 -12.7346 ] % | The threshold potential is updated and [ 14 -44.3953 -13.0965 ] % | the membrane potential is further evaluated [ 15 -42.5262 -13.4548 ] % | without resetting. [ 16 -40.694 -13.8095 ] % | [ 17 -38.8982 -14.1607 ] % - The threshold potential decays double [ 18 -37.1379 -14.5084 ] % exponential towards its resting level. [ 19 -35.4124 -14.8527 ] [ 20 -33.7212 -15.1935 ] [ 21 -32.0634 -15.531 ] ] exch assert_or_die endusing