SpikeInterface / spikeinterface

A Python-based module for creating flexible and robust spike sorting pipelines.
https://spikeinterface.readthedocs.io
MIT License
521 stars 186 forks source link

SpykingCircus 2 missing spikes #2542

Open Antho2422 opened 7 months ago

Antho2422 commented 7 months ago

Hi spikeinterface team, and hi @yger,

I was using SpykingCircus2 on a recording I know and I know that the spike activity is very clean with a good SNR.

However, the results of the sorter are weird : image

A lot of spikes are missed, detected on another channel than the one with very nice activity as you can see on the phy output... Even the spikes waveforms seems to not be centered.

I ran the sorter on a bandpass filtered recording between 300 and 6000Hz and I switched apply preprocessing in the parameters to false. I even tried with Zscore normalization and I get the same results.

Here are my parameters :

name: spykingcircus2

params:
  general:
    ms_before: 2                            # Default : 2
    ms_after: 2                             # Default : 2
    radius_um: 100                          # Default : 100

  waveforms:
    max_spikes_per_unit: 500                # Default : 200
    overwrite: True                         # Default : True
    sparse: True                            # Default : True
    method: 'energy'                        # Default : 'energy'
    threshold: 0.25                         # Default : 0.25

  filtering:
    freq_min: 150                           # Default : 150
    dtype: float32                          # Default : float32

  detection:
    peak_sign: both                         # Default : neg

  selection:
    method: 'smart_sampling_amplitudes'      # Default : 'smart_sampling_amplitudes'
    n_peaks_per_channel: 5000               # Default : 5000
    min_n_peaks: 20000                      # Default : 20000
    select_per_channel: False               # Default : False

  clustering:
    legacy: False                           # Default : False

  matching:
    method: 'circus-omp-svd'                # Default : 'circus-omp-svd'
    method_kwargs: {}                       # Default : {}

  apply_preprocessing: False                # Default : True

  shared_memory: True                       # Default : True

  cache_preprocessing:
    mode: 'memory'                          # Default : 'memory'
    memory_limit: 0.5                       # Default : 0.5
    delete_cache: True                      # Default : True

  multi_units_only: False                   # Default : False

  job_kwargs: {'n_jobs': 0.8}                # Default : {'n_jobs': 0.8}

  debug: False                              # Default : False

I can of course provide the data preprocessed : https://instituteicm-my.sharepoint.com/:f:/g/personal/anthony_pinto_icm-institute_org/EqcA_QR5nHREvj6YmWYim9gBLswTlFfomyn6vbOUT2W-pw?e=x2Ju8u

The threshold of detection was set automatically to : 3.403147543800265

Thank you in advance, Anthony

yger commented 7 months ago

Thanks. I'm on holidays right now but we can discuss that during the wired meeting next week ! SC2 is almost there, but clearly on some data, a too low threshold is not appropriate. Plus be careful, you might have the issue of negative gain, also not handled yet by SC2 if using neuralynx data