Mantid
Loading...
Searching...
No Matches
CrystalFieldFunction.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2007 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
13
14#include <unordered_map>
15
16namespace Mantid {
17namespace CurveFitting {
18namespace Functions {
22class MANTID_CURVEFITTING_DLL CrystalFieldFunction : public API::IFunction {
23public:
25 std::string name() const override { return "CrystalFieldFunction"; }
26 size_t getNumberDomains() const override;
27 std::vector<API::IFunction_sptr> createEquivalentFunctions() const override;
29 void function(const API::FunctionDomain &domain, API::FunctionValues &values) const override;
30
31 //@ Parameters
33
34 void setParameter(size_t, const double &value, bool explicitlySet = true) override;
36 void setParameterDescription(size_t, const std::string &description) override;
38 double getParameter(size_t i) const override;
40 void setParameter(const std::string &name, const double &value, bool explicitlySet = true) override;
42 void setParameterDescription(const std::string &name, const std::string &description) override;
44 double getParameter(const std::string &name) const override;
46 bool hasParameter(const std::string &name) const override;
48 size_t nParams() const override;
50 size_t parameterIndex(const std::string &name) const override;
52 std::string parameterName(size_t i) const override;
54 std::string parameterDescription(size_t i) const override;
56 bool isExplicitlySet(size_t i) const override;
58 double getError(size_t i) const override;
60 double getError(const std::string &name) const override;
62 void setError(size_t i, double err) override;
64 void setError(const std::string &name, double err) override;
65
67 size_t getParameterIndex(const API::ParameterReference &ref) const override;
69 void setUpForFit() override;
71 API::ParameterTie *getTie(size_t i) const override;
73 bool ignoreTie(const API::ParameterTie &tie) const override;
75 API::IConstraint *getConstraint(size_t i) const override;
77
81 size_t nAttributes() const override;
83 std::vector<std::string> getAttributeNames() const override;
85 Attribute getAttribute(const std::string &name) const override;
87 void setAttribute(const std::string &name, const Attribute &) override;
89 bool hasAttribute(const std::string &name) const override;
91
93
94
96 bool isMultiSite() const;
99 bool isMultiSpectrum() const;
101 bool hasBackground() const;
103 bool hasPeaks() const;
105 bool hasPhysProperties() const;
107
109 void checkSourceFunction() const;
111 void buildTargetFunction() const;
113 size_t nSpectra() const;
114
115protected:
117 void declareParameter(const std::string &name, double initValue = 0, const std::string &description = "") override;
119 void setParameterStatus(size_t i, ParameterStatus status) override;
121 ParameterStatus getParameterStatus(size_t i) const override;
122
124 void buildSourceFunction() const;
126 void updateTargetFunction() const;
127
128private:
130 void buildSingleSite() const;
132 void buildMultiSite() const;
134 void buildSingleSiteSingleSpectrum() const;
136 void buildSingleSiteMultiSpectrum() const;
138 void buildMultiSiteSingleSpectrum() const;
140 void buildMultiSiteMultiSpectrum() const;
141
143 void updateSingleSite() const;
145 void updateMultiSite() const;
147 void updateSingleSiteSingleSpectrum() const;
149 void updateSingleSiteMultiSpectrum() const;
151 void updateMultiSiteSingleSpectrum() const;
153 void updateMultiSiteMultiSpectrum() const;
154
156 API::IFunction_sptr buildSpectrum(int nre, const DoubleFortranVector &en, const ComplexFortranMatrix &wf,
157 double temperature, double fwhm, size_t i, bool addBackground,
158 double intensityScaling) const;
160 void updateSpectrum(API::IFunction &spectrum, int nre, const DoubleFortranVector &en, const ComplexFortranMatrix &wf,
161 double temperature, double fwhm, size_t iSpec, size_t iFirst, double intensityScaling) const;
163 void calcExcitations(int nre, const DoubleFortranVector &en, const ComplexFortranMatrix &wf, double temperature,
164 API::FunctionValues &values, double intensityScaling) const;
166 API::IFunction_sptr buildPhysprop(int nre, const DoubleFortranVector &en, const ComplexFortranMatrix &wf,
167 const ComplexFortranMatrix &ham, const std::string &propName) const;
169 void updatePhysprop(int nre, const DoubleFortranVector &en, const ComplexFortranMatrix &wf,
170 const ComplexFortranMatrix &ham, API::IFunction &fun) const;
171
173 void setSource(API::IFunction_sptr source) const;
175 void checkTargetFunction() const;
177 API::CompositeFunction &compositeSource() const;
178
180 std::pair<API::IFunction *, std::string> getAttributeReference(const std::string &attName) const;
182 void buildAttributeNames() const;
183
185 void makeMaps() const;
186 void makeMapsSingleSiteSingleSpectrum() const;
187 void makeMapsSingleSiteMultiSpectrum() const;
188 void makeMapsMultiSiteSingleSpectrum() const;
189 void makeMapsMultiSiteMultiSpectrum() const;
190 size_t makeMapsForFunction(const IFunction &fun, size_t iFirst, const std::string &prefix) const;
191 void cacheSourceParameters() const;
199 mutable size_t m_nControlParams;
203 mutable bool m_dirtyTarget;
205 mutable std::unordered_map<std::string, size_t> m_mapNames2Indices;
207 mutable std::vector<std::string> m_mapIndices2Names;
209 mutable std::vector<std::string> m_attributeNames;
211 mutable std::unordered_map<std::string, API::IFunction_sptr> m_mapPrefixes2PhysProps;
213 mutable std::vector<double> m_parameterResetCache;
214 mutable std::vector<bool> m_fixResetCache;
215};
216
217} // namespace Functions
218} // namespace CurveFitting
219} // namespace Mantid
std::string name
Definition Run.cpp:60
double value
The value of the point.
Definition FitMW.cpp:51
int64_t nSpectra
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.
An interface to a constraint.
Definition IConstraint.h:26
Attribute is a non-fitting parameter.
Definition IFunction.h:285
This is an interface to a fitting function - a semi-abstarct class.
Definition IFunction.h:166
A reference to a parameter in a function.
Ties fitting parameters.
A function that controls creation of the source of CrystalFieldFunction.
std::unordered_map< std::string, size_t > m_mapNames2Indices
Map parameter names to indices.
API::IFunction_sptr m_source
Function that calculates parameters of the target function.
bool m_dirtyTarget
Flag indicating that updateTargetFunction() is required.
std::vector< std::string > m_attributeNames
Attribute names.
std::vector< std::string > m_mapIndices2Names
Map parameter indices to names.
std::vector< double > m_parameterResetCache
Temporary cache for parameter values during source function resetting.
std::unordered_map< std::string, API::IFunction_sptr > m_mapPrefixes2PhysProps
Map parameter/attribute prefixes to pointers to phys prop functions.
size_t m_nControlParams
Cached number of parameters in m_control.
CrystalFieldControl m_control
Function that creates the source function.
size_t m_nControlSourceParams
Cached number of parameters in m_control and m_source.
API::CompositeFunction_sptr m_target
Function that actually calculates the output.
std::string name() const override
Returns the function's name.
std::shared_ptr< IFunction > IFunction_sptr
shared pointer to the function base class
Definition IFunction.h:743
std::shared_ptr< CompositeFunction > CompositeFunction_sptr
shared pointer to the composite function base class
Helper class which provides the Collimation Length for SANS instruments.