Loading Spike Waveforms

Sample of spike waveforms extracted during spike sorting

Relevant Alf objects

  • _phy_spikes_subset

Loading

[2]:
from one.api import ONE
from brainbox.io.one import SpikeSortingLoader
from iblatlas.atlas import AllenAtlas

one = ONE()
ba = AllenAtlas()
pid = 'da8dfec1-d265-44e8-84ce-6ae9c109b8bd'

# Load in the spikesorting
sl = SpikeSortingLoader(pid=pid, one=one, atlas=ba)
spikes, clusters, channels = sl.load_spike_sorting()
clusters = sl.merge_clusters(spikes, clusters, channels)

# Load the spike waveforms
spike_wfs = one.load_object(sl.eid, '_phy_spikes_subset', collection=sl.collection)
Downloading: /home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/histology/ATLAS/Needles/Allen/average_template_25.nrrd Bytes: 32998960
100%|██████████| 31.470260620117188/31.470260620117188 [00:05<00:00,  6.12it/s]
Downloading: /home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/histology/ATLAS/Needles/Allen/annotation_25.nrrd Bytes: 4035363
100%|██████████| 3.848422050476074/3.848422050476074 [00:01<00:00,  2.75it/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/spikes.amps.npy: 100%|██████████| 141M/141M [00:01<00:00, 83.0MB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/spikes.clusters.npy: 100%|██████████| 70.3M/70.3M [00:00<00:00, 78.4MB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/spikes.times.npy: 100%|██████████| 141M/141M [00:00<00:00, 149MB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/spikes.depths.npy: 100%|██████████| 141M/141M [00:01<00:00, 124MB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/clusters.depths.npy: 100%|██████████| 3.78k/3.78k [00:00<00:00, 39.1kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/clusters.uuids.csv: 100%|██████████| 33.8k/33.8k [00:00<00:00, 385kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/clusters.channels.npy: 100%|██████████| 7.44k/7.44k [00:00<00:00, 124kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/clusters.metrics.pqt: 100%|██████████| 108k/108k [00:00<00:00, 731kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/channels.mlapdv.npy: 100%|██████████| 4.74k/4.74k [00:00<00:00, 69.9kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/channels.rawInd.npy: 100%|██████████| 3.20k/3.20k [00:00<00:00, 48.3kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/channels.localCoordinates.npy: 100%|██████████| 3.20k/3.20k [00:00<00:00, 56.5kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/channels.brainLocationIds_ccf_2017.npy: 100%|██████████| 3.20k/3.20k [00:00<00:00, 67.4kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/electrodeSites.brainLocationIds_ccf_2017.npy: 100%|██████████| 3.20k/3.20k [00:00<00:00, 45.1kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/electrodeSites.mlapdv.npy: 100%|██████████| 4.74k/4.74k [00:00<00:00, 84.8kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/electrodeSites.localCoordinates.npy: 100%|██████████| 3.20k/3.20k [00:00<00:00, 58.0kB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/_phy_spikes_subset.channels.npy: 100%|██████████| 9.56M/9.56M [00:00<00:00, 25.1MB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/_phy_spikes_subset.waveforms.npy: 100%|██████████| 1.57G/1.57G [00:08<00:00, 178MB/s]
/home/runner/Downloads/ONE/openalyx.internationalbrainlab.org/hoferlab/Subjects/SWC_043/2020-09-21/001/alf/probe00/pykilosort/_phy_spikes_subset.spikes.npy: 100%|██████████| 598k/598k [00:00<00:00, 4.56MB/s]

More details

Useful modules

  • COMING SOON

Exploring sample waveforms

Example 1: Finding the cluster ID for each sample waveform

[3]:
# Find the cluster id for each sample waveform
wf_clusterIDs = spikes['clusters'][spike_wfs['spikes']]

Example 2: Compute average waveform for cluster

[4]:
import numpy as np

# define cluster of interest
clustID = 2

# Find waveforms for this cluster
wf_idx = np.where(wf_clusterIDs == clustID)[0]
wfs = spike_wfs['waveforms'][wf_idx, :, :]

# Compute average waveform on channel with max signal (chn_index 0)
wf_avg_chn_max = np.mean(wfs[:, :, 0], axis=0)

Other relevant examples

  • COMING SOON