Mantid
Loading...
Searching...
No Matches
MultiDomainFunction.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//----------------------------------------------------------------------
13
14#include <map>
15
16namespace Mantid {
17namespace API {
18class CompositeDomain;
28class MANTID_API_DLL MultiDomainFunction : public CompositeFunction {
29public:
32
34 std::string name() const override { return "MultiDomainFunction"; }
36 void function(const FunctionDomain &domain, FunctionValues &values) const override;
38 void functionDeriv(const FunctionDomain &domain, Jacobian &jacobian) override;
40 void iterationStarting() override;
42 void iterationFinished() override;
43
45 void setDomainIndex(size_t funIndex, size_t domainIndex);
47 void setDomainIndices(size_t funIndex, const std::vector<size_t> &domainIndices);
49 void clearDomainIndices();
51 size_t getMaxIndex() const { return m_maxIndex; }
53 void getDomainIndices(size_t funIndex, size_t nDomains, std::vector<size_t> &domains) const;
55 size_t getNumberDomains() const override;
57 std::vector<IFunction_sptr> createEquivalentFunctions() const override;
58
63 size_t nLocalAttributes() const override { return 1; }
65 std::vector<std::string> getLocalAttributeNames() const override { return std::vector<std::string>(1, "domains"); }
67 Attribute getLocalAttribute(size_t funIndex, const std::string &attName) const override;
69 void setLocalAttribute(size_t funIndex, const std::string &attName, const Attribute &) override;
71 bool hasLocalAttribute(const std::string &attName) const override { return attName == "domains"; }
72
73protected:
75 void countNumberOfDomains();
76 void countValueOffsets(const CompositeDomain &domain) const;
77
79 std::map<size_t, std::vector<size_t>> m_domains;
82 size_t m_nDomains;
84 size_t m_maxIndex;
85 mutable std::vector<size_t> m_valueOffsets;
86};
87
88} // namespace API
89} // namespace Mantid
Base class for a composite domain.
A composite function is a function containing other functions.
Base class that represents the domain of a function.
A class to store values calculated by a function.
Attribute is a non-fitting parameter.
Definition IFunction.h:285
Represents the Jacobian in IFitFunction::functionDeriv.
Definition Jacobian.h:22
A composite function defined on a CompositeDomain.
size_t getMaxIndex() const
Get the largest domain index.
size_t nLocalAttributes() const override
Returns the number of "local" attributes associated with the function.
std::map< size_t, std::vector< size_t > > m_domains
Domain index map: finction -> domain.
std::vector< std::string > getLocalAttributeNames() const override
Returns a list of attribute names.
size_t m_nDomains
Number of domains this MultiDomainFunction operates on.
bool hasLocalAttribute(const std::string &attName) const override
Check if attribute attName exists.
size_t m_maxIndex
Maximum domain index.
std::string name() const override
Returns the function's name.
Helper class which provides the Collimation Length for SANS instruments.