From 43e78f05896e5ae35258cb40473604d7682a0717 Mon Sep 17 00:00:00 2001 From: David Hammer <dhammer@mailbox.org> Date: Wed, 18 Sep 2024 13:54:30 +0200 Subject: [PATCH] Arbiter kernels get notified of new geometry --- src/calng/FrameSelectionArbiter.py | 12 +++++++++++- src/calng/arbiter_kernels/base_kernel.py | 13 +++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/calng/FrameSelectionArbiter.py b/src/calng/FrameSelectionArbiter.py index 637582d7..b34a660f 100644 --- a/src/calng/FrameSelectionArbiter.py +++ b/src/calng/FrameSelectionArbiter.py @@ -143,7 +143,10 @@ class BaseFrameSelectionArbiter(TrainMatcher.TrainMatcher): self, on_success={"state": "PASSIVE"} ) - geom_utils.subscribe_to_geometry_bound(self, self.get("geometryDevice")) + self._geometry = None + geom_utils.subscribe_to_geometry_bound( + self, self.get("geometryDevice"), on_geometry=self._on_geometry + ) def _guess_number_of_frames(self, sources): # TODO: robust frame deduction @@ -256,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): @@ -509,3 +515,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) diff --git a/src/calng/arbiter_kernels/base_kernel.py b/src/calng/arbiter_kernels/base_kernel.py index 8ae88cab..7ccd96bd 100644 --- a/src/calng/arbiter_kernels/base_kernel.py +++ b/src/calng/arbiter_kernels/base_kernel.py @@ -13,10 +13,6 @@ class BaseArbiterKernel: self._name = name self.reconfigure(config) - @property - def geometry(self): - return self._device._geometry - @staticmethod def extend_device_schema(schema, prefix): """Should add configurability to the arbiter (matcher) the kernel will be @@ -38,6 +34,15 @@ class BaseArbiterKernel: def reconfigure(self, config): pass + @property + def geometry(self): + """Same as BaseCorrectionAddon.geometry""" + return self._device._geometry + + def on_new_geometry(self, geometry): + """Same as BaseCorrectionAddon.on_new_geometry""" + pass + class Assign(BaseArbiterKernel): def consider(self, tid, src, nframes, mask, out): -- GitLab