Skip to content

processing_options

Menu options for processing tasks

generate_processing_menu(parent, config, directory=None, scan_files_getter=None, replacement_getter=None)

Generate processing menu options

Source code in mmg_toolbox/tkguis/misc/processing_options.py
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