Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Delayed processing of pre-synaptic spikes #1749

Closed
jlubo opened this issue Nov 8, 2021 · 6 comments
Closed

Delayed processing of pre-synaptic spikes #1749

jlubo opened this issue Nov 8, 2021 · 6 comments

Comments

@jlubo
Copy link
Collaborator

jlubo commented Nov 8, 2021

I need an interface for delayed processing of pre-synaptic spikes. The enhancement should enable a pre-synaptic spike to trigger multiple events in the same post-synaptic neuron at different delay times (in my case, specifically, these are a postsynaptic potential after short delay and an increase in calcium concentration after longer delay, as described here).

To summarize, it would be great to have something like the POST_EVENT block with its time argument, just that it should be called at a certain time after a pre-synaptic spike.

@schmitts
Copy link
Contributor

schmitts commented Nov 8, 2021

Making multiple connections with different synaptic delays is not sufficient? These could be connected to different synapse mechanisms.

@jlubo
Copy link
Collaborator Author

jlubo commented Nov 8, 2021

I don't think so - those synapses would have to communicate somehow (the calcium is needed for changes in synaptic weight).

Also, even if such a workaround were possible, there would be a lot of redundancy so I guess a proper implementation would be better in terms of performance.

@jlubo
Copy link
Collaborator Author

jlubo commented Nov 9, 2021

We found that the following workaround does the job.

We used two connections to the same postsynaptic neuron with different (pseudo) weights 1 and -1 and different delay times d0 and d1:

[arbor.connection((src,"spike_detector1"), "syn_exc_calcium_plasticity", 1, d0), \
arbor.connection((src,"spike_detector1"), "syn_exc_calcium_plasticity", -1, d1)]

which can be processed in one and the same synapse mechanism as follows:

NET_RECEIVE(weight) {
	if (weight > 0) {
		: postsynaptic potential evoked by presynaptic spike
	}
	else {
		: increase of calcium amount evoked by presynaptic spike
	}
}

@schmitts
Copy link
Contributor

I think we can close the issue and think about writing an AEP for allowing additional payloads/slots in connections.

@jlubo
Copy link
Collaborator Author

jlubo commented Mar 24, 2022

The workaround mentioned above works if there is only one item in "syn_exc_calcium_plasticity" and thus the policy arbor.selection_policy.univalent is used.

If, however, "syn_exc_calcium_plasticity" holds more than one item, another solution is required because the then applicable policy arbor.selection_policy.round_robin will change the current item by every call of arbor.connection().

This is solved by PR #1868, which introduces the new policy arbor.selection_policy.round_robin_halt. Two connections to the same synapse mechanism can then be defined via:

[arbor.connection((src,"spike_detector1"), ("syn_exc_calcium_plasticity", arbor.selection_policy.round_robin_halt), 1, d0), \
arbor.connection((src,"spike_detector1"), ("syn_exc_calcium_plasticity", arbor.selection_policy.round_robin), -1, d1)]

@thorstenhater thorstenhater reopened this May 10, 2022
@thorstenhater
Copy link
Contributor

As this is related to a PR is this still needed? If not, please dismiss this and the PR.

brenthuisman pushed a commit that referenced this issue Jun 14, 2022
Introduces the new policy `round_robin_halt`. This enables to halt at the current item until the policy `round_robin` is called again.

Related to issue #1749.
@jlubo jlubo closed this as completed Jun 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants