Mantid
Loading...
Searching...
No Matches
IFunction.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2009 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
7#pragma once
8
9//----------------------------------------------------------------------
10// Includes
11//----------------------------------------------------------------------
12#include "MantidAPI/DllConfig.h"
16#include "MantidAPI/Jacobian.h"
19#include "MantidKernel/Matrix.h"
20#include "MantidKernel/Unit.h"
22
23#ifndef Q_MOC_RUN
24#include <boost/variant.hpp>
25#include <memory>
26#endif
27
28#include <string>
29#include <utility>
30
31#include <vector>
32
33#ifdef _WIN32
34#pragma warning(disable : 4250)
35#endif
36
37namespace Mantid {
38namespace Kernel {
39//----------------------------------------------------------------------
40// Forward declaration
41//----------------------------------------------------------------------
42class ProgressBase;
43} // namespace Kernel
44namespace API {
45class Workspace;
46class MatrixWorkspace;
47class FunctionHandler;
48
56template <class... Ts> struct AttributeLambdaVisitor : Ts... {
57 using Ts::operator()...;
58};
59template <class... Ts> AttributeLambdaVisitor(Ts...) -> AttributeLambdaVisitor<Ts...>;
60
166class MANTID_API_DLL IFunction {
167public:
171 struct ValidationException : public std::runtime_error {
172 public:
173 ValidationException(const std::string &ErrorMsg) : std::runtime_error(ErrorMsg) {}
174 };
175
181 public:
182 ValidatorEvaluator() {}; // default constructor
183 template <typename T1> static void evaluate(T1 &inputData, Mantid::Kernel::IValidator_sptr validator) {
184 std::string error;
185
186 if (validator != nullptr) {
187 error = validator->isValid(inputData);
188 }
189
190 if (error != "") {
191 throw IFunction::ValidationException("Set Attribute Error: " + error);
192 }
193 }
194 };
195
203 template <typename T = void> class DLLExport AttributeVisitor : public boost::static_visitor<T> {
204 public:
206 virtual ~AttributeVisitor() = default;
208 T operator()(std::string &str) const { return apply(str); }
210 T operator()(double &d) const { return apply(d); }
212 T operator()(int &i) const { return apply(i); }
214 T operator()(bool &b) const { return apply(b); }
216 T operator()(std::vector<double> &v) const { return apply(v); }
217
218 protected:
220 virtual T apply(std::string &) const = 0;
222 virtual T apply(double &) const = 0;
224 virtual T apply(int &) const = 0;
226 virtual T apply(bool &) const = 0;
228 virtual T apply(std::vector<double> &) const = 0;
229
231 template <typename T1> void evaluateValidator(T1 &inputData) const {
232 if (m_validator != nullptr) {
233 ValidatorEvaluator::evaluate(inputData, m_validator);
234 }
235 }
236
239 };
240
244 template <typename T = void> class DLLExport ConstAttributeVisitor : public boost::static_visitor<T> {
245 public:
247 virtual ~ConstAttributeVisitor() = default;
249 T operator()(const std::string &str) const { return apply(str); }
251 T operator()(const double &d) const { return apply(d); }
253 T operator()(const int &i) const { return apply(i); }
255 T operator()(const bool &b) const { return apply(b); }
257 T operator()(const std::vector<double> &v) const { return apply(v); }
258
259 protected:
261 virtual T apply(const std::string &str) const = 0;
263 virtual T apply(const double &d) const = 0;
265 virtual T apply(const int &i) const = 0;
267 virtual T apply(const bool &i) const = 0;
269 virtual T apply(const std::vector<double> &) const = 0;
270
272 template <typename T1> void evaluateValidator(T1 &inputData) const {
273 if (m_validator != nullptr) {
274 ValidatorEvaluator::evaluate(inputData, m_validator);
275 }
276 }
277
280 };
281
285 class MANTID_API_DLL Attribute {
286 public:
288 explicit Attribute() : m_data(std::string()), m_quoteValue(false) {}
290 explicit Attribute(const std::string &str, bool quoteValue = false) : m_data(str), m_quoteValue(quoteValue) {}
292 explicit Attribute(const int &i) : m_data(i), m_quoteValue(false) {}
294 explicit Attribute(const double &d) : m_data(d), m_quoteValue(false) {}
296 explicit Attribute(const bool &b) : m_data(b), m_quoteValue(false) {}
298 explicit Attribute(const char *c) : m_data(std::string(c)), m_quoteValue(false) {}
300 explicit Attribute(const std::vector<double> &v) : m_data(v), m_quoteValue(false) {}
301
303 template <typename T> T apply(AttributeVisitor<T> &v) { return boost::apply_visitor(v, m_data); }
305 template <typename T> T apply(ConstAttributeVisitor<T> &v) const { return boost::apply_visitor(v, m_data); }
307 template <typename... Ts> void apply(AttributeLambdaVisitor<Ts...> &v) { boost::apply_visitor(v, m_data); }
308
310 void setValidator(const Kernel::IValidator_sptr &validator) const;
312 void evaluateValidator() const;
314 template <typename T> void evaluateValidator(T &inputData) const {
315 if (m_validator != nullptr) {
316 ValidatorEvaluator::evaluate(inputData, m_validator);
317 }
318 }
321
323 std::string type() const;
325 std::string value() const;
328 std::string asString() const;
331 std::string asQuotedString() const;
333 std::string asUnquotedString() const;
335 int asInt() const;
338 double asDouble() const;
340 bool asBool() const;
342 std::vector<double> asVector() const;
344 bool isEmpty() const;
345
347 void setString(const std::string &str);
349 void setDouble(const double &);
351 void setInt(const int &);
353 void setBool(const bool &);
355 void setVector(const std::vector<double> &);
356 // Set value
357 template <typename T> void setValue(const T &v) {
358 evaluateValidator(v);
359
360 m_data = v;
361 }
363 void fromString(const std::string &str);
364
365 private:
367 mutable boost::variant<std::string, int, double, bool, std::vector<double>> m_data;
369 bool m_quoteValue = false;
372 };
373
380 template <typename T = void> class DLLExport AttributeValidatorVisitor : public boost::static_visitor<T> {
381 public:
382 AttributeValidatorVisitor(const IFunction::Attribute *attrToValidate) : m_attrToValidate{attrToValidate} {}
383
385 T operator()(std::string &str) const { m_attrToValidate->evaluateValidator(str); }
387 T operator()(double &d) const { m_attrToValidate->evaluateValidator(d); }
389 T operator()(int &i) const { m_attrToValidate->evaluateValidator(i); }
391 T operator()(bool &b) const { m_attrToValidate->evaluateValidator(b); }
393 T operator()(std::vector<double> &v) const { m_attrToValidate->evaluateValidator(v); }
394
395 protected:
397 };
398
399 //---------------------------------------------------------//
401 IFunction();
403 virtual ~IFunction();
405 IFunction(const IFunction &) = delete;
407 IFunction &operator=(const IFunction &) = delete;
409 virtual std::string name() const = 0;
411 std::string asString() const;
413 virtual std::shared_ptr<IFunction> clone() const;
414
417 virtual void registerFunctionUsage(bool internal);
420 virtual void setWorkspace(std::shared_ptr<const Workspace> ws) { UNUSED_ARG(ws); }
422 virtual void setMatrixWorkspace(std::shared_ptr<const API::MatrixWorkspace> workspace, size_t wi, double startX,
423 double endX);
425 virtual void initialize() { this->init(); }
428 virtual int64_t estimateNoProgressCalls() const { return 1; }
429
431 void setProgressReporter(std::shared_ptr<Kernel::ProgressBase> reporter);
433 void reportProgress(const std::string &msg = "") const;
436 bool cancellationRequestReceived() const;
437
443 virtual const std::string category() const { return "General"; }
445 virtual const std::vector<std::string> categories() const;
448 virtual const std::string categorySeparator() const { return ";"; }
449
454 virtual void function(const FunctionDomain &domain, FunctionValues &values) const = 0;
456 virtual void functionDeriv(const FunctionDomain &domain, Jacobian &jacobian);
457
458 /* @name Callbacks to perform work at various points other than in the
459 * function */
461 virtual void iterationStarting() {}
463 virtual void iterationFinished() {}
464
468 virtual void setParameter(size_t, const double &value, bool explicitlySet = true) = 0;
470 virtual void setParameterDescription(size_t, const std::string &description) = 0;
472 virtual double getParameter(size_t i) const = 0;
474 virtual void setParameter(const std::string &name, const double &value, bool explicitlySet = true) = 0;
476 virtual void setParameterDescription(const std::string &name, const std::string &description) = 0;
478 virtual double getParameter(const std::string &name) const = 0;
480 virtual bool hasParameter(const std::string &name) const = 0;
482 virtual size_t nParams() const = 0;
484 virtual size_t parameterIndex(const std::string &name) const = 0;
486 virtual std::string parameterName(size_t i) const = 0;
488 virtual std::string parameterDescription(size_t i) const = 0;
490 virtual bool isExplicitlySet(size_t i) const = 0;
492 virtual double getError(size_t i) const = 0;
494 virtual double getError(const std::string &name) const = 0;
496 virtual void setError(size_t i, double err) = 0;
498 virtual void setError(const std::string &name, double err) = 0;
499
501 [[nodiscard]] bool isFixed(size_t i) const;
503 [[nodiscard]] bool isFixedByDefault(size_t i) const;
505 void fix(size_t i, bool isDefault = false);
507 void unfix(size_t i);
509 void fixParameter(const std::string &name, bool isDefault = false);
511 void unfixParameter(const std::string &name);
513 void fixAll(bool isDefault = false);
515 void unfixAll();
517 void unfixAllDefault();
519 void fixAllActive(bool isDefault = false);
520
523 virtual size_t getParameterIndex(const ParameterReference &ref) const = 0;
525 [[nodiscard]] std::vector<std::string> getParameterNames() const;
527
532 [[nodiscard]] virtual double activeParameter(size_t i) const;
535 virtual void setActiveParameter(size_t i, double value);
537 [[nodiscard]] virtual std::string nameOfActive(size_t i) const;
539 [[nodiscard]] virtual std::string descriptionOfActive(size_t i) const;
541 [[nodiscard]] bool isActive(size_t i) const;
543
547 virtual void tie(const std::string &parName, const std::string &expr, bool isDefault = false);
549 virtual void addTies(const std::string &ties, bool isDefault = false);
551 virtual void applyTies();
553 virtual void removeTie(const std::string &parName);
555 virtual void clearTies();
557 virtual bool removeTie(size_t i);
559 virtual ParameterTie *getTie(size_t i) const;
561 virtual bool ignoreTie(const ParameterTie &) const { return false; }
563 void sortTies(const bool checkOnly = false);
565 [[nodiscard]] std::string writeTies() const;
567
571 virtual void addConstraints(const std::string &str, bool isDefault = false);
573 virtual void addConstraint(std::unique_ptr<IConstraint> ic);
575 [[nodiscard]] virtual IConstraint *getConstraint(size_t i) const;
577 virtual void removeConstraint(const std::string &parName);
578 virtual void setConstraintPenaltyFactor(const std::string &parName, const double &c);
580 [[nodiscard]] std::string writeConstraints() const;
582 virtual void clearConstraints();
584
588 [[nodiscard]] virtual size_t nAttributes() const;
590 [[nodiscard]] virtual std::vector<std::string> getAttributeNames() const;
592 [[nodiscard]] virtual std::string attributeName(size_t index) const;
594 [[nodiscard]] virtual Attribute getAttribute(const std::string &name) const;
596 virtual void setAttribute(const std::string &name, const Attribute &);
598 [[nodiscard]] virtual bool hasAttribute(const std::string &name) const;
600 GNU_DIAG_OFF("maybe-uninitialized")
601 template <typename T> void setAttributeValue(const std::string &attName, const T &value) {
602 // Since we can't know T and we would rather not create a universal setter
603 // copy and replace in-place
604 auto attr = getAttribute(attName);
605 attr.setValue(value);
606 setAttribute(attName, attr);
607 }
608 GNU_DIAG_ON("maybe-uninitialized")
609 void setAttributeValue(const std::string &attName, const char *value);
610 void setAttributeValue(const std::string &attName, const std::string &value);
612
614 [[nodiscard]] virtual std::shared_ptr<IFunction> getFunction(size_t i) const;
616 [[nodiscard]] virtual std::size_t nFunctions() const { return 0; }
618 virtual void setUpForFit();
620 [[nodiscard]] virtual size_t getValuesSize(const FunctionDomain &domain) const;
622 [[nodiscard]] virtual size_t getNumberDomains() const;
624 [[nodiscard]] virtual std::vector<std::shared_ptr<IFunction>> createEquivalentFunctions() const;
626 void calNumericalDeriv(const FunctionDomain &domain, Jacobian &jacobian);
628 [[nodiscard]] double calculateStepSize(const double parameterValue) const;
630 void setCovarianceMatrix(const std::shared_ptr<Kernel::Matrix<double>> &covar);
632 std::shared_ptr<const Kernel::Matrix<double>> getCovarianceMatrix() const { return m_covar; }
634 void setReducedChiSquared(double chi2) { m_chiSquared = chi2; }
636 [[nodiscard]] double getReducedChiSquared() const { return m_chiSquared; }
637
639 void setParallel(bool on) { m_isParallel = on; }
641 [[nodiscard]] bool isParallel() const { return m_isParallel; }
642
644 void setHandler(std::unique_ptr<FunctionHandler> handler);
646 [[nodiscard]] FunctionHandler *getHandler() const { return m_handler.get(); }
647
654 enum ParameterStatus { Active, Fixed, FixedByDefault, Tied };
656 virtual void setParameterStatus(size_t i, ParameterStatus status) = 0;
658 [[nodiscard]] virtual ParameterStatus getParameterStatus(size_t i) const = 0;
659
663 enum class StepSizeMethod { DEFAULT, SQRT_EPSILON };
665 virtual void setStepSizeMethod(const StepSizeMethod method);
666
667protected:
669 virtual void init();
671 virtual void declareParameter(const std::string &name, double initValue = 0, const std::string &description = "") = 0;
672
674 [[nodiscard]] double convertValue(double value, Kernel::Unit_sptr &outUnit,
675 const std::shared_ptr<const MatrixWorkspace> &ws, size_t wsIndex) const;
676
677 void convertValue(std::vector<double> &values, Kernel::Unit_sptr &outUnit,
678 const std::shared_ptr<const MatrixWorkspace> &ws, size_t wsIndex) const;
679
681 virtual void declareAttributes() {}
683 virtual void declareParameters() {}
684
686 void declareAttribute(const std::string &name, const API::IFunction::Attribute &defaultValue);
688 void declareAttribute(const std::string &name, const API::IFunction::Attribute &defaultValue,
689 const Kernel::IValidator &validator);
691 void checkAttributeName(const std::string &name);
693 void storeAttributeValue(const std::string &name, const API::IFunction::Attribute &value);
695 void storeReadOnlyAttribute(const std::string &name, const API::IFunction::Attribute &value) const;
697 virtual void addTie(std::unique_ptr<ParameterTie> tie);
698 [[nodiscard]] bool hasOrderedTies() const;
699 void applyOrderedTies();
701 [[nodiscard]] virtual std::string writeToString(const std::string &parentLocalAttributesStr = "") const;
702
703 friend class ParameterTie;
704 friend class CompositeFunction;
706 friend class FunctionGenerator;
707
710
712 std::unique_ptr<FunctionHandler> m_handler;
713
715 std::shared_ptr<Kernel::ProgressBase> m_progReporter;
716
717private:
719 std::map<std::string, API::IFunction::Attribute> m_attrs;
721 std::shared_ptr<Kernel::Matrix<double>> m_covar;
725 std::vector<std::unique_ptr<ParameterTie>> m_ties;
727 std::vector<std::unique_ptr<IConstraint>> m_constraints;
729 std::vector<ParameterTie *> m_orderedTies;
731 bool m_isRegistered{false};
733 std::function<double(const double)> m_stepSizeFunction;
734
735 // Creates and processes a single tie, handling constant expressions and validation
736 std::unique_ptr<ParameterTie> createAndProcessTie(const std::string &parName, const std::string &expr,
737 bool isDefault);
738 // Insert a new tie to the correct position
739 std::pair<std::size_t, std::string> insertTie(std::unique_ptr<ParameterTie> tie);
740};
741
743using IFunction_sptr = std::shared_ptr<IFunction>;
745using IFunction_const_sptr = std::shared_ptr<const IFunction>;
746
755public:
762 virtual ~FunctionHandler() = default;
764 virtual void init() = 0;
766 IFunction_sptr function() const { return m_fun; }
767
768protected:
770};
771
772} // namespace API
773} // namespace Mantid
Kernel::IValidator_sptr m_validator
std::string name
Definition Run.cpp:60
double value
The value of the point.
Definition FitMW.cpp:51
double error
IPeaksWorkspace_sptr workspace
std::map< DeltaEMode::Type, std::string > index
#define DLLExport
Definitions of the DLLImport compiler directives for MSVC.
Definition System.h:37
#define UNUSED_ARG(x)
Function arguments are sometimes unused in certain implmentations but are required for documentation ...
Definition System.h:48
const std::vector< Type > & m_data
#define GNU_DIAG_ON(x)
#define GNU_DIAG_OFF(x)
This is a collection of macros for turning compiler warnings off in a controlled manner.
A composite function is a function containing other functions.
Base class that represents the domain of a function.
FunctionGenerator is a partial implementation of IFunction that defines a function consisting of two ...
Classes inherited from FunctionHandler will handle the function.
Definition IFunction.h:754
FunctionHandler & operator=(const FunctionHandler &)=delete
virtual ~FunctionHandler()=default
Virtual destructor.
IFunction_sptr function() const
Return the handled function.
Definition IFunction.h:766
FunctionHandler(const FunctionHandler &)=delete
Delete copy constructor and copy assignment operator.
virtual void init()=0
abstract init method. It is called after setting handler to the function
IFunction_sptr m_fun
pointer to the handled function
Definition IFunction.h:769
FunctionHandler(IFunction_sptr fun)
Constructor.
Definition IFunction.h:757
A class to store values calculated by a function.
An interface to a constraint.
Definition IConstraint.h:26
Atribute validator visitor class.
Definition IFunction.h:380
T operator()(int &i) const
implements static_visitor's operator() for int
Definition IFunction.h:389
T operator()(std::vector< double > &v) const
implements static_visitor's operator() for vector
Definition IFunction.h:393
AttributeValidatorVisitor(const IFunction::Attribute *attrToValidate)
Definition IFunction.h:382
const IFunction::Attribute * m_attrToValidate
Definition IFunction.h:396
T operator()(double &d) const
implements static_visitor's operator() for double
Definition IFunction.h:387
T operator()(std::string &str) const
implements static_visitor's operator() for std::string
Definition IFunction.h:385
T operator()(bool &b) const
implements static_visitor's operator() for bool
Definition IFunction.h:391
virtual T apply(bool &) const =0
Implement this method to access attribute as bool.
virtual ~AttributeVisitor()=default
Virtual destructor.
T operator()(bool &b) const
implements static_visitor's operator() for bool
Definition IFunction.h:214
virtual T apply(int &) const =0
Implement this method to access attribute as int.
T operator()(double &d) const
implements static_visitor's operator() for double
Definition IFunction.h:210
virtual T apply(std::vector< double > &) const =0
Implement this method to access attribute as vector.
void evaluateValidator(T1 &inputData) const
Evaluates the validator associated with attribute this visitor is to visit.
Definition IFunction.h:231
T operator()(std::string &str) const
implements static_visitor's operator() for std::string
Definition IFunction.h:208
virtual T apply(std::string &) const =0
Implement this method to access attribute as string.
T operator()(std::vector< double > &v) const
implements static_visitor's operator() for vector
Definition IFunction.h:216
virtual T apply(double &) const =0
Implement this method to access attribute as double.
T operator()(int &i) const
implements static_visitor's operator() for int
Definition IFunction.h:212
Attribute is a non-fitting parameter.
Definition IFunction.h:285
Attribute(const bool &b)
Create bool attribute.
Definition IFunction.h:296
Attribute(const int &i)
Create int attribute.
Definition IFunction.h:292
Attribute(const double &d)
Create double attribute.
Definition IFunction.h:294
Kernel::IValidator_sptr getValidator()
Return a clone of the attribute validator;.
Definition IFunction.h:320
T apply(AttributeVisitor< T > &v)
Apply an attribute visitor.
Definition IFunction.h:303
Attribute()
Create empty string attribute.
Definition IFunction.h:288
void evaluateValidator(T &inputData) const
Evaluates the validator associated with this attribute with regards to input value....
Definition IFunction.h:314
Kernel::IValidator_sptr m_validator
Associated Validator.
Definition IFunction.h:371
boost::variant< std::string, int, double, bool, std::vector< double > > m_data
The data holder as boost variant.
Definition IFunction.h:367
Attribute(const std::string &str, bool quoteValue=false)
Create string attribute.
Definition IFunction.h:290
void apply(AttributeLambdaVisitor< Ts... > &v)
Apply a lambda visitor.
Definition IFunction.h:307
Attribute(const char *c)
Create string attribute.
Definition IFunction.h:298
T apply(ConstAttributeVisitor< T > &v) const
Apply a const attribute visitor.
Definition IFunction.h:305
Attribute(const std::vector< double > &v)
Create vector attribute.
Definition IFunction.h:300
Const version of AttributeVisitor.
Definition IFunction.h:244
T operator()(const int &i) const
implements static_visitor's operator() for int
Definition IFunction.h:253
virtual T apply(const double &d) const =0
Implement this mathod to access attribute as double.
virtual T apply(const std::string &str) const =0
Implement this mathod to access attribute as string.
T operator()(const double &d) const
implements static_visitor's operator() for double
Definition IFunction.h:251
virtual T apply(const bool &i) const =0
Implement this mathod to access attribute as bool.
T operator()(const std::vector< double > &v) const
implements static_visitor's operator() for vector
Definition IFunction.h:257
T operator()(const std::string &str) const
implements static_visitor's operator() for std::string
Definition IFunction.h:249
T operator()(const bool &b) const
implements static_visitor's operator() for bool
Definition IFunction.h:255
virtual ~ConstAttributeVisitor()=default
Virtual destructor.
void evaluateValidator(T1 &inputData) const
Evaluates the validator associated with attribute this visitor is to visit.
Definition IFunction.h:272
virtual T apply(const int &i) const =0
Implement this mathod to access attribute as int.
virtual T apply(const std::vector< double > &) const =0
Implement this mathod to access attribute as vector.
This is an interface to a fitting function - a semi-abstarct class.
Definition IFunction.h:166
virtual size_t nParams() const =0
Total number of parameters.
std::function< double(const double)> m_stepSizeFunction
The function used to calculate the step size.
Definition IFunction.h:733
virtual void setParameterDescription(size_t, const std::string &description)=0
Set i-th parameter description.
virtual void setWorkspace(std::shared_ptr< const Workspace > ws)
Set the workspace.
Definition IFunction.h:420
std::shared_ptr< const Kernel::Matrix< double > > getCovarianceMatrix() const
Get the covariance matrix.
Definition IFunction.h:632
virtual double getParameter(size_t i) const =0
Get i-th parameter.
bool m_isParallel
Flag to hint that the function is being used in parallel computations.
Definition IFunction.h:709
virtual void initialize()
Iinialize the function.
Definition IFunction.h:425
virtual void iterationFinished()
Called at the end of an iteration.
Definition IFunction.h:463
IFunction & operator=(const IFunction &)=delete
No copying.
ParameterStatus
Describe parameter status in relation to fitting: Active: Fit varies such parameter directly.
Definition IFunction.h:654
FunctionHandler * getHandler() const
Return the handler.
Definition IFunction.h:646
std::map< std::string, API::IFunction::Attribute > m_attrs
The declared attributes.
Definition IFunction.h:719
double getReducedChiSquared() const
Get the reduced chi^2.
Definition IFunction.h:636
virtual void declareAttributes()
Override to declare function attributes.
Definition IFunction.h:681
virtual ParameterStatus getParameterStatus(size_t i) const =0
Get status of parameter.
virtual bool hasParameter(const std::string &name) const =0
Check if function has a parameter with this name.
virtual void setParameter(size_t, const double &value, bool explicitlySet=true)=0
Set i-th parameter.
virtual const std::string category() const
The categories the Fit function belong to.
Definition IFunction.h:443
virtual int64_t estimateNoProgressCalls() const
Returns an estimate of the number of progress reports a single evaluation of the function will have.
Definition IFunction.h:428
virtual const std::string categorySeparator() const
Function to return the sperator token for the category string.
Definition IFunction.h:448
void setParallel(bool on)
Set the parallel hint.
Definition IFunction.h:639
virtual void setParameterDescription(const std::string &name, const std::string &description)=0
Set description of parameter by name.
virtual size_t getParameterIndex(const ParameterReference &ref) const =0
Return parameter index from a parameter reference.
void setReducedChiSquared(double chi2)
Set the reduced chi^2.
Definition IFunction.h:634
virtual void setError(size_t i, double err)=0
Set the fitting error for a parameter.
virtual std::string parameterDescription(size_t i) const =0
Returns the description of parameter i.
virtual void iterationStarting()
Called at the start of each iteration.
Definition IFunction.h:461
std::vector< ParameterTie * > m_orderedTies
Ties ordered in order of correct application.
Definition IFunction.h:729
virtual std::string parameterName(size_t i) const =0
Returns the name of parameter i.
virtual std::string name() const =0
Returns the function's name.
std::vector< std::unique_ptr< ParameterTie > > m_ties
Holds parameter ties.
Definition IFunction.h:725
std::shared_ptr< Kernel::ProgressBase > m_progReporter
Pointer to the progress handler.
Definition IFunction.h:715
bool isParallel() const
Get the parallel hint.
Definition IFunction.h:641
std::vector< std::unique_ptr< IConstraint > > m_constraints
Holds the constraints added to function.
Definition IFunction.h:727
virtual void setParameterStatus(size_t i, ParameterStatus status)=0
Change status of parameter.
virtual void function(const FunctionDomain &domain, FunctionValues &values) const =0
Evaluates the function for all arguments in the domain.
virtual size_t parameterIndex(const std::string &name) const =0
Returns the index of parameter name.
virtual double getError(size_t i) const =0
Get the fitting error for a parameter.
virtual void declareParameters()
Override to declare function parameters.
Definition IFunction.h:683
virtual bool ignoreTie(const ParameterTie &) const
Ignore a tie.
Definition IFunction.h:561
virtual bool isExplicitlySet(size_t i) const =0
Checks if a parameter has been set explicitly.
virtual double getError(const std::string &name) const =0
Get the fitting error for a parameter by name.
std::unique_ptr< FunctionHandler > m_handler
Pointer to a function handler.
Definition IFunction.h:712
virtual double getParameter(const std::string &name) const =0
Get parameter by name.
virtual void declareParameter(const std::string &name, double initValue=0, const std::string &description="")=0
Declare a new parameter.
virtual void setError(const std::string &name, double err)=0
Set the fitting error for a parameter by name.
double m_chiSquared
The chi-squared of the last fit.
Definition IFunction.h:723
StepSizeMethod
Describes the method in which the step size will be calculated: DEFAULT: Uses the traditional Mantid ...
Definition IFunction.h:663
IFunction(const IFunction &)=delete
No copying.
virtual void setParameter(const std::string &name, const double &value, bool explicitlySet=true)=0
Set parameter by name.
std::shared_ptr< Kernel::Matrix< double > > m_covar
The covariance matrix of the fitting parameters.
Definition IFunction.h:721
Represents the Jacobian in IFitFunction::functionDeriv.
Definition Jacobian.h:22
A reference to a parameter in a function.
Ties fitting parameters.
IValidator is the basic interface for all validators for properties.
Definition IValidator.h:43
Numerical Matrix class.
Definition Matrix.h:42
std::shared_ptr< IFunction > IFunction_sptr
shared pointer to the function base class
Definition IFunction.h:743
std::shared_ptr< const IFunction > IFunction_const_sptr
shared pointer to the function base class (const version)
Definition IFunction.h:745
std::shared_ptr< Unit > Unit_sptr
Shared pointer to the Unit base class.
Definition Unit.h:194
std::shared_ptr< IValidator > IValidator_sptr
A shared_ptr to an IValidator.
Definition IValidator.h:26
Helper class which provides the Collimation Length for SANS instruments.
STL namespace.
Attribute visitor structure supporting lambda expressions Example usage: AttributeLambdaVisitor{[](co...
Definition IFunction.h:56
Simple Exception Struct to differentiate validation error from other exceptions.
Definition IFunction.h:171
ValidationException(const std::string &ErrorMsg)
Definition IFunction.h:173
Simple struct to constain function to evaluate attribute validators that is required in both attribut...
Definition IFunction.h:180
static void evaluate(T1 &inputData, Mantid::Kernel::IValidator_sptr validator)
Definition IFunction.h:183