From 9f727f820ec925211f96f98bf00f23aac0fcd1c0 Mon Sep 17 00:00:00 2001 From: Clemens Schmid Date: Fri, 16 Jan 2026 08:51:58 +0100 Subject: [PATCH 1/2] Add SetPowderPatternObsSigma to ObjCryst and expose GetPowderPatternObsSigma/SetPowderPatternObsSigma in the Python bindings --- src/extensions/powderpattern_ext.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/extensions/powderpattern_ext.cpp b/src/extensions/powderpattern_ext.cpp index e9188d2..28646eb 100644 --- a/src/extensions/powderpattern_ext.cpp +++ b/src/extensions/powderpattern_ext.cpp @@ -141,6 +141,13 @@ void setpowderpatternobs (PowderPattern& pp, bp::object x) pp.SetPowderPatternObs(cvx); } +void setpowderpatternobssigma (PowderPattern& pp, bp::object x) +{ + CrystVector_REAL cvx; + assignCrystVector(cvx, x); + pp.SetPowderPatternObsSigma(cvx); +} + // Allow override (since we can't benefit from override in RefinableObjWrap) class PowderPatternWrap : public PowderPattern, public wrapper @@ -230,6 +237,9 @@ void wrap_powderpattern() .def("GetPowderPatternObs", &PowderPattern::GetPowderPatternObs, return_value_policy()) + .def("GetPowderPatternObsSigma", + &PowderPattern::GetPowderPatternObsSigma, + return_value_policy()) .def("GetPowderPatternX", &PowderPattern::GetPowderPatternX, return_value_policy()) @@ -287,6 +297,9 @@ void wrap_powderpattern() .def("SetPowderPatternObs", &setpowderpatternobs, bp::arg("obs")) + .def("SetPowderPatternObsSigma", + &setpowderpatternobssigma, + bp::arg("sigma")) .def("FitScaleFactorForR", &PowderPattern::FitScaleFactorForR) .def("FitScaleFactorForIntegratedR", From 92f9fdd94a08ff8cbde2dd08d4d0de18e2869d29 Mon Sep 17 00:00:00 2001 From: Clemens Schmid Date: Mon, 2 Feb 2026 14:03:07 +0100 Subject: [PATCH 2/2] Add test for GetPowderPatternObsSigma/SetPowderPatternObsSigma --- tests/test_powderpattern.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_powderpattern.py b/tests/test_powderpattern.py index 48c6837..7acb666 100644 --- a/tests/test_powderpattern.py +++ b/tests/test_powderpattern.py @@ -101,6 +101,17 @@ def test_SetPowderPatternObs(self): self.assertTrue(np.array_equal(obs[::-1], pp.GetPowderPatternObs())) return + def test_SetPowderPatternObsSigma(self): + pp = self.pp + obs = np.array([1.0, 3.0, 7.0]) + sig = np.array([1.0, 2.0, 3.0]) + self.assertRaises(ObjCrystException, pp.SetPowderPatternObsSigma, sig) + pp.SetPowderPatternPar(0, 0.5, 3) + pp.SetPowderPatternObs(obs) + pp.SetPowderPatternObsSigma(sig) + self.assertTrue(np.array_equal(sig, pp.GetPowderPatternObsSigma())) + return + def test_SetPowderPatternPar(self): pp = self.pp pp.SetPowderPatternPar(0, 0.25, 5)