Skip to main content

MountainSort 5 spike sorting algorithm

Project description

MountainSort 5

latest-release tests codecov

This is the most recent version of the MountainSort spike sorting algorithm. An implementation of the previous version of this algorithm can be found here.

  • Uses Isosplit clustering
  • Runs much faster than previous versions
  • Works well on large datasets
  • Better handles time-overlapping events and drifting waveforms
  • Designed to be easy to use and to work well out of the box
  • Runs fast on a CPU
  • Uses SpikeInterface for I/O and preprocessing
  • Supports multiple sorting schemes, each suited for different experimental setups

image

Installation

pip install --upgrade mountainsort5

Dependencies:

Python, SpikeInterface, scikit-learn, isosplit6

Usage

MountainSort5 utilizes SpikeInterface recording and sorting objects. You can get started by reading the SpikeInterface documentation.

Once you have a recording object, you can run MountainSort5 using the following code:

import spikeinterface as si
import spikeinterface.preprocessing as spre
import mountainsort5 as ms5

recording = ... # load your recording using SpikeInterface

# Make sure the recording is preprocessed appropriately
# lazy preprocessing
recording_filtered = spre.bandpass_filter(recording, freq_min=300, freq_max=6000)
recording_preprocessed: si.BaseRecording = spre.whiten(recording_filtered)

# use scheme 1
sorting = ms5.sorting_scheme1(
    recording=recording_preprocessed,
    sorting_parameters=ms5.Scheme1SortingParameters(...)
)

# or use scheme 2
sorting = ms5.sorting_scheme2(
    recording=recording_preprocessed,
    sorting_parameters=ms5.Scheme2SortingParameters(...)
)

# or use scheme 3
sorting = ms5.sorting_scheme3(
    recording=recording_preprocessed,
    sorting_parameters=ms5.Scheme3SortingParameters(...)
)

# Now you have a sorting object that you can save to disk or use for further analysis

To give it a try with simulated data, run the following scripts in the examples directory:

Scheme 1: examples/scheme1/toy_example.py

Scheme 2: examples/scheme2/toy_example.py

Scheme 3: examples/scheme3/toy_example.py

Preprocessing

MountainSort5 is designed to operate on preprocessed data. You should bandpass filter and whiten the recording as shown in the examples. SpikeInterface provides a variety of lazy preprocessing tools, so that intermediate files do not need to be stored to disk.

Sorting schemes

MountainSort5 is organized into multiple sorting schemes. Different experimental setups will be best served by using different schemes.

Sorting scheme 1

This is the simplest sorting scheme and is useful for quick tests. The entire recording is loaded into memory, and clustering is performed in a single pass. In general, scheme 2 should be used intead since it has better handling of events that overlap in time, and works with larger datasets on limited RAM systems. Nevertheless, scheme 1 can be useful for testing and debugging, and is used as the first pass in scheme 2.

Read more about scheme 1

Sorting scheme 2

The second sorting scheme is generally preferred over scheme 1 because it can handle larger datasets that cannot be fully loaded into memory, and also has other advantages in terms of accurately detecting and labeling spikes.

In phase 1, the first scheme is used as a training step, performing unsupervised clustering on a subset of the dataset. Then in phase 2, a set of classifiers are trained based on the labels of the training step. The classifiers are then used to label the remaining data.

Read more about scheme 2

Sorting scheme 3

Sorting scheme 3 is designed to handle long recordings that may involve waveform drift. The recording is divided into blocks, and each is spike sorted using scheme 2. Then the snippet classifiers are used to associate matching units between blocks.

Read more about scheme 3

Citing MountainSort

Until there is a new publication, please cite the original MountainSort paper:

@article{chung2017fully,
  title={A fully automated approach to spike sorting},
  author={Chung, Jason E and Magland, Jeremy F and Barnett, Alex H and Tolosa, Vanessa M and Tooker, Angela C and Lee, Kye Y and Shah, Kedar G and Felix, Sarah H and Frank, Loren M and Greengard, Leslie F},
  journal={Neuron},
  volume={95},
  number={6},
  pages={1381--1394},
  year={2017},
  publisher={Elsevier}
}

In addition, if you use the SpikeInterface framework, please cite the following paper:

@article{buccino2020spikeinterface,
  title={SpikeInterface, a unified framework for spike sorting},
  author={Buccino, Alessio Paolo and Hurwitz, Cole Lincoln and Garcia, Samuel and Magland, Jeremy and Siegle, Joshua H and Hurwitz, Roger and Hennig, Matthias H},
  journal={Elife},
  volume={9},
  pages={e61834},
  year={2020},
  publisher={eLife Sciences Publications Limited}
}

Contributing

Feel free to open an issue or pull request if you have any questions or suggestions.

Please star this repository if you find it useful!

Authors

Jeremy Magland, Center for Computational Mathematics, Flatiron Institute

Acknowledgements

Thank you to Loren Frank and members of his lab for their support of this project at all stages of development.

Thank you to Alex Barnett and Leslie Greengard for their work on the original Isosplit and MountainSort algorithms.

Thank you to the SpikeInterface team, especially Alessio Buccino and Samuel Garcia, for their work on the SpikeInterface framework, which supports pre- and post-processing and makes it easy to use MountainSort5 with a variety of file formats.

Thank you to Jeff Soules for his work on sortingview and related visualization tools that make it easy to inspect the results of MountainSort5.

Finally, thank you to all the users of the previous version of MountainSort who have provided feedback and suggestions.

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mountainsort5-0.1.2.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

mountainsort5-0.1.2-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file mountainsort5-0.1.2.tar.gz.

File metadata

  • Download URL: mountainsort5-0.1.2.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for mountainsort5-0.1.2.tar.gz
Algorithm Hash digest
SHA256 4b3bff1152834e5cb5fbc5e9ab3d12c655076588574e97217b2d38d1fe07f746
MD5 40eaa074423bed55cb856e9f5eb84f54
BLAKE2b-256 c3d557e48dba65e4fb20c12209921332ea5e0137ec646078097a6c7dc053d5ed

See more details on using hashes here.

File details

Details for the file mountainsort5-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for mountainsort5-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4a2d34b4641d4254bcf59933af46dbf3cc9fd7a19f8f54e6f705a95c0e4bc60c
MD5 86ccc272a12d978bedbf825e0c0ed00a
BLAKE2b-256 c88ecfeae00151de371bd8a4bd86d0011628630a7fffe6011c35c4ac8b41e3af

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page