BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
FTDecay2D.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Sample/Correlations/FTDecay2D.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_FTDECAY2D_H
16 #define BORNAGAIN_SAMPLE_CORRELATIONS_FTDECAY2D_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 two-dimensional decay function in reciprocal space.
26 //! @ingroup decayFT_internal
27 class IFTDecayFunction2D : public ICloneable, public INode {
28 public:
29  IFTDecayFunction2D(const NodeMeta& meta, const std::vector<double>& PValues);
30 
31  virtual IFTDecayFunction2D* clone() const = 0;
32 
33  //! get decay length in distribution's X-direction
34  double decayLengthX() const { return m_decay_length_x; }
35  //! get decay length in distribution's Y-direction
36  double decayLengthY() const { return m_decay_length_y; }
37  //! get angle between first lattice vector and X-axis of distribution (both in direct space)
38  double gamma() const { return m_gamma; }
39 
40  //! evaluate Fourier transformed decay function for q in X,Y coordinates
41  virtual double evaluate(double qx, double qy) const = 0;
42 
43  //! transform back to a*, b* basis:
44  std::pair<double, double> boundingReciprocalLatticeCoordinates(double qX, double qY, double a,
45  double b, double alpha) const;
46 
47 protected:
48  const double& m_decay_length_x;
49  const double& m_decay_length_y;
50  const double& m_gamma;
51 
52 private:
53  //! transform reciprocal coordinate system of this decay function to the reciprocal
54  //! lattice system
55  std::pair<double, double> transformToRecLatticeCoordinates(double qX, double qY, double a,
56  double b, double alpha) const;
57 };
58 
59 #endif // USER_API
60 
61 //! Two-dimensional Cauchy decay function in reciprocal space;
62 //! corresponds to exp(-r) in real space,
63 //! with \f$r=\sqrt{(\frac{x}{\omega_x})^2 + (\frac{y}{\omega_y})^2}\f$.
64 //! @ingroup decayFT
66 public:
67  FTDecayFunction2DCauchy(const std::vector<double> P);
68  FTDecayFunction2DCauchy(double decay_length_x, double decay_length_y, double gamma);
69 
71  void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
72  double evaluate(double qx, double qy) const final;
73 };
74 
75 //! Two-dimensional Gauss decay function in reciprocal space;
76 //! corresponds to exp(-r^2/2) in real space,
77 //! with \f$r=\sqrt{(\frac{x}{\omega_x})^2 + (\frac{y}{\omega_y})^2}\f$.
78 //! @ingroup decayFT
80 public:
81  FTDecayFunction2DGauss(const std::vector<double> P);
82  FTDecayFunction2DGauss(double decay_length_x, double decay_length_y, double gamma);
83 
85  void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
86  double evaluate(double qx, double qy) const final;
87 };
88 
89 //! Two-dimensional pseudo-Voigt decay function in reciprocal space;
90 //! corresponds to eta*Gauss + (1-eta)*Cauchy.
91 //! @ingroup decayFT
93 public:
94  FTDecayFunction2DVoigt(const std::vector<double> P);
95  FTDecayFunction2DVoigt(double decay_length_x, double decay_length_y, double gamma, double eta);
96 
98  void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
99  double evaluate(double qx, double qy) const final;
100  double eta() const { return m_eta; }
101 
102 protected:
103  const double& m_eta;
104 };
105 
106 #endif // BORNAGAIN_SAMPLE_CORRELATIONS_FTDECAY2D_H
Defines M_PI and some more mathematical constants.
Defines and implements the standard mix-in ICloneable.
Defines interface INode.
Two-dimensional Cauchy decay function in reciprocal space; corresponds to exp(-r) in real space,...
Definition: FTDecay2D.h:65
FTDecayFunction2DCauchy(const std::vector< double > P)
Definition: FTDecay2D.cpp:62
double evaluate(double qx, double qy) const final
evaluate Fourier transformed decay function for q in X,Y coordinates
Definition: FTDecay2D.cpp:78
FTDecayFunction2DCauchy * clone() const
Definition: FTDecay2D.cpp:73
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Definition: FTDecay2D.h:71
Two-dimensional Gauss decay function in reciprocal space; corresponds to exp(-r^2/2) in real space,...
Definition: FTDecay2D.h:79
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Definition: FTDecay2D.h:85
FTDecayFunction2DGauss * clone() const
Definition: FTDecay2D.cpp:100
double evaluate(double qx, double qy) const final
evaluate Fourier transformed decay function for q in X,Y coordinates
Definition: FTDecay2D.cpp:105
FTDecayFunction2DGauss(const std::vector< double > P)
Definition: FTDecay2D.cpp:89
Two-dimensional pseudo-Voigt decay function in reciprocal space; corresponds to eta*Gauss + (1-eta)*C...
Definition: FTDecay2D.h:92
FTDecayFunction2DVoigt(const std::vector< double > P)
Definition: FTDecay2D.cpp:116
FTDecayFunction2DVoigt * clone() const
Definition: FTDecay2D.cpp:133
double evaluate(double qx, double qy) const final
evaluate Fourier transformed decay function for q in X,Y coordinates
Definition: FTDecay2D.cpp:138
const double & m_eta
Definition: FTDecay2D.h:103
double eta() const
Definition: FTDecay2D.h:100
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Definition: FTDecay2D.h:98
Interface for polymorphic classes that should not be copied, except by explicit cloning.
Definition: ICloneable.h:25
Interface for two-dimensional decay function in reciprocal space.
Definition: FTDecay2D.h:27
const double & m_gamma
Definition: FTDecay2D.h:50
virtual IFTDecayFunction2D * clone() const =0
IFTDecayFunction2D(const NodeMeta &meta, const std::vector< double > &PValues)
Definition: FTDecay2D.cpp:23
double gamma() const
get angle between first lattice vector and X-axis of distribution (both in direct space)
Definition: FTDecay2D.h:38
const double & m_decay_length_x
Definition: FTDecay2D.h:48
std::pair< double, double > transformToRecLatticeCoordinates(double qX, double qY, double a, double b, double alpha) const
transform reciprocal coordinate system of this decay function to the reciprocal lattice system
Definition: FTDecay2D.cpp:49
const double & m_decay_length_y
Definition: FTDecay2D.h:49
std::pair< double, double > boundingReciprocalLatticeCoordinates(double qX, double qY, double a, double b, double alpha) const
transform back to a*, b* basis:
Definition: FTDecay2D.cpp:39
double decayLengthY() const
get decay length in distribution's Y-direction
Definition: FTDecay2D.h:36
double decayLengthX() const
get decay length in distribution's X-direction
Definition: FTDecay2D.h:34
virtual double evaluate(double qx, double qy) const =0
evaluate Fourier transformed decay function for q in X,Y coordinates
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