correlomatrix_detector – Device for measuring the covariance matrix from several inputs

Description

The correlomatrix_detector is a recording device. It is used to record spikes from several pools of spike inputs and calculates the covariance matrix of inter-spike intervals (raw auto and cross correlation) binned to bins of duration delta_tau. The histogram is only recorded for non-negative time lags. The negative part can be obtained by the symmetry of the covariance matrix

:math:` C(t) = C^T(-t)`.

The result can be obtained via GetStatus under the key /count_covariance. In parallel it records a weighted histogram, where the connection weight are used to weight every count, which is available under the key /covariance. Both are matrices of size N_channels x N_channels, with each entry C_ij being a vector of size tau_max/delta_tau + 1 containing the (weighted) histogram for non-negative time lags.

The bins are centered around the time difference they represent, and are left-closed and right-open in the lower triangular part of the matrix. On the diagonal and in the upper triangular part the intervals are left-open and right-closed. This ensures proper counting of events at the border of bins, allowing consistent integration of a histogram over negative and positive time lags by stacking two parts of the histogram

(C(t)=[C[i][j][::-1],C[j][i][1:]]).

In this case one needs to exclude C[j][i][0] to avoid counting the zero-lag bin twice.

The correlomatrix_detector has a variable number of inputs which can be set via SetStatus under the key N_channels. All incoming connections to a specified receptor will be pooled.

Remarks:

This recorder does not record to file, screen or memory in the usual sense.

@note Correlomatrix detectors IGNORE any connection delays.

@note Correlomatrix detector breaks with the persistence scheme as

follows: the internal buffers for storing spikes are part of State_, but are initialized by init_buffers_().

@todo The correlation detector could be made more efficient as follows (HEP 2008-07-01): - incoming_ is vector of two deques - let handle() push_back() entries in incoming_ and do nothing else - keep index to last “old spike” in each incoming_; cannot

be iterator since that may change

  • update() deletes all entries before now-tau_max, sorts the new entries, then registers new entries in histogram

Parameters

Tstart

real

Time when to start counting events. This time should be set to at least start + tau_max in order to avoid edge effects of the correlation counts.

Tstop

real

Time when to stop counting events. This time should be set to at most Tsim - tau_max, where Tsim is the duration of simulation, in order to avoid edge effects of the correlation counts.

delta_tau

ms

Bin width. This has to be an odd multiple of the resolution, to allow the symmetry between positive and negative time-lags.

tau_max

ms

One-sided width. In the lower triagnular part events with differences in [0, tau_max+delta_tau/2) are counted. On the diagonal and in the upper triangular part events with differences in (0, tau_max+delta_tau/2].

N_channels

integer

The number of pools. This defines the range of receptor_type. Default is 1. Setting N_channels clears count_covariance, covariance and n_events.

covariance

3D matrix of integers

matrix of read-only -raw, weighted, auto/cross correlation

count_covariance

3D matrix of integers

matrix of read-only -raw, auto/cross correlation counts

n_events

list of integers

number of events from all sources

Receives

SpikeEvent

See also

Device, Detector