From 2b820bf7244f5d8d4b43c87df03d23dfe5828922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20WYNGAARD?= Date: Mon, 6 Nov 2023 12:30:00 +0100 Subject: [PATCH 1/3] Improvement to `get_empty_units()` --- src/spikeinterface/core/basesorting.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/spikeinterface/core/basesorting.py b/src/spikeinterface/core/basesorting.py index 94b08d8cc3..319fc7cb12 100644 --- a/src/spikeinterface/core/basesorting.py +++ b/src/spikeinterface/core/basesorting.py @@ -364,16 +364,12 @@ def remove_empty_units(self): return self.select_units(non_empty_units) def get_non_empty_unit_ids(self): - non_empty_units = [] - for segment_index in range(self.get_num_segments()): - for unit in self.get_unit_ids(): - if len(self.get_unit_spike_train(unit, segment_index=segment_index)) > 0: - non_empty_units.append(unit) - non_empty_units = np.unique(non_empty_units) - return non_empty_units + num_spikes_per_unit = self.count_num_spikes_per_unit() + + return np.array([unit_id for unit_id in self.unit_ids if num_spikes_per_unit[unit_id] == 0]) def get_empty_unit_ids(self): - unit_ids = self.get_unit_ids() + unit_ids = self.unit_ids empty_units = unit_ids[~np.isin(unit_ids, self.get_non_empty_unit_ids())] return empty_units From 23d2d89858b70cd046f8a3a043b93a11ff2234cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20WYNGAARD?= Date: Mon, 6 Nov 2023 12:37:43 +0100 Subject: [PATCH 2/3] oops --- src/spikeinterface/core/basesorting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spikeinterface/core/basesorting.py b/src/spikeinterface/core/basesorting.py index 319fc7cb12..87507f799e 100644 --- a/src/spikeinterface/core/basesorting.py +++ b/src/spikeinterface/core/basesorting.py @@ -366,7 +366,7 @@ def remove_empty_units(self): def get_non_empty_unit_ids(self): num_spikes_per_unit = self.count_num_spikes_per_unit() - return np.array([unit_id for unit_id in self.unit_ids if num_spikes_per_unit[unit_id] == 0]) + return np.array([unit_id for unit_id in self.unit_ids if num_spikes_per_unit[unit_id] != 0]) def get_empty_unit_ids(self): unit_ids = self.unit_ids From a4ce54a212b7d5a946d125328b0f0760cfd8bd85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20WYNGAARD?= Date: Wed, 8 Nov 2023 13:33:01 +0100 Subject: [PATCH 3/3] Better docstring for empty units --- src/spikeinterface/core/basesorting.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/spikeinterface/core/basesorting.py b/src/spikeinterface/core/basesorting.py index 87507f799e..a43eaf6090 100644 --- a/src/spikeinterface/core/basesorting.py +++ b/src/spikeinterface/core/basesorting.py @@ -353,7 +353,8 @@ def remove_units(self, remove_unit_ids): def remove_empty_units(self): """ - Removes units with empty spike trains + Removes units with empty spike trains. + For multi-segments, a unit is considered empty if it contains no spikes in all segments. Returns -------