Skip to content
Snippets Groups Projects

DetectorAssembler: go to ERROR if trying to match without geometry

Merged David Hammer requested to merge detectorassembler-error-without-geometry into master
@@ -2,7 +2,7 @@ import enum
from importlib.metadata import entry_points
import numpy as np
from geometryDevices import utils as geom_utils
from calngUtils import geom_utils
from karabo.bound import (
BOOL_ELEMENT,
KARABO_CLASSINFO,
@@ -136,7 +136,6 @@ class BaseFrameSelectionArbiter(TrainMatcher.TrainMatcher):
def __init__(self, config):
super().__init__(config)
self.registerSlot(self.slotReceiveGeometry)
def initialization(self):
super().initialization()
@@ -145,13 +144,6 @@ class BaseFrameSelectionArbiter(TrainMatcher.TrainMatcher):
)
self._geometry = None
if self.get("geometryDevice"):
self.signalSlotable.connect(
self.get("geometryDevice"),
"signalNewGeometry",
"", # slot device ID (default: self)
"slotReceiveGeometry",
)
def _guess_number_of_frames(self, sources):
# TODO: robust frame deduction
@@ -160,12 +152,6 @@ class BaseFrameSelectionArbiter(TrainMatcher.TrainMatcher):
return data.get("image.cellId").size
self.log.ERROR("Unable to figure out number of frames")
def slotReceiveGeometry(self, device_id, serialized_geometry):
self.log.INFO(f"Received geometry from {device_id}")
try:
self._geometry = geom_utils.deserialize_geometry(serialized_geometry)
except Exception as e:
self.log.WARN(f"Failed to deserialize geometry; {e}")
@KARABO_CLASSINFO("SimpleFrameSelectionArbiter", deviceVersion)
class SimpleFrameSelectionArbiter(BaseFrameSelectionArbiter):
@@ -195,6 +181,9 @@ class SimpleFrameSelectionArbiter(BaseFrameSelectionArbiter):
self._initialize_kernel(
self["frameSelection.kernelChoice"], self["frameSelection.kernelParameters"]
)
geom_utils.subscribe_to_geometry_bound(
self, self.get("geometryDevice"), on_geometry=self._on_geometry
)
if self["state"] != State.ERROR:
self.start() # Auto-start this type of matcher.
@@ -270,6 +259,9 @@ class SimpleFrameSelectionArbiter(BaseFrameSelectionArbiter):
self.info["trainId"] = train_id
self.rate_out.update()
def _on_geometry(self, geometry):
self.kernel.on_new_geometry(geometry)
@KARABO_CLASSINFO("AdvancedFrameSelectionArbiter", deviceVersion)
class AdvancedFrameSelectionArbiter(BaseFrameSelectionArbiter):
@@ -315,6 +307,9 @@ class AdvancedFrameSelectionArbiter(BaseFrameSelectionArbiter):
self._validate_plan_and_update_schema(self["frameSelection.plan"])
self._initialize_kernels()
self._configure_decision(self["frameSelection.decision"])
geom_utils.subscribe_to_geometry_bound(
self, self.get("geometryDevice"), on_geometry=self._on_geometry
)
if self["state"] != State.ERROR:
self.start() # Auto-start this type of matcher.
@@ -523,3 +518,7 @@ class AdvancedFrameSelectionArbiter(BaseFrameSelectionArbiter):
kernel_prefix = f"frameSelection.selections.{name}"
if conf.has(kernel_prefix):
kernel.reconfigure(conf[kernel_prefix])
def _on_geometry(self, geometry):
for kernel in self._selection_kernels.values():
kernel.on_new_geometry(geometry)
Loading