From 33b1666c3fce24669b2c36dab1064e766d97e530 Mon Sep 17 00:00:00 2001 From: Oliver Silvester Date: Mon, 16 Sep 2024 18:19:11 +0100 Subject: [PATCH 1/2] Only use config server if GDA didn't supply params --- .../external_interaction/config_server.py | 6 ++--- .../hyperion/parameters/constants.py | 1 + .../hyperion/parameters/gridscan.py | 27 ++++++++++++++++--- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/mx_bluesky/hyperion/external_interaction/config_server.py b/src/mx_bluesky/hyperion/external_interaction/config_server.py index cfd89e161..637db8381 100644 --- a/src/mx_bluesky/hyperion/external_interaction/config_server.py +++ b/src/mx_bluesky/hyperion/external_interaction/config_server.py @@ -17,9 +17,9 @@ def config_server() -> ConfigServer: class FeatureFlags(BaseModel): # The default value will be used as the fallback when doing a best-effort fetch # from the service - use_panda_for_gridscan: bool = False - use_gpu_for_gridscan: bool = False - set_stub_offsets: bool = False + use_panda_for_gridscan: bool = CONST.I03.USE_PANDA_FOR_GRIDSCAN + use_gpu_for_gridscan: bool = CONST.I03.USE_PANDA_FOR_GRIDSCAN + set_stub_offsets: bool = CONST.I03.SET_STUB_OFFSETS @classmethod def _get_flags(cls): diff --git a/src/mx_bluesky/hyperion/parameters/constants.py b/src/mx_bluesky/hyperion/parameters/constants.py index d26d03c98..0fe4a78f1 100644 --- a/src/mx_bluesky/hyperion/parameters/constants.py +++ b/src/mx_bluesky/hyperion/parameters/constants.py @@ -114,6 +114,7 @@ class I03Constants: USE_PANDA_FOR_GRIDSCAN = False USE_GPU_FOR_GRIDSCAN_ANALYSIS = False THAWING_TIME = 20 + SET_STUB_OFFSETS = False @dataclass(frozen=True) diff --git a/src/mx_bluesky/hyperion/parameters/gridscan.py b/src/mx_bluesky/hyperion/parameters/gridscan.py index 39b613889..9d1159e25 100644 --- a/src/mx_bluesky/hyperion/parameters/gridscan.py +++ b/src/mx_bluesky/hyperion/parameters/gridscan.py @@ -1,6 +1,7 @@ from __future__ import annotations import os +from typing import Any from dodal.devices.aperturescatterguard import ApertureValue from dodal.devices.detector import ( @@ -10,10 +11,11 @@ PandAGridScanParams, ZebraGridScanParams, ) -from pydantic import Field, PrivateAttr +from pydantic import Field, PrivateAttr, model_validator from scanspec.core import Path as ScanPath from scanspec.specs import Line, Static +from mx_bluesky.hyperion.external_interaction.config_server import FeatureFlags from mx_bluesky.hyperion.parameters.components import ( DiffractionExperimentWithSample, IspybExperimentType, @@ -29,19 +31,38 @@ class GridCommon( DiffractionExperimentWithSample, OptionalGonioAngleStarts, WithOavCentring ): + use_panda: bool + use_gpu: bool grid_width_um: float = Field(default=CONST.PARAM.GRIDSCAN.WIDTH_UM) exposure_time_s: float = Field(default=CONST.PARAM.GRIDSCAN.EXPOSURE_TIME_S) use_roi_mode: bool = Field(default=CONST.PARAM.GRIDSCAN.USE_ROI) panda_runup_distance_mm: float = Field( default=CONST.HARDWARE.PANDA_FGS_RUN_UP_DEFAULT ) - use_panda: bool = Field(default=CONST.I03.USE_PANDA_FOR_GRIDSCAN) - use_gpu: bool = Field(default=CONST.I03.USE_GPU_FOR_GRIDSCAN_ANALYSIS) ispyb_experiment_type: IspybExperimentType = Field( default=IspybExperimentType.GRIDSCAN_3D ) selected_aperture: ApertureValue | None = Field(default=ApertureValue.SMALL) + # @model_validator(mode="wrap") + # @classmethod + # def set_default_feature_flags(cls, values, handler) -> Any: + # if "use_panda" not in values: + # values["use_panda"] = cls.features.best_effort().use_panda_for_gridscan + # if "use_gpu" not in values: + # values["use_gpu"] = cls.features.best_effort().use_gpu_for_gridscan + # return values + + @model_validator(mode="before") + @classmethod + def set_default_feature_flags(cls, values) -> Any: + cls.features = FeatureFlags() + if "use_panda" not in values: + values["use_panda"] = cls.features.best_effort().use_panda_for_gridscan + if "use_gpu" not in values: + values["use_gpu"] = cls.features.best_effort().use_gpu_for_gridscan + return values + @property def detector_params(self): self.det_dist_to_beam_converter_path = ( From 6d953f3d9637ef8b628f32a83baf45e64b85c42b Mon Sep 17 00:00:00 2001 From: Oliver Silvester Date: Tue, 17 Sep 2024 17:18:40 +0100 Subject: [PATCH 2/2] add test --- src/mx_bluesky/hyperion/parameters/gridscan.py | 9 --------- .../hyperion/parameters/test_parameter_model.py | 11 +++++++++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/mx_bluesky/hyperion/parameters/gridscan.py b/src/mx_bluesky/hyperion/parameters/gridscan.py index 9d1159e25..0f8dc569f 100644 --- a/src/mx_bluesky/hyperion/parameters/gridscan.py +++ b/src/mx_bluesky/hyperion/parameters/gridscan.py @@ -44,15 +44,6 @@ class GridCommon( ) selected_aperture: ApertureValue | None = Field(default=ApertureValue.SMALL) - # @model_validator(mode="wrap") - # @classmethod - # def set_default_feature_flags(cls, values, handler) -> Any: - # if "use_panda" not in values: - # values["use_panda"] = cls.features.best_effort().use_panda_for_gridscan - # if "use_gpu" not in values: - # values["use_gpu"] = cls.features.best_effort().use_gpu_for_gridscan - # return values - @model_validator(mode="before") @classmethod def set_default_feature_flags(cls, values) -> Any: diff --git a/tests/unit_tests/hyperion/parameters/test_parameter_model.py b/tests/unit_tests/hyperion/parameters/test_parameter_model.py index 9f0c670c5..403acff03 100644 --- a/tests/unit_tests/hyperion/parameters/test_parameter_model.py +++ b/tests/unit_tests/hyperion/parameters/test_parameter_model.py @@ -121,3 +121,14 @@ def test_selected_aperture_uses_default(): raw_params["selected_aperture"] = None params = RotationScan(**raw_params) assert params.selected_aperture == ApertureValue.LARGE + + +def test_feature_flags_overriden_if_supplied(minimal_3d_gridscan_params): + test_params = ThreeDGridScan(**minimal_3d_gridscan_params) + assert test_params.use_panda is False + assert test_params.use_gpu is False + minimal_3d_gridscan_params["use_panda"] = True + minimal_3d_gridscan_params["use_gpu"] = True + test_params = ThreeDGridScan(**minimal_3d_gridscan_params) + assert test_params.use_gpu + assert test_params.use_panda