From 53530efbb6d8f512e7584812e8fa11bb2792d0b2 Mon Sep 17 00:00:00 2001 From: Vincent Favre-Nicolin Date: Tue, 28 Jul 2026 13:40:56 +0200 Subject: [PATCH 1/2] Expose GetLinearPolarRate/SetLinearPolarRate and clock accessors in Radiation - Add Python bindings for Radiation::GetLinearPolarRate() and Radiation::SetLinearPolarRate() (available in current libobjcryst) - Add GetClockWavelength() and GetClockRadiation() bindings (were missing) - Add GetClockLinearPolarRate() guarded behind LIBOBJCRYST_VERSION >= 2026002000000LL (requires libobjcryst update with vincefn/objcryst PR #79) - Add test_radiation.py::testLinearPolarRate Closes #38 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/extensions/radiation_ext.cpp | 11 +++++++++++ tests/test_radiation.py | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/extensions/radiation_ext.cpp b/src/extensions/radiation_ext.cpp index 9c3ce59..952429f 100644 --- a/src/extensions/radiation_ext.cpp +++ b/src/extensions/radiation_ext.cpp @@ -22,6 +22,7 @@ #include #include +#include namespace bp = boost::python; using namespace boost::python; @@ -51,5 +52,15 @@ void wrap_radiation() (bp::arg("XRayTubeElementName"), bp::arg("alpha2Alpha2ratio")=0.5)) .def("GetXRayTubeDeltaLambda", & Radiation::GetXRayTubeDeltaLambda) .def("GetXRayTubeAlpha2Alpha1Ratio", & Radiation::GetXRayTubeAlpha2Alpha1Ratio) + .def("GetLinearPolarRate", &Radiation::GetLinearPolarRate) + .def("SetLinearPolarRate", &Radiation::SetLinearPolarRate) + .def("GetClockWavelength", &Radiation::GetClockWavelength, + return_value_policy()) + .def("GetClockRadiation", &Radiation::GetClockRadiation, + return_value_policy()) +#if LIBOBJCRYST_VERSION >= 2026002000000LL + .def("GetClockLinearPolarRate", &Radiation::GetClockLinearPolarRate, + return_value_policy()) +#endif ; } diff --git a/tests/test_radiation.py b/tests/test_radiation.py index 1740de9..645c313 100644 --- a/tests/test_radiation.py +++ b/tests/test_radiation.py @@ -44,6 +44,17 @@ def testType(self): ) return + def testLinearPolarRate(self): + """Test getting and setting linear polarisation rate.""" + r = Radiation() + # Default for X-ray should be 0 + self.assertAlmostEqual(r.GetLinearPolarRate(), 0.0) + r.SetLinearPolarRate(0.95) + self.assertAlmostEqual(r.GetLinearPolarRate(), 0.95) + r.SetLinearPolarRate(0.0) + self.assertAlmostEqual(r.GetLinearPolarRate(), 0.0) + return + if __name__ == "__main__": unittest.main() From d9f6c7087f67bfd0849690567dce07bb754d9f8d Mon Sep 17 00:00:00 2001 From: Vincent Favre-Nicolin Date: Tue, 28 Jul 2026 13:47:01 +0200 Subject: [PATCH 2/2] docs: add news item for PR #93 (linear polarisation rate bindings) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- news/93.rst | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 news/93.rst diff --git a/news/93.rst b/news/93.rst new file mode 100644 index 0000000..d938b30 --- /dev/null +++ b/news/93.rst @@ -0,0 +1,29 @@ +**Added:** + +* Exposed ``Radiation.GetLinearPolarRate()``, ``Radiation.SetLinearPolarRate()``, + ``Radiation.GetClockWavelength()``, and ``Radiation.GetClockRadiation()`` via + Python bindings. Closes `#38 `_. + ``Radiation.GetClockLinearPolarRate()`` is also bound and will be available once + `diffpy/libobjcryst` picks up `vincefn/objcryst PR #79 + `_, which adds the dedicated + polarisation clock and fixes the polarisation-correction recalculation trigger. + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +*