Handling probe information

In order to properly spike sort, you may need to load information related to the probe you are using.

SpikeInterface internally uses ProbeInterface to handle probe or probe groups for recordings.

Depending on the dataset, the Probe object can be already included or needs to be set manually.

Here’s how!

import numpy as np
import spikeinterface.extractors as se

First, let’s create a toy example:

recording, sorting_true = se.toy_example(duration=10, num_channels=32, seed=0, num_segments=2)
print(recording)
InjectTemplatesRecording: 32 channels - 30.0kHz - 2 segments - 600,000 samples - 20.00s
                          float32 dtype - 73.24 MiB
Segments:
Samples:   300,000 | 300,000
Durations: 10.00s | 10.00s
Memory:    36.62 MiB | 36.62 MiB

This generator already contain a probe object that you can retrieve directly an plot:

probe = recording.get_probe()
print(probe)

from probeinterface.plotting import plot_probe

plot_probe(probe)
Probe - 32ch - 1shanks
Probe - 32ch - 1shanks

(<matplotlib.collections.PolyCollection object at 0x7f9f79f89ab0>, <matplotlib.collections.PolyCollection object at 0x7f9f786e17e0>)

You can also overwrite the probe. In that case you need to manually make the wiring (e.g. virtually connect each electrode to the recording device). Let’s use a probe from Cambridge Neurotech with 32 channels:

from probeinterface import get_probe

other_probe = get_probe('cambridgeneurotech', 'ASSY-37-E-1')
print(other_probe)

other_probe.set_device_channel_indices(np.arange(32))
recording_2_shanks = recording.set_probe(other_probe, group_mode='by_shank')
plot_probe(recording_2_shanks.get_probe())
Probe - 32ch - 2shanks
ASSY-37-E-1 - cambridgeneurotech - 32ch - 2shanks

(<matplotlib.collections.PolyCollection object at 0x7f9f7859d450>, <matplotlib.collections.PolyCollection object at 0x7f9f90e99210>)

Now let’s check what we have loaded. The group_mode=’by_shank’ automatically set the ‘group’ property depending on the shank id. We can use this information to split the recording in two sub recordings:

print(recording_2_shanks)
print(recording_2_shanks.get_property('group'))

rec0, rec1 = recording_2_shanks.split_by(property='group')
print(rec0)
print(rec1)
InjectTemplatesRecording: 32 channels - 30.0kHz - 2 segments - 600,000 samples - 20.00s
                          float32 dtype - 73.24 MiB
Segments:
Samples:   300,000 | 300,000
Durations: 10.00s | 10.00s
Memory:    36.62 MiB | 36.62 MiB
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
0
1

Note that some formats (MEArec, SpikeGLX) automatically handle the probe geometry. For almost all other formats the probe and the wiring have to be set manually using the probeinterface library.

Total running time of the script: (0 minutes 0.396 seconds)

Gallery generated by Sphinx-Gallery