# 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