Giter Club home page Giter Club logo

sg-s / spikesort Goto Github PK

View Code? Open in Web Editor NEW
3.0 4.0 9.0 4.41 MB

[no longer supported] for a more powerful version of this that supports multiple channels and uses machine learning, look here ➡️

Home Page: https://github.com/sg-s/crabsort

License: GNU General Public License v3.0

MATLAB 93.10% XSLT 6.46% Python 0.44%
dimensionality-reduction spike-shapes matlab spike-sorting tsne-algorithm clustering neuroscience ephys electrophysiology tsne

spikesort's Introduction

spikesort

GitHub last commit

spikesort is a framework written in MATLAB to help you sort spikes from single-channel extracellular recordings. It is

  1. highly modular Almost everything is written as a plugin. spikesort is a MATLAB class, and plugins are methods defined within the class.
  2. Accurate Using the t-SNE dimensionality reduction algorithm, spikesort achieves a 99.5% accuracy on test data. For a full report, see this.
  3. Data-agnostic spikesort interfaces to your data through plugins, and spikesort doesn't care what your data format is.
  4. Bring-your-own-algorithm spikesort splits up the spike sorting problem into two steps: dimensionality reduction and clustering. Every algorithm in either step is written as a plugin, and you can write your and drop it in, with zero modifications to the core code. For example, spikesort can use the amazing mutli-core t-SNE algorithm to embed spike shapes in two dimensions very rapidly.

Installation

spikesort is written in MATLAB, with a sprinkling of Python wrapper code. It should work on any OS that modern MATLAB runs on, but has only been tested on macOS Sierra with MATLAB R2015a.

The best way to install spikesort is through my package manager:

% copy and paste this code in your MATLAB prompt
websave('install.m','https://git.io/viWvp')
install -f sg-s/spikesort
install -f sg-s/srinivas.gs_mtools   % spikesort needs this package to run

This script grabs the code and fixes your path.

Or, if you have git installed:

git clone [email protected]:sg-s/spikesort.git

Don't forget to download, install and configure the other packages too (see below).

install bhtsne

If you used install.m to install spikesort, you already have these toolbox. However, you need to compile to run. On *nix-like systems, navigate to the folder it is in (should be ~/code/bhtsne/) and run the following:

g++ sptree.cpp tsne.cpp -o bh_tsne -O2

Note that my fork of bhtsne may have modifications, and this is what you should use with spikesort. If you're running Windows, you need to use whatever compiler you have to compile this. See this for instructions on how to build the binary.

This implementation of t-SNE is the the fastest I know of, and gets faster the more cores you throw at it. Follow the installation instructions here. macOS users, see this for installation troubleshooting.

You then need to tell MATLAB where Multicore-TSNE is installed. To do this,

  1. first determine where it is installed (pip show MulticoreTSNE)
  2. Copy and paste this code to your MATLAB startup.m (use edit startup.m)
a_path = '/path/to/MulticoreTSNE';
path1 = getenv('PATH');
if isempty(strfind(path1,[pathsep a_path]))
    path1 = [a_path pathsep path1];
end
setenv('PATH', path1);

Limitations and Scope

  • sorting into only two neurons/units (A and B) is supported. spikesort will not support more than 2 units in the anticipated future.
  • Only 1 recording electrode is supported at a time. No support for multi-electrode arrays, nor will spikesort ever have support for MEAs.

Architecture

spikesort is built around a plugin architecture for the three most important things it does:

  • Data handling
  • Dimensionality reduction of spike shapes
  • Clustering

Writing your own plugins

Writing your own plugins is really easy: plugins are methods that you can simply drop into the spikesort classdef folder (@spikesort), and spikesort automatically figures out which methods are plugins (see naming convention below)

Naming and Plugin declaration

Plugins can be named whatever you want, though you are encouraged to use camelCase for all methods. The first three lines of every plugin should conform to the following convention:

% spikesort plugin
% plugin_type = 'dim-red';
% plugin_dimension = 2; 
% 

The first line identifies the method as a spikesort plugin, and the second line determines the type of plugin it is. Currently, plugins can be of six types:

  1. dim-red
  2. cluster
  3. read-data
  4. save-data
  5. load-file
  6. plot

If you are writing a read-data, save-data,load-file or plot plugin, the convention for the first three lines is as follows:

% spikesort plugin
% plugin_type = 'load-file';
% data_extension = 'kontroller'
% 

data_extension identifies the extension that spikesort binds that plugin to.

load-file plugins are expected to populate the following fields in the spikesort object:

output_channel_names
sampling_rate
this_trial
this_paradigm
handles.paradigm_chooser.String

plot-spikes plugins are expected to read all spikes in that data file, and make a raster or a firing rate plot, with appropriate labels for each trial and paradigm set.

License

GPL v3

If you plan to use spikesort for a publication, please write to me for appropriate citation.

spikesort's People

Contributors

lrbachtiar avatar niragkadakia avatar sg-s avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.