BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
FTDecay1D.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Sample/Correlations/FTDecay1D.h
6 //! @brief Defines classes IFTDecayFunction1D, IFTDecayFunction2D,
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #ifndef BORNAGAIN_SAMPLE_CORRELATIONS_FTDECAY1D_H
16 #define BORNAGAIN_SAMPLE_CORRELATIONS_FTDECAY1D_H
17 
18 #include "Base/Math/Constants.h"
19 #include "Base/Types/ICloneable.h"
20 #include "Param/Node/INode.h"
21 #include <utility>
22 
23 #ifndef USER_API
24 
25 //! Interface for a one-dimensional decay function,
26 //! with evaluate(q) returning the Fourier transform,
27 //! normalized to \f$\int dq\; {\rm evaluate}(q) = 1\f$.
28 //! @ingroup distribution_internal
29 class IFTDecayFunction1D : public ICloneable, public INode {
30 public:
31  IFTDecayFunction1D(const NodeMeta& meta, const std::vector<double>& PValues);
32 
33  virtual IFTDecayFunction1D* clone() const = 0;
34  virtual double evaluate(double q) const = 0;
35  double decayLength() const { return m_decay_length; }
36 
37 protected:
38  const double& m_decay_length;
39 };
40 
41 #endif // USER_API
42 
43 //! One-dimensional Cauchy decay function in reciprocal space;
44 //! corresponds to exp(-|x|/decay_length) in real space.
45 //! @ingroup decayFT
47 public:
48  FTDecayFunction1DCauchy(const std::vector<double> P);
49  FTDecayFunction1DCauchy(double decay_length);
50 
52  void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
53  double evaluate(double q) const final;
54 };
55 
56 //! One-dimensional Gauss decay function in reciprocal space;
57 //! corresponds to exp[-x^2/(2*decay_length^2)] in real space.
58 //! @ingroup decayFT
60 public:
61  FTDecayFunction1DGauss(const std::vector<double> P);
62  FTDecayFunction1DGauss(double decay_length);
63 
65  void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
66  double evaluate(double q) const final;
67 };
68 
69 //! One-dimensional triangle decay function in reciprocal space;
70 //! corresponds to 1-|x|/decay_length if |x|<decay_length (and 0 otherwise) in real space.
71 //! @ingroup decayFT
73 public:
74  FTDecayFunction1DTriangle(const std::vector<double> P);
75  FTDecayFunction1DTriangle(double decay_length);
76 
78  void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
79  double evaluate(double q) const final;
80 };
81 
82 //! One-dimensional pseudo-Voigt decay function in reciprocal space;
83 //! corresponds to eta*Gauss + (1-eta)*Cauchy.
84 //! @ingroup decayFT
86 public:
87  FTDecayFunction1DVoigt(const std::vector<double> P);
88  FTDecayFunction1DVoigt(double decay_length, double eta);
89 
91  void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
92  double evaluate(double q) const final;
93  double eEta() const { return m_eta; }
94 
95 private:
96  const double& m_eta;
97 };
98 
99 #endif // BORNAGAIN_SAMPLE_CORRELATIONS_FTDECAY1D_H
Defines M_PI and some more mathematical constants.
Defines and implements the standard mix-in ICloneable.
Defines interface INode.
One-dimensional Cauchy decay function in reciprocal space; corresponds to exp(-|x|/decay_length) in r...
Definition: FTDecay1D.h:46
double evaluate(double q) const final
Definition: FTDecay1D.cpp:48
FTDecayFunction1DCauchy(const std::vector< double > P)
Definition: FTDecay1D.cpp:33
FTDecayFunction1DCauchy * clone() const
Definition: FTDecay1D.cpp:43
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Definition: FTDecay1D.h:52
One-dimensional Gauss decay function in reciprocal space; corresponds to exp[-x^2/(2*decay_length^2)]...
Definition: FTDecay1D.h:59
double evaluate(double q) const final
Definition: FTDecay1D.cpp:73
FTDecayFunction1DGauss(const std::vector< double > P)
Definition: FTDecay1D.cpp:58
FTDecayFunction1DGauss * clone() const
Definition: FTDecay1D.cpp:68
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Definition: FTDecay1D.h:65
One-dimensional triangle decay function in reciprocal space; corresponds to 1-|x|/decay_length if |x|...
Definition: FTDecay1D.h:72
FTDecayFunction1DTriangle * clone() const
Definition: FTDecay1D.cpp:93
FTDecayFunction1DTriangle(const std::vector< double > P)
Definition: FTDecay1D.cpp:83
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Definition: FTDecay1D.h:78
double evaluate(double q) const final
Definition: FTDecay1D.cpp:98
One-dimensional pseudo-Voigt decay function in reciprocal space; corresponds to eta*Gauss + (1-eta)*C...
Definition: FTDecay1D.h:85
double evaluate(double q) const final
Definition: FTDecay1D.cpp:129
FTDecayFunction1DVoigt(const std::vector< double > P)
Definition: FTDecay1D.cpp:108
const double & m_eta
Definition: FTDecay1D.h:96
FTDecayFunction1DVoigt * clone() const
Definition: FTDecay1D.cpp:124
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Definition: FTDecay1D.h:91
double eEta() const
Definition: FTDecay1D.h:93
Interface for polymorphic classes that should not be copied, except by explicit cloning.
Definition: ICloneable.h:25
Interface for a one-dimensional decay function, with evaluate(q) returning the Fourier transform,...
Definition: FTDecay1D.h:29
virtual double evaluate(double q) const =0
IFTDecayFunction1D(const NodeMeta &meta, const std::vector< double > &PValues)
Definition: FTDecay1D.cpp:23
double decayLength() const
Definition: FTDecay1D.h:35
const double & m_decay_length
Definition: FTDecay1D.h:38
virtual IFTDecayFunction1D * clone() const =0
Visitor interface to visit ISampleNode objects.
Definition: INodeVisitor.h:146
Base class for tree-like structures containing parameterized objects.
Definition: INode.h:49
Metadata of one model node.
Definition: INode.h:38