diff --git a/news/get_variance_covariance_map.rst b/news/get_variance_covariance_map.rst new file mode 100644 index 0000000..5e9db10 --- /dev/null +++ b/news/get_variance_covariance_map.rst @@ -0,0 +1,23 @@ +**Added:** + +* Expose ``lsq.GetVarianceCovarianceMap()`` for covariance between refined parameters + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +* diff --git a/src/extensions/lsq_ext.cpp b/src/extensions/lsq_ext.cpp index b63d104..b28ba8d 100644 --- a/src/extensions/lsq_ext.cpp +++ b/src/extensions/lsq_ext.cpp @@ -19,6 +19,8 @@ #include #include +#include +#include #include @@ -45,6 +47,21 @@ bool _SafeRefine(LSQNumObj & lsq, REAL maxChi2factor, int nbCycle, bool useLeven callBeginEndOptimization, minChi2var); } +bp::dict _GetVarianceCovarianceMap(LSQNumObj & lsq) +{ + const std::map, REAL> &m = + lsq.GetVarianceCovarianceMap(); + bp::dict d; + for (std::map, REAL>::const_iterator it = m.begin(); + it != m.end(); ++it) + { + const RefinablePar *pi = it->first.first; + const RefinablePar *pj = it->first.second; + d[bp::make_tuple(pi->GetName(), pj->GetName())] = it->second; + } + return d; +} + } // namespace void wrap_lsq() @@ -102,6 +119,7 @@ void wrap_lsq() .def("GetLSQDeriv", &LSQNumObj::GetLSQDeriv, bp::arg("par"), return_value_policy()) + .def("GetVarianceCovarianceMap", &_GetVarianceCovarianceMap) .def("BeginOptimization", &LSQNumObj::BeginOptimization, (bp::arg("allowApproximations")=false, bp::arg("enableRestraints")=false))