Sorters module¶
The spikeinterface.sorters
module is where spike sorting happens!
SpikeInterface provides wrapper classes to many commonly used spike sorters (see Compatible Technology).
All sorter classes inherit from the BaseSorter
class, which provides the
common tools to run spike sorters.
Sorter wrappers concept¶
Each spike sorter wrapper includes:
a list of default parameters
a list of parameter description
a
_setup_recording
class function, which parses the required files and metadata for each sorter into the specifiedoutput_folder
a
_run_from_folder
class function, which launches the spike sorter from theoutput_folder
a
_get_result_from_folder
class function, which loads theSortingExtractor
from theoutput_folder
Example¶
The sorters
includes run()
functions to easily run spike sorters:
import spikeinterface.sorters as ss
# recording is a RecordingExtractor object
sorting_TDC = ss.run_tridesclous(recording, output_folder="tridesclous_output")
# which is equivalent to
sorting_TDC = ss.run_sorter("tridesclous", recording, output_folder="tridesclous_output")
Running sorters in container docker/singularity¶
One of the biggest bottlenecks for users is installing spike sorting software. To alleviate this, we build and maintain containerized versions of several popular spike sorters on the SpikeInterface Docker Hub repository.
See full documentation here: Containerized Sorters
Run several sorting jobs in parallel¶
The spikeinterface.sorters
includes also includes tools to run several spike sorting jobs in parallel. This
can be done with the spikeinterface.sorters.run_sorters()
function by specifying an engine
that
supports parallel processing (e.g. joblib or dask).
In this code example, 3 sorters are run on 2 recordings using 6 jobs:
import spikeinterface.sorters as ss
# recording1 and recording2 are RecordingExtractor objects
recording_dict = {"rec1": recording1, "rec2": recording2}
sorting_outputs = ss.run_sorters(
sorter_list=["tridesclous", "herdingspikes", "ironclust"],
recording_dict_or_list=recording_dict,
working_folder="all_sorters",
verbose=False,
engine="joblib",
engine_kwargs={'n_jobs': 6},
)
After the jobs are run, the sorting_outputs
is a dictionary with (rec_name, sorter_name)
as key (e.g.
('rec1', 'tridesclous')
in this example), and the corresponding SortingExtractor
as value.