77
88from spikeinterface import load_sorting_analyzer , load
99from spikeinterface .core .core_tools import is_path_remote
10+ from spikeinterface .core .sortinganalyzer import get_available_analyzer_extensions
1011from .utils_global import get_config_folder
12+ from spikeinterface_gui .layout_presets import get_layout_description
1113
1214import spikeinterface_gui
1315from spikeinterface_gui .controller import Controller
14-
16+ from spikeinterface_gui . viewlist import possible_class_views
1517
1618def run_mainwindow (
1719 analyzer ,
@@ -121,6 +123,11 @@ def run_mainwindow(
121123 if verbose :
122124 import time
123125 t0 = time .perf_counter ()
126+
127+ layout_dict = get_layout_description (layout_preset , layout )
128+ if skip_extensions is None :
129+ skip_extensions = find_skippable_extensions (layout_dict )
130+
124131 controller = Controller (
125132 analyzer , backend = backend , verbose = verbose ,
126133 curation = curation , curation_data = curation_dict ,
@@ -146,7 +153,7 @@ def run_mainwindow(
146153
147154 app = mkQApp ()
148155
149- win = QtMainWindow (controller , layout_preset = layout_preset , layout = layout , user_settings = user_settings )
156+ win = QtMainWindow (controller , layout_dict = layout_dict , user_settings = user_settings )
150157 win .setWindowTitle ('SpikeInterface GUI' )
151158 # Set window icon
152159 icon_file = Path (__file__ ).absolute ().parent / 'img' / 'si.png'
@@ -158,7 +165,7 @@ def run_mainwindow(
158165
159166 elif backend == "panel" :
160167 from .backend_panel import PanelMainWindow , start_server
161- win = PanelMainWindow (controller , layout_preset = layout_preset , layout = layout , user_settings = user_settings )
168+ win = PanelMainWindow (controller , layout_dict = layout_dict , user_settings = user_settings )
162169
163170 if start_app or panel_window_servable :
164171 win .main_layout .servable (title = 'SpikeInterface GUI' )
@@ -349,3 +356,25 @@ def run_mainwindow_cli():
349356 disable_save_settings_button = disable_save_settings_button ,
350357 )
351358
359+ def find_skippable_extensions (layout_dict ):
360+ """
361+ Returns the extensions which don't need to be loaded, depending on which views the user
362+ wants to load. Does this by taking all possible extensions, then removing any which are
363+ needed by a view.
364+ """
365+
366+ all_extensions = set (get_available_analyzer_extensions ())
367+
368+ view_per_zone = list (layout_dict .values ())
369+ list_of_views = [view for zone_views in view_per_zone for view in zone_views ]
370+
371+ needed_extensions = ['unit_locations' ]
372+
373+ for view in list_of_views :
374+ extensions_view_depend_on = possible_class_views [view ]._depend_on
375+ if extensions_view_depend_on is not None :
376+ needed_extensions += extensions_view_depend_on
377+
378+ skippable_extensions = list (all_extensions .difference (set (needed_extensions )))
379+
380+ return skippable_extensions
0 commit comments