Skip to content

MountainSort 5, SpyKING CIRCUS 2, Tridesclous 2

MountainSort 5: agreement with Kilosort4’s results

Section titled “MountainSort 5: agreement with Kilosort4’s results”

There is no MountainSort 5 reference for this recording: its units are compared with Kilosort4’s saved results as a second sorter on the same data (mountainsort5_validation.py, defaults: scheme 2; the 45 s recording is shorter than the 300 s training stretch, so phase 1 sorts all of it).

MountainSort 5 (ours) Kilosort4 (saved)
Spikes 34 942 138 666
Units (good by the auto-correlogram) 167 (134) 267 (127)
Kilosort4 spikes found in time (±0.4 ms) and place (60 µm) 0.29
Spike times, ours − Kilosort4 peak at 0 samples
Kilosort4’s good units: found / not split / precision / accuracy (median) 0.84 / 0.93 / 0.89 / 0.61
Kilosort4’s good units with accuracy ≥ 0.8 / ≥ 0.5 0.37 / 0.56

MountainSort 5 finds a quarter of Kilosort4’s spikes. Its detection is a single-channel threshold at 5.5 σ after global whitening: on this probe the whitened noise has σ = 1.00 (checked), and global whitening halves the rate of 5.5 σ crossings compared with each channel’s own noise. Kilosort4 matches learned templates and reaches smaller spikes. Where MountainSort 5 does find a unit, it agrees with Kilosort4’s (median precision 0.89, rarely split).

Time: 646 s (10.8 min) for 45 s of 383 channels, against 404 s in October (not investigated). Phase-1 clustering is 471 s: the subdivision tree is lopsided (single linkage peels a few clusters off almost all the spikes at each level, so PCA and isosplit6 run again on nearly every spike, level after level), as in upstream. The per-channel classifiers take 160 s; whitening, detection and classification 15 s.

SpyKING CIRCUS 2: agreement with Kilosort4’s results

Section titled “SpyKING CIRCUS 2: agreement with Kilosort4’s results”

As for MountainSort 5 (spykingcircus2_validation.py, defaults; spike locations: each unit’s main channel). Not yet in this port: motion correction.

SpyKING CIRCUS 2 (ours) Kilosort4 (saved)
Spikes 120 469 138 666
Units (good by the auto-correlogram) 452 (249) 267 (127)
Peaks detected / clustered 90 067 / 90 067
Final merges 4 (456 → 452 units)
Kilosort4 spikes found in time (±0.4 ms) and place (60 µm) 0.71
Spike times, ours − Kilosort4 peak at 0 samples
Kilosort4’s good units: found / not split / precision / accuracy (median) 0.99 / 0.94 / 0.93 / 0.70
Kilosort4’s good units with accuracy ≥ 0.8 / ≥ 0.5 0.43 / 0.65

Time: 47 s for 45 s of 383 channels (about real time): preprocessing, prototype, detection and features 9 s, clustering 11 s, matching 26 s (scalar products on the device a batch of windows at a time, the pursuits in parallel on the host), final merges and the rest the remainder. More units than Kilosort4: the final merges join only units with at least 100 spikes and little refractory contamination, few of them on a 45 s recording.

Tridesclous 2: agreement with Kilosort4’s results

Section titled “Tridesclous 2: agreement with Kilosort4’s results”

As for SpyKING CIRCUS 2 (tridesclous2_validation.py, defaults).

Tridesclous 2 (ours) Kilosort4 (saved)
Spikes 83 110 138 666
Units (good by the auto-correlogram) 562 (371) 267 (127)
Peaks detected / clustered 57 924 / 57 924
Final merges 1
Kilosort4 spikes found in time (±0.4 ms) and place (60 µm) 0.59
Spike times, ours − Kilosort4 peak at 0 samples
Kilosort4’s good units: found / not split / precision / accuracy (median) 0.98 / 0.90 / 0.98 / 0.80
Kilosort4’s good units with accuracy ≥ 0.8 / ≥ 0.5 0.50 / 0.78

Time: 45 s for 45 s of 383 channels (detection 3 s, features 1 s, clustering 2 s, templates 7 s, peeling 28 s with the windows in parallel, final merge 1 s). Over all 267 Kilosort4 units: found 0.76, precision 0.96, accuracy 0.48 (median).