Hi Hans Ekkehard,

thanks for the quick response and code check!

The

stdp_dopa_connection::process_dopa_spikes_()

actually only considers the spike timing, but calls another function to update the dopamine concentration in

stdp_dopa_connection::update_dopamine_()

Here, the multiplicity is indeed considered:

n_ = n_ * std::exp( minus_dt / cp.tau_n_ ) + dopa_spikes[ dopa_spikes_idx_ ].multiplicity_ / cp.tau_n_;
So I think it's not a bug, but just a little tricky to grasp when looking at the code in first place.

My question is still be answered in the issue and your explanation you posted, namely that spike multiplicities are dissolved into individual spikes between neuron nodes.
So thanks for the explanation and also the hint with the devices to volume_transmitters, it is actually a set up I am using in this way and I should check again if correct. If time, it might be worth adding this information in the documentation if not available yet, to not trap other people on this.

Best Regards,
Benedikt


On 01.02.21 08:24, Hans Ekkehard Plesser wrote:
Hi Benedikt,

You may have hit on a bug here. I am not an expert in volume transmitter matters, but a quick look through the code reveals that volume_transmitter::update() stores spike multiplicity here

https://github.com/nest/nest-simulator/blob/47b7e43f72317911b3e285daa9ecd4f45688fa5d/models/volume_transmitter.cpp#L117

but that stdp_dopa_connection::process_dopa_spikes_() does not read the multiplicity information in its dopa_spikes argument:

https://github.com/nest/nest-simulator/blob/47b7e43f72317911b3e285daa9ecd4f45688fa5d/models/stdp_dopa_connection.h#L446

Could you create an issue on Github, ideally providing a minimal reproducer/test for this issue?

Multiplicity handling between neurons is discussed in this issue

https://github.com/nest/nest-simulator/issues/77#issuecomment-148995091

Multiplicity is resolved properly in any case when "normal" neurons send spikes to each other, because those spikes are transmitted via send_remote(), which always unrolls multiplicity. Spike trains from devices (any network node class for which has_proxies() returns false) send spikes with multiplicity. So if you connect, e.g., a poisson_generator directly to a volume_transmitter, multiplicity will be ignored if my reading of the code above is right. If you put a parrot_neuron between the poisson_generator and the volume_transmitter, multiplicity should be handled correctly.

Best,
Hans Ekkehard


-- 
Benedikt Feldotto M.Sc.
Research Assistant

Human Brain Project - Neurorobotics

Technical University of Munich
Department of Informatics
Chair of Robotics, Artificial Intelligence and Real-Time Systems

Room HB 2.02.20
Parkring 13
D-85748 Garching b. München

Tel.: +49 89 289 17628
Mail: feldotto@in.tum.de

https://www6.in.tum.de/en/people/benedikt-feldotto-msc/
www.neurorobotics.net