/*
* balancedneuron-2.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/>.
*
*/
%%
% This is an extended version of the simple balancedneuron.sli script.
% After finding the rate of the inhibitory background population that
% creates the spontaneous target rate of the test neuron, it records
% the membrane potential of the test neuron for a short period and the
% mean and standard deviation of the test neuron's membrane potential
% is computed and printed.
% Try changing the value of /ipsc and see what happens.
%%
/arr (1.2) require
/arr using
ResetKernel
1000 ms /t_relax Set % how long to wait for the state to stabiluze before reording the spikes
100 s /t_sim Set % how long we simulate to compute the rate (1000 sec)
1000 ms /t_memmeasure Set % how long to measure the membrane potential
16000 /n_ex Set % size of the excitatory population
4000 /n_in Set % size of the inhibitory population
2.0 Hz /r_ex Set % mean rate of the excitatory population
10.0 pA /epsc Set % peak amplitude of excitatory synaptic currents
-100.0 pA /ipsc Set % peak amplitude of inhibitory synaptic currents
1.0 ms /d Set % synaptic delay
0.0 Hz /lower Set % lower bound of the search interval
100.0 Hz /upper Set % upper bound of the search interval
0.01 Hz /prec Set % how close need the excitatory rates be
M_INFO 1 add setverbosity % suppress output from Simulate
0 <<
/data_path (/tmp)
>> SetStatus
/iaf_neuron Create /neuron Set % target neuron
/poisson_generator Create /ex_pop Set % excitatory population
/poisson_generator Create /in_pop Set % inhibitory population
/spike_detector Create /spikes Set % the spike detector device
neuron
<<
/tau_syn 1.0
/V_th -55.0
>> SetStatus
ex_pop
<<
/rate r_ex n_ex mul % multiply rate and number of neurons
>> SetStatus
spikes
<<
/withtime false % suppress output from spike detector
>> SetStatus
ex_pop neuron epsc d Connect
in_pop neuron ipsc d Connect
neuron spikes Connect
/OutputRate
{
/guess Set % store the function parameter
M_INFO 1 add (blancedneuron) (--------------------------------------------------------------------------------------) message
M_INFO 1 add (blancedneuron) (Setting new rate for the inhibitory background population: ) guess cvs join (Hz/neuron) join message
in_pop
<<
/rate guess n_in mul % set a new rate for the inhibitory population.
>>
SetStatus
M_INFO 1 add (blancedneuron) (Allowing the new state to relax for ) t_relax cvs join (ms...) join message
t_relax Simulate % let the neuron relax to the new balanced state
spikes
<<
/n_events 0 % reset the event counter of the spike detector
>> SetStatus
M_INFO 1 add (blancedneuron) (Counting spikes for ) t_sim cvs join (ms...) join message
t_sim Simulate % simulate and count the spikes
spikes [ /n_events ] get /e Set % read out the event counter
e t_sim 1000.0 div div /rate Set % and divide by t_sim
M_INFO 1 add (blancedneuron) (Counted ) e cvs join ( spikes.) join message
M_INFO 1 add (blancedneuron) (==> Rate of the test neuron is ) rate cvs join (Hz.) join message
rate % leave the result as return value
} def
{OutputRate r_ex sub} lower upper prec FindRoot
% measure the mean membrane potential:
M_INFO 1 add (blancedneuron) (=============================================================================) message
M_INFO 1 add (blancedneuron) (Recording membrane potential for ) t_memmeasure cvs join (ms.) join message
% create voltmeter and connect to neuron
/voltmeter Create /volts Set
volts neuron Connect
t_memmeasure Simulate
% ------------------------------------------------------
M_INFO 1 add (blancedneuron) (Computing mean and SDev of membrane potential...) message
% obtain membrane potential trace from voltmeter, convert to SLI array for further processing
volts [/events /V_m] get cva /potentials Set
potentials length /n Set
M_INFO 1 add (blancedneuron) n cvs ( numbers.) join message
% compute mean and sdev:
/mean potentials Mean def
/sdev potentials SDev def
M_INFO 1 add (blancedneuron) (Mean: ) mean cvs join (mV) join message
M_INFO 1 add (blancedneuron) (==> Distance from threshold: ) mean neuron GetStatus /V_th get sub cvs join (mV) join message
M_INFO 1 add (blancedneuron) (SDev: ) sdev cvs join (mV) join message
endusing % arr