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"
23
24#ifndef Q_MOC_RUN
25#include <boost/variant.hpp>
26#include <memory>
27#endif
28
29#include <string>
30#include <utility>
31
32#include <vector>
33
34#ifdef _WIN32
35#pragma warning(disable : 4250)
36#endif
37
38namespace Mantid {
39namespace Kernel {
40//----------------------------------------------------------------------
41// Forward declaration
42//----------------------------------------------------------------------
43class ProgressBase;
44} // namespace Kernel
45namespace API {
46class Workspace;
47class MatrixWorkspace;
48class FunctionHandler;
49
57template <class... Ts> struct AttributeLambdaVisitor : Ts... {
58 using Ts::operator()...;
59};
60template <class... Ts> AttributeLambdaVisitor(Ts...) -> AttributeLambdaVisitor<Ts...>;
61
167class MANTID_API_DLL IFunction {
168public:
172 struct ValidationException : public std::runtime_error {
173 public:
174 ValidationException(const std::string &ErrorMsg) : std::runtime_error(ErrorMsg) {}
175 };
176
182 public:
183 ValidatorEvaluator() {}; // default constructor
184 template <typename T1> static void evaluate(T1 &inputData, Mantid::Kernel::IValidator_sptr validator) {
185 std::string error;
186
187 if (validator != nullptr) {
188 error = validator->isValid(inputData);
189 }
190
191 if (error != "") {
192 throw IFunction::ValidationException("Set Attribute Error: " + error);
193 }
194 }
195 };
196
204 template <typename T = void> class AttributeVisitor : public boost::static_visitor<T> {
205 public:
207 virtual ~AttributeVisitor() = default;
209 T operator()(std::string &str) const { return apply(str); }
211 T operator()(double &d) const { return apply(d); }
213 T operator()(int &i) const { return apply(i); }
215 T operator()(bool &b) const { return apply(b); }
217 T operator()(std::vector<double> &v) const { return apply(v); }
218
219 protected:
221 virtual T apply(std::string &) const = 0;
223 virtual T apply(double &) const = 0;
225 virtual T apply(int &) const = 0;
227 virtual T apply(bool &) const = 0;
229 virtual T apply(std::vector<double> &) const = 0;
230
232 template <typename T1> void evaluateValidator(T1 &inputData) const {
233 if (m_validator != nullptr) {
234 ValidatorEvaluator::evaluate(inputData, m_validator);
235 }
236 }
237
240 };
241
245 template <typename T = void> class ConstAttributeVisitor : public boost::static_visitor<T> {
246 public:
248 virtual ~ConstAttributeVisitor() = default;
250 T operator()(const std::string &str) const { return apply(str); }
252 T operator()(const double &d) const { return apply(d); }
254 T operator()(const int &i) const { return apply(i); }
256 T operator()(const bool &b) const { return apply(b); }
258 T operator()(const std::vector<double> &v) const { return apply(v); }
259
260 protected:
262 virtual T apply(const std::string &str) const = 0;
264 virtual T apply(const double &d) const = 0;
266 virtual T apply(const int &i) const = 0;
268 virtual T apply(const bool &i) const = 0;
270 virtual T apply(const std::vector<double> &) const = 0;
271
273 template <typename T1> void evaluateValidator(T1 &inputData) const {
274 if (m_validator != nullptr) {
275 ValidatorEvaluator::evaluate(inputData, m_validator);
276 }
277 }
278
281 };
282
286 class MANTID_API_DLL Attribute {
287 public:
289 explicit Attribute() : m_data(std::string()), m_quoteValue(false) {}
291 explicit Attribute(const std::string &str, bool quoteValue = false) : m_data(str), m_quoteValue(quoteValue) {}
293 explicit Attribute(const int &i) : m_data(i), m_quoteValue(false) {}
295 explicit Attribute(const double &d) : m_data(d), m_quoteValue(false) {}
297 explicit Attribute(const bool &b) : m_data(b), m_quoteValue(false) {}
299 explicit Attribute(const char *c) : m_data(std::string(c)), m_quoteValue(false) {}
301 explicit Attribute(const std::vector<double> &v) : m_data(v), m_quoteValue(false) {}
302
304 template <typename T> T apply(AttributeVisitor<T> &v) { return boost::apply_visitor(v, m_data); }
306 template <typename T> T apply(ConstAttributeVisitor<T> &v) const { return boost::apply_visitor(v, m_data); }
308 template <typename... Ts> void apply(AttributeLambdaVisitor<Ts...> &v) { boost::apply_visitor(v, m_data); }
309
311 void setValidator(const Kernel::IValidator_sptr &validator) const;
313 void evaluateValidator() const;
315 template <typename T> void evaluateValidator(T &inputData) const {
316 if (m_validator != nullptr) {
317 ValidatorEvaluator::evaluate(inputData, m_validator);
318 }
319 }
322
324 std::string type() const;
326 std::string value() const;
329 std::string asString() const;
332 std::string asQuotedString() const;
334 std::string asUnquotedString() const;
336 int asInt() const;
339 double asDouble() const;
341 bool asBool() const;
343 std::vector<double> asVector() const;
345 bool isEmpty() const;
346
348 void setString(const std::string &str);
350 void setDouble(const double &);
352 void setInt(const int &);
354 void setBool(const bool &);
356 void setVector(const std::vector<double> &);
357 // Set value
358 template <typename T> void setValue(const T &v) {
359 evaluateValidator(v);
360
361 m_data = v;
362 }
364 void fromString(const std::string &str);
365
366 private:
368 mutable boost::variant<std::string, int, double, bool, std::vector<double>> m_data;
370 bool m_quoteValue = false;
373 };
374
381 template <typename T = void> class AttributeValidatorVisitor : public boost::static_visitor<T> {
382 public:
383 AttributeValidatorVisitor(const IFunction::Attribute *attrToValidate) : m_attrToValidate{attrToValidate} {}
384
386 T operator()(std::string &str) const { m_attrToValidate->evaluateValidator(str); }
388 T operator()(double &d) const { m_attrToValidate->evaluateValidator(d); }
390 T operator()(int &i) const { m_attrToValidate->evaluateValidator(i); }
392 T operator()(bool &b) const { m_attrToValidate->evaluateValidator(b); }
394 T operator()(std::vector<double> &v) const { m_attrToValidate->evaluateValidator(v); }
395
396 protected:
398 };
399
400 //---------------------------------------------------------//
402 IFunction();
404 virtual ~IFunction();
406 IFunction(const IFunction &) = delete;
408 IFunction &operator=(const IFunction &) = delete;
410 virtual std::string name() const = 0;
412 std::string asString() const;
414 virtual std::shared_ptr<IFunction> clone() const;
415
418 virtual void registerFunctionUsage(bool internal);
421 virtual void setWorkspace([[maybe_unused]] std::shared_ptr<const Workspace> ws) {}
423 virtual void setMatrixWorkspace(std::shared_ptr<const API::MatrixWorkspace> workspace, size_t wi, double startX,
424 double endX);
426 virtual void initialize() { this->init(); }
429 virtual int64_t estimateNoProgressCalls() const { return 1; }
430
432 void setProgressReporter(std::shared_ptr<Kernel::ProgressBase> reporter);
434 void reportProgress(const std::string &msg = "") const;
437 bool cancellationRequestReceived() const;
438
444 virtual const std::string category() const { return "General"; }
446 virtual const std::vector<std::string> categories() const;
449 virtual const std::string categorySeparator() const { return ";"; }
450
455 virtual void function(const FunctionDomain &domain, FunctionValues &values) const = 0;
457 virtual void functionDeriv(const FunctionDomain &domain, Jacobian &jacobian);
458
459 /* @name Callbacks to perform work at various points other than in the
460 * function */
462 virtual void iterationStarting() {}
464 virtual void iterationFinished() {}
465
469 virtual void setParameter(size_t, const double &value, bool explicitlySet = true) = 0;
471 virtual void setParameterDescription(size_t, const std::string &description) = 0;
473 virtual double getParameter(size_t i) const = 0;
475 virtual void setParameter(const std::string &name, const double &value, bool explicitlySet = true) = 0;
477 virtual void setParameterDescription(const std::string &name, const std::string &description) = 0;
479 virtual double getParameter(const std::string &name) const = 0;
481 virtual bool hasParameter(const std::string &name) const = 0;
483 virtual size_t nParams() const = 0;
485 virtual size_t parameterIndex(const std::string &name) const = 0;
487 virtual std::string parameterName(size_t i) const = 0;
489 virtual std::string parameterDescription(size_t i) const = 0;
491 virtual bool isExplicitlySet(size_t i) const = 0;
493 virtual double getError(size_t i) const = 0;
495 virtual double getError(const std::string &name) const = 0;
497 virtual void setError(size_t i, double err) = 0;
499 virtual void setError(const std::string &name, double err) = 0;
500
502 [[nodiscard]] bool isFixed(size_t i) const;
504 [[nodiscard]] bool isFixedByDefault(size_t i) const;
506 void fix(size_t i, bool isDefault = false);
508 void unfix(size_t i);
510 void fixParameter(const std::string &name, bool isDefault = false);
512 void unfixParameter(const std::string &name);
514 void fixAll(bool isDefault = false);
516 void unfixAll();
518 void unfixAllDefault();
520 void fixAllActive(bool isDefault = false);
521
524 virtual size_t getParameterIndex(const ParameterReference &ref) const = 0;
526 [[nodiscard]] std::vector<std::string> getParameterNames() const;
528
533 [[nodiscard]] virtual double activeParameter(size_t i) const;
536 virtual void setActiveParameter(size_t i, double value);
538 [[nodiscard]] virtual std::string nameOfActive(size_t i) const;
540 [[nodiscard]] virtual std::string descriptionOfActive(size_t i) const;
542 [[nodiscard]] bool isActive(size_t i) const;
544
548 virtual void tie(const std::string &parName, const std::string &expr, bool isDefault = false);
550 virtual void addTies(const std::string &ties, bool isDefault = false);
552 virtual void applyTies();
554 virtual void removeTie(const std::string &parName);
556 virtual void clearTies();
558 virtual bool removeTie(size_t i);
560 virtual ParameterTie *getTie(size_t i) const;
562 virtual bool ignoreTie(const ParameterTie &) const { return false; }
564 void sortTies(const bool checkOnly = false);
566 [[nodiscard]] std::string writeTies() const;
568
572 virtual void addConstraints(const std::string &str, bool isDefault = false);
574 virtual void addConstraint(std::unique_ptr<IConstraint> ic);
576 [[nodiscard]] virtual IConstraint *getConstraint(size_t i) const;
578 virtual void removeConstraint(const std::string &parName);
579 virtual void setConstraintPenaltyFactor(const std::string &parName, const double &c);
581 [[nodiscard]] std::string writeConstraints() const;
583 virtual void clearConstraints();
585
589 [[nodiscard]] virtual size_t nAttributes() const;
591 [[nodiscard]] virtual std::vector<std::string> getAttributeNames() const;
593 [[nodiscard]] virtual std::string attributeName(size_t index) const;
595 [[nodiscard]] virtual Attribute getAttribute(const std::string &name) const;
597 virtual void setAttribute(const std::string &name, const Attribute &);
599 [[nodiscard]] virtual bool hasAttribute(const std::string &name) const;
601 GNU_DIAG_OFF("maybe-uninitialized")
602 template <typename T> void setAttributeValue(const std::string &attName, const T &value) {
603 // Since we can't know T and we would rather not create a universal setter
604 // copy and replace in-place
605 auto attr = getAttribute(attName);
606 attr.setValue(value);
607 setAttribute(attName, attr);
608 }
609 GNU_DIAG_ON("maybe-uninitialized")
610 void setAttributeValue(const std::string &attName, const char *value);
611 void setAttributeValue(const std::string &attName, const std::string &value);
613
615 [[nodiscard]] virtual std::shared_ptr<IFunction> getFunction(size_t i) const;
617 [[nodiscard]] virtual std::size_t nFunctions() const { return 0; }
619 virtual void setUpForFit();
621 [[nodiscard]] virtual size_t getValuesSize(const FunctionDomain &domain) const;
623 [[nodiscard]] virtual size_t getNumberDomains() const;
625 [[nodiscard]] virtual std::vector<std::shared_ptr<IFunction>> createEquivalentFunctions() const;
627 void calNumericalDeriv(const FunctionDomain &domain, Jacobian &jacobian);
629 [[nodiscard]] double calculateStepSize(size_t parameterIndex, double parameterValue) const;
631 void setCovarianceMatrix(const std::shared_ptr<Kernel::Matrix<double>> &covar);
633 std::shared_ptr<const Kernel::Matrix<double>> getCovarianceMatrix() const { return m_covar; }
635 void setReducedChiSquared(double chi2) { m_chiSquared = chi2; }
637 [[nodiscard]] double getReducedChiSquared() const { return m_chiSquared; }
638
640 void setParallel(bool on) { m_isParallel = on; }
642 [[nodiscard]] bool isParallel() const { return m_isParallel; }
643
645 void setHandler(std::unique_ptr<FunctionHandler> handler);
647 [[nodiscard]] FunctionHandler *getHandler() const { return m_handler.get(); }
648
655 enum ParameterStatus { Active, Fixed, FixedByDefault, Tied };
657 virtual void setParameterStatus(size_t i, ParameterStatus status) = 0;
659 [[nodiscard]] virtual ParameterStatus getParameterStatus(size_t i) const = 0;
660
665 enum class StepSizeMethod { DEFAULT, SQRT_EPSILON, CUSTOM };
667 virtual void setStepSizeMethod(const StepSizeMethod method);
669 void setCustomStepSizes(const std::vector<double> &stepSizes);
670
671protected:
673 virtual void init();
675 virtual void declareParameter(const std::string &name, double initValue = 0, const std::string &description = "") = 0;
676
678 [[nodiscard]] double convertValue(double value, Kernel::Unit_sptr &outUnit,
679 const std::shared_ptr<const MatrixWorkspace> &ws, size_t wsIndex) const;
680
681 void convertValue(std::vector<double> &values, Kernel::Unit_sptr &outUnit,
682 const std::shared_ptr<const MatrixWorkspace> &ws, size_t wsIndex) const;
683
685 virtual void declareAttributes() {}
687 virtual void declareParameters() {}
688
690 void declareAttribute(const std::string &name, const API::IFunction::Attribute &defaultValue);
692 void declareAttribute(const std::string &name, const API::IFunction::Attribute &defaultValue,
693 const Kernel::IValidator &validator);
695 void checkAttributeName(const std::string &name);
697 void storeAttributeValue(const std::string &name, const API::IFunction::Attribute &value);
699 void storeReadOnlyAttribute(const std::string &name, const API::IFunction::Attribute &value) const;
701 virtual void addTie(std::unique_ptr<ParameterTie> tie);
702 [[nodiscard]] bool hasOrderedTies() const;
703 void applyOrderedTies();
705 [[nodiscard]] virtual std::string writeToString(const std::string &parentLocalAttributesStr = "") const;
706
707 friend class ParameterTie;
708 friend class CompositeFunction;
710 friend class FunctionGenerator;
711
714
716 std::unique_ptr<FunctionHandler> m_handler;
717
719 std::shared_ptr<Kernel::ProgressBase> m_progReporter;
720
721private:
723 std::map<std::string, API::IFunction::Attribute> m_attrs;
725 std::shared_ptr<Kernel::Matrix<double>> m_covar;
727 double m_chiSquared{0.0};
729 std::vector<std::unique_ptr<ParameterTie>> m_ties;
731 std::vector<std::unique_ptr<IConstraint>> m_constraints;
733 std::vector<ParameterTie *> m_orderedTies;
735 bool m_isRegistered{false};
737 StepSizeMethod m_stepSizeMethod{StepSizeMethod::DEFAULT};
739 std::vector<double> m_stepSizes;
740
741 // Creates and processes a single tie, handling constant expressions and validation
742 std::unique_ptr<ParameterTie> createAndProcessTie(const std::string &parName, const std::string &expr,
743 bool isDefault);
744 // Insert a new tie to the correct position
745 std::pair<std::size_t, std::string> insertTie(std::unique_ptr<ParameterTie> tie);
746};
747
749using IFunction_sptr = std::shared_ptr<IFunction>;
751using IFunction_const_sptr = std::shared_ptr<const IFunction>;
752
761public:
768 virtual ~FunctionHandler() = default;
770 virtual void init() = 0;
772 IFunction_sptr function() const { return m_fun; }
773
774protected:
776};
777
778} // namespace API
779} // namespace Mantid
780
781// Instantiated and exported by API/src/PropertyWithValue.cpp
782MANTID_API_EXTERN_TEMPLATE(Mantid::Kernel::PropertyWithValue<std::shared_ptr<Mantid::API::IFunction>>);
Kernel::IValidator_sptr m_validator
std::string name
Definition Run.cpp:60
double value
The value of the point.
Definition FitMW.cpp:51
MANTID_API_EXTERN_TEMPLATE(Mantid::Kernel::PropertyWithValue< std::shared_ptr< Mantid::API::IFunction > >)
double error
IPeaksWorkspace_sptr workspace
std::map< DeltaEMode::Type, std::string > index
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:760
FunctionHandler & operator=(const FunctionHandler &)=delete
virtual ~FunctionHandler()=default
Virtual destructor.
IFunction_sptr function() const
Return the handled function.
Definition IFunction.h:772
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:775
FunctionHandler(IFunction_sptr fun)
Constructor.
Definition IFunction.h:763
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:381
T operator()(int &i) const
implements static_visitor's operator() for int
Definition IFunction.h:390
T operator()(std::vector< double > &v) const
implements static_visitor's operator() for vector
Definition IFunction.h:394
AttributeValidatorVisitor(const IFunction::Attribute *attrToValidate)
Definition IFunction.h:383
const IFunction::Attribute * m_attrToValidate
Definition IFunction.h:397
T operator()(double &d) const
implements static_visitor's operator() for double
Definition IFunction.h:388
T operator()(std::string &str) const
implements static_visitor's operator() for std::string
Definition IFunction.h:386
T operator()(bool &b) const
implements static_visitor's operator() for bool
Definition IFunction.h:392
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:215
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:211
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:232
T operator()(std::string &str) const
implements static_visitor's operator() for std::string
Definition IFunction.h:209
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:217
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:213
Attribute is a non-fitting parameter.
Definition IFunction.h:286
Attribute(const bool &b)
Create bool attribute.
Definition IFunction.h:297
Attribute(const int &i)
Create int attribute.
Definition IFunction.h:293
Attribute(const double &d)
Create double attribute.
Definition IFunction.h:295
Kernel::IValidator_sptr getValidator()
Return a clone of the attribute validator;.
Definition IFunction.h:321
T apply(AttributeVisitor< T > &v)
Apply an attribute visitor.
Definition IFunction.h:304
Attribute()
Create empty string attribute.
Definition IFunction.h:289
void evaluateValidator(T &inputData) const
Evaluates the validator associated with this attribute with regards to input value....
Definition IFunction.h:315
Kernel::IValidator_sptr m_validator
Associated Validator.
Definition IFunction.h:372
boost::variant< std::string, int, double, bool, std::vector< double > > m_data
The data holder as boost variant.
Definition IFunction.h:368
Attribute(const std::string &str, bool quoteValue=false)
Create string attribute.
Definition IFunction.h:291
void apply(AttributeLambdaVisitor< Ts... > &v)
Apply a lambda visitor.
Definition IFunction.h:308
Attribute(const char *c)
Create string attribute.
Definition IFunction.h:299
T apply(ConstAttributeVisitor< T > &v) const
Apply a const attribute visitor.
Definition IFunction.h:306
Attribute(const std::vector< double > &v)
Create vector attribute.
Definition IFunction.h:301
Const version of AttributeVisitor.
Definition IFunction.h:245
T operator()(const int &i) const
implements static_visitor's operator() for int
Definition IFunction.h:254
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:252
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:258
T operator()(const std::string &str) const
implements static_visitor's operator() for std::string
Definition IFunction.h:250
T operator()(const bool &b) const
implements static_visitor's operator() for bool
Definition IFunction.h:256
virtual ~ConstAttributeVisitor()=default
Virtual destructor.
void evaluateValidator(T1 &inputData) const
Evaluates the validator associated with attribute this visitor is to visit.
Definition IFunction.h:273
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:167
virtual size_t nParams() const =0
Total number of parameters.
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:421
std::shared_ptr< const Kernel::Matrix< double > > getCovarianceMatrix() const
Get the covariance matrix.
Definition IFunction.h:633
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:713
virtual void initialize()
Iinialize the function.
Definition IFunction.h:426
std::vector< double > m_stepSizes
The custom step sizes for the derivative.
Definition IFunction.h:739
virtual void iterationFinished()
Called at the end of an iteration.
Definition IFunction.h:464
IFunction & operator=(const IFunction &)=delete
No copying.
ParameterStatus
Describe parameter status in relation to fitting: Active: Fit varies such parameter directly.
Definition IFunction.h:655
FunctionHandler * getHandler() const
Return the handler.
Definition IFunction.h:647
std::map< std::string, API::IFunction::Attribute > m_attrs
The declared attributes.
Definition IFunction.h:723
double getReducedChiSquared() const
Get the reduced chi^2.
Definition IFunction.h:637
virtual void declareAttributes()
Override to declare function attributes.
Definition IFunction.h:685
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:444
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:429
virtual const std::string categorySeparator() const
Function to return the sperator token for the category string.
Definition IFunction.h:449
void setParallel(bool on)
Set the parallel hint.
Definition IFunction.h:640
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:635
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:462
std::vector< ParameterTie * > m_orderedTies
Ties ordered in order of correct application.
Definition IFunction.h:733
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:729
std::shared_ptr< Kernel::ProgressBase > m_progReporter
Pointer to the progress handler.
Definition IFunction.h:719
bool isParallel() const
Get the parallel hint.
Definition IFunction.h:642
std::vector< std::unique_ptr< IConstraint > > m_constraints
Holds the constraints added to function.
Definition IFunction.h:731
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:687
virtual bool ignoreTie(const ParameterTie &) const
Ignore a tie.
Definition IFunction.h:562
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:716
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.
StepSizeMethod
Describes the method in which the step size will be calculated: DEFAULT: Uses the traditional Mantid ...
Definition IFunction.h:665
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:725
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:37
Numerical Matrix class.
Definition Matrix.h:41
The concrete, templated class for properties.
std::shared_ptr< IFunction > IFunction_sptr
shared pointer to the function base class
Definition IFunction.h:749
std::shared_ptr< const IFunction > IFunction_const_sptr
shared pointer to the function base class (const version)
Definition IFunction.h:751
std::shared_ptr< Unit > Unit_sptr
Shared pointer to the Unit base class.
Definition Unit_fwd.h:17
std::shared_ptr< IValidator > IValidator_sptr
A shared_ptr to an IValidator.
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:57
Simple Exception Struct to differentiate validation error from other exceptions.
Definition IFunction.h:172
ValidationException(const std::string &ErrorMsg)
Definition IFunction.h:174
Simple struct to constain function to evaluate attribute validators that is required in both attribut...
Definition IFunction.h:181
static void evaluate(T1 &inputData, Mantid::Kernel::IValidator_sptr validator)
Definition IFunction.h:184