Source code for mxcubeweb.core.adapter.detector_adapter

from typing import ClassVar

from mxcubecore import HardwareRepository as HWR
from mxcubecore.HardwareObjects.abstract import AbstractDetector
from pydantic import BaseModel, Field, FilePath

from mxcubeweb.core.adapter.adapter_base import AdapterBase
from mxcubeweb.core.models.configmodels import ResourceHandlerConfigModel

resource_handler_config = ResourceHandlerConfigModel(
    commands=["display_image"],
    attributes=["data", "get_value"],
)


[docs]class DisplayImageParams(BaseModel): path: FilePath = Field(description="Path to images' masterfile") img_num: int = Field(description="Index of the image to display")
[docs]class DetectorAdapter(AdapterBase): SUPPORTED_TYPES: ClassVar[list[object]] = [AbstractDetector.AbstractDetector] def __init__(self, ho, role, app): # noqa: D417 """Initialize. Args: ho (object): Hardware object. """ super().__init__(ho, role, app, resource_handler_config) ho.connect("stateChanged", self._state_change)
[docs] def get_value(self) -> dict: """Get the file suffix of the data files.""" return {"fileSuffix": HWR.beamline.detector.get_property("file_suffix", "?")}
def _state_change(self, *args, **kwargs): self.state_change(*args, **kwargs)
[docs] def state(self): return self._ho.get_state().name.upper()
[docs] def display_image(self, params: DisplayImageParams) -> dict: """Notify ADXV and/or Braggy of the image to display.""" res = {"image_url": ""} path, img_num = str(params.path), params.img_num if path: fpath, img = HWR.beamline.detector.get_actual_file_path(path, img_num) HWR.beamline.collect.adxv_notify(fpath, img) fpath = HWR.beamline.session.get_path_with_proposal_as_root(fpath) if self.app.CONFIG.braggy is not None and self.app.CONFIG.braggy.USE_BRAGGY: res = { "image_url": ( f"{self.app.CONFIG.braggy.BRAGGY_URL}/" f"?file={fpath}/image_${img_num}.h5.dataset" ) } return res