homeuser guideexamplesreferencechangelogresources

Spike

SpikeRelay

A spike relay which propagates spikes on its input port to its output port without changing them. The main purpose of this relay is to allow testing of projection patterns. It can be used to make a dummy cell. A population of such cells can receive any spiking input projection and produces a single channel of indexed spikes as output, suitable for display with standard components, just as the output of any other populatin can be displayed.

JoinDivideRelay

This is one of the four flavors of spike relay. They are divided according to the possible actions on input and output.

On input, spike bundles from different sources can either be merged or joined (concatenated). On output, either all spikes are sent to all recipients (cloned) or the spike stream is split up (divided) according to the needs of the recipients.

As its name suggests, this relay joins inputs, and divides outputs. For details of the joining function, see theJoinCloneRelay . For details of the divide function, see theMergeDivideRelay .

This unit is exactly equivalent to the combination of a JoinCloneRelay followed by a MergeDivideRelay.

JoinCloneRelay

This is one of the four flavors of spike relay. They are divided according to the possible actions on input and output.

On input, spike bundles from different sources can either be merged or joined (concatenated). On output, either all spikes are sent to all recipients (cloned) or the spike stream is split up (divided) according to the needs of the recipients.

As its name suggests, this relay joins inputs, and clones outputs. Output cloning, means that identical spikes are sent to all connected outputs. The joining function on input, however, means that before they are tranmitted on, the indexes of incoming spikes are remapped so that separate inputs occupy separate ranges of indexes.

When it is initialized, the relay works out how many distinct sources can come through each of its inputs. For example, if the first input has four distinct sources, then at runtime it will be delivering spikes of index 0,1,2 or 3. It uses these numbers to offset spikes from subsequent inputs. In hte above case, all spikes from the second input will then be offset by 4. So a spike of index 0 coming through the second input will come out of the relay reindexed to 4.

A typical use is in grouping the output from a population of cells so that spikes from different cells can be subsequently redirected acording to the source. With a joining relay, a spike from the _TT(n)th cell will come out of the relay with index _TT(n). By contrast, with a merging relay, all spikes would come out with index 0 and therefore would be indistinguishable.

See also:MergeCloneRelay ,MergeDivideRelay ,JoinCloneRelay ,JoinDivideRelay .

EventLogger

A spike relay which propagates spikes on its input port to its output port without changing them. The main purpose of this relay is to allow testing of projection patterns. It can be used to make a dummy cell. A population of such cells can receive any spiking input projection and produces a single channel of indexed spikes as output, suitable for display with standard components, just as the output of any other populatin can be displayed.

MergeDivideRelay

This is one of the four flavors of spike relay. They are divided according to the possible actions on input and output. On input, spike bundles from different sources can either be merged or joined (concatenated). On output, either all spikes are sent to all recipients (cloned) or the spike stream is split up (divided) according to the needs of the recipients.

As its name suggests, this relay merges inputs, but divides its outputs. Spikes of indexn from any source are treated equally (the merging function), but they are then rerouted to only one of the possible targets according to the value of n. See theMergeCloneRelay for more details on the merging operation.

When the relay is initialised it enquires of all the possible outputs how many eventual targets they have. For example, if one target is a population of four units each of which can accept single spikes, then that output will return the number four. The relay then sets up a table of which input indexes go to which output. If, for example, there are two outputs, each with four eventual targets, then spikes of index 0 through 3 will go to the first one with their index unchanged. Spikes of index 4 through 7 will go to the second one, with the index remapped to the range 0-3. That is, an input of index n, with n between 4 and 7 will be sent to the second population only with index n-4.

A typical application of a dividing relay is to connect indexed spikes into a population of cells. It will route input spikes of indexn to the nth cell. By contrast, a cloning relay would send all spikes to all cells.

See also:MergeCloneRelay ,MergeDivideRelay ,JoinCloneRelay ,JoinDivideRelay .

MergeCloneRelay

This is one of the four flavors of spike relay. They are divided according to the possible actions on input and output. On input, spike bundles from different sources can either be merged or joined (concatenated). On output, either all spikes are sent to all recipients (cloned) or the spike stream is split up (divided) according to the needs of the recipients.

As its name suggests, this relay merges inputs, and clones outputs. This is the relay simplest operation. A spike of index _TT(n) arriving at the input port is sent on to all recipients withthe index unchanged. So, for example, if you have a population of units each of which produces a single spike type (ie, each one generates spikes with index 0 only) and the population is connected to a MergeCloneRelay, then the output will be a stream of spikes, all still with index 0.

If two spike sources that send spikes of a range of indexes are connected into a merging relay, then the indexes are propagated unchanged: spikes of index _TT(n) from either source produce a spike of index _TT(n) on the output. This contrasts with the behavior of joining relays, in which case the second stream of spikes will be offset so they occupy a separate range of indexes.

Merging is the default behavoir of all input ports so you may wonder what the use of a merge clone relay is (why not leave it out and just connect its inputs directly to the targets ? ). One use is when there are multiple inputs and multiple outputs: it saves connecting each input separately to each output. It can also be used to intercept spikes flowing to a particular target and direct them to a visualization component as well. Finally, as with all relays, the access ports of merge-clone relays are still accesible when they are included in compound objects. They therefore server as ways of exporting connections from compounds that would not otherwise be accessible.

See also:MergeCloneRelay ,MergeDivideRelay ,JoinCloneRelay ,JoinDivideRelay .