links and descriptions of publicly available code for spike sorting
This project is maintained by Simon Kornblith
Last Updated Feb. 20, 2017
Software | Language | Detection | Feature Extraction | Clustering | Drift | Overlap | Large-scale MEA | Publications | Comments |
---|---|---|---|---|---|---|---|---|---|
BinaryPursuitSpikeSorting | MATLAB | binary pursuit | N/A | binary pursuit | No | Yes | No | A model-based spike sorting algorithm for removing correlation artifacts in multi-neuron recordings | |
bpsort | MATLAB | binary pursuit, raw signal threshold with alignment (initialization) | PCA (initialization) | t-distribution MM (initialization) | Yes | Yes | Yes | ||
CBPSpikesortDemo | MATLAB | continuous basis pursuit | continuous basis pursuit | continuous basis pursuit | No | Yes | Yes? | A unified framework and method for automatic neural spike identification | |
ClusterLizard | C++ | raw signal threshold | wavelets + Lillifors test | Euclidean distance | Yes | No | No | An unsupervised online spike-sorting framework | |
Combinato | Python | raw signal threshold with alignment | wavelets | superparamagnetic clustering + template matching | Yes | No | No | Reliable analysis of single-unit recordings from the human brain under noisy conditions: tracking neurons over hours | GUI for inspecting clusters |
EToS | C++ | raw signal threshold | multimodality-weighted PCA, multimodality pick-up algorithm, Graph Laplacian features, PCA | Variational Bayes and EM t-distribution and Gaussian mixture model | No | No | No | Spike sorting of heterogeneous neuron types by multimodality-weighted PCA and explicit robust variational Bayes, Accurate spike sorting for multi-unit recording | |
FMMSpikeSorter | MATLAB | raw signal threshold | focused mixture model | focused mixture model | Yes? | No | Yes? | Multichannel electrophysiological spike sorting via joint dictionary learning and mixture modeling | |
gpu_python | Python | N/A | N/A | Generalized Polya urn dependent Dirichlet process MM | Yes | No | No | Dependent dirichlet process spike sorting | |
KFMM | MATLAB | N/A | N/A | Kalman filter EM GMM | Yes | No | No | Kalman filter mixture model for spike sorting of non-stationary data | |
KiloSort | MATLAB, CUDA C | Spatiotemporal SVD | Template matching via stochastic batch optimization | No | Yes | Yes | Kilosort: realtime spike-sorting for extracellular electrophysiology with hundreds of channels | ||
MoDT | MATLAB, CUDA C | N/A | PCA | Mixture of drifting t-distributions | Yes | No | No | Model-based spike sorting with a mixture of drifting t-distributions | |
moksm | MATLAB | N/A | N/A | Mixture of drifting t-distributions | Yes | No | No | EM for a mixture of drifting t-distributions | |
opass | MATLAB | gamma process model | PCA | gamma process model | Yes | Yes | Yes? | Real-time inference for a gamma process model of neural spiking | |
OpenElectrophy | Python | raw signal threshold, MTEO | PCA, ICA, wavelets | EM GMM, K-means, mean-shift | No | No | No | GUI for manual clustering and inspecting results | |
OSort | MATLAB | local energy threshold with alignment | N/A | template matching | Yes | No | No | Online detection and sorting of extracellularly recorded action potentials in human medial temporal lobe recordings, in vivo | |
pebble | C++, MATLAB | ? | PCA | ISO-SPLIT | No | No | No | Unimodal clustering using isotonic regression: ISO-SPLIT | |
phy (previously klustakwik) | Python | raw signal threshold with alignment | PCA | EM GMM, masked EM GMM | No | No | Yes | Spike sorting for large, dense electrode arrays, High-dimensional cluster analysis with the Masked EM Algorithm | GUI for inspecting sorting results. Large, active community |
spikesort | MATLAB | raw signal threshold (height + width) | PCA, factor analysis, sparse PCA, t-SNE | 1D GMM, 1D k-means | No | No | No | Claims "99.5% accuracy." Only supports clustering into two units. | |
SpikeSorter.jl | Julia | hidden markov model | spike width, trough to valley ratio | hidden markov model | No | No | No | Algorithm described in Spike sorting with hidden Markov models | |
SpikeSorting.jl | Julia | raw signal threshold, power, nonlinear energy, alignment | PCA | OSort-style template matching | Yes? | No | No | Many options planned; see documentation | |
spyke | Python | raw signal threshold with alignment | PCA, ICA | gradient ascent (mean-shift variant) | No | No | Yes | Spike sorting for polytrodes: a divide and conquer approach, Python for large-scale electrophysiology | GUI |
SpyKING Circus | Python | raw signal threshold + iterative template matching | PCA | local density clustering (Rodriguez & Laio) + template matching | No | Yes | Yes | Fast and accurate spike sorting in vitro and in vivo for up to thousands of electrodes | |
trisdesclous | Python | raw signal threshold with alignment | PCA | EM GMM, k-means | No | No | No | ||
Wave_clus | MATLAB | raw signal threshold with alignment | wavelets + Lillifors test | superparamagnetic | No | No | No | Unsupervised spike detection and sorting with wavelets and superparamagnetic clustering |