Online spike sorting methods in Julia
Pkg.clone("https://github.com/paulmthompson/SpikeSorting.jl.git")
http://spikesortingjl.readthedocs.org/en/latest/
This is a Julia implementation of various spike sorting methods. Our big picture goal is to have a system that can perform online sorting of data that is acquired via a Intan RHD2000 acquisition board:
https://github.com/paulmthompson/Intan.jl
In addition, we are trying to put many existing online algorithms, or potential online algorithms, into one place, and optimize them for speed.
- thresholds for power detection
- templates from rawsignal waveforms
- thresholds for raw signal detection
- threshold for NEO
- power normalization for MCWC
- Need to add a periodic "recalibration" where the thresholds are recalculated (probably at the end of each analysis block).
- Power Thresholding
- Raw Signal Threshold (as in Quiroga 2004)
- Nonlinear Energy Operator (Choi et al 2006)
- Continuous Wavelet Transform (Nenadic et al 2005)
- Multiscale Correlation of Wavelet Coefficients (Yang et al 2011)
- Stationary Wavelet Transform (Brychta et 2007)
- maximum index
- alignment accounting for shape (as in OSort)
- Upsampling via fft
- upsampling via cubic splines
- center of mass (as in Sahani 1999 dissertation)
- Continuous Basis Pursuit (Ekanadham et al 2014)
- Sequential Bayesian inference (Haga et at 2013)
- PCA
- Wavelet packet decomposition (Hulata et al 2002)
- Classification algorithm based on frequency domain features (Yang et al 2013)
- BIRCH
- CLASSIT
- Hierachical Adaptive Means (Paraskevopoulou et al 2014)
- OSort (Rutishauser et al 2006)
- Time varying Dirichlet process (Gasthaus et al 2009)
- DenStream
Notes: There are many different clustering methods. For a totally unsupervised, online implementation, the number of clusters needs to be determined automatically. The clusters should be able to adapt over time to compensate for things like electrode drift. Also, the clustering algorithm should have a sense of an "outlier."