SpikeInterface / SpikeInterface/spikeinterface

Spike amplitudes crashes on sorting with no units

Open
#2,264 3 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug postprocessing
Dominant language
Python
Stars
847
Forks
280
Avg merge
3d 9h
Merged PRs (30d)
29

Description

Computing the spike amplitudes crashes when giving a sorting with no unit, rather than simply doing nothing.

import spikeinterface.core as si
import spikeinterface.postprocessing as spost

recording = si.load_extractor("recording.bin")
sorting = si.NumpySorting.from_unit_dict({}, 30000)  # Also works with si.load_extractor("sorting").select_units([])

wvf_extractor = si.extract_waveforms(recording, sorting, mode="memory", allow_unfiltered=True)  # Also same error message when using `mode="folder"`
extract waveforms shared_memory multi buffer: 

spost.compute_spike_amplitudes(wvf_extractor)

extract amplitudes:   0%|                                                                                             | 0/1765 [00:00<?, ?it/s]Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/export/home1/users/nsr/wyngaard/dev/spikeinterface/spikeinterface/src/spikeinterface/postprocessing/spike_amplitudes.py", line 171, in compute_spike_amplitudes
    sac.run(**job_kwargs)
  File "/export/home1/users/nsr/wyngaard/dev/spikeinterface/spikeinterface/src/spikeinterface/core/waveform_extractor.py", line 1964, in run
    self._run(**kwargs)
  File "/export/home1/users/nsr/wyngaard/dev/spikeinterface/spikeinterface/src/spikeinterface/postprocessing/spike_amplitudes.py", line 80, in _run
    out = processor.run()
          ^^^^^^^^^^^^^^^
  File "/export/home1/users/nsr/wyngaard/dev/spikeinterface/spikeinterface/src/spikeinterface/core/job_tools.py", line 377, in run
    worker_ctx = self.init_func(*self.init_args)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/export/home1/users/nsr/wyngaard/dev/spikeinterface/spikeinterface/src/spikeinterface/postprocessing/spike_amplitudes.py", line 186, in _init_worker_spike_amplitudes
    worker_ctx["min_shift"] = np.min(peak_shifts)
                              ^^^^^^^^^^^^^^^^^^^
  File "/users/nsr/wyngaard/dev/miniconda3/envs/lussac/lib/python3.11/site-packages/numpy/core/fromnumeric.py", line 2953, in min
    return _wrapreduction(a, np.minimum, 'min', axis, None, out,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/users/nsr/wyngaard/dev/miniconda3/envs/lussac/lib/python3.11/site-packages/numpy/core/fromnumeric.py", line 88, in _wrapreduction
    return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: zero-size array to reduction operation minimum which has no identity

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in spikeinterface/postprocessing/spike_amplitudes.py, especially compute_spike_amplitudes(), _run(), and _init_worker_spike_amplitudes(), where the traceback reaches np.min(peak_shifts). Reproduce with an empty NumpySorting and waveform extractor using the issue’s example. Done means computing spike amplitudes with no units completes without the zero-size reduction error and performs no unnecessary work.

Written by the indexing model from the issue text.

Assessment

Tech stack
numpy, python
Domain
data
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.