/* * test_iaf_psp_normalized.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_iaf_psp_normalized - check if PSP can be normalized Synopsis: (test_iaf_psp_normalized) run -> compare response with desired outcome Description: The script computes the peak location of the PSP analytically for a neuron model with an alpha-shaped post-synaptic current (PSC) [1]. In case the GNU Scientific Library (GSL) is not present the peak location is found by searching for the root of the derivative of the PSP. We then compute the peak value for a PSC with unit amplitude and show how the synaptic weight can be adjusted to cause a PSP of a specific amplitiude. Finally, we check whether the simulation indeed generates a PSP of the desired amplitude. In application code the test for the availability of the GSL is not necessary because NEST has a built in version of the LambertWm1 which automatically replaces the GSL function if required. This removes the need to specify the derivative of the function of interest, here the PSP, in application code. A further alternative is used in test_lambertw where knowledge of the range of values of the non-principal branch of the Lambert-W function [-1,-\infty) is exploited to find the inverse of x*exp(x) by bisectioning. References: [1] Rotter S & Diesmann M (1999) Exact simulation of time-invariant linear systems with applications to neuronal modeling. Biologial Cybernetics 81:381-402. [2] Galassi, M., Davies, J., Theiler, J., Gough, B., Jungman, G., Booth, M., & Rossi, F. (2006). GNU Scientific Library Reference Manual (2nd Ed.). Network Theory Limited. Author: July 2009, Diesmann SeeAlso: testsuite::test_iaf_psp_peak, testsuite::test_iaf_psp, testsuite::test_lambertw, LambertWm1 */ /unittest (6688) require /unittest using 1.0 /delay Set % in ms 0.001 /h Set 1.0 /u Set % requested PSP size in mV << % parameter of the Brunel network examples /tau_m 20.0 % membrane time constant in ms /tau_syn 0.5 % synaptic time constant in ms /C_m 1.0 % membrane capacity in pF /E_L 0.0 /V_reset 0.0 /V_th 15.0 /V_m 0.0 >> /P Set /psp [/t] ( E/tau_syn * 1/C_m * ( (exp(-t/tau_m)-exp(-t/tau_syn))/(1/tau_syn - 1/tau_m)^2 - t*exp(-t/tau_syn)/(1/tau_syn - 1/tau_m) ) ) Function def % derivative of the post-synaptic potential % only required in case the GSL is not available /dpsp [/t] ( E/tau_syn * 1/C_m * ( (-1/tau_m*exp(-t/tau_m)+1/tau_syn*exp(-t/tau_syn)) / (1/tau_syn - 1/tau_m)^2 - (exp(-t/tau_syn) - 1/tau_syn*t*exp(-t/tau_syn)) / (1/tau_syn - 1/tau_m) ) ) Function def P begin << >> begin statusdict/have_gsl :: { ( % closed form solution a=tau_m/tau_syn; t= (-a*LambertWm1(-exp(-1/a)/a) -1)/a / (1/tau_syn - 1/tau_m); ) ExecMath } { % numerical solution in absence of GSL {dpsp} 0. 5.0 0.00000000001 FindRoot /t Set } ifelse t psp inv end end /f Set % f is the weight required for a PSP with unit amplitude u f mul /w Set ResetKernel 0 << /resolution h >> SetStatus /spike_generator Create /sg Set sg << /precise_times false /origin 0.0 % in ms /spike_times [ 2.0 ] % in ms /start 1.0 % in ms /stop 3.0 % in ms >> SetStatus /iaf_neuron Create /neuron Set neuron P SetStatus /voltmeter Create /vm Set vm << /withtime true /to_memory true /time_in_steps true /interval h >> SetStatus sg neuron w delay Connect vm neuron Connect 7.0 Simulate vm [/events /V_m] get cva Max 1.0 sub abs 1e-6 lt assert_or_die