diff --git a/doc/source/changelog.rst b/doc/source/changelog.rst index 8f6a96b1f..018013a45 100644 --- a/doc/source/changelog.rst +++ b/doc/source/changelog.rst @@ -13,7 +13,7 @@ Change-log of versions + Uses the EXIF nomenclature where pyFAI's (default) orientation is tagged *3* + Offers compatibility with calibration made by Diotas (where orientation=2) + Expose the feature in the `calib2` GUI for custom detectors. - + Tutorial on the usage + + Tutorial on the usage - Possibility to integrate in 2D any second dimension, offers the qx/qy integration among many others. - Support for Detris Pilatus4 detector both with Si and CdTe sensors (thanks to Max Burian) - Several new units have been added diff --git a/src/pyFAI/ext/histogram.pyx b/src/pyFAI/ext/histogram.pyx index 664952b21..ec6ae96b7 100644 --- a/src/pyFAI/ext/histogram.pyx +++ b/src/pyFAI/ext/histogram.pyx @@ -8,7 +8,7 @@ # https://github.com/silx-kit/pyFAI # # -# Copyright (C) 2012-2022 European Synchrotron Radiation Facility, Grenoble, France +# Copyright (C) 2012-2024 European Synchrotron Radiation Facility, Grenoble, France # # Principal author: Jérôme Kieffer (Jerome.Kieffer@ESRF.eu) # @@ -38,7 +38,7 @@ Can be replaced by ``silx.math.histogramnd``. """ __author__ = "Jérôme Kieffer" -__date__ = "29/09/2023" +__date__ = "09/01/2024" __license__ = "MIT" __copyright__ = "2011-2022, ESRF" __contact__ = "jerome.kieffer@esrf.fr" diff --git a/src/pyFAI/io/ponifile.py b/src/pyFAI/io/ponifile.py index dcf674910..e63899293 100644 --- a/src/pyFAI/io/ponifile.py +++ b/src/pyFAI/io/ponifile.py @@ -3,7 +3,7 @@ # Project: Azimuthal integration # https://github.com/silx-kit/pyFAI # -# Copyright (C) 2015-2023 European Synchrotron Radiation Facility, Grenoble, France +# Copyright (C) 2015-2024 European Synchrotron Radiation Facility, Grenoble, France # # Principal author: Jérôme Kieffer (Jerome.Kieffer@ESRF.eu) # @@ -31,12 +31,13 @@ __author__ = "Jérôme Kieffer" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "01/12/2023" +__date__ = "09/01/2024" __docformat__ = 'restructuredtext' import collections import time import json +import pathlib import logging _logger = logging.getLogger(__name__) import numpy @@ -47,7 +48,6 @@ GeometryModel = None - class PoniFile(object): def __init__(self, data=None): @@ -63,7 +63,7 @@ def __init__(self, data=None): pass elif isinstance(data, dict): self.read_from_dict(data) - elif isinstance(data, (str,)): + elif isinstance(data, (str, pathlib.Path)): self.read_from_file(data) elif GeometryModel and isinstance(data, GeometryModel): self.read_from_geometryModel(data) diff --git a/src/pyFAI/test/test_io.py b/src/pyFAI/test/test_io.py index 6976f8eb6..b72949d41 100644 --- a/src/pyFAI/test/test_io.py +++ b/src/pyFAI/test/test_io.py @@ -32,7 +32,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "10/10/2023" +__date__ = "09/01/2024" import unittest import os @@ -42,17 +42,41 @@ import sys import logging import json +import pathlib from .utilstest import UtilsTest logger = logging.getLogger(__name__) pyFAI = sys.modules["pyFAI"] from pyFAI import io import pyFAI.io.spots +from pyFAI.io.ponifile import PoniFile import h5py import fabio import pyFAI.azimuthalIntegrator +class TestPoniFile(unittest.TestCase): + @classmethod + def setUpClass(cls)->None: + super(TestPoniFile, cls).setUpClass() + cls.ponifile = UtilsTest.getimage("Pilatus1M.poni") + + @classmethod + def tearDownClass(cls)->None: + super(TestPoniFile, cls).tearDownClass() + cls.ponifile = None + + def test_filename(self): + poni = PoniFile(self.ponifile) + self.assertAlmostEqual(poni.wavelength, 1e-10, msg="wavelength matches") + self.assertAlmostEqual(poni.dist, 1.6, places=1, msg="dist matches") + + def test_path(self): + poni = PoniFile(pathlib.Path(self.ponifile)) + self.assertAlmostEqual(poni.wavelength, 1e-10, msg="wavelength matches") + self.assertAlmostEqual(poni.dist, 1.6, places=1, msg="dist matches") + + class TestIsoTime(unittest.TestCase): def test_get(self): @@ -110,7 +134,7 @@ def test_NXmonopd(self): self.assertTrue(numpy.allclose(a, b), msg=f"check {k}") elif isinstance(a, (int, float, str, tuple, type(None))): self.assertEqual(a, b, k) - elif isinstance(a, io.ponifile.PoniFile): + elif isinstance(a, PoniFile): self.assertEqual(a.as_dict(), b.as_dict(), "Poni matches") elif isinstance(a, pyFAI.method_registry.IntegrationMethod): self.assertEqual(a.method, b.method, "method matches") @@ -151,7 +175,7 @@ def test_NXcansas(self): self.assertTrue(numpy.allclose(a, b), msg=f"check {k}") elif isinstance(a, (int, float, str, tuple, type(None))): self.assertEqual(a, b, k) - elif isinstance(a, io.ponifile.PoniFile): + elif isinstance(a, PoniFile): self.assertEqual(a.as_dict(), b.as_dict(), "Poni matches") elif isinstance(a, pyFAI.method_registry.IntegrationMethod): self.assertEqual(a.method, b.method, "method matches") @@ -280,6 +304,7 @@ def suite(): testsuite.addTest(loader(TestHDF5Writer)) testsuite.addTest(loader(TestFabIOWriter)) testsuite.addTest(loader(TestSpotWriter)) + testsuite.addTest(loader(TestPoniFile)) return testsuite