@@ -138,16 +138,20 @@ def run_mainwindow(
138138 return win
139139
140140
141- def run_launcher (mode = "desktop" , analyzer_folders = None , address = "localhost" , port = 0 , verbose = False ):
141+
142+ def run_launcher (mode = "desktop" , analyzer_folders = None , root_folder = None , address = "localhost" , port = 0 , verbose = False ):
142143 """
143144 Run the launcher for the SpikeInterface GUI.
144145
145146 Parameters
146147 ----------
147148 mode: 'desktop' | 'app', default: 'desktop'
148149 The backend to use for the GUI.
149- analyzer_folders: list of str | None, default: None
150- List of analyzer folders to load. If str, it is a single folder and subfolders are searched.
150+ analyzer_folders: list of str | dict | None, default: None
151+ List of analyzer folders to load.
152+ root_folder: str|Path| None
153+ A folder that is explore to construct the list of analyzers.
154+ When not None analyzer_folders must be None.
151155 address: str, default: "localhost"
152156 The address to use for the web mode. Default is "localhost".
153157 Use "auto-ip" to use the real IP address of the machine.
@@ -161,7 +165,7 @@ def run_launcher(mode="desktop", analyzer_folders=None, address="localhost", por
161165 if mode == "desktop" :
162166 from .myqt import QT , mkQApp
163167 app = mkQApp ()
164- launcher = Launcher (analyzer_folders = analyzer_folders , backend = "qt" , verbose = verbose )
168+ launcher = Launcher (analyzer_folders = analyzer_folders , root_folder = root_folder , backend = "qt" , verbose = verbose )
165169 app .exec ()
166170
167171 elif mode == "web" :
@@ -171,7 +175,7 @@ def run_launcher(mode="desktop", analyzer_folders=None, address="localhost", por
171175 from spikeinterface_gui .launcher import panel_gui_view
172176 from spikeinterface_gui .backend_panel import start_server
173177
174- launcher = Launcher (analyzer_folders = analyzer_folders , backend = "panel" , verbose = verbose )
178+ launcher = Launcher (analyzer_folders = analyzer_folders , root_folder = root_folder , backend = "panel" , verbose = verbose )
175179
176180 server , address , port , _ = start_server (
177181 {"/launcher" : launcher .layout , "/gui" : panel_gui_view },
@@ -202,7 +206,13 @@ def check_folder_is_analyzer(folder):
202206 bool
203207 True if the folder is a valid SortingAnalyzer folder, False otherwise.
204208 """
209+ if not isinstance (folder , (str , Path )):
210+ return False
211+
205212 folder = Path (folder )
213+ if not folder .is_dir ():
214+ return False
215+
206216 if not str (folder ).endswith (".zarr" ):
207217 spikeinterface_info_file = folder / 'spikeinterface_info.json'
208218 if not spikeinterface_info_file .exists ():
@@ -217,10 +227,8 @@ def check_folder_is_analyzer(folder):
217227 else : #zarr folder
218228 import zarr
219229 # Check if the folder contains the necessary files for a SortingAnalyzer
220- if not folder .exists ():
221- return False
222230 zarr_root = zarr .open (folder , mode = 'r' )
223- spikeinterface_info = zarr_root .get ('spikeinterface_info' )
231+ spikeinterface_info = zarr_root .attrs . get ('spikeinterface_info' )
224232 if spikeinterface_info is None :
225233 return False
226234 if spikeinterface_info .get ("object" ) != "SortingAnalyzer" :
@@ -234,7 +242,7 @@ def run_mainwindow_cli():
234242
235243 parser = argparse .ArgumentParser (description = 'spikeinterface-gui' )
236244 parser .add_argument ('analyzer_folder' , help = 'SortingAnalyzer folder path' , default = None , nargs = '?' )
237- parser .add_argument ('--analyzer-folders ' , help = 'Base folder for launcher mode with multiple analyzer folders' , default = None )
245+ parser .add_argument ('--root-folder ' , help = 'Base folder for launcher mode with multiple analyzer folders' , default = None )
238246 parser .add_argument ('--mode' , help = 'Mode desktop or web' , default = 'desktop' )
239247 parser .add_argument ('--no-traces' , help = 'Do not show traces' , action = 'store_true' , default = False )
240248 parser .add_argument ('--curation' , help = 'Enable curation panel' , action = 'store_true' , default = False )
@@ -248,9 +256,9 @@ def run_mainwindow_cli():
248256
249257 analyzer_folder = args .analyzer_folder
250258 if analyzer_folder is None :
251- print ( 'Running launcher...' )
252- analyzer_folders = args . analyzer_folders
253- run_launcher (analyzer_folders = analyzer_folders , mode = args .mode , address = args .address , port = args .port , verbose = args .verbose )
259+ if args . verbose :
260+ print ( 'Running launcher...' )
261+ run_launcher (root_folder = args . root_folder , mode = args .mode , address = args .address , port = args .port , verbose = args .verbose )
254262 else :
255263 if args .verbose :
256264 print ('Loading analyzer...' )
0 commit comments