From ee420c39fd50446a2686063c5ae15ea3973c04a9 Mon Sep 17 00:00:00 2001 From: edgar Date: Mon, 22 Jul 2024 19:09:23 +0200 Subject: [PATCH 01/16] updated worker configuration --- src/pyFAI/gui/widgets/WorkerConfigurator.py | 72 ++++++++++++++------- src/pyFAI/io/integration_config.py | 35 +++++++++- src/pyFAI/test/test_worker.py | 43 ++++++++++++ 3 files changed, 124 insertions(+), 26 deletions(-) diff --git a/src/pyFAI/gui/widgets/WorkerConfigurator.py b/src/pyFAI/gui/widgets/WorkerConfigurator.py index 18194c8d9..50d91dc79 100644 --- a/src/pyFAI/gui/widgets/WorkerConfigurator.py +++ b/src/pyFAI/gui/widgets/WorkerConfigurator.py @@ -33,7 +33,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "05/09/2023" +__date__ = "22/07/2024" __status__ = "development" import logging @@ -208,6 +208,20 @@ def __getAzimuthalNbpt(self): if value == "": return None return int(value) + + def getPoniDict(self): + poni = {} + poni["wavelength"] = self.__geometryModel.wavelength().value() + poni["dist"] = self.__geometryModel.distance().value() + poni["poni1"] = self.__geometryModel.poni1().value() + poni["poni2"] = self.__geometryModel.poni2().value() + poni["rot1"] = self.__geometryModel.rotation1().value() + poni["rot2"] = self.__geometryModel.rotation2().value() + poni["rot3"] = self.__geometryModel.rotation3().value() + if self.__detector is not None: + poni["detector"] = self.__detector.__class__.__name__ + poni["detector_config"] = self.__detector.get_config() + return poni def getConfig(self): """Read the configuration of the plugin and returns it as a dictionary @@ -230,21 +244,10 @@ def splitFiles(filenames): # file-version config["application"] = "pyfai-integrate" - config["version"] = 3 + config["version"] = 4 # geometry - config["wavelength"] = self.__geometryModel.wavelength().value() - config["dist"] = self.__geometryModel.distance().value() - config["poni1"] = self.__geometryModel.poni1().value() - config["poni2"] = self.__geometryModel.poni2().value() - config["rot1"] = self.__geometryModel.rotation1().value() - config["rot2"] = self.__geometryModel.rotation2().value() - config["rot3"] = self.__geometryModel.rotation3().value() - - # detector - if self.__detector is not None: - config["detector"] = self.__detector.__class__.__name__ - config["detector_config"] = self.__detector.get_config() + config["poni"] = self.getPoniDict() # pre-processing config["do_mask"] = bool(self.do_mask.isChecked()) @@ -319,7 +322,7 @@ def setConfig(self, dico): application = dico.pop("application", None) if application != "pyfai-integrate": logger.error("It is not a configuration file from pyFAI-integrate.") - if version > 3: + if version > 4: logger.error("Configuration file %d too recent. This version of pyFAI maybe too old to read the configuration", version) # Clean up the GUI @@ -332,7 +335,32 @@ def setConfig(self, dico): self.__geometryModel.rotation2().setValue(None) self.__geometryModel.rotation3().setValue(None) - # geometry + # patch for version 4 + poni_dict = dico.get("poni", None) + if isinstance(poni_dict, dict): + if "wavelength" in poni_dict: + value = poni_dict.pop("wavelength") + self.__geometryModel.wavelength().setValue(value) + if "dist" in poni_dict: + value = poni_dict.pop("dist") + self.__geometryModel.distance().setValue(value) + if "poni1" in poni_dict: + value = poni_dict.pop("poni1") + self.__geometryModel.poni1().setValue(value) + if "poni2" in poni_dict: + value = poni_dict.pop("poni2") + self.__geometryModel.poni2().setValue(value) + if "rot1" in poni_dict: + value = poni_dict.pop("rot1") + self.__geometryModel.rotation1().setValue(value) + if "rot2" in poni_dict: + value = poni_dict.pop("rot2") + self.__geometryModel.rotation2().setValue(value) + if "rot3" in poni_dict: + value = poni_dict.pop("rot3") + self.__geometryModel.rotation3().setValue(value) + + # For older versions (<4) if "wavelength" in dico: value = dico.pop("wavelength") self.__geometryModel.wavelength().setValue(value) @@ -550,15 +578,9 @@ def __savePoni(self): return filename = dialog.selectedFiles()[0] - config = self.getConfig() - if config.get("wavelength") is None: - config.pop("wavelength") - from ...detectors import detector_factory - detector = detector_factory(config.get("detector"), config.get("detector_config")) - from ...geometry import Geometry - ai = Geometry(detector=detector) - ai.set_config(config) - ai.save(filename) + poni = PoniFile(data=self.getPoniDict()) + with open(filename, 'w') as fd: + poni.write(fd) def __maskFileChanged(self): model = self.__model.maskFileModel diff --git a/src/pyFAI/io/integration_config.py b/src/pyFAI/io/integration_config.py index f4f998d03..a92be51b9 100644 --- a/src/pyFAI/io/integration_config.py +++ b/src/pyFAI/io/integration_config.py @@ -190,6 +190,26 @@ def _patch_v2_to_v3(config): config["version"] = 3 +def _patch_v3_to_v4(config): + poni_dict = {} + poni_parameters = ["dist", + "poni1", + "poni2", + "rot1", + "rot2", + "rot3", + "detector", + "detector_config", + "wavelength", + "poni_version", + ] + for poni_param in poni_parameters: + if config.get(poni_param, None) is not None: + poni_dict[poni_param] = config.pop(poni_param) + + config["poni"] = poni_dict + config["version"] = 4 + def normalize(config, inplace=False, do_raise=False): """Normalize the configuration file to the one supported internally\ @@ -219,7 +239,10 @@ def normalize(config, inplace=False, do_raise=False): else: _logger.error(txt) - if version > 3: + if version == 3: + _patch_v3_to_v4(config) + + if version > 4: _logger.error("Configuration file %d too recent. This version of pyFAI maybe too old to read this configuration", version) return config @@ -233,6 +256,9 @@ def __init__(self, config): def pop_ponifile(self): """Returns the geometry subpart of the configuration""" + if isinstance(self._config.get("poni", None), dict): + return ponifile.PoniFile(self._config["poni"]) + dico = {"poni_version":2} mapping = { i:i for i in ('wavelength', 'poni1', 'poni2', 'rot1', 'rot2', 'rot3', 'detector', 'detector_config')} @@ -250,6 +276,13 @@ def pop_detector(self): :rtype: pyFAI.detectors.Detector """ + if isinstance(self._config.get("poni", None), dict): + poni_dict = self._config["poni"].copy() + detector_class = poni_dict.pop("detector", None) + detector_config = poni_dict.pop("detector_config", None) + detector = detectors.detector_factory(detector_class, config=detector_config) + return detector + detector_class = self._config.pop("detector", None) if detector_class is not None: # NOTE: Default way to describe a detector since pyFAI 0.17 diff --git a/src/pyFAI/test/test_worker.py b/src/pyFAI/test/test_worker.py index a37f61fe2..aaf36c3f1 100644 --- a/src/pyFAI/test/test_worker.py +++ b/src/pyFAI/test/test_worker.py @@ -46,6 +46,8 @@ from ..azimuthalIntegrator import AzimuthalIntegrator from ..containers import Integrate1dResult from ..containers import Integrate2dResult +from ..io.integration_config import ConfigurationReader +from .. import detector_factory from . import utilstest logger = logging.getLogger(__name__) @@ -461,6 +463,47 @@ def test_regression_2227(self): self.assertEqual(worker_generic.ai.detector.shape, [576, 748], "Shape matches") self.assertEqual(worker_generic.ai.detector.orientation, 3, "Orientation matches") + def test_regression_v4(self): + """loading poni dictionary as a separate key in configuration""" + detector = detector_factory(name='Eiger2_4M', config={"orientation" : 3}) + ai = AzimuthalIntegrator(dist=0.1, + poni1=0.1, + poni2=0.1, + wavelength=1e-10, + detector=detector, + ) + worker = Worker(azimuthalIntegrator=ai) + + self.assertEqual(ai.dist, worker.ai.dist, "Distance matches") + self.assertEqual(ai.poni1, worker.ai.poni1, "PONI1 matches") + self.assertEqual(ai.poni2, worker.ai.poni2, "PONI2 matches") + self.assertEqual(ai.rot1, worker.ai.rot1, "Rot1 matches") + self.assertEqual(ai.rot2, worker.ai.rot2, "Rot2 matches") + self.assertEqual(ai.rot3, worker.ai.rot3, "Rot3 matches") + self.assertEqual(ai.wavelength, worker.ai.wavelength, "Wavelength matches") + self.assertEqual(ai.detector, worker.ai.detector, "Detector matches") + + config = worker.get_config() + config_reader = ConfigurationReader(config) + + detector_from_reader = config_reader.pop_detector() + self.assertEqual(detector, detector_from_reader, "Detector from reader matches") + + config = worker.get_config() + config_reader = ConfigurationReader(config) + poni = config_reader.pop_ponifile() + + self.assertEqual(ai.dist, poni.dist, "Distance matches") + self.assertEqual(ai.poni1, poni.poni1, "PONI1 matches") + self.assertEqual(ai.poni2, poni.poni2, "PONI2 matches") + self.assertEqual(ai.rot1, poni.rot1, "Rot1 matches") + self.assertEqual(ai.rot2, poni.rot2, "Rot2 matches") + self.assertEqual(ai.rot3, poni.rot3, "Rot3 matches") + self.assertEqual(ai.wavelength, poni.wavelength, "Wavelength matches") + self.assertEqual(ai.detector, poni.detector, "Detector matches") + + + def suite(): loader = unittest.defaultTestLoader.loadTestsFromTestCase From 7979a298d970f90c5eb05754c9b98f2c19d81c6a Mon Sep 17 00:00:00 2001 From: edgar Date: Thu, 22 Aug 2024 14:42:36 +0200 Subject: [PATCH 02/16] worker config version 4 --- src/pyFAI/io/integration_config.py | 2 +- src/pyFAI/worker.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pyFAI/io/integration_config.py b/src/pyFAI/io/integration_config.py index a92be51b9..a98531aa1 100644 --- a/src/pyFAI/io/integration_config.py +++ b/src/pyFAI/io/integration_config.py @@ -232,7 +232,7 @@ def normalize(config, inplace=False, do_raise=False): _patch_v2_to_v3(config) application = config.get("application", None) - if application != "pyfai-integrate": + if application not in ("pyfai-integrate", "worker"): txt = f"Configuration application do not match. Found '{application}'" if do_raise: raise ValueError(txt) diff --git a/src/pyFAI/worker.py b/src/pyFAI/worker.py index 809270cd8..3283a60b2 100644 --- a/src/pyFAI/worker.py +++ b/src/pyFAI/worker.py @@ -591,11 +591,12 @@ def get_config(self): :return: dict with the config to be de-serialized with set_config/loaded with pyFAI.load """ config = { - "version": 3, + "version": 4, + "application" : "worker", "unit": str(self.unit), } - config.update(self.ai.get_config()) + config["poni"] = dict(self.ai.get_config()) for key in ["nbpt_azim", "nbpt_rad", "polarization_factor", "dummy", "delta_dummy", "correct_solid_angle", "dark_current_image", "flat_field_image", @@ -696,6 +697,11 @@ def validate_config(config, raise_exception=RuntimeError): :return: None or reason as a string when raise_exception is None, else raise the given exception """ reason = None + + config = config.copy() + if "poni" in config: + config.update(config.pop("poni")) + if not config.get("dist"): reason = "Detector distance is undefined" elif config.get("poni1") is None: From 13cfcb5613d04d77f981f93b6ef7de0ea86b6413 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:05:43 +0000 Subject: [PATCH 03/16] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/pyFAI/gui/widgets/WorkerConfigurator.py | 2 +- src/pyFAI/io/integration_config.py | 2 +- src/pyFAI/test/test_worker.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pyFAI/gui/widgets/WorkerConfigurator.py b/src/pyFAI/gui/widgets/WorkerConfigurator.py index 50d91dc79..d632eb4e0 100644 --- a/src/pyFAI/gui/widgets/WorkerConfigurator.py +++ b/src/pyFAI/gui/widgets/WorkerConfigurator.py @@ -208,7 +208,7 @@ def __getAzimuthalNbpt(self): if value == "": return None return int(value) - + def getPoniDict(self): poni = {} poni["wavelength"] = self.__geometryModel.wavelength().value() diff --git a/src/pyFAI/io/integration_config.py b/src/pyFAI/io/integration_config.py index a98531aa1..ca92ff00e 100644 --- a/src/pyFAI/io/integration_config.py +++ b/src/pyFAI/io/integration_config.py @@ -282,7 +282,7 @@ def pop_detector(self): detector_config = poni_dict.pop("detector_config", None) detector = detectors.detector_factory(detector_class, config=detector_config) return detector - + detector_class = self._config.pop("detector", None) if detector_class is not None: # NOTE: Default way to describe a detector since pyFAI 0.17 diff --git a/src/pyFAI/test/test_worker.py b/src/pyFAI/test/test_worker.py index aaf36c3f1..be19090e7 100644 --- a/src/pyFAI/test/test_worker.py +++ b/src/pyFAI/test/test_worker.py @@ -487,7 +487,7 @@ def test_regression_v4(self): config_reader = ConfigurationReader(config) detector_from_reader = config_reader.pop_detector() - self.assertEqual(detector, detector_from_reader, "Detector from reader matches") + self.assertEqual(detector, detector_from_reader, "Detector from reader matches") config = worker.get_config() config_reader = ConfigurationReader(config) From 6f043f2ed8705566c7e89ac71338d5c716b77384 Mon Sep 17 00:00:00 2001 From: edgar Date: Thu, 22 Aug 2024 15:38:20 +0200 Subject: [PATCH 04/16] condition for None detector --- src/pyFAI/io/integration_config.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pyFAI/io/integration_config.py b/src/pyFAI/io/integration_config.py index a98531aa1..13b1a81c2 100644 --- a/src/pyFAI/io/integration_config.py +++ b/src/pyFAI/io/integration_config.py @@ -279,9 +279,10 @@ def pop_detector(self): if isinstance(self._config.get("poni", None), dict): poni_dict = self._config["poni"].copy() detector_class = poni_dict.pop("detector", None) - detector_config = poni_dict.pop("detector_config", None) - detector = detectors.detector_factory(detector_class, config=detector_config) - return detector + if detector_class is not None: + detector_config = poni_dict.pop("detector_config", None) + detector = detectors.detector_factory(detector_class, config=detector_config) + return detector detector_class = self._config.pop("detector", None) if detector_class is not None: From c2924b9756ffd59e89285db0186ffba991757ec3 Mon Sep 17 00:00:00 2001 From: edgar Date: Thu, 22 Aug 2024 15:43:54 +0200 Subject: [PATCH 05/16] old condition pop detector --- src/pyFAI/io/integration_config.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pyFAI/io/integration_config.py b/src/pyFAI/io/integration_config.py index 13b1a81c2..151777387 100644 --- a/src/pyFAI/io/integration_config.py +++ b/src/pyFAI/io/integration_config.py @@ -283,13 +283,13 @@ def pop_detector(self): detector_config = poni_dict.pop("detector_config", None) detector = detectors.detector_factory(detector_class, config=detector_config) return detector - - detector_class = self._config.pop("detector", None) - if detector_class is not None: - # NOTE: Default way to describe a detector since pyFAI 0.17 - detector_config = self._config.pop("detector_config", None) - detector = detectors.detector_factory(detector_class, config=detector_config) - return detector + else: + detector_class = self._config.pop("detector", None) + if detector_class is not None: + # NOTE: Default way to describe a detector since pyFAI 0.17 + detector_config = self._config.pop("detector_config", None) + detector = detectors.detector_factory(detector_class, config=detector_config) + return detector return None From 39e7b55e868229506e8553ced63a73fc290a52cc Mon Sep 17 00:00:00 2001 From: edgar Date: Thu, 22 Aug 2024 16:07:36 +0200 Subject: [PATCH 06/16] condition for polarization_factor 'null' --- src/pyFAI/gui/widgets/WorkerConfigurator.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pyFAI/gui/widgets/WorkerConfigurator.py b/src/pyFAI/gui/widgets/WorkerConfigurator.py index d632eb4e0..7c983b075 100644 --- a/src/pyFAI/gui/widgets/WorkerConfigurator.py +++ b/src/pyFAI/gui/widgets/WorkerConfigurator.py @@ -427,6 +427,8 @@ def normalizeFiles(filenames): for key, value in setup_data.items(): if key in dico and (value is not None): + if key == "polarization_factor" and not isinstance(dico[key], (float, int)): + continue value(dico.pop(key)) normalizationFactor = dico.pop("normalization_factor", None) From 95f993673249b03ae980c5631bbdd5b60bc2ce35 Mon Sep 17 00:00:00 2001 From: edgar Date: Thu, 22 Aug 2024 16:23:38 +0200 Subject: [PATCH 07/16] strict condition for validation --- src/pyFAI/worker.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pyFAI/worker.py b/src/pyFAI/worker.py index 3283a60b2..a4f342aaa 100644 --- a/src/pyFAI/worker.py +++ b/src/pyFAI/worker.py @@ -699,9 +699,8 @@ def validate_config(config, raise_exception=RuntimeError): reason = None config = config.copy() - if "poni" in config: + if "poni" in config and config.get("version", 0) > 3: config.update(config.pop("poni")) - if not config.get("dist"): reason = "Detector distance is undefined" elif config.get("poni1") is None: From f844fd0438acd9a180a748fb239df62163d125f4 Mon Sep 17 00:00:00 2001 From: edgar Date: Thu, 22 Aug 2024 17:02:52 +0200 Subject: [PATCH 08/16] instantiate PoniFile from config dict --- src/pyFAI/io/ponifile.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pyFAI/io/ponifile.py b/src/pyFAI/io/ponifile.py index 2ffb026ff..2eb44a691 100644 --- a/src/pyFAI/io/ponifile.py +++ b/src/pyFAI/io/ponifile.py @@ -110,6 +110,10 @@ def read_from_dict(self, config): * 2: store detector and detector_config instead of pixelsize1, pixelsize2 and splinefile * 2.1: manage orientation of detector in detector_config """ + # Patch for worker version 4 + if "poni" in config and config.get("version", 0) > 3: + config = config.get("poni", {}) + version = float(config.get("poni_version", 1)) if "detector_config" in config: if "orientation" in config["detector_config"]: From bf33b921674af769d4c1db56bbf83d677fc5455c Mon Sep 17 00:00:00 2001 From: edgar Date: Thu, 22 Aug 2024 17:05:58 +0200 Subject: [PATCH 09/16] condition for diffmap --- src/pyFAI/diffmap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyFAI/diffmap.py b/src/pyFAI/diffmap.py index fdd296592..4ba28562b 100644 --- a/src/pyFAI/diffmap.py +++ b/src/pyFAI/diffmap.py @@ -227,7 +227,7 @@ def parse(self, sysargv=None, with_config=False): self.inputfiles = [i[0] for i in config.get("input_data", [])] if "ai" in config: ai = config["ai"] - elif config.get("application", None) == "pyfai-integrate": + elif config.get("application", None) in ("pyfai-integrate", "worker"): ai = config.copy() else: ai = {} From 49031f6cd483d0a1a420a26c62379c0c182d9460 Mon Sep 17 00:00:00 2001 From: edgar Date: Fri, 23 Aug 2024 09:28:47 +0200 Subject: [PATCH 10/16] strong version condition --- src/pyFAI/gui/widgets/WorkerConfigurator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyFAI/gui/widgets/WorkerConfigurator.py b/src/pyFAI/gui/widgets/WorkerConfigurator.py index 7c983b075..fbdefa8e6 100644 --- a/src/pyFAI/gui/widgets/WorkerConfigurator.py +++ b/src/pyFAI/gui/widgets/WorkerConfigurator.py @@ -337,7 +337,7 @@ def setConfig(self, dico): # patch for version 4 poni_dict = dico.get("poni", None) - if isinstance(poni_dict, dict): + if isinstance(poni_dict, dict) and version > 3: if "wavelength" in poni_dict: value = poni_dict.pop("wavelength") self.__geometryModel.wavelength().setValue(value) From e740cb0aacc5bbf4c6a20d1a0a2ec1d537fe4ce3 Mon Sep 17 00:00:00 2001 From: edgar Date: Fri, 23 Aug 2024 14:43:37 +0200 Subject: [PATCH 11/16] test_v3_equal_to_v4 --- src/pyFAI/test/test_worker.py | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/pyFAI/test/test_worker.py b/src/pyFAI/test/test_worker.py index be19090e7..09d85e54b 100644 --- a/src/pyFAI/test/test_worker.py +++ b/src/pyFAI/test/test_worker.py @@ -47,6 +47,7 @@ from ..containers import Integrate1dResult from ..containers import Integrate2dResult from ..io.integration_config import ConfigurationReader +from ..io.ponifile import PoniFile from .. import detector_factory from . import utilstest @@ -502,6 +503,61 @@ def test_regression_v4(self): self.assertEqual(ai.wavelength, poni.wavelength, "Wavelength matches") self.assertEqual(ai.detector, poni.detector, "Detector matches") + def test_v3_equal_to_v4(self): + """checking equivalence between v3 and v4""" + config_v3 = { + "application": "pyfai-integrate", + "version": 3, + "wavelength": 1e-10, + "dist": 0.1, + "poni1": 0.1, + "poni2": 0.2, + "rot1": 1, + "rot2": 2, + "rot3": 3, + "detector": "Eiger2_4M", + "detector_config": { + "orientation": 3 + }, + } + + config_v4 = { + "application": "pyfai-integrate", + "version": 4, + "poni": { + "wavelength": 1e-10, + "dist": 0.1, + "poni1": 0.1, + "poni2": 0.2, + "rot1": 1, + "rot2": 2, + "rot3": 3, + "detector": "Eiger2_4M", + "detector_config": { + "orientation": 3 + } + }, + } + + worker_v3 = Worker() + worker_v3.set_config(config=config_v3) + worker_v4 = Worker() + worker_v4.set_config(config=config_v4) + self.assertEqual(worker_v3.get_config(), worker_v4.get_config(), "Worker configs match") + + ai_config_v3 = worker_v3.ai.get_config() + ai_config_v4 = worker_v4.ai.get_config() + self.assertEqual(ai_config_v3, ai_config_v4, "AI configs match") + + poni_v3 = PoniFile(data=ai_config_v3) + poni_v4 = PoniFile(data=ai_config_v4) + self.assertEqual(poni_v3.as_dict(), poni_v4.as_dict(), "PONI dictionaries match") + + poni_v3_from_config = PoniFile(data=config_v3) + poni_v4_from_config = PoniFile(data=config_v4) + self.assertEqual(poni_v3_from_config.as_dict(), poni_v4_from_config.as_dict(), "PONI dictionaries from config match") + + From e70a46de59ccb7b994acc5816bad5b6f46ee22ad Mon Sep 17 00:00:00 2001 From: edgar Date: Fri, 23 Aug 2024 15:16:58 +0200 Subject: [PATCH 12/16] pilx detector condition --- src/pyFAI/gui/pilx/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pyFAI/gui/pilx/utils.py b/src/pyFAI/gui/pilx/utils.py index b51008d23..b75d12c36 100644 --- a/src/pyFAI/gui/pilx/utils.py +++ b/src/pyFAI/gui/pilx/utils.py @@ -47,7 +47,8 @@ def compute_radial_values(pyFAI_config_as_str: str) -> numpy.ndarray: pyFAI_config: dict = json.loads(pyFAI_config_as_str) ai = AzimuthalIntegrator.sload(pyFAI_config) - if "detector" not in pyFAI_config: + + if not ai.detector: ai.detector = Detector.factory("detector", { "pixel1": pyFAI_config.get("pixel1"), "pixel2": pyFAI_config.get("pixel2"), From 1710baecfcead01f74cee543e3579d0546ae6047 Mon Sep 17 00:00:00 2001 From: edgar Date: Fri, 23 Aug 2024 15:23:58 +0200 Subject: [PATCH 13/16] pilx detector condition strong --- src/pyFAI/gui/pilx/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyFAI/gui/pilx/utils.py b/src/pyFAI/gui/pilx/utils.py index b75d12c36..784d014b7 100644 --- a/src/pyFAI/gui/pilx/utils.py +++ b/src/pyFAI/gui/pilx/utils.py @@ -48,7 +48,7 @@ def compute_radial_values(pyFAI_config_as_str: str) -> numpy.ndarray: pyFAI_config: dict = json.loads(pyFAI_config_as_str) ai = AzimuthalIntegrator.sload(pyFAI_config) - if not ai.detector: + if "detector" not in pyFAI_config and "detector" not in pyFAI_config.get("poni", {}): ai.detector = Detector.factory("detector", { "pixel1": pyFAI_config.get("pixel1"), "pixel2": pyFAI_config.get("pixel2"), From 28abf02c63f6fd26e4287ec587b493f34aae46ec Mon Sep 17 00:00:00 2001 From: edgar Date: Fri, 23 Aug 2024 15:24:53 +0200 Subject: [PATCH 14/16] blank --- src/pyFAI/gui/pilx/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pyFAI/gui/pilx/utils.py b/src/pyFAI/gui/pilx/utils.py index 784d014b7..9f382090f 100644 --- a/src/pyFAI/gui/pilx/utils.py +++ b/src/pyFAI/gui/pilx/utils.py @@ -47,7 +47,6 @@ def compute_radial_values(pyFAI_config_as_str: str) -> numpy.ndarray: pyFAI_config: dict = json.loads(pyFAI_config_as_str) ai = AzimuthalIntegrator.sload(pyFAI_config) - if "detector" not in pyFAI_config and "detector" not in pyFAI_config.get("poni", {}): ai.detector = Detector.factory("detector", { "pixel1": pyFAI_config.get("pixel1"), From 3c4fe820b647f707ce56c28aec5c47b6b5353dda Mon Sep 17 00:00:00 2001 From: edgar Date: Fri, 23 Aug 2024 15:33:07 +0200 Subject: [PATCH 15/16] doc --- src/pyFAI/io/integration_config.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pyFAI/io/integration_config.py b/src/pyFAI/io/integration_config.py index 151777387..3bb5b8694 100644 --- a/src/pyFAI/io/integration_config.py +++ b/src/pyFAI/io/integration_config.py @@ -191,6 +191,15 @@ def _patch_v2_to_v3(config): config["version"] = 3 def _patch_v3_to_v4(config): + """Rework the config dictionary from version 3 to version 4 + + The geometric, detector and beam parameters (contained in the .poni file) now they are gathered in a dictionary in the "poni" key + This will ease the methods that handle only the PONI parameters defined during the calibration step + that now they can be retrieved just by getting the value of the key "poni" from the config. The rest of the parameters are + characteristic of the integration protocol. + + :param dict config: Dictionary reworked inplace. + """ poni_dict = {} poni_parameters = ["dist", "poni1", From 5451861006f7709a437d32159e5fcee4201ce3a5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:33:29 +0000 Subject: [PATCH 16/16] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/pyFAI/io/integration_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyFAI/io/integration_config.py b/src/pyFAI/io/integration_config.py index 3bb5b8694..ef0ba7aaf 100644 --- a/src/pyFAI/io/integration_config.py +++ b/src/pyFAI/io/integration_config.py @@ -195,7 +195,7 @@ def _patch_v3_to_v4(config): The geometric, detector and beam parameters (contained in the .poni file) now they are gathered in a dictionary in the "poni" key This will ease the methods that handle only the PONI parameters defined during the calibration step - that now they can be retrieved just by getting the value of the key "poni" from the config. The rest of the parameters are + that now they can be retrieved just by getting the value of the key "poni" from the config. The rest of the parameters are characteristic of the integration protocol. :param dict config: Dictionary reworked inplace.