diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CostFuncLeastSquares.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CostFuncLeastSquares.h index 730063e7e756f9bdbf65502323ed765cb8f52db8..5909b3553ab5917e4eb3bace70668a973a527a1b 100644 --- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CostFuncLeastSquares.h +++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CostFuncLeastSquares.h @@ -10,6 +10,10 @@ namespace Mantid { +namespace Kernel +{ + class Logger; +} namespace CurveFitting { class SeqDomain; @@ -44,7 +48,7 @@ class DLLExport CostFuncLeastSquares : public CostFuncFitting { public: /// Constructor - CostFuncLeastSquares():CostFuncFitting(),m_value(0),m_pushed(false){} + CostFuncLeastSquares(); /// Virtual destructor virtual ~CostFuncLeastSquares() {} @@ -103,6 +107,7 @@ private: friend class SeqDomain; friend class ParDomain; + Kernel::Logger & m_log; }; } // namespace CurveFitting diff --git a/Code/Mantid/Framework/CurveFitting/src/CostFuncLeastSquares.cpp b/Code/Mantid/Framework/CurveFitting/src/CostFuncLeastSquares.cpp index 64b56b6792307a098cd575a53c1f33fc7cd802b6..d746a2ce1513a9730f7d476bd489d49e4072d637 100644 --- a/Code/Mantid/Framework/CurveFitting/src/CostFuncLeastSquares.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/CostFuncLeastSquares.cpp @@ -8,6 +8,8 @@ #include "MantidAPI/CompositeDomain.h" #include "MantidAPI/FunctionValues.h" +#include <iomanip> + namespace { const bool debug = false; @@ -20,6 +22,12 @@ namespace CurveFitting DECLARE_COSTFUNCTION(CostFuncLeastSquares,Least squares) +/** + * Constructor + */ +CostFuncLeastSquares::CostFuncLeastSquares() : CostFuncFitting(),m_value(0),m_pushed(false), + m_log(Kernel::Logger::get("CostFuncLeastSquares")) {} + /** Calculate value of cost function * @return :: The value of the function */ @@ -452,8 +460,41 @@ void CostFuncLeastSquares::calActiveCovarianceMatrix(GSLMatrix& covar, double ep { valDerivHessian(); } + if(m_log.is(Kernel::Logger::Priority::PRIO_INFORMATION)) + { + m_log.information() << "== Hessian (H) ==\n"; + std::ios::fmtflags prevState = m_log.information().flags(); + m_log.information() << std::left << std::fixed; + for(size_t i = 0; i < m_hessian.size1(); ++i) + { + for(size_t j = 0; j < m_hessian.size2(); ++j) + { + m_log.information() << std::setw(10); + m_log.information() << m_hessian.get(i,j) << " "; + } + m_log.information() << "\n"; + } + m_log.information().flags(prevState); + } covar = m_hessian; covar.invert(); + if(m_log.is(Kernel::Logger::Priority::PRIO_INFORMATION)) + { + m_log.information() << "== Covariance matrix (H^-1) ==\n"; + std::ios::fmtflags prevState = m_log.information().flags(); + m_log.information() << std::left << std::fixed; + for(size_t i = 0; i < covar.size1(); ++i) + { + for(size_t j = 0; j < covar.size2(); ++j) + { + m_log.information() << std::setw(10); + m_log.information() << covar.get(i,j) << " "; + } + m_log.information() << "\n"; + } + m_log.information().flags(prevState); + } + } } // namespace CurveFitting diff --git a/Code/Mantid/Framework/CurveFitting/src/Fit.cpp b/Code/Mantid/Framework/CurveFitting/src/Fit.cpp index 68e617c8b8b37db831d83344c9cd6f6ab20fad7f..d89d55335e527afa9f9dc5349310c09c9444ccd6 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Fit.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Fit.cpp @@ -611,8 +611,6 @@ namespace CurveFitting size_t iter = 0; bool success = false; std::string errorString; - //double costFuncVal = 0; - //do g_log.debug("Starting minimizer iteration\n"); while (static_cast<int>(iter) < maxIterations) { @@ -633,6 +631,10 @@ namespace CurveFitting } prog.report(); m_function->iterationFinished(); + if(g_log.is(Kernel::Logger::Priority::PRIO_INFORMATION)) + { + g_log.information() << "Iteration " << iter << ", cost function = " << minimizer->costFunctionVal() << "\n"; + } } g_log.information() << "Number of minimizer iterations=" << iter << "\n";