diff --git a/src/calng/FrameSelectionArbiter.py b/src/calng/FrameSelectionArbiter.py index 637582d773152956b14fc322e7059ee631bb7e8e..b34a660fd5872da9d4ccc9b06f1204ba56710a67 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 8ae88cab31ecff3ba8ad5a971645e72598946723..7ccd96bd57da73bce010fb7a9b63082a5b710e4d 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):