diff --git a/src/calng/DetectorAssembler.py b/src/calng/DetectorAssembler.py index 80d6f8eb9d85ba3962b397dae40c960728e505d7..31def2c0acc8e8b46e436b04073928fb94d77e57 100644 --- a/src/calng/DetectorAssembler.py +++ b/src/calng/DetectorAssembler.py @@ -1,6 +1,5 @@ import enum from timeit import default_timer -import functools import re from karabo.bound import ( @@ -98,11 +97,17 @@ class DetectorAssembler(TrainMatcher.TrainMatcher): .commit(), STRING_ELEMENT(expected) - .key("pathToStack") + .key("imageDataPath") .assignmentOptional() .defaultValue("image.data") .commit(), + STRING_ELEMENT(expected) + .key("imageMaskPath") + .assignmentOptional() + .defaultValue("image.mask") + .commit(), + OUTPUT_CHANNEL(expected) .key("assembledOutput") .dataSchema(schemas.preview_schema(wrap_image_in_imagedata=False)) @@ -191,7 +196,8 @@ class DetectorAssembler(TrainMatcher.TrainMatcher): super().initialization() self._preview_friend = preview_utils.PreviewFriend(self) - self._path_to_stack = self.get("pathToStack") + self._image_data_path = self.get("imageDataPath") + self._image_mask_path = self.get("imageMaskPath") self._geometry = None self._stack_input_buffer = None # set up source to index mapping @@ -331,8 +337,6 @@ class DetectorAssembler(TrainMatcher.TrainMatcher): earliest_source_timestamp = float("inf") self._stack_input_buffer.mask.fill(False) for source, (data, source_timestamp) in sources.items(): - if source not in self._source_to_index: - continue # regular TrainMatcher output self.output.write( data, ChannelMetaData(source, source_timestamp), copyAllData=False @@ -340,15 +344,19 @@ class DetectorAssembler(TrainMatcher.TrainMatcher): if bridge_output_choice is BridgeOutputOptions.MATCHED: self.zmq_output.write(source, data, source_timestamp) + if source not in self._source_to_index: + continue # prepare for assembly # TODO: handle failure to "parse" source, get data out - image_data = data["image.data"] + if not data.has(self._image_data_path): + continue + image_data = data[self._image_data_path] if isinstance(image_data, ImageData): # TODO: maybe glance encoding here image_data = image_data.getData() image_data = image_data.astype(np.float32, copy=False) # TODO: set dtype based on input? - if data.has("image.mask"): - image_mask = data["image.mask"] + if data.has(self._image_mask_path): + image_mask = data[self._image_mask_path] if isinstance(image_mask, ImageData): image_mask = image_mask.getData() else: