Skip to content

Commit 4c1208b

Browse files
committed
Fix lasso selection and split shortcut
1 parent 679a692 commit 4c1208b

File tree

10 files changed

+18
-36
lines changed

10 files changed

+18
-36
lines changed

spikeinterface_gui/backend_qt.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,6 @@ def open_help(self):
398398
def refresh(self):
399399
view = self._view()
400400
view.refresh()
401-
402401

403402
areas = {
404403
'right' : QT.Qt.RightDockWidgetArea,

spikeinterface_gui/basescatterview.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def get_selected_spikes_data(self, segment_index=0, visible_inds=None):
6262
selected_indices = np.intersect1d(selected_indices, visible_inds)
6363
mask = np.isin(sl.start + np.arange(len(spikes_in_seg)), selected_indices)
6464
selected_spikes = spikes_in_seg[mask]
65-
spike_times = selected_spikes['sample_index'] / self.controller.sampling_frequency
65+
spike_times = self.controller.sample_index_to_time(selected_spikes['sample_index'])
6666
spike_data = self.spike_data[sl][mask]
6767
return (spike_times, spike_data)
6868

@@ -87,7 +87,7 @@ def select_all_spikes_from_lasso(self, keep_already_selected=False):
8787
if vertices is None:
8888
continue
8989
spike_inds = self.controller.get_spike_indices(visible_unit_id, segment_index=segment_index)
90-
spike_times = self.controller.spikes["sample_index"][spike_inds] / fs
90+
spike_times = self.controller.sample_index_to_time(self.controller.spikes["sample_index"][spike_inds])
9191
spike_data = self.spike_data[spike_inds]
9292

9393
points = np.column_stack((spike_times, spike_data))
@@ -191,9 +191,6 @@ def _qt_make_layout(self):
191191
self.split_but = QT.QPushButton("split")
192192
tb.addWidget(self.split_but)
193193
self.split_but.clicked.connect(self.split)
194-
shortcut_split = QT.QShortcut(self.qt_widget)
195-
shortcut_split.setKey(QT.QKeySequence("ctrl+s"))
196-
shortcut_split.activated.connect(self.split)
197194
h = QT.QHBoxLayout()
198195
self.layout.addLayout(h)
199196

@@ -399,8 +396,8 @@ def _panel_make_layout(self):
399396
self.scatter_fig.toolbar.active_drag = None
400397
self.scatter_fig.xaxis.axis_label = "Time (s)"
401398
self.scatter_fig.yaxis.axis_label = self.y_label
402-
time_max = self.controller.get_num_samples(self.segment_index) / self.controller.sampling_frequency
403-
self.scatter_fig.x_range = Range1d(0., time_max)
399+
t_start, t_end = self.controller.get_t_start_t_end()
400+
self.scatter_fig.x_range = Range1d(t_start, t_end)
404401

405402
# Add SelectionGeometry event handler to capture lasso vertices
406403
self.scatter_fig.on_event('selectiongeometry', self._on_panel_selection_geometry)

spikeinterface_gui/controller.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ def get_times_chunk(self, segment_index, t1, t2):
450450
recording = self.analyzer.recording
451451
times_chunk = recording.get_times(segment_index=segment_index)[ind1:ind2]
452452
else:
453-
times_chunk = np.arange(ind2 - ind1, dtype='float64') / self.controller.sampling_frequency + max(t1, 0)
453+
times_chunk = np.arange(ind2 - ind1, dtype='float64') / self.sampling_frequency + max(t1, 0)
454454
return times_chunk
455455

456456
def get_chunk_indices(self, t1, t2, segment_index):

spikeinterface_gui/curationview.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,9 @@ def _qt_make_layout(self):
6464
from .myqt import QT
6565
import pyqtgraph as pg
6666

67-
6867
self.merge_info = {}
6968
self.layout = QT.QVBoxLayout()
7069

71-
7270
tb = self.qt_widget.view_toolbar
7371
if self.controller.curation_can_be_saved():
7472
but = QT.QPushButton("Save in analyzer")
@@ -92,8 +90,6 @@ def _qt_make_layout(self):
9290
self.table_delete.customContextMenuRequested.connect(self._qt_open_context_menu_delete)
9391
self.table_delete.itemSelectionChanged.connect(self._qt_on_item_selection_changed_delete)
9492

95-
96-
9793
self.delete_menu = QT.QMenu()
9894
act = self.delete_menu.addAction('Restore')
9995
act.triggered.connect(self.restore_units)

spikeinterface_gui/myqt.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
http://mikeboers.com/blog/2015/07/04/static-libraries-in-a-dynamic-world#the-fold
66
"""
77

8-
98
class ModuleProxy(object):
109

1110
def __init__(self, prefixes, modules):

spikeinterface_gui/spikeamplitudeview.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,15 @@ def __init__(self, controller=None, parent=None, backend="qt"):
2828
)
2929

3030
def _qt_make_layout(self):
31+
from .myqt import QT
3132
super()._qt_make_layout()
3233
self.noise_harea = []
3334
if self.settings["noise_level"]:
3435
self._qt_add_noise_area()
36+
# add split shortcut, so that it's not duplicated
37+
shortcut_split = QT.QShortcut(self.qt_widget)
38+
shortcut_split.setKey(QT.QKeySequence("ctrl+s"))
39+
shortcut_split.activated.connect(self.split)
3540

3641
def _qt_refresh(self):
3742
super()._qt_refresh()
@@ -95,4 +100,5 @@ def _panel_add_noise_area(self):
95100
96101
### Controls
97102
- **select** : activate lasso selection to select individual spikes
103+
- **split** or **ctrl+s** : split the selected spikes into a new unit (only if one unit is visible)
98104
"""

spikeinterface_gui/spikedepthview.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ def __init__(self, controller=None, parent=None, backend="qt"):
2525
2626
### Controls
2727
- **select** : activate lasso selection to select individual spikes
28+
- **split** or **ctrl+s** : split the selected spikes into a new unit (only if one unit is visible)
2829
"""

spikeinterface_gui/tests/test_mainwindow_qt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def test_mainwindow(start_app=False, verbose=True, curation=False, only_some_ext
7171
for segment_index in range(analyzer.get_num_segments()):
7272
shift = (segment_index + 1) * 100
7373
# add a gap to times
74-
gap = 1
74+
gap = 5
7575
times = analyzer.recording.get_times(segment_index)
7676
times = times + shift
7777
times[len(times)//2:] += gap # add a gap in the middle

spikeinterface_gui/tracemapview.py

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -143,23 +143,16 @@ def _qt_seek(self, t):
143143
self.scroll_time.setPageStep(int(sr*xsize))
144144
self.scroll_time.valueChanged.connect(self._qt_on_scroll_time)
145145

146-
<<<<<<< HEAD
147146
segment_index = self.controller.get_time()[1]
148-
times_chunk, data_curves, scatter_x, scatter_y, scatter_colors, scatter_unit_ids = \
147+
times_chunk, data_curves, scatter_x, scatter_y, scatter_colors = \
149148
self.get_data_in_chunk(t1, t2, segment_index)
149+
data_curves = data_curves.T
150150

151151
if times_chunk.size == 0:
152152
self.image.hide()
153153
self.scatter.clear()
154154
return
155-
156-
=======
157-
seg_index = self.controller.get_time()[1]
158-
times_chunk, data_curves, scatter_x, scatter_y, scatter_colors = \
159-
self.get_data_in_chunk(t1, t2, seg_index)
160-
data_curves = data_curves.T
161155

162-
>>>>>>> 4d644768f573b50e1ce051e7bc234fc21bc5ab93
163156
if self.color_limit is None:
164157
self.color_limit = np.max(np.abs(data_curves))
165158

@@ -283,14 +276,9 @@ def _panel_refresh(self):
283276
else:
284277
auto_scale = False
285278

286-
<<<<<<< HEAD
287-
times_chunk, data_curves, scatter_x, scatter_y, scatter_colors, scatter_unit_ids = \
288-
self.get_data_in_chunk(t1, t2, segment_index)
289-
=======
290279
times_chunk, data_curves, scatter_x, scatter_y, scatter_colors = \
291280
self.get_data_in_chunk(t1, t2, seg_index)
292281
data_curves = data_curves.T
293-
>>>>>>> 4d644768f573b50e1ce051e7bc234fc21bc5ab93
294282

295283
if self.color_limit is None:
296284
self.color_limit = np.max(np.abs(data_curves))
@@ -320,13 +308,8 @@ def _panel_refresh(self):
320308

321309
# TODO: if from a different unit, change unit visibility
322310
def _panel_on_tap(self, event):
323-
<<<<<<< HEAD
324-
segment_index = self.controller.get_time()[1]
325-
ind_spike_nearest = self.find_nearest_spike(self.controller, event.x, segment_index)
326-
=======
327311
seg_index = self.controller.get_time()[1]
328312
ind_spike_nearest = find_nearest_spike(self.controller, event.x, seg_index)
329-
>>>>>>> 4d644768f573b50e1ce051e7bc234fc21bc5ab93
330313
if ind_spike_nearest is not None:
331314
self.controller.set_indices_spike_selected([ind_spike_nearest])
332315
self._panel_seek_with_selected_spike()

spikeinterface_gui/viewlist.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
from .metricsview import MetricsView
1818
from .spikerateview import SpikeRateView
1919

20+
# probe and mainsettings view are first, since they affect other views (e.g., time info)
2021
possible_class_views = dict(
21-
probe = ProbeView, # probe view is first, since it updates channels upon unit changes
22+
probe = ProbeView,
23+
mainsettings = MainSettingsView,
2224
unitlist = UnitListView,
2325
spikelist = SpikeListView,
2426
merge = MergeView,
@@ -35,5 +37,4 @@
3537
curation = CurationView,
3638
spikerate = SpikeRateView,
3739
metrics = MetricsView,
38-
mainsettings = MainSettingsView,
3940
)

0 commit comments

Comments
 (0)