Skip to content

Commit

Permalink
Re #11617. Created a base class for fitting algorithms.
Browse files Browse the repository at this point in the history
  • Loading branch information
mantid-roman committed May 7, 2015
1 parent 1993ecc commit d34cafd
Show file tree
Hide file tree
Showing 5 changed files with 402 additions and 315 deletions.
2 changes: 2 additions & 0 deletions Code/Mantid/Framework/CurveFitting/CMakeLists.txt
Expand Up @@ -53,6 +53,7 @@ set ( SRC_FILES
src/Gaussian.cpp
src/GaussianComptonProfile.cpp
src/GramCharlierComptonProfile.cpp
src/IFittingAlgorithm.cpp
src/IkedaCarpenterPV.cpp
src/LatticeDomainCreator.cpp
src/LatticeFunction.cpp
Expand Down Expand Up @@ -170,6 +171,7 @@ set ( INC_FILES
inc/MantidCurveFitting/Gaussian.h
inc/MantidCurveFitting/GaussianComptonProfile.h
inc/MantidCurveFitting/GramCharlierComptonProfile.h
inc/MantidCurveFitting/IFittingAlgorithm.h
inc/MantidCurveFitting/IkedaCarpenterPV.h
inc/MantidCurveFitting/Jacobian.h
inc/MantidCurveFitting/LatticeDomainCreator.h
Expand Down
37 changes: 8 additions & 29 deletions Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/Fit.h
Expand Up @@ -4,10 +4,11 @@
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
#include "MantidAPI/Algorithm.h"
#include "MantidAPI/IFunction.h"
#include "MantidAPI/Workspace.h"
#include "MantidAPI/IDomainCreator.h"
//#include "MantidAPI/Algorithm.h"
//#include "MantidAPI/IFunction.h"
//#include "MantidAPI/Workspace.h"
//#include "MantidAPI/IDomainCreator.h"
#include "MantidCurveFitting/IFittingAlgorithm.h"

namespace Mantid {

Expand Down Expand Up @@ -93,10 +94,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
File change history is stored at: <https://github.com/mantidproject/mantid>
Code Documentation is available at: <http://doxygen.mantidproject.org>
*/
class DLLExport Fit : public API::Algorithm {
class DLLExport Fit : public IFittingAlgorithm {
public:
/// Default constructor
Fit() : API::Algorithm(), m_domainType(API::IDomainCreator::Simple){};
Fit() : IFittingAlgorithm(){}
/// Algorithm's name for identification overriding a virtual method
virtual const std::string name() const { return "Fit"; }
/// Summary of algorithms purpose
Expand All @@ -106,33 +107,11 @@ class DLLExport Fit : public API::Algorithm {

/// Algorithm's version for identification overriding a virtual method
virtual int version() const { return (1); }
/// Algorithm's category for identification overriding a virtual method
virtual const std::string category() const { return "Optimization"; }

protected:
// Overridden Algorithm methods
void init();
void initConcrete();
void exec();
/// Override this method to perform a custom action right after a property was
/// set.
/// The argument is the property name. Default - do nothing.
virtual void afterPropertySet(const std::string &propName);
void setFunction();
void addWorkspace(const std::string &workspaceNameProperty,
bool addProperties = true);
void addWorkspaces();
/// Read domain type property and cache the value
void setDomainType();
void copyMinimizerOutput(const API::IFuncMinimizer &minimizer);

/// Pointer to the fitting function
API::IFunction_sptr m_function;
/// Pointer to a domain creator
boost::shared_ptr<API::IDomainCreator> m_domainCreator;
friend class API::IDomainCreator;
std::vector<std::string> m_workspacePropertyNames;
/// Keep the domain type
API::IDomainCreator::DomainType m_domainType;
};

} // namespace CurveFitting
Expand Down
@@ -0,0 +1,85 @@
#ifndef MANTID_CURVEFITTING_IFITTINGALGORITHM_H_
#define MANTID_CURVEFITTING_IFITTINGALGORITHM_H_

#include "MantidKernel/System.h"
#include "MantidAPI/Algorithm.h"
#include "MantidAPI/IDomainCreator.h"

namespace Mantid {

namespace API {
class IFunction;
}

namespace CurveFitting {

/**
A base class for fitting algorithms. It declares two properties:
"Function" and "InputWorkspace". When these properties are set it
creates an appropriate domain creator.
The concrete classes must implement methods:
- name()
- version()
- summary()
- exec()
- initConcrete() to declare more properties
Copyright &copy; 2015 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
National Laboratory & European Spallation Source
This file is part of Mantid.
Mantid is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
Mantid is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
File change history is stored at: <https://github.com/mantidproject/mantid>
Code Documentation is available at: <http://doxygen.mantidproject.org>
*/
class DLLExport IFittingAlgorithm : public API::Algorithm {
public:
IFittingAlgorithm();
virtual ~IFittingAlgorithm();

virtual const std::string category() const;

private:
void init();
/// Child classes declare their properties here.
virtual void initConcrete() = 0;
virtual void afterPropertySet(const std::string &propName);
void addWorkspace(const std::string &workspaceNameProperty,
bool addProperties = true);
/// Read domain type property and cache the value
void setDomainType();

protected:
void setFunction();
void addWorkspaces();

/// Keep the domain type
API::IDomainCreator::DomainType m_domainType;
/// Pointer to the fitting function
boost::shared_ptr<API::IFunction> m_function;
/// Pointer to a domain creator
boost::shared_ptr<API::IDomainCreator> m_domainCreator;
std::vector<std::string> m_workspacePropertyNames;

friend class API::IDomainCreator;
};

} // namespace CurveFitting
} // namespace Mantid

#endif /* MANTID_CURVEFITTING_IFITTINGALGORITHM_H_ */

0 comments on commit d34cafd

Please sign in to comment.