/* * test_sli_neuron.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_sli_neuron - test of sli_neuron Synopsis: (test_sli_neuron) run -> completes successfully Description: Author: Marc-Oliver Gewaltig FirstVersion: January 2009 SeeAlso: testsuite::test_iaf, sli_neuron */ /unittest (6666) require /unittest using 0.1 /h Set ResetKernel 0 << /local_num_threads 2 /resolution h >> SetStatus /sli_neuron_state << /tau_m 10.0 /C_m 250.0 /E_L -70.0 /I_e 0.0 /tau_m 10.0 /tau_minus 20.0 /tau_syn 2.0 /t_ref 2.0 /t_spike -1.0 /V_m -70.0 /V_reset 0.0 /V0 -70.0 /V_th -55.0 /theta 15.0 /currents 0.0 /y0 0.0 /y1 0.0 /y2 0.0 /y3 0.0 /r 0 /update_template { r 0 eq { update_y3 /y3 Set } { r 1 sub /r Set } ifelse update_y2 /y2 Set y1 P11 mul /y1 Set y1 PSCInitialValue ex_spikes mul add /y1 Set y3 theta geq % voltage larger threshold? dup /spike Set % the return value { t_ref_steps /r Set V_reset /y3 Set % Reset the potential } if y3 V0 add /V_m Set currents /y0 Set } /calibrate { GetResolution /h Set (V_th - V0) ExecMath /theta Set << >> /consts Set consts begin (exp(-h/tau_syn)) ExecMath /P11 Set (exp(-h/tau_m)) ExecMath /P33 Set (P11 * h) ExecMath /P21 Set ((1.0 - P33)*tau_m/C_m) ExecMath /P30 Set (1/ C_m * ((P11-P33)/(-1/tau_syn + 1/tau_m)- h*P11)/(-1/tau_m+1/tau_syn)) ExecMath /P31 Set (1/C_m*(P33-P11)/(-1/tau_m + 1/tau_syn)) ExecMath /P32 Set (exp(1.0)/tau_syn) ExecMath /PSCInitialValue Set t_ref h div 0.5 add floor cvi /t_ref_steps Set (P30*(y0 + I_e) + P31 * y1 + P32 * y2 + P33 *y3) CompileMath consts Inline /update_y3 Set (P21* y1 + P11 * y2) CompileMath consts Inline /update_y2 Set end /update_template load consts Inline /update Set } >> def % sli_neuron_state /sli_neuron sli_neuron_state SetDefaults /sli_neuron Create /neuron Set /voltmeter Create /vm Set vm << /withtime true /time_in_steps true /interval h >> SetStatus /spike_detector Create /sd Set sd << /withtime true /withgid true /time_in_steps true >> SetStatus /dc_generator Create /dc Set dc << /amplitude 1000.0 >> SetStatus dc neuron 1.0 h Connect vm neuron 1.0 h Connect neuron sd 1.0 h Connect 3 Simulate vm [/events [/times /V_m]] get cva Transpose ==