homeuser guideexamplesreferencechangelogresources

Logic

SpikeDelayBuffer

A delay buffer which returns at time _TT(t) the value present on its input at time _TT(t-delay). At the beginning of a run, up to time _TT(delay), it returns the valut eat time zero.

ConstantVector

A constant vector with up to six values. The values are dimensionless, and their interpretation depends on the component that uses the vector.

VectorSplitter

A vector and spike splitter. When provided with a vector input, each output port generates a single element vector containing, for the n'th port, the n'th element of the input vector. For spike input, a spike of index n is passed on through the n'th output port with its index changed to 0.

Counter

An event counter which generates one output event after every n input events. The counter consumes events until it has received _TT(spikeCount) spikes, then generates a single spike on the output port and starts counting again from zero.

VectorBroadener

Each element of the input vector is copied to _TT(n_spread) elements of the output vector. That is, the output vector is _TT(n_spread) times as long as the input one and contains blocks of identical values. A typical use would be when the input has a single element which is to be distributed to all elements of a population. In this case, a broadener should be interposed between the source and the population, with _TT(n_spread) equal to the size of the population. Without the broadener, only the first element of the population would receive the vector input.

LeakyIntegrator

Leaky integration of vectors and spikes.

PhaseEstimator

An estimator of the phase of a signal. The result is either in radians or degrees according to the _TT(output) parameter. The component will estimate the phase for any signal, but hte results are probably only meaningful for pleriodic signals. It records the times and amplitudes of minima and maxima, and keeps a running estimate of the time between successive minima [ maxima ] which it uses as the period. The min to max distance is also recorded, giving it two ways to estimate a phase: either form the time since the last minima [ maxima ] compared to the estimated period, or form the curerent amplitude compared to the estimated min and max. Which of these strategies is used depends on the _TT(sync) parameter and the _TT(method) parameter. For a sinusoidal signal all possibilities will agree. For a signal with sharp maxima and wide or noisy minima (eg some spiking cells) it may be best to sync on the maxima because these are better defined. For a spiking signal, the choice of method depends on what you want - a measure of progress through the inter-spike interval, or a measure of the progress from max to min and back again. In the case of a spiking cell, the _TT(amplitude) method would quickly move through all phase from 0 to 180 during the repolarization from the spike to the trough of the AHP and then gradually move through another quarter cycle or so as the cell returns to threshold, and then spped through the rest during the spike.

FeatureDiscretizer

Progressive creation of a feature map of the input space. As new vectors come in, certain of them are selected to be features in the input space, and assigned indexes starting with 0 for the first vector. Successive vectors are then compared with these features for similarity. If a match is found, the discretizer exports the matching index. Otherwise a new feature is created. The vectors on the input port and truncated to _TT(nDimension) elements. Each new vector is compared to existing vectors using an N2 norm (normal Euclidean distance) to see which it is closest to. If the closest is within _TT(similarityRange) then that vector's index is the current exported feature. If no existing features are within the similarity range, then the vector is recorded as a new feature. The _TT(coreSize) is a user set parameter allowing some optimization of the comparison: if a new vector is within _TT(coreSize) of the current feature, then it is assumed to belong to the same feature, and the comparison stage is skipped. For this to be correct, the _TT(coreSize) should be significantly smaller than the similarity range by a factor depending on the dimensionality of the input (for 1-D input it can be up to half the similarity range). There is no problem with small or zero core sizes - the results are the same, but the calculation is less efficient. On side effect of this feature discretization algorithm is that during initial exploration of the input space, features persist right up to their similarity range. but once a new feature is created, it adopts part of the space which had previously been assigned to the earlier feature. This means, for example, that place fields in initial exploration of an environment will overlap, but once the space has been mapped, each point will be uniquely associated with a single feature. The discretizer produces a regular spiking output at _TT(spikeFrequency) where the channel index of the spikes is the index of the current feature. The feature discretizer also works in reverse. Feature vectors can be read from the vector output port. Which feature is exposed is set by sending spikes to the feature index spike in port with the index of the desired feature. This provides, for example, the facility for desired location navigation around a previously discretized environment, thereby avoiding the need for circuitry to generate more realistic motor output.

VectorConcatenator

A concatenator for vectors or spikes. Vector inputs to the ports on the left are concatenated, taking the top port first, and the combined vector is exported on the right. Spike inputs are immediately sent on with their original index replaced by the index of the port on which they arrived.

VectorRelay

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.

EventSequenceEditor

New events can be dragged off the icon at the top left. The x axis is time, and the y axis the channel on which the event should be delivered. There are two operating modes - add and delete, as selected with the icons at the bottom right.

DelayBuffer

A delay buffer which returns at time _TT(t) the value present on its input at time _TT(t-delay). At the beginning of a run, up to time _TT(delay), it returns the valut eat time zero.

JythonScript

A script container for implementing arbitrary event driven or continuous algorithms. A script may receive spike and/or vector input, and generates spikes and/or vectors for output. It can act in an event driven mode (processing spikes when they arrive), request mode (furnishing vectors when requested), timed mode (updated at a specified interval) or any combination of these. The source of the script should be specified in the _TT(source) field. It can be loaded and reloaded after modifications with the _TT(load_module) and _TT(reload) buttons. The _TT(activate_terminal) option is not related to any particular script, and simply starts the jython interpreter on the terminal from which catacomb is running. To work in event driven mode a script must include the following methods: _SCODE setSpikeSender(spikeSender) mySpikeSender = spikeSender; receiveSpike(timePoint, index) code to execute when a spike is received _ECODE The first will be called by Catacomb to register the script's peer. This can then be used when the script module wishes to send spikes by calling: _SCODE mySpikeSender.sendSpike(index) _ECODE The time of the spike is filled in by the peer. As yet (Dec 01) other modes of operation are not supported, but you can get a long way with just the above, since, for example, the periodic update functionality can be implemented by connecting a regular spike generator to the script.

EventSequence

A predetermined sequence of events. Each event needs a delivery time and channel. These can be entered as space delimited text in the format time1 channel1 time2 channel2 etc with optional newlines after any pair. Alternatively, there is a _CMLINK(logic, EventSequenceEditor, dedicated user interface) for creating sequences. After entering a sequence as text, click the _TT(parse_text) for it to take effect. The spikes will be sorted and the text display updated to reflect the correct sequence. That is, it is not necessary to enter them in the right order initially.