Emit different types of spikes from a single cell

Anything that doesn't fit elsewhere.
Post Reply
tclose
Posts: 27
Joined: Tue Jan 10, 2017 9:24 pm

Emit different types of spikes from a single cell

Post by tclose » Wed Jan 31, 2018 6:34 pm

This is a bit of unusual question as I am trying to implement the specification of a general neuro-modelling language (www.nineml.net) in Neuron. but would it be possible (including nasty hacks) to get Neuron to emit different types of spikes from a single cell. One possible use case for this feature could be an abstract model of an Purkinje cell, which emits two qualitatively different types of spikes, "simple" and "complex", and the CN receiving cell should respond differently to each of them.

Ideally, we would like generic events to be sent on completely separate channels (EventSendPorts in 9ML) and these channels be connected independently (i.e. even to different target neutrons) as this is how it is defined in the specification. However, I would settle for being able to set a flag in the spike event that specifies which port it was sent from and filter out the events from the other channels in the receiving cell.

ted
Site Admin
Posts: 5684
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Emit different types of spikes from a single cell

Post by ted » Thu Feb 01, 2018 12:05 pm

would it be possible (including nasty hacks) to get Neuron to emit different types of spikes from a single cell
You mean in the course of the same simulation?

tclose
Posts: 27
Joined: Tue Jan 10, 2017 9:24 pm

Re: Emit different types of spikes from a single cell

Post by tclose » Thu Feb 01, 2018 5:50 pm

Yes, say if condition A is satisfied emit a spike labelled "simple" and if condition B is satisfied emit a spike labelled "complex", which the receiving cell could then treat differently.

ted
Site Admin
Posts: 5684
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Emit different types of spikes from a single cell

Post by ted » Fri Feb 02, 2018 12:11 am

NEURON has no notion of "spike" as such, let alone "kind of spike." It has events. Spike-triggered synaptic transmission is implemented by using an instance of the NetCon class to couple a presynaptic "spike source" to a postsynaptic target. The presynaptic element may be a biophysical model cell or an artificial spiking cell; the postsynaptic target is either a synaptic mechanism attached to a biophysical model cell, or an artificial spiking cell. In either case, the NetCon that couples the pre- and postsynaptic elements delivers an event to the postsynaptic target at a user-specified delay after detection of the presynaptic spike. The event is associated with a weight vector, the first element of which is generally used to carry information about the strength and sign (excitation or inhibition) of the postsynaptic effect. The weight vector can also have other elements that convey other information, such as time of the most recent previous synaptic activation (useful for implementing certain types of synaptic plasticity).

I suppose it would be possible to use one of the weight vector's elements to tell the target whether the presynaptic spike should be treated as a simple spike or as a complex spike. Alternatively, one could just use two or more NetCons to couple an individual presynaptic cell to its target. Each of these NetCons would have its own delay and weight. If only one of the NetCons has a nonzero weight, then a single spike in the presynaptic cell produces a single activation of the synapse. If two more more NetCons attached to the same presynaptic cell have nonzero weights, and these NetCons drive a single synaptic mechanism, then a single presynaptic spike results in multiple synaptic activations--as if a complex spike had actually happened. What's nice about this? Synaptic weights can be changed under program control in the course of a simulation.

Regardless of whether a spike at the trigger zone is simple or complex, you're going to need to know what it looks like by the time it propagates through the axon to presynaptic terminals. Presumably there is empirical evidence about this.

The other worm in this apple that comes to mind is this, and it's a big one: every spike in a cell has an effect on the cell's excitability, and part of that effect is mediated by calcium entry. A complex spike seems likely to produce more calcium entry than a simple spike would, not to mention causing a greater perturbation of the activation/inactivation of other voltage-gated ion channels than a simple spike would. Consequently, for a given level and pattern of synaptic drive, the spontaneous and elicited firing pattern elicited in a cell with REAL complex spikes will probably differ greatly from that of a cell that can only make simple spikes.

tclose
Posts: 27
Joined: Tue Jan 10, 2017 9:24 pm

Re: Emit different types of spikes from a single cell

Post by tclose » Fri Feb 02, 2018 4:23 pm

Thanks Ted.

* Is that weight vector a property of the individual events or the NetCon?
* Is it possible to send an individual event down selected NetCons or do all events get sent to all connected NetCons?

I only provided that Purkinje cell example as a concretish example of what I am trying to model. Undoubtedly the calcium released by complex spike will have an effect on the spiking of the Purkinje cell (and is probably its primary function IMO) but in this case I am more considering the effect on the post-synaptic cell although you are right in pointing out what the complex spike looks like by the time it propagates to the pre-synaptic terminals is still an open question. But we are designing a generic modelling language it is conceivable that a modeller may want to differentiate between two types of inter-cell events (i.e. there are probably better use cases than this one I have come up with).

ted
Site Admin
Posts: 5684
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Emit different types of spikes from a single cell

Post by ted » Fri Feb 02, 2018 11:37 pm

Progress in this discussion will be quicker if you now read the Programmer's Reference documentation about the NetCon class
https://www.neuron.yale.edu/neuron/stat ... etcon.html
Then we can pick up with whatever questions you may still have.

tclose
Posts: 27
Joined: Tue Jan 10, 2017 9:24 pm

Re: Emit different types of spikes from a single cell

Post by tclose » Sun Feb 04, 2018 11:31 pm

To try to answer my own questions then
* Is that weight vector a property of the individual events or the NetCon?
So as I thought, they are properties of the NetCon, not the event.
* Is it possible to send an individual event down selected NetCons or do all events get sent to all connected NetCons?
This still isn't clear to me from reading the following
The source may be None. In this case events can only occur by calling event() from Python. (It is also used by NEOSIM to implement its own delivery system.)
How does Neosim do this? Is this something I can do from NMODL?
A source used by multiple NetCon instances is shared by those instances to allow faster threshold detection (ie on a per source basis instead of a per NetCon basis). Therefore, there is really only one threshold for all NetCon objects that share a source. However, delay and weight are distinct for each NetCon object.

The only way one can have multiple threshold values at the same location is to create a threshold detector point process with a NET_RECEIVE block implemented with a WATCH statement and calling net_event.
* Is there any documentation for the net_event function, and is it related to net_send? It seems to only have one argument, the time it was raised, i.e. not one to specify which NetCon to send it across or set a flag.
* Am I right in thinking that net_send, despite its name, raises events that are only visible to the local process? Because if it is possible to send them across the network with the flag argument then that is all I need?

ted
Site Admin
Posts: 5684
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Emit different types of spikes from a single cell

Post by ted » Mon Feb 05, 2018 9:40 am

* Is it possible to send an individual event down selected NetCons
All active NetCons that share a given threshold detector will respond to a threshold crossing by placing events in the event queue that will be delivered to their targets after the user-specified delays. Whether or not a NetCon is active can be controlled by calling NetCon.active() with the appropriate argument (see documentation in the Programmer's Reference), but events that are already in the event queue will remain in the event queue.

I don't know anything about NEOSIM. My suspicion is you'd just be dealing with a different can of worms.
Is there any documentation for the net_event function
net_event is an NMODL procedure that is used in the NET_RECEIVE block of a spike source ("artificial spiking cell") to place a new event into the event delivery queue for delivery to the targets of all NetCons that are monitoring that spike source. It is called with the current time t as its argument, i.e. net_event(t). I have not seen it called with a different argument and am not sure what effect that would have.

net_send is used in the NET_RECEIVE block of a spike source to place a self-event in the event delivery queue. A self-event is delivered back to the object instance that launched it; it is not "picked up" by the NetCons that monitor the spike source. net_send is called with two arguments: the first specifies the delay before the self-event is delivered back to the spike source, and the second is a flag variable that is used to control conditional execution of statements in the spike source's NET_RECEIVE block.

Your best bet for controlling which targets receive events from a given spike source is to selectively activate or deactivate the NetCons that monitor the spike source. Of course, the activation/deactivation must be done before the presynaptic spike occurs.

tclose
Posts: 27
Joined: Tue Jan 10, 2017 9:24 pm

Re: Emit different types of spikes from a single cell

Post by tclose » Mon Feb 05, 2018 3:47 pm

No worries, I thought that it wasn't going to be possible. I might try something with proxy artificial cells for each port and RANGE pointers.

Post Reply