Skip to content

Commit df9f4a7

Browse files
committed
Edit copy/past from BaseRecording
1 parent bdc0ff9 commit df9f4a7

2 files changed

Lines changed: 31 additions & 10 deletions

File tree

src/spikeinterface/core/basesorting.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -472,15 +472,15 @@ def frame_slice(self, start_frame, end_frame, check_spike_frames=True):
472472
)
473473
return sub_sorting
474474

475-
def time_slice(self, start_time: float | None, end_time: float) -> BaseSorting:
475+
def time_slice(self, start_time: float | None, end_time: float | None) -> BaseSorting:
476476
"""
477477
Returns a new sorting with sliced time. Note that this operation is not in place.
478478
479479
Parameters
480480
----------
481-
start_time : float, optional
481+
start_time : float | None, default: None
482482
The start time in seconds. If not provided it is set to 0.
483-
end_time : float, optional
483+
end_time : float | None, default: None
484484
The end time in seconds. If not provided it is set to the total duration.
485485
486486
Returns
@@ -491,8 +491,14 @@ def time_slice(self, start_time: float | None, end_time: float) -> BaseSorting:
491491

492492
assert self.get_num_segments() == 1, "Time slicing is only supported for single segment sortings."
493493

494-
start_frame = self.time_to_sample_index(start_time) if start_time else None
495-
end_frame = self.time_to_sample_index(end_time) if end_time else None
494+
if self.has_recording():
495+
start_frame = self._recording.time_to_sample_index(start_time) if start_time else None
496+
end_frame = self._recording.time_to_sample_index(end_time) if end_time else None
497+
else:
498+
segment = self._sorting_segments[0]
499+
t_start = segment._t_start if segment._t_start is not None else 0
500+
start_frame = round((start_time - t_start) * self.get_sampling_frequency())
501+
end_frame = round((end_time - t_start) * self.get_sampling_frequency())
496502

497503
return self.frame_slice(start_frame=start_frame, end_frame=end_frame)
498504

src/spikeinterface/core/tests/test_basesorting.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from spikeinterface.core.testing import check_sorted_arrays_equal, check_sortings_equal
2626
from spikeinterface.core.generate import generate_sorting
2727

28-
from spikeinterface.core import generate_recording
28+
from spikeinterface.core import generate_recording, generate_ground_truth_recording
2929

3030

3131
def test_BaseSorting(create_cache_folder):
@@ -211,12 +211,27 @@ def test_empty_sorting():
211211
def test_time_slice():
212212

213213
sampling_frequency = 10_000.0
214-
recording = generate_recording(durations=[1.0], num_channels=3, sampling_frequency=sampling_frequency)
215214

216-
sliced_recording_times = recording.time_slice(start_time=0.1, end_time=0.8)
217-
sliced_recording_frames = recording.frame_slice(start_frame=1000, end_frame=8000)
215+
# no recording attached to sorting
216+
sorting = generate_sorting(durations=[1.0], sampling_frequency=sampling_frequency)
218217

219-
assert np.allclose(sliced_recording_times.get_traces(), sliced_recording_frames.get_traces())
218+
sliced_sorting_times = sorting.time_slice(start_time=0.1, end_time=0.8)
219+
sliced_sorting_frames = sorting.frame_slice(start_frame=1000, end_frame=8000)
220+
221+
assert np.allclose(
222+
sliced_sorting_times.to_spike_vector()["sample_index"], sliced_sorting_frames.to_spike_vector()["sample_index"]
223+
)
224+
225+
# with recording
226+
recording, sorting = generate_ground_truth_recording(durations=[1.0], sampling_frequency=sampling_frequency)
227+
sorting.register_recording(recording)
228+
229+
sliced_sorting_times = sorting.time_slice(start_time=0.1, end_time=0.8)
230+
sliced_sorting_frames = sorting.frame_slice(start_frame=1000, end_frame=8000)
231+
232+
assert np.allclose(
233+
sliced_sorting_times.to_spike_vector()["sample_index"], sliced_sorting_frames.to_spike_vector()["sample_index"]
234+
)
220235

221236

222237
if __name__ == "__main__":

0 commit comments

Comments
 (0)