From fa4d6ccefc54570a72708e25ada70e584bbc49ce Mon Sep 17 00:00:00 2001 From: Ivan Usov Date: Fri, 31 Jul 2020 16:45:00 +0200 Subject: [PATCH] Add support for displacementCurve --- pyzebra/anatric.py | 36 ++++++++++++++++++++++++------------ pyzebra/app/panel_anatric.py | 11 ++++++++--- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/pyzebra/anatric.py b/pyzebra/anatric.py index 9ba65e6..5685f85 100644 --- a/pyzebra/anatric.py +++ b/pyzebra/anatric.py @@ -409,18 +409,30 @@ class AnatricConfig: @property def displacementCurve(self): - param_elem = self._alg_elems["adaptivedynamic"].find("displacementCurve") - if param_elem is None: - return None - return param_elem.attrib["value"] + maps = [] + displacementCurve_elem = self._alg_elems["adaptivedynamic"].find("displacementCurve") + if displacementCurve_elem is not None: + for map_elem in displacementCurve_elem.findall("map"): + maps.append( + ( + float(map_elem.attrib["twotheta"]), + float(map_elem.attrib["x"]), + float(map_elem.attrib["y"]), + ) + ) + + return maps @displacementCurve.setter def displacementCurve(self, value): - alg_elem = self._alg_elems["adaptivedynamic"] - param_elem = alg_elem.find("displacementCurve") - if param_elem is None: - new_elem = ET.Element("displacementCurve", attrib={"value": value}) - new_elem.tail = "\n" - alg_elem.append(new_elem) - else: - param_elem.attrib["value"] = value + # clear old map elements + displacementCurve_elem = self._alg_elems["adaptivedynamic"].find("displacementCurve") + for map_elem in displacementCurve_elem.findall("map"): + displacementCurve_elem.remove(map_elem) + + # add new map elements + for map_vals in value: + attrib = {"twotheta": map_vals[0], "x": map_vals[1], "y": map_vals[2]} + map_elem = ET.Element("map", attrib=attrib) + map_elem.tail = "\n" + displacementCurve_elem.append(map_elem) diff --git a/pyzebra/app/panel_anatric.py b/pyzebra/app/panel_anatric.py index d0b0150..cae7ec6 100644 --- a/pyzebra/app/panel_anatric.py +++ b/pyzebra/app/panel_anatric.py @@ -60,7 +60,7 @@ def create(): smoothSize_textinput.value = config.smoothSize loop_textinput.value = config.loop minPeakCount_textinput.value = config.minPeakCount - # displacementCurve_textinput.value = config.displacementCurve + displacementCurve_textinput.value = "\n".join(map(str, config.displacementCurve)) else: raise ValueError("Unknown processing mode.") @@ -320,9 +320,14 @@ def create(): # ---- displacementCurve def displacementCurve_textinput_callback(_attr, _old, new): - config.displacementCurve = new + maps = [] + for line in new.splitlines(): + maps.append(re.findall(r"\d+(?:\.\d+)?", line)) + config.displacementCurve = maps - displacementCurve_textinput = TextInput(title="Displacement Curve:") + displacementCurve_textinput = TextAreaInput( + title="Displacement Curve (twotheta, x, y):", height=100 + ) displacementCurve_textinput.on_change("value", displacementCurve_textinput_callback) def mode_radio_button_group_callback(active):