/*
* test_iaf_psp_peak.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_peak - test of closed form expression for peak
Synopsis: (test_iaf_psp_peak) run -> compare expression with numerics
Description:
Several NEST neuron models have an alpha-shaped post-synaptic current (PSC).
In these models the PSC is normalized to unit amplitude. Thus, a synaptic weight
w leads to a PSC with amplitude w in units of pA.
In order to adjust the amplitude of the post-synaptic potential (PSP) of a
neuron model with an alpha-shaped post-synaptic current (PSC) to a particular
amplitude we need to first find the location of the maximum tmax of the PSP.
Here, this is done in two different ways:
1. We numerically search for the root of the derivative of the PSP
2. We used a closed form expression to compute the position of the maximum
The test verifies that the methods lead to the same result. The test file
test_iaf_psp_normalized shows how this value is used to specify w such that a
PSP with a desired amplitude u in units of mV results.
The closed form expression can be found by first transforming the expression
d psp(t) / dt = 0
into the normal form
exp(s) = 1 + a * s,
where s is the scaled time s=bt and a and b depend on the time constants
a = tau_m/tau_alpha, b = 1/tau_alpha - 1/tau_m .
The solution for s can then be expressed with the help of the Lambert W-function W
which is the inverse of x=W*exp(W) and reads
s = 1/a * ( -a W(-exp(-1/a)/a) - 1 )
References:
[1] Weisstein, Lambert W-function
Author: July 2009, Diesmann
SeeAlso: testsuite::test_lambertw, testsuite::test_iaf_psp_normalized, LambertWm1
*/
/unittest (6335) require
/unittest using
M_ERROR setverbosity
% parameter of the Brunel network examples
%
20.0 /tau_m Set % membrane time constant in ms
0.5 /tau_syn Set % synaptic time constant in ms
1.0 /C_m Set % membrane capacity in pF
% In NEST neuron models with alpha-shaped PSC, the PSCs are normalized to
% unit amplitude. Thus, a weight w results in a PSC with amplitude w.
/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
/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
{dpsp} 0. 5.0 0.00000000001 FindRoot /t0 Set %
/psp_peaktime
[]
( a=tau_m/tau_syn;( -a*LambertWm1(-exp(-1./a)/a) -1. )/a / (1/tau_syn - 1/tau_m) )
Function
def
% assert that peak times from direct root finding and
% close form solution are the same
%
psp_peaktime t0 sub abs 1e-10 lt assert_or_die