From 02a0911295c420e80b9bbe5c7a73badf8ffaf8b2 Mon Sep 17 00:00:00 2001 From: David Hammer <dhammer@mailbox.org> Date: Fri, 20 Sep 2024 14:16:34 +0200 Subject: [PATCH] Use geometryState to indicate geometry state --- src/calng/DetectorAssembler.py | 41 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/calng/DetectorAssembler.py b/src/calng/DetectorAssembler.py index 0141624c..53fb2b62 100644 --- a/src/calng/DetectorAssembler.py +++ b/src/calng/DetectorAssembler.py @@ -20,7 +20,6 @@ from karabo.bound import ( ImageData, MetricPrefix, Schema, - State, Timestamp, Trainstamp, Unit, @@ -150,6 +149,19 @@ class DetectorAssembler(TrainMatcher.TrainMatcher): .assignmentMandatory() .commit(), + STRING_ELEMENT(expected) + .key("geometryState") + .displayedName("Geometry state") + .description( + "The assembler needs a detector geometry to function. This is gotten " + "from a geometry device (see the geometryDevice parameter). If this " + "state is ERROR, no assembly will take place - check the geometry " + "device!" + ) + .readOnly() + .initialValue("INIT") + .commit(), + STRING_ELEMENT(expected) .key("sourceIndexPattern") .displayedName("Source index regex") @@ -209,16 +221,16 @@ class DetectorAssembler(TrainMatcher.TrainMatcher): self._geometry = None def _on_geometry(geometry): if self._geometry is None: - # TODO: review with new warning system - if hasattr(self, "_state_before_geometry_missing_error"): - self.set("status", "Received geometry!") - self.updateState(self._state_before_geometry_missing_error) - del self._state_before_geometry_missing_error + self.set("geometryState", "ACTIVE") self._geometry = geometry self.log.INFO("Received new geometry") geom_utils.subscribe_to_geometry_bound( - self, self.get("geometryDevice"), _on_geometry, warn_fun=self.log.WARN + self, self.get("geometryDevice"), _on_geometry ) + print("done setting up thing", self._geometry) + if self._geometry is None: + # initial get failed + self.set("geometryState", "ERROR") self.assembled_output = self.signalSlotable.getOutputChannel("assembledOutput") self.start() @@ -362,6 +374,7 @@ class DetectorAssembler(TrainMatcher.TrainMatcher): payload["data"] = scenes.detector_assembler_overview( device_id=self.getInstanceId(), schema=self.getFullSchema(), + geometry_device_id=self.get("geometryDevice"), ) self.reply( Hash( @@ -376,21 +389,9 @@ class DetectorAssembler(TrainMatcher.TrainMatcher): def on_matched_data(self, train_id, sources): ts_start = default_timer() - state = self.get("state") if self._geometry is None: - if not hasattr(self, "_state_before_geometry_missing_error"): - self.log.WARN("Have not received a geometry yet, will not send anything") - self.set( - "status", - "Missing geometry, cannot assemble; " - f"check {self.get('geometryDevice')}" - ) - - if state is not State.ERROR: - self.updateState(State.ERROR) - # set or update - self._state_before_geometry_missing_error = state + # should have already set up warning return my_timestamp = Timestamp(Epochstamp(), Trainstamp(train_id)) -- GitLab