From c6987b6ec220ab98690b10bdbeef9823a0c7ed8a Mon Sep 17 00:00:00 2001 From: wakonig_k Date: Tue, 11 Jun 2024 10:12:48 +0200 Subject: [PATCH] feat(scan_server): added support for additional gui config --- bec_lib/bec_lib/signature_serializer.py | 4 +- .../bec_server/scan_server/scan_gui_models.py | 239 +++++++++++++++++ .../bec_server/scan_server/scan_manager.py | 28 ++ bec_server/bec_server/scan_server/scans.py | 50 +++- .../tests_scan_server/test_scan_gui_models.py | 244 ++++++++++++++++++ docs/source/assets/scan_GUI_example.png | Bin 0 -> 111002 bytes .../source/developer/scans/scan_gui_config.md | 136 ++++++++++ 7 files changed, 696 insertions(+), 5 deletions(-) create mode 100644 bec_server/bec_server/scan_server/scan_gui_models.py create mode 100644 bec_server/tests/tests_scan_server/test_scan_gui_models.py create mode 100644 docs/source/assets/scan_GUI_example.png create mode 100644 docs/source/developer/scans/scan_gui_config.md diff --git a/bec_lib/bec_lib/signature_serializer.py b/bec_lib/bec_lib/signature_serializer.py index 7adb77b0..f03ca588 100644 --- a/bec_lib/bec_lib/signature_serializer.py +++ b/bec_lib/bec_lib/signature_serializer.py @@ -96,7 +96,7 @@ def deserialize_dtype(dtype: Any) -> type: return ScanItem -def signature_to_dict(func: Callable, include_class_obj=False) -> dict: +def signature_to_dict(func: Callable, include_class_obj=False) -> list[dict]: """ Convert a function signature to a dictionary. The dictionary can be used to reconstruct the signature using dict_to_signature. @@ -105,7 +105,7 @@ def signature_to_dict(func: Callable, include_class_obj=False) -> dict: func (Callable): Function to be converted Returns: - dict: Dictionary representation of the function signature + list[dict]: List of dictionaries representing the function signature """ out = [] params = inspect.signature(func).parameters diff --git a/bec_server/bec_server/scan_server/scan_gui_models.py b/bec_server/bec_server/scan_server/scan_gui_models.py new file mode 100644 index 00000000..3abbb22f --- /dev/null +++ b/bec_server/bec_server/scan_server/scan_gui_models.py @@ -0,0 +1,239 @@ +from __future__ import annotations + +import re +from contextvars import ContextVar +from typing import Any, Literal, Optional, Type + +from pydantic import BaseModel, Field, field_validator +from pydantic_core import PydanticCustomError + +from bec_lib.signature_serializer import signature_to_dict +from bec_server.scan_server.scans import ScanBase + +context_signature = ContextVar("context_signature") +context_docstring = ContextVar("context_docstring") + + +class GUIInput(BaseModel): + """ + InputConfig is a data model for the input configuration of a scan. + + Args: + name (str): name of the input, has to be same as in the function signature. + """ + + arg: bool = Field(False) + name: str = Field(None, validate_default=True) + type: Optional[ + Literal["DeviceBase", "device", "float", "int", "bool", "str", "list", "dict"] + ] = Field(None, validate_default=True) + display_name: Optional[str] = Field(None, validate_default=True) + tooltip: Optional[str] = Field(None, validate_default=True) + default: Optional[Any] = Field(None, validate_default=True) + expert: Optional[bool] = Field(False) # TODO decide later how to implement + + @field_validator("name") + @classmethod + def validate_name(cls, v, values): + # args cannot be validated with the current implementation of signature of scans + if values.data["arg"]: + return v + signature = context_signature.get() + available_args = [entry["name"] for entry in signature] + if v not in available_args: + raise PydanticCustomError( + "wrong argument name", + "The argument name is not available in the function signature", + {"wrong_value": v}, + ) + return v + + @field_validator("type") + @classmethod + def validate_field(cls, v, values): + # args cannot be validated with the current implementation of signature of scans + if values.data["arg"]: + return v + signature = context_signature.get() + if v is None: + name = values.data.get("name", None) + if name is None: + raise PydanticCustomError( + "missing argument name", + "The argument name is required to infer the type", + {"wrong_value": v}, + ) + for entry in signature: + if entry["name"] == name: + v = entry["annotation"] + return v + + @field_validator("tooltip") + @classmethod + def validate_tooltip(cls, v, values): + # args cannot be validated with the current implementation of signature of scans + if values.data["arg"]: + return v + if v is not None: + return v + + docstring = context_docstring.get() + name = values.data.get("name", None) + if name is None: + raise PydanticCustomError( + "missing argument name", + "The argument name is required to infer the tooltip", + {"wrong_value": v}, + ) + + try: + args_part = docstring.split("Args:")[1].split("Returns:")[0] + except IndexError: + return None + + pattern = re.compile(r"\s*" + re.escape(name) + r" \(([^)]+)\): (.+?)(?:\.|\n|$)") + match = pattern.search(args_part) + + if match: + description = match.group(2) + first_sentence = description.split(".")[0].strip() + if first_sentence: + v = first_sentence[0].upper() + first_sentence[1:] + return v + return None + + @field_validator("display_name") + @classmethod + def validate_display_name(cls, v, values): + if v is not None: + return v + name = values.data.get("name", None) + if name is None: + raise PydanticCustomError( + "missing argument name", + "The argument name is required to infer the display name", + {"wrong_value": v}, + ) + parts = re.split("(_|\d+)", name) + formatted_parts = [] + for part in parts: + if part.isdigit(): + formatted_parts.append("" + part) + elif part.isalpha(): + formatted_parts.append(part.capitalize()) + v = " ".join(formatted_parts).strip() + return v + + @field_validator("default") + @classmethod + def validate_default(cls, v, values): + # args cannot be validated with the current implementation of signature of scans + if values.data["arg"]: + return v + if v is not None: + return v + signature = context_signature.get() + name = values.data.get("name", None) + if name is None: + raise PydanticCustomError( + "missing argument name", + "The argument name is required to infer the type", + {"wrong_value": v}, + ) + for entry in signature: + if entry["name"] == name: + v = entry["default"] + return v + + +class GUIGroup(BaseModel): + """ + GUIGroup is a data model for the GUI group configuration of a scan. + """ + + name: str + inputs: list[GUIInput] + + +class GUIArgGroup(BaseModel): + """ + GUIArgGroup is a data model for the GUI group configuration of a scan. + """ + + name: str = "Scan Arguments" + bundle: int = Field(None) + arg_inputs: dict + inputs: Optional[list[GUIInput]] = Field(None, validate_default=True) + min: Optional[int] = Field(None) + max: Optional[int] = Field(None) + + @field_validator("inputs") + @classmethod + def validate_inputs(cls, v, values): + if v is not None: + return v + arg_inputs = values.data["arg_inputs"] + arg_inputs_str = {key: value.value for key, value in arg_inputs.items()} + v = [] + for name, type_ in arg_inputs_str.items(): + v.append(GUIInput(name=name, type=type_, arg=True)) + return v + + +class GUIConfig(BaseModel): + """ + GUIConfig is a data model for the GUI configuration of a scan. + """ + + scan_class_name: str + arg_group: Optional[GUIArgGroup] = Field(None) + kwarg_groups: list[GUIGroup] = Field(None) + signature: list[dict] = Field(..., exclude=True) + docstring: str = Field(..., exclude=True) + + @classmethod + def from_dict(cls, scan_cls: Type[ScanBase]) -> GUIConfig: + """ + Create a GUIConfig object from a scan class. + + Args: + scan_cls(Type[ScanBase]): scan class + + Returns: + GUIConfig: GUIConfig object + """ + + groups = [] + config = scan_cls.gui_config + signature = signature_to_dict(scan_cls.__init__) + signature_token = context_signature.set(signature) + docstring = scan_cls.__doc__ or scan_cls.__init__.__doc__ + docstring_token = context_docstring.set(docstring) + # kwargs from gui config + for group_name, input_names in config.items(): + inputs = [GUIInput(name=name, arg=False) for name in input_names] + group = GUIGroup(name=group_name, inputs=inputs) + groups.append(group) + # args from arg_input if available + arg_group = None + if hasattr(scan_cls, "arg_input"): + arg_input = scan_cls.arg_input + if hasattr(scan_cls, "arg_bundle_size"): + arg_group = GUIArgGroup( + bundle=scan_cls.arg_bundle_size.get("bundle"), + min=scan_cls.arg_bundle_size.get("min"), + max=scan_cls.arg_bundle_size.get("max"), + arg_inputs=arg_input, + ) + else: + arg_group = GUIArgGroup(inputs=scan_cls.arg_input) + + context_signature.reset(signature_token) + context_docstring.reset(docstring_token) + return cls( + scan_class_name=scan_cls.__name__, + signature=signature, + docstring=docstring, + kwarg_groups=groups, + arg_group=arg_group, + ) diff --git a/bec_server/bec_server/scan_server/scan_manager.py b/bec_server/bec_server/scan_server/scan_manager.py index 02cb34aa..a9c6338f 100644 --- a/bec_server/bec_server/scan_server/scan_manager.py +++ b/bec_server/bec_server/scan_server/scan_manager.py @@ -10,6 +10,7 @@ from bec_lib.endpoints import MessageEndpoints from bec_lib.logger import bec_logger from bec_lib.messages import AvailableResourceMessage from bec_lib.signature_serializer import signature_to_dict +from bec_server.scan_server.scan_gui_models import GUIConfig from . import scans as ScanServerScans @@ -79,16 +80,43 @@ class ScanManager: if issubclass(scan_cls, report_cls): base_cls = report_cls.__name__ self.scan_dict[scan_cls.__name__] = scan_cls + gui_config = self.validate_gui_config(scan_cls) self.available_scans[scan_cls.scan_name] = { "class": scan_cls.__name__, "base_class": base_cls, "arg_input": self.convert_arg_input(scan_cls.arg_input), + "gui_config": gui_config, "required_kwargs": scan_cls.required_kwargs, "arg_bundle_size": scan_cls.arg_bundle_size, "doc": scan_cls.__doc__ or scan_cls.__init__.__doc__, "signature": signature_to_dict(scan_cls.__init__), } + def validate_gui_config(self, scan_cls) -> dict: + """ + Validate the gui_config of the scan class + + Args: + scan_cls: class + + Returns: + dict: gui_config + """ + + if not hasattr(scan_cls, "gui_config"): + return {} + if not isinstance(scan_cls.gui_config, GUIConfig) and not isinstance( + scan_cls.gui_config, dict + ): + logger.error( + f"Invalid gui_config for {scan_cls.scan_name}. gui_config must be of type GUIConfig or dict." + ) + return {} + gui_config = scan_cls.gui_config + if isinstance(scan_cls.gui_config, dict): + gui_config = GUIConfig.from_dict(scan_cls) + return gui_config.model_dump() + def convert_arg_input(self, arg_input) -> dict: """ Convert the arg_input to supported data types diff --git a/bec_server/bec_server/scan_server/scans.py b/bec_server/bec_server/scan_server/scans.py index ce14b925..ae1b25f0 100644 --- a/bec_server/bec_server/scan_server/scans.py +++ b/bec_server/bec_server/scan_server/scans.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import ast import enum import threading @@ -184,6 +186,7 @@ class RequestBase(ABC): scan_name = "" arg_input = {} arg_bundle_size = {"bundle": len(arg_input), "min": None, "max": None} + gui_args = {} required_kwargs = [] return_to_start_after_abort = False use_scan_progress_report = False @@ -779,6 +782,9 @@ class Scan(ScanBase): } arg_bundle_size = {"bundle": len(arg_input), "min": 2, "max": None} required_kwargs = ["relative"] + gui_config = { + "Scan Parameters": ["exp_time", "settling_time", "burst_at_each_point", "relative"] + } def __init__( self, @@ -827,6 +833,12 @@ class Scan(ScanBase): class FermatSpiralScan(ScanBase): scan_name = "fermat_scan" required_kwargs = ["step", "relative"] + gui_config = { + "Device 1": ["motor1", "start_motor1", "stop_motor1"], + "Device 2": ["motor2", "start_motor2", "stop_motor2"], + "Movement Parameters": ["step", "relative"], + "Acquisition Parameters": ["exp_time", "settling_time", "burst_at_each_point"], + } def __init__( self, @@ -854,6 +866,7 @@ class FermatSpiralScan(ScanBase): stop_motor1 (float): end position motor 1 motor2 (DeviceBase): second motor start_motor2 (float): start position motor 2 + stop_motor2 (float): end position motor 2 step (float): step size in motor units. Default is 0.1. exp_time (float): exposure time in seconds. Default is 0. settling_time (float): settling time in seconds. Default is 0. @@ -901,11 +914,16 @@ class FermatSpiralScan(ScanBase): class RoundScan(ScanBase): scan_name = "round_scan" required_kwargs = ["relative"] + gui_config = { + "Motors": ["motor_1", "motor_2"], + "Ring Parameters": ["inner_ring", "outer_ring", "number_of_rings", "pos_in_first_ring"], + "Scan Parameters": ["relative", "burst_at_each_point"], + } def __init__( self, motor_1: DeviceBase, - motor2: DeviceBase, + motor_2: DeviceBase, inner_ring: float, outer_ring: float, number_of_rings: int, @@ -919,7 +937,7 @@ class RoundScan(ScanBase): Args: motor_1 (DeviceBase): first motor - motor2 (DeviceBase): second motor + motor_2 (DeviceBase): second motor inner_ring (float): inner radius outer_ring (float): outer radius number_of_rings (int): number of rings @@ -937,7 +955,7 @@ class RoundScan(ScanBase): super().__init__(relative=relative, burst_at_each_point=burst_at_each_point, **kwargs) self.axis = [] self.motor_1 = motor_1 - self.motor_2 = motor2 + self.motor_2 = motor_2 self.inner_ring = inner_ring self.outer_ring = outer_ring self.number_of_rings = number_of_rings @@ -960,6 +978,11 @@ class ContLineScan(ScanBase): scan_name = "cont_line_scan" required_kwargs = ["steps", "relative"] scan_type = "step" + gui_config = { + "Device": ["device", "start", "stop"], + "Movement Parameters": ["steps", "relative", "offset"], + "Acquisition Parameters": ["exp_time", "burst_at_each_point"], + } def __init__( self, @@ -1039,6 +1062,7 @@ class ContLineFlyScan(AsyncFlyScanBase): scan_name = "cont_line_fly_scan" required_kwargs = [] use_scan_progress_report = False + gui_config = {"Device": ["motor", "start", "stop"], "Scan Parameters": ["exp_time", "relative"]} def __init__( self, @@ -1122,6 +1146,10 @@ class RoundScanFlySim(SyncFlyScanBase): scan_type = "fly" pre_move = False required_kwargs = ["relative"] + gui_config = { + "Fly Parameters": ["flyer", "relative"], + "Ring Parameters": ["inner_ring", "outer_ring", "number_of_rings", "number_pos"], + } def __init__( self, @@ -1130,6 +1158,7 @@ class RoundScanFlySim(SyncFlyScanBase): outer_ring: float, number_of_rings: int, number_pos: int, + relative: bool = False, **kwargs, ): """ @@ -1210,6 +1239,12 @@ class RoundScanFlySim(SyncFlyScanBase): class RoundROIScan(ScanBase): scan_name = "round_roi_scan" required_kwargs = ["dr", "nth", "relative"] + gui_config = { + "Motor 1": ["motor_1", "width_1"], + "Motor 2": ["motor_2", "width_2"], + "Shell Parametes": ["dr", "nth"], + "Acquisition Parameters": ["exp_time", "relative", "burst_at_each_point"], + } def __init__( self, @@ -1295,6 +1330,7 @@ class ListScan(ScanBase): class TimeScan(ScanBase): scan_name = "time_scan" required_kwargs = ["points", "interval"] + gui_config = {"Scan Parameters": ["points", "interval", "exp_time", "burst_at_each_point"]} def __init__( self, @@ -1357,6 +1393,7 @@ class MonitorScan(ScanBase): scan_name = "monitor_scan" required_kwargs = ["relative"] scan_type = "fly" + gui_config = {"Device": ["device", "start", "stop"], "Scan Parameters": ["relative"]} def __init__( self, device: DeviceBase, start: float, stop: float, relative: bool = False, **kwargs @@ -1368,6 +1405,7 @@ class MonitorScan(ScanBase): device (Device): monitored device start (float): start position of the monitored device stop (float): stop position of the monitored device + relative (bool): if True, the motor will be moved relative to its current position. Default is False. Returns: ScanReport @@ -1441,12 +1479,14 @@ class MonitorScan(ScanBase): class Acquire(ScanBase): scan_name = "acquire" required_kwargs = [] + gui_config = {"Scan Parameters": ["exp_time", "burst_at_each_point"]} def __init__(self, *args, exp_time: float = 0, burst_at_each_point: int = 1, **kwargs): """ A simple acquisition at the current position. Args: + exp_time (float): exposure time in s burst: number of acquisition per point Returns: @@ -1503,6 +1543,10 @@ class LineScan(ScanBase): "stop": ScanArgType.FLOAT, } arg_bundle_size = {"bundle": len(arg_input), "min": 1, "max": None} + gui_config = { + "Movement Parameters": ["steps", "relative"], + "Acquisition Parameters": ["exp_time", "burst_at_each_point"], + } def __init__( self, diff --git a/bec_server/tests/tests_scan_server/test_scan_gui_models.py b/bec_server/tests/tests_scan_server/test_scan_gui_models.py new file mode 100644 index 00000000..c14f9ab9 --- /dev/null +++ b/bec_server/tests/tests_scan_server/test_scan_gui_models.py @@ -0,0 +1,244 @@ +import pytest +from pydantic import ValidationError + +from bec_server.scan_server.scan_gui_models import GUIConfig +from bec_server.scan_server.scans import ScanArgType, ScanBase + + +class GoodScan(ScanBase): # pragma: no cover + scan_name = "good_scan" + required_kwargs = ["steps", "relative"] + arg_input = { + "device": ScanArgType.DEVICE, + "start": ScanArgType.FLOAT, + "stop": ScanArgType.FLOAT, + } + arg_bundle_size = {"bundle": len(arg_input), "min": 1, "max": None} + gui_config = {"Scan Parameters": ["steps", "exp_time", "relative", "burst_at_each_point"]} + + def __init__( + self, + *args, + exp_time: float = 0, + steps: int = None, + relative: bool = False, + burst_at_each_point: int = 1, + **kwargs, + ): + """ + A good scan for one or more motors. + + Args: + *args (Device, float, float): pairs of device / start position / end position + exp_time (float): exposure time in s. Default: 0 + steps (int): number of steps. Default: 10 + relative (bool): if True, the start and end positions are relative to the current position. Default: False + burst_at_each_point (int): number of acquisition per point. Default: 1 + + Returns: + ScanReport + + + """ + super().__init__( + exp_time=exp_time, relative=relative, burst_at_each_point=burst_at_each_point, **kwargs + ) + self.steps = steps + + def doing_something_good(self): + pass + + +class ExtraKwarg(ScanBase): # pragma: no cover + scan_name = "wrong_name" + required_kwargs = ["steps", "relative"] + + gui_config = {"Device 1": ["motor1", "start_motor1", "stop_motor1"]} + + def __init__(self, motor1: str, stop_motor1: float, **kwargs): + """ + A scan following Fermat's spiral. + + Args: + motor1 (DeviceBase): first motor + start_motor1 (float): start position motor 1 + stop_motor1 (float): end position motor 1 + + Returns: + ScanReport + """ + + print("I am a wrong scan") + + +class WrongDocs(ScanBase): # pragma: no cover + scan_name = "wrong_name" + required_kwargs = ["steps", "relative"] + + gui_config = {"Device 1": ["motor1", "start_motor1", "stop_motor1"]} + + def __init__(self, motor1: str, start_motor1: float, stop_motor1: float, **kwargs): + """ + A scan following Fermat's spiral. + + Args: + motor1 (DeviceBase): first motor + + Returns: + ScanReport + """ + + print("I am a scan with wrong docs.") + + +def test_gui_config_good_scan_dump(): + gui_config = GUIConfig.from_dict(GoodScan) + expected_config = { + "scan_class_name": "GoodScan", + "arg_group": { + "name": "Scan Arguments", + "bundle": 3, + "arg_inputs": { + "device": ScanArgType.DEVICE, + "start": ScanArgType.FLOAT, + "stop": ScanArgType.FLOAT, + }, + "inputs": [ + { + "arg": True, + "name": "device", + "display_name": "Device", + "type": "device", + "tooltip": None, + "default": None, + "expert": False, + }, + { + "arg": True, + "name": "start", + "display_name": "Start", + "type": "float", + "tooltip": None, + "default": None, + "expert": False, + }, + { + "arg": True, + "name": "stop", + "display_name": "Stop", + "type": "float", + "tooltip": None, + "default": None, + "expert": False, + }, + ], + "min": 1, + "max": None, + }, + "kwarg_groups": [ + { + "name": "Scan Parameters", + "inputs": [ + { + "arg": False, + "name": "steps", + "display_name": "Steps", + "type": "int", + "tooltip": "Number of steps", + "default": None, + "expert": False, + }, + { + "arg": False, + "name": "exp_time", + "display_name": "Exp Time", + "type": "float", + "tooltip": "Exposure time in s", + "default": 0, + "expert": False, + }, + { + "arg": False, + "name": "relative", + "display_name": "Relative", + "type": "bool", + "tooltip": "If True, the start and end positions are relative to the current position", + "default": False, + "expert": False, + }, + { + "arg": False, + "name": "burst_at_each_point", + "display_name": "Burst At Each Point", + "type": "int", + "tooltip": "Number of acquisition per point", + "default": 1, + "expert": False, + }, + ], + } + ], + } + assert gui_config.model_dump() == expected_config + + +def test_gui_config_extra_kwarg(): + with pytest.raises(ValidationError) as excinfo: + GUIConfig.from_dict(ExtraKwarg) + errors = excinfo.value.errors() + assert len(errors) == 5 + assert errors[0]["type"] == ("wrong argument name") + assert errors[1]["type"] == ("missing argument name") + assert errors[2]["type"] == ("missing argument name") + assert errors[3]["type"] == ("missing argument name") + assert errors[4]["type"] == ("missing argument name") + + +def test_gui_config_wrong_docs(): + gui_config = GUIConfig.from_dict(WrongDocs) + expected = { + "scan_class_name": "WrongDocs", + "arg_group": { + "name": "Scan Arguments", + "bundle": 0, + "arg_inputs": {}, + "inputs": [], + "min": None, + "max": None, + }, + "kwarg_groups": [ + { + "name": "Device 1", + "inputs": [ + { + "arg": False, + "name": "motor1", + "type": "str", + "display_name": "Motor 1", + "tooltip": "First motor", + "default": "_empty", + "expert": False, + }, + { + "arg": False, + "name": "start_motor1", + "type": "float", + "display_name": "Start Motor 1", + "tooltip": None, + "default": "_empty", + "expert": False, + }, + { + "arg": False, + "name": "stop_motor1", + "type": "float", + "display_name": "Stop Motor 1", + "tooltip": None, + "default": "_empty", + "expert": False, + }, + ], + } + ], + } + assert gui_config.model_dump() == expected diff --git a/docs/source/assets/scan_GUI_example.png b/docs/source/assets/scan_GUI_example.png new file mode 100644 index 0000000000000000000000000000000000000000..8aef66fe4635de229388289f68d5736ad071d68f GIT binary patch literal 111002 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

R{zXsKr;HHP9Q&V$OerIg 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 literal 0 HcmV?d00001 diff --git a/docs/source/developer/scans/scan_gui_config.md b/docs/source/developer/scans/scan_gui_config.md new file mode 100644 index 00000000..1ee82f47 --- /dev/null +++ b/docs/source/developer/scans/scan_gui_config.md @@ -0,0 +1,136 @@ +# Tutorial - Automatic Scan GUI Generation + +The gui_config feature is an optional addition for users who want to control their scans using the automatically +generated ScanControl GUI from `bec_widgets`. This configuration helps in organizing scan parameters into specific +groups, making the GUI more user-friendly and intuitive. + +## Overview + +The `gui_config` attribute in a scan class specifies how the parameters should be grouped in the GUI. This +configuration: + +- Requires minimal user input. +- Focuses on grouping parameters into specific categories. +- Uses Pydantic validators to ensure integrity and completeness. + +## Step-by-Step Guide + +### Step 1: Add `gui_config` Attribute + +Add the `gui_config` attribute to your scan class. This attribute is a dictionary where keys represent the group names +and values are lists of parameter names. These groups dictate how the parameters are organized in the GUI. + +```python +class FermatSpiralScan(ScanBase): + scan_name = "fermat_scan" + required_kwargs = ["step", "relative"] + gui_config = { + "Device 1": ["motor1", "start_motor1", "stop_motor1"], + "Device 2": ["motor2", "start_motor2", "stop_motor2"], + "Movement Parameters": ["step", "relative"], + "Acquisition Parameters": ["exp_time", "settling_time", "burst_at_each_point"], + } +``` + +### Step 2: Ensure Complete Signatures and Docstrings + +Make sure that the signatures of all parameters in your scan class are complete with types and detailed docstrings. This +ensures that Pydantic can validate and process the configuration without errors. + +Example of a detailed `__init__` method: + +```python +class FermatSpiralScan(ScanBase): + scan_name = "fermat_scan" + required_kwargs = ["step", "relative"] + gui_config = { + "Device 1": ["motor1", "start_motor1", "stop_motor1"], + "Device 2": ["motor2", "start_motor2", "stop_motor2"], + "Movement Parameters": ["step", "relative"], + "Acquisition Parameters": ["exp_time", "settling_time", "burst_at_each_point"], + } + + def __init__( + self, + motor1: DeviceBase, + start_motor1: float, + stop_motor1: float, + motor2: DeviceBase, + start_motor2: float, + stop_motor2: float, + step: float = 0.1, + exp_time: float = 0, + settling_time: float = 0, + relative: bool = False, + burst_at_each_point: int = 1, + spiral_type: float = 0, + optim_trajectory: Literal["corridor", None] = None, + **kwargs, + ): + """ + A scan following Fermat's spiral. + + Args: + motor1 (DeviceBase): first motor + start_motor1 (float): start position motor 1 + stop_motor1 (float): end position motor 1 + motor2 (DeviceBase): second motor + start_motor2 (float): start position motor 2 + stop_motor2 (float): end position motor 2 + step (float): step size in motor units. Default is 0.1. + exp_time (float): exposure time in seconds. Default is 0. + settling_time (float): settling time in seconds. Default is 0. + relative (bool): if True, the motors will be moved relative to their current position. Default is False. + burst_at_each_point (int): number of exposures at each point. Default is 1. + spiral_type (float): type of spiral to use. Default is 0. + optim_trajectory (str): trajectory optimization method. Default is None. Options are "corridor" and "none". + + Returns: + ScanReport + + Examples: + >>> scans.fermat_scan(dev.motor1, -5, 5, dev.motor2, -5, 5, step=0.5, exp_time=0.1, relative=True, optim_trajectory="corridor") + """ +``` + +Note that you can omit certain parameters from the `gui_config` if they are not required to be displayed in the GUI or +not expose them to the user. + +### Step 3: Utilize Pydantic Validators + +Pydantic validators are used to enhance the `gui_config` by: + +- **Validating the arguments**: Ensuring that each argument specified in the `gui_config` exists within the scan class. +- **Formatting display names**: Creating user-friendly display names for labels based on parameter names. +- **Extracting tooltips**: Deriving tooltips from the first sentence of each parameter's docstring. +- **Retrieving default values**: Obtaining default values for each parameter. + +The Pydantic is automatically applied when the `bec-scan-server` starts up, and it will raise an error if +the `gui_config` is incomplete or incorrect. + +```{note} +Note that if the signature or docstring of a parameter is incomplete, Pydantic will raise an error during a `bec-scan-server` startup! +``` + +## Example of a Complete Scan Class with `gui_config` + +Here is the complete example of the `FermatSpiralScan` class with the `gui_config` implemented: + +````{dropdown} View code: ScanBase class +:icon: code-square +:animate: fade-in-slide-down + +```{literalinclude} ../../../../bec_server/bec_server/scan_server/scans.py +:language: python +:pyobject: FermatSpiralScan +``` +```` + +By following these steps, you can easily configure the GUI for your scans, making them more user-friendly and intuitive +for users who want to use the ScanControl GUI from `bec_widgets`. + +The resulting GUI will display the parameters in the specified groups, making it easier for users to understand and +interact with the scan settings: + +```{figure} ../assets/scan_GUI_example.png +``` \ No newline at end of file