From 4d38ca5bb3b20bdc62c3d8136ef6e19fd6a82a02 Mon Sep 17 00:00:00 2001 From: David Hammer <dhammer@mailbox.org> Date: Wed, 22 Sep 2021 10:50:05 +0200 Subject: [PATCH] Make md_additional_offset configurable --- src/calng/AgipdCorrection.py | 47 ++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/calng/AgipdCorrection.py b/src/calng/AgipdCorrection.py index b7d4d629..b07bca2b 100644 --- a/src/calng/AgipdCorrection.py +++ b/src/calng/AgipdCorrection.py @@ -3,6 +3,7 @@ import timeit import numpy as np from karabo.bound import ( BOOL_ELEMENT, + FLOAT_ELEMENT, KARABO_CLASSINFO, STRING_ELEMENT, TABLE_ELEMENT, @@ -88,6 +89,28 @@ class AgipdCorrection(BaseCorrection): .commit(), ) + ( + BOOL_ELEMENT(expected) + .key("corrections.overrideMdAdditionalOffset") + .displayedName("Override md_additional_offset") + .assignmentOptional() + .defaultValue(False) + .reconfigurable() + .commit(), + FLOAT_ELEMENT(expected) + .key("corrections.mdAdditionalOffset") + .displayedName("Value for md_additional_offset (if overriding)") + .description( + "Normally, md_additional_offset (part of relative gain correction) is " + "computed when loading SlopesPC. In case you want to use a different " + "value (global for all medium gain pixels), you can specify it here " + "and set corrections.overrideMdAdditionalOffset to True." + ) + .assignmentOptional() + .defaultValue(0) + .reconfigurable() + .commit(), + ) # TODO: hook this up to actual correction done bad_pixel_selection_schema = Schema() ( @@ -143,6 +166,12 @@ class AgipdCorrection(BaseCorrection): else: self._output_transpose = None self._update_shapes() + if config.get("corrections.overrideMdAdditionalOffset"): + self._override_md_additional_offset = config.get( + "corrections.mdAdditionalOffset" + ) + else: + self._override_md_additional_offset = None self.updateState(State.ON) def process_input(self, data, metadata): @@ -286,6 +315,10 @@ class AgipdCorrection(BaseCorrection): self.set("corrections.available.relGainPc", True) self.set("corrections.enabled.relGainPc", True) self.set("corrections.preview.relGainPc", True) + if self._override_md_additional_offset is not None: + self.gpu_runner.md_additional_offset_gpu.fill( + self._override_md_additional_offset + ) elif constant_name == "SlopesFF": self.gpu_runner.load_rel_gain_ff_map(constant_data) if not self.get("corrections.available.relGainXray"): @@ -310,3 +343,17 @@ class AgipdCorrection(BaseCorrection): new_filter = np.array(eval(filter_string), dtype=np.uint16) assert np.max(new_filter) < self.get("dataFormat.memoryCells") self.pulse_filter = new_filter + + def preReconfigure(self, config): + super().preReconfigure(config) + if config.has("corrections.overrideMdAdditionalOffset"): + if config.get("corrections.overrideMdAdditionalOffset"): + md_additional_offset = self.get("corrections.mdAdditionalOffset") + if config.has("corrections.mdAdditionalOffset"): + md_additional_offset = config.get("corrections.mdAdditionalOffset") + self._override_md_additional_offset = md_additional_offset + self.gpu_runner.md_additional_offset_gpu.fill( + self._override_md_additional_offset + ) + else: + self._override_md_additional_offset = None -- GitLab