Skip to content
Snippets Groups Projects
Commit 02a09112 authored by David Hammer's avatar David Hammer
Browse files

Use geometryState to indicate geometry state

parent 6a73ea3c
No related branches found
No related tags found
2 merge requests!120DetectorAssembler: go to ERROR if trying to match without geometry,!118Draft: MID: put arbiter on manager scene
This commit is part of merge request !120. Comments created here will be created in the context of that merge request.
......@@ -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))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment