From 80544917d0c9a0233a9443804e1a7a3c15e44c56 Mon Sep 17 00:00:00 2001 From: Michael Wedel Date: Thu, 31 Jul 2014 10:58:03 +0200 Subject: [PATCH] Refs #9782. Comparison capability on AutoDiffTestAlg Roman's changes to make a comparison possible between numerical and auto diff. --- .../inc/MantidCurveFitting/AutoDiffTestAlg.h | 4 +- .../CurveFitting/src/AutoDiffTestAlg.cpp | 38 +++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/AutoDiffTestAlg.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/AutoDiffTestAlg.h index 8273c3098d85..29361fb5f562 100644 --- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/AutoDiffTestAlg.h +++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/AutoDiffTestAlg.h @@ -46,6 +46,8 @@ namespace CurveFitting void init(); void exec(); + std::string m_derType; + }; @@ -53,4 +55,4 @@ namespace CurveFitting } // namespace CurveFitting } // namespace Mantid -#endif /* MANTID_CURVEFITTING_AUTODIFFTESTALG_H_ */ \ No newline at end of file +#endif /* MANTID_CURVEFITTING_AUTODIFFTESTALG_H_ */ diff --git a/Code/Mantid/Framework/CurveFitting/src/AutoDiffTestAlg.cpp b/Code/Mantid/Framework/CurveFitting/src/AutoDiffTestAlg.cpp index 9108c6e29760..1a3733850e3b 100644 --- a/Code/Mantid/Framework/CurveFitting/src/AutoDiffTestAlg.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/AutoDiffTestAlg.cpp @@ -1,8 +1,10 @@ #include "MantidCurveFitting/AutoDiffTestAlg.h" -#include "MantidCurveFitting/Gaussian.h" +#include "MantidCurveFitting/GaussianNumDiff.h" #include "MantidCurveFitting/GaussianAutoDiff.h" #include "MantidAPI/CompositeFunction.h" +#include "MantidKernel/Timer.h" +#include "MantidKernel/Logger.h" namespace Mantid { @@ -53,15 +55,42 @@ void AutoDiffTestAlg::init() declareProperty(new WorkspaceProperty("InputWorkspace","",Direction::Input), "Data with 20 gaussian peaks."); declareProperty(new WorkspaceProperty("OutputWorkspace","",Direction::Output), "Data with 20 gaussian peaks."); declareProperty(new WorkspaceProperty("OutputWorkspacePlot","",Direction::Output), "Data with 20 gaussian peaks."); + declareProperty("DerivativeType","adept","How to calculate derivatives."); } +//---------------------------------------------------------------------------------------------- +namespace +{ + + // Logger + Kernel::Logger g_log("AutoDiffTestAlg"); + + IFunction_sptr getFunction(const std::string& type) + { + if ( type == "adept" ) + { + return IFunction_sptr(new GaussianAutoDiff); + } + /* + API::CompositeFunction_sptr comp(new API::CompositeFunction); + auto gauss = IFunction_sptr(new GaussianNumDiff); + gauss->initialize(); + comp->addFunction( gauss ); + comp->setAttributeValue("NumDeriv",true); + return comp; + */ + return IFunction_sptr(new GaussianNumDiff); + } +} + //---------------------------------------------------------------------------------------------- /** Execute the algorithm. */ void AutoDiffTestAlg::exec() { MatrixWorkspace_sptr fitData = getProperty("InputWorkspace"); + m_derType = getPropertyValue("DerivativeType"); // reference positions std::vector peakPos; @@ -130,11 +159,10 @@ void AutoDiffTestAlg::exec() sigma.push_back(12.065185190743160); sigma.push_back(5.657079363007425); - // make composite function CompositeFunction_sptr bigFunction(new CompositeFunction); for(size_t i = 0; i < 20; ++i) { - IFunction_sptr g(new GaussianAutoDiff); + IFunction_sptr g = getFunction(m_derType); g->initialize(); g->setParameter(0, peakHeight[i] * 1.1); g->setParameter(2, sigma[i] * 1.15); @@ -145,6 +173,8 @@ void AutoDiffTestAlg::exec() bigFunction->addFunction(g); } + Kernel::Timer timer; + IAlgorithm_sptr fitAlgorithm = createChildAlgorithm("Fit", -1, -1, true); fitAlgorithm->setProperty("CreateOutput", true); fitAlgorithm->setProperty("Output", "FitPeaks1D"); @@ -155,6 +185,8 @@ void AutoDiffTestAlg::exec() fitAlgorithm->execute(); + g_log.warning() << "Fit took " << timer.elapsed() << " seconds to complete" << std::endl; + ITableWorkspace_sptr t = fitAlgorithm->getProperty("OutputParameters"); MatrixWorkspace_sptr mw = fitAlgorithm->getProperty("OutputWorkspace");