Newer
Older
Russell Taylor
committed
#ifndef MANTID_API_IALGORITHM_H_
#define MANTID_API_IALGORITHM_H_
Peterson, Peter
committed
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
Gigg, Martyn Anthony
committed
#include "MantidAPI/DllConfig.h"
#include "MantidAPI/IAlgorithm_fwd.h"
#include "MantidKernel/IPropertyManager.h"
namespace Poco {
class AbstractObserver;
template <class T> class ActiveResult;
}
Peterson, Peter
committed
namespace Mantid {
namespace API {
Peterson, Peter
committed
/** As we have multiple interfaces to the same logical algorithm (Algorithm &
* AlgorithmProxy)
* we need a way of uniquely identifying managed algorithms. It can be
* AlgorithmID.
Russell Taylor
committed
*/
Peterson, Peter
committed
Russell Taylor
committed
/**
Peterson, Peter
committed
IAlgorithm is the interface implemented by the Algorithm base class.
Concrete algorithms, derived from the Algorithm base class are controlled
Peterson, Peter
committed
via this interface.
@author Russell Taylor, Tessella Support Services plc
@author Based on the Gaudi class of the same name (see
http://proj-gaudi.web.cern.ch/proj-gaudi/)
Peterson, Peter
committed
@date 11/09/2007
Copyright © 2007-2010 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
National Laboratory & European Spallation Source
Peterson, Peter
committed
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>.
Peterson, Peter
committed
Code Documentation is available at: <http://doxygen.mantidproject.org>
*/
class MANTID_API_DLL IAlgorithm : virtual public Kernel::IPropertyManager {
Peterson, Peter
committed
public:
/// function to return a name of the algorithm, must be overridden in all
/// algorithms
Peterson, Peter
committed
virtual const std::string name() const = 0;
/// function to return a version of the algorithm, must be overridden in all
/// algorithms
Janik Zikovsky
committed
virtual int version() const = 0;
/// function returns a summary message that will be displayed in the default
/// GUI, and in the help.
virtual const std::string summary() const = 0;
Peterson, Peter
committed
/// function to return a category of the algorithm.
virtual const std::string category() const = 0;
/// Function to return all of the categories that contain this algorithm
virtual const std::vector<std::string> categories() const = 0;
/// Function to return the separator token for the category string
virtual const std::string categorySeparator() const = 0;
Campbell, Stuart
committed
/// function to return any aliases of the algorithm.
virtual const std::string alias() const = 0;
/// function to return optional URL for algorithm documentation.
/// Override if algorithm not part of the Mantid distribution
virtual const std::string helpURL() const = 0;
/** @name Algorithms As Methods */
///@{
/// Returns a name that will be used when attached as a workspace method.
/// Empty string indicates do not attach
virtual const std::string workspaceMethodName() const = 0;
/// Returns a set of class names that will have the method attached. Empty
/// list indicates all types
virtual const std::vector<std::string> workspaceMethodOn() const = 0;
/// Returns the name of the input workspace property used by the calling
/// object
virtual const std::string workspaceMethodInputProperty() const = 0;
///@}
/// Algorithm ID. Unmanaged algorithms return 0 (or NULL?) values. Managed
/// ones have non-zero.
virtual AlgorithmID getAlgorithmID() const = 0;
Peterson, Peter
committed
/** Initialization method invoked by the framework. This method is responsible
* for any bookkeeping of initialization required by the framework itself.
* It will in turn invoke the init() method of the derived algorithm,
* and of any Child Algorithms which it creates.
Peterson, Peter
committed
*/
virtual void initialize() = 0;
/// Method checking errors on ALL the inputs, before execution. For use mostly
/// in dialogs.
virtual std::map<std::string, std::string> validateInputs() = 0;
/// System execution. This method invokes the exec() method of a concrete
/// algorithm.
Peterson, Peter
committed
virtual bool execute() = 0;
Russell Taylor
committed
/// Asynchronous execution of the algorithm.
Peterson, Peter
committed
virtual Poco::ActiveResult<bool> executeAsync() = 0;
/// Execute as a Child Algorithm, with try/catch
virtual void executeAsChildAlg() = 0;
Peterson, Peter
committed
/// Check whether the algorithm is initialized properly
virtual bool isInitialized() const = 0;
/// Check whether the algorithm has already been executed
virtual bool isExecuted() const = 0;
/// Raises the cancel flag. interuption_point() method if called inside exec()
/// checks this flag
Peterson, Peter
committed
/// and if true terminates the algorithm.
Peterson, Peter
committed
/// True if the algorithm is running.
virtual bool isRunning() const = 0;
Peterson, Peter
committed
/// To query whether algorithm is a child. Default to false
virtual bool isChild() const = 0;
/** To set whether algorithm is a child.
* @param isChild :: True - the algorithm is a child algorithm. False - this
* is a full managed algorithm.
Peterson, Peter
committed
*/
virtual void setChild(const bool isChild) = 0;
/// If true history will be recorded for a child
virtual void enableHistoryRecordingForChild(const bool on) = 0;
/// Set whether we always store the output in the analysis data service
virtual void setAlwaysStoreInADS(const bool doStore) = 0;
Peterson, Peter
committed
/// To query whether an algorithm should rethrow exceptions when executing.
virtual void setRethrows(const bool rethrow) = 0;
Peterson, Peter
committed
/// Add an observer for a notification
virtual void addObserver(const Poco::AbstractObserver &observer) const = 0;
Peterson, Peter
committed
/// Remove an observer
virtual void removeObserver(const Poco::AbstractObserver &observer) const = 0;
Peterson, Peter
committed
/// Logging can be disabled by passing a value of false
Russell Taylor
committed
virtual void setLogging(const bool value) = 0;
/// returns the status of logging, True = enabled
virtual bool isLogging() const = 0;
/// gets the logging priority offset
virtual void setLoggingOffset(const int value) = 0;
/// returns the logging priority offset
virtual int getLoggingOffset() const = 0;
/// disable Logging of start and end messages
virtual void setAlgStartupLogging(const bool enabled) = 0;
/// get the state of Logging of start and end messages
virtual bool getAlgStartupLogging() const = 0;
/// setting the child start progress
virtual void setChildStartProgress(const double startProgress) const = 0;
/// setting the child end progress
virtual void setChildEndProgress(const double endProgress) const = 0;
/// Serialize an algorithm
virtual std::string toString() const = 0;
Peterson, Peter
committed
};
} // namespace API
} // namespace Mantid
#endif /*MANTID_KERNEL_IALGORITHM_H_*/