def generate_processing_menu(parent, config: dict, directory: str | None = None, scan_files_getter=None,
replacement_getter=None) -> dict:
"""Generate processing menu options"""
directory = directory or config[C.current_dir]
proc_dir = config.get(C.current_proc) or get_processing_directory(directory)
nb_dir = config.get(C.current_nb) or get_notebook_directory(directory)
if scan_files_getter is None:
scan_files_getter = lambda: []
if replacement_getter is None:
replacement_getter = lambda: {}
def start_multi_scan_plot():
filenames = scan_files_getter()
scan_numbers = [get_scan_number(f) for f in filenames]
create_multi_scan_analysis(parent, config, exp_directory=directory, scan_numbers=scan_numbers)
def replacements():
values = {
R.exp: directory,
R.proc: proc_dir,
R.filepaths: ', '.join(f"'{f}'" for f in scan_files_getter()),
R.beamline: config.get(C.beamline, ''),
R.value: config.get(C.default_metadata, ''),
}
values.update(replacement_getter())
return values
scripts = {
name: lambda n=name: create_script_from_template(parent, n, directory, config, **replacements())
for name in SCRIPTS
}
notebooks = {
name: lambda n=name: create_notebook_from_template(parent, n, directory, config, **replacements())
for name in NOTEBOOKS
}
menu = {
'Multi-Scan': start_multi_scan_plot,
'Script Editor': lambda: create_python_editor(None, parent, config),
'Open a terminal': lambda: open_terminal(f"cd {directory}"),
'Start Jupyter (processing)': lambda: launch_jupyter_notebook('notebook', proc_dir),
'Start Jupyter (notebooks)': lambda: launch_jupyter_notebook('notebook', nb_dir),
'Stop Jupyter servers': terminate_notebooks,
'Create Script:': scripts,
'Create Notebook:': notebooks,
}
return menu