From 1af396986e5ec45a42711c2f5fb1502dcb94971c Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Wed, 14 Oct 2026 11:24:11 +0200 Subject: [PATCH 1/2] fix: grid convolution select_peaks --- .../postprocessing/tests/test_spike_locations.py | 2 +- .../sortingcomponents/peak_localization/main.py | 6 ++++++ src/spikeinterface/sortingcomponents/tools.py | 9 +++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/spikeinterface/postprocessing/tests/test_spike_locations.py b/src/spikeinterface/postprocessing/tests/test_spike_locations.py index 09d2ce5a91..3810a470be 100644 --- a/src/spikeinterface/postprocessing/tests/test_spike_locations.py +++ b/src/spikeinterface/postprocessing/tests/test_spike_locations.py @@ -12,7 +12,7 @@ class TestSpikeLocationsExtension(AnalyzerExtensionCommonTestSuite): dict(method="center_of_mass", spike_retriever_kwargs=dict(channel_from_template=True)), dict(method="center_of_mass", spike_retriever_kwargs=dict(channel_from_template=False)), dict(method="monopolar_triangulation"), - dict(method="grid_convolution"), + dict(method="grid_convolution", method_kwargs=dict(n_peaks=100)), ], ) def test_extension(self, params): diff --git a/src/spikeinterface/sortingcomponents/peak_localization/main.py b/src/spikeinterface/sortingcomponents/peak_localization/main.py index ffbdb5973d..018be36c01 100644 --- a/src/spikeinterface/sortingcomponents/peak_localization/main.py +++ b/src/spikeinterface/sortingcomponents/peak_localization/main.py @@ -60,6 +60,11 @@ def get_localization_pipeline_nodes( # How do you get peaks method_kwargs = method_kwargs.copy() + n_peaks = method_kwargs.pop("n_peaks") + if n_peaks is not None: + prototype_extra_kwargs = {"n_peaks": n_peaks} + else: + prototype_extra_kwargs = {} method_kwargs["prototype"], _, _ = get_prototype_and_waveforms_from_peaks( recording, peaks=peaks_or_spikes, @@ -68,6 +73,7 @@ def get_localization_pipeline_nodes( channel_index_array=channel_index_array, job_kwargs=job_kwargs, seed=seed, + **prototype_extra_kwargs, ) localization_nodes = method_class(recording, parents=[peak_source, extract_dense_waveforms], **method_kwargs) diff --git a/src/spikeinterface/sortingcomponents/tools.py b/src/spikeinterface/sortingcomponents/tools.py index 75161725a5..4799cd2632 100644 --- a/src/spikeinterface/sortingcomponents/tools.py +++ b/src/spikeinterface/sortingcomponents/tools.py @@ -130,15 +130,20 @@ def get_prototype_and_waveforms_from_peaks( nbefore = ms_to_samples(ms_before, recording.sampling_frequency) nafter = ms_to_samples(ms_after, recording.sampling_frequency) - few_peaks = select_peaks( + few_peaks, few_indices = select_peaks( peaks, recording=recording, method="uniform", n_peaks=n_peaks, margin=(nbefore, nafter), channel_index_array=channel_index_array, + return_indices=True, seed=seed, ) + if channel_index_array is not None: + few_channel_index_array = channel_index_array[few_indices] + else: + few_channel_index_array = None waveforms = extract_waveform_at_max_channel( recording, few_peaks, @@ -146,7 +151,7 @@ def get_prototype_and_waveforms_from_peaks( ms_after=ms_after, job_kwargs=job_kwargs, job_name="waveform prototype", - channel_index_array=channel_index_array, + channel_index_array=few_channel_index_array, ) with np.errstate(divide="ignore", invalid="ignore"): From 7a468b10e84efef30f68d1648295ab6ce08c9177 Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Wed, 14 Oct 2026 11:46:01 +0200 Subject: [PATCH 2/2] fix: pop('n_peaks') should default to None --- src/spikeinterface/sortingcomponents/peak_localization/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spikeinterface/sortingcomponents/peak_localization/main.py b/src/spikeinterface/sortingcomponents/peak_localization/main.py index 018be36c01..d75f4a8a55 100644 --- a/src/spikeinterface/sortingcomponents/peak_localization/main.py +++ b/src/spikeinterface/sortingcomponents/peak_localization/main.py @@ -60,7 +60,7 @@ def get_localization_pipeline_nodes( # How do you get peaks method_kwargs = method_kwargs.copy() - n_peaks = method_kwargs.pop("n_peaks") + n_peaks = method_kwargs.pop("n_peaks", None) if n_peaks is not None: prototype_extra_kwargs = {"n_peaks": n_peaks} else: