Dear NEST Community,
is there a good way to implement a double-exponential function for synapses in C++ within a nest module?
[cid:image001.jpg@01D87B3E.2D9BE590]
As I need to implement my own neuron model in C++, I adapted the code from extraction the information from other neuron models (for example: iaf _cond_beta.cpp) and used the following lines
f[S::DG_EXC] = -y[ S::DG_EXC ] / node.P_.tau_synAMPA_on; f[S::G_EXC ] = y[ S::DG_EXC ] - y[ S::G_EXC ] / node.P_.tau_synAMPA_off
At first, it seemed to work pretty good. But when I swap the values for rise und decay time, the evolution of g_ADP did not change at all (for example: rise_time = 1ms, decay_time = 100ms).
I would be happy to get any feedback on it.
Thanks, Pira
Dear Pira,
Thanks for writing in. With this simple two-dimensional linear system, a slow rise and fast decay is unfortunately not possible. This is a fundamental property of the system. I guess you probably need a nonlinear system to achieve that (please let me know if you find any cool ones, I do not currently know any that would exhibit that kind of behaviour).
Perhaps the use of the words "rise" and "decay" in the naming of the time constants is misleading and should be avoided. In the paper (Rotter & Diesmann 1999) the constants were just named "a" and "b". See for an instance of a file where both nomenclatures are used https://github.com/nest/nest-simulator/blob/master/libnestutil/beta_normaliz....
Note that for the case that a = b, if you are not careful, you will divide by zero. NEST contains a mechanism to check for that condition, in the file linked above.
Hope this helps, With kind regards, Charl
On Wed, Jun 8, 2022, at 13:46, Ravichandran-Schmidt, Pirathitha (SRH Hochschule Heidelberg) wrote:
Dear NEST Community,
is there a good way to implement a double-exponential function for synapses in C++ within a nest module?
As I need to implement my own neuron model in C++, I adapted the code from extraction the information from other neuron models (for example: iaf _cond_beta.cpp) and used the following lines
f[S::DG_EXC] = -y[ S::DG_EXC ] / node.P_.tau_synAMPA_on; f[S::G_EXC ] = y[ S::DG_EXC ] - y[ S::G_EXC ] / node.P_.tau_synAMPA_off
At first, it seemed to work pretty good. But when I swap the values for rise und decay time, the evolution of g_ADP did not change at all (for example: rise_time = 1ms, decay_time = 100ms).
I would be happy to get any feedback on it.
Thanks, Pira
NEST Users mailing list -- users@nest-simulator.org To unsubscribe send an email to users-leave@nest-simulator.org
Deaer Pira,
To follow up on Charl's email: Instead of implementing new models in C++, you can use the NESTML model specification language and then let it create C++ code for you, see https://nestml.readthedocs.io/en/v5.0.0/ .
Best, Hans Ekkehard
--
Prof. Dr. Hans Ekkehard Plesser Head, Department of Data Science
Faculty of Science and Technology Norwegian University of Life Sciences PO Box 5003, 1432 Aas, Norway
Phone +47 6723 1560 Email hans.ekkehard.plesser@nmbu.nomailto:hans.ekkehard.plesser@nmbu.no Home http://arken.nmbu.no/~plesser
On 08/06/2022, 18:57, "Charl Linssen" <nest-users@turingbirds.commailto:nest-users@turingbirds.com> wrote:
Dear Pira,
Thanks for writing in. With this simple two-dimensional linear system, a slow rise and fast decay is unfortunately not possible. This is a fundamental property of the system. I guess you probably need a nonlinear system to achieve that (please let me know if you find any cool ones, I do not currently know any that would exhibit that kind of behaviour).
Perhaps the use of the words "rise" and "decay" in the naming of the time constants is misleading and should be avoided. In the paper (Rotter & Diesmann 1999) the constants were just named "a" and "b". See for an instance of a file where both nomenclatures are used https://github.com/nest/nest-simulator/blob/master/libnestutil/beta_normaliz....
Note that for the case that a = b, if you are not careful, you will divide by zero. NEST contains a mechanism to check for that condition, in the file linked above.
Hope this helps, With kind regards, Charl
On Wed, Jun 8, 2022, at 13:46, Ravichandran-Schmidt, Pirathitha (SRH Hochschule Heidelberg) wrote:
Dear NEST Community,
is there a good way to implement a double-exponential function for synapses in C++ within a nest module?
[cid:image001.jpg@01D87BDB.03361580]
As I need to implement my own neuron model in C++, I adapted the code from extraction the information from other neuron models (for example: iaf _cond_beta.cpp) and used the following lines
f[S::DG_EXC] = -y[ S::DG_EXC ] / node.P_.tau_synAMPA_on;
f[S::G_EXC ] = y[ S::DG_EXC ] - y[ S::G_EXC ] / node.P_.tau_synAMPA_off
At first, it seemed to work pretty good. But when I swap the values for rise und decay time, the evolution of g_ADP did not change at all (for example: rise_time = 1ms, decay_time = 100ms).
I would be happy to get any feedback on it.
Thanks,
Pira
_______________________________________________ NEST Users mailing list -- users@nest-simulator.orgmailto:users@nest-simulator.org To unsubscribe send an email to users-leave@nest-simulator.orgmailto:users-leave@nest-simulator.org
Dear Charl,
Thanks for the fast reply. If I understand correctly, the ODEs mentioned in the C++ Code only work for a fast rise time and a slow decay time, but not the other way round, right? I actually only wanted to do a sanity check by swapping the two time constants and then was confused getting the same results. If I am not mistaken, this is due to the normalization factor making the equations invariant to a swap of the time constants. Thanks for your explanations – very helpful :)
Best wishes, Pira
Von: Charl Linssen nest-users@turingbirds.com Datum: Mittwoch, 8. Juni 2022 um 18:57 An: users@nest-simulator.org users@nest-simulator.org Betreff: [EXTERN] [NEST Users] Re: How to implement double-exponential functions for synapses in C++
[EXTERNE E-MAIL] Diese Nachricht kommt von einem EXTERNEN ABSENDER. Bitte NICHT AUF LINKS ODER ANHÄNGE KLICKEN, sofern Sie nicht überzeugt sind, dass diese aus einer sicheren Quelle stammen. Dear Pira,
Thanks for writing in. With this simple two-dimensional linear system, a slow rise and fast decay is unfortunately not possible. This is a fundamental property of the system. I guess you probably need a nonlinear system to achieve that (please let me know if you find any cool ones, I do not currently know any that would exhibit that kind of behaviour).
Perhaps the use of the words "rise" and "decay" in the naming of the time constants is misleading and should be avoided. In the paper (Rotter & Diesmann 1999) the constants were just named "a" and "b". See for an instance of a file where both nomenclatures are used https://github.com/nest/nest-simulator/blob/master/libnestutil/beta_normaliz....
Note that for the case that a = b, if you are not careful, you will divide by zero. NEST contains a mechanism to check for that condition, in the file linked above.
Hope this helps, With kind regards, Charl
On Wed, Jun 8, 2022, at 13:46, Ravichandran-Schmidt, Pirathitha (SRH Hochschule Heidelberg) wrote:
Dear NEST Community,
is there a good way to implement a double-exponential function for synapses in C++ within a nest module?
[cid:image001.jpg@01D880DF.3D576670]
As I need to implement my own neuron model in C++, I adapted the code from extraction the information from other neuron models (for example: iaf _cond_beta.cpp) and used the following lines
f[S::DG_EXC] = -y[ S::DG_EXC ] / node.P_.tau_synAMPA_on;
f[S::G_EXC ] = y[ S::DG_EXC ] - y[ S::G_EXC ] / node.P_.tau_synAMPA_off
At first, it seemed to work pretty good. But when I swap the values for rise und decay time, the evolution of g_ADP did not change at all (for example: rise_time = 1ms, decay_time = 100ms).
I would be happy to get any feedback on it.
Thanks,
Pira
_______________________________________________ NEST Users mailing list -- users@nest-simulator.orgmailto:users@nest-simulator.org To unsubscribe send an email to users-leave@nest-simulator.orgmailto:users-leave@nest-simulator.org