Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions spikeinterface_gui/backend_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,9 @@ def listen_setting_changes(view):

class PanelMainWindow:

def __init__(self, controller, layout_preset=None, layout=None, user_settings=None):
def __init__(self, controller, layout_dict=None, user_settings=None):
self.controller = controller
self.layout_preset = layout_preset
self.layout = layout
self.layout_dict = layout_dict
self.verbose = controller.verbose

self.make_views(user_settings)
Expand Down Expand Up @@ -258,7 +257,7 @@ def create_main_layout(self):

pn.extension("gridstack")

preset = get_layout_description(self.layout_preset, self.layout)
preset = self.layout_dict

layout_zone = {}
for zone, view_names in preset.items():
Expand Down
7 changes: 3 additions & 4 deletions spikeinterface_gui/backend_qt.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,13 +141,12 @@ def stop_listen_setting_changes(view):
class QtMainWindow(QT.QMainWindow):
main_window_closed = QT.pyqtSignal(object)

def __init__(self, controller, parent=None, layout_preset=None, layout=None, user_settings=None):
def __init__(self, controller, parent=None, layout_dict=None, user_settings=None):
QT.QMainWindow.__init__(self, parent)

self.controller = controller
self.verbose = controller.verbose
self.layout_preset = layout_preset
self.layout = layout
self.layout_dict = layout_dict

self.make_views(user_settings)
self.create_main_layout()
Expand Down Expand Up @@ -206,7 +205,7 @@ def create_main_layout(self):

self.setDockNestingEnabled(True)

preset = get_layout_description(self.layout_preset, self.layout)
preset = self.layout_dict

widgets_zone = {}
for zone, view_names in preset.items():
Expand Down
2 changes: 1 addition & 1 deletion spikeinterface_gui/layout_presets.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def _check_valid_layout_dict(layout_dict):
list_of_possible_class_views = list(possible_class_views.keys())
if class_view not in list_of_possible_class_views:
raise KeyError(f"View '{class_view}' in layout dictionary not equal to a valid View. "\
"Valid views are {list_of_possible_class_views}")
f"Valid views are {list_of_possible_class_views}")

def get_layout_description(preset_name, layout=None):
if isinstance(layout, dict):
Expand Down
35 changes: 32 additions & 3 deletions spikeinterface_gui/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@

from spikeinterface import load_sorting_analyzer, load
from spikeinterface.core.core_tools import is_path_remote
from spikeinterface.core.sortinganalyzer import get_available_analyzer_extensions
from .utils_global import get_config_folder
from spikeinterface_gui.layout_presets import get_layout_description

import spikeinterface_gui
from spikeinterface_gui.controller import Controller

from spikeinterface_gui.viewlist import possible_class_views

def run_mainwindow(
analyzer,
Expand Down Expand Up @@ -121,6 +123,11 @@ def run_mainwindow(
if verbose:
import time
t0 = time.perf_counter()

layout_dict = get_layout_description(layout_preset, layout)
if skip_extensions is None:
skip_extensions = find_skippable_extensions(layout_dict)

controller = Controller(
analyzer, backend=backend, verbose=verbose,
curation=curation, curation_data=curation_dict,
Expand All @@ -146,7 +153,7 @@ def run_mainwindow(

app = mkQApp()

win = QtMainWindow(controller, layout_preset=layout_preset, layout=layout, user_settings=user_settings)
win = QtMainWindow(controller, layout_dict=layout_dict, user_settings=user_settings)
win.setWindowTitle('SpikeInterface GUI')
# Set window icon
icon_file = Path(__file__).absolute().parent / 'img' / 'si.png'
Expand All @@ -158,7 +165,7 @@ def run_mainwindow(

elif backend == "panel":
from .backend_panel import PanelMainWindow, start_server
win = PanelMainWindow(controller, layout_preset=layout_preset, layout=layout, user_settings=user_settings)
win = PanelMainWindow(controller, layout_dict=layout_dict, user_settings=user_settings)

if start_app or panel_window_servable:
win.main_layout.servable(title='SpikeInterface GUI')
Expand Down Expand Up @@ -349,3 +356,25 @@ def run_mainwindow_cli():
disable_save_settings_button=disable_save_settings_button,
)

def find_skippable_extensions(layout_dict):
"""
Returns the extensions which don't need to be loaded, depending on which views the user
wants to load. Does this by taking all possible extensions, then removing any which are
needed by a view.
"""

all_extensions = set(get_available_analyzer_extensions())

view_per_zone = list(layout_dict.values())
list_of_views = [view for zone_views in view_per_zone for view in zone_views]

needed_extensions = ['unit_locations']

for view in list_of_views:
extensions_view_depend_on = possible_class_views[view]._depend_on
if extensions_view_depend_on is not None:
needed_extensions += extensions_view_depend_on

skippable_extensions = list(all_extensions.difference(set(needed_extensions)))

return skippable_extensions