15 #ifndef BORNAGAIN_SAMPLE_CORRELATIONS_PROFILES2D_H
16 #define BORNAGAIN_SAMPLE_CORRELATIONS_PROFILES2D_H
31 IProfile2D(
const std::vector<double>& PValues);
48 virtual double decayFT2D(
double qx,
double qy)
const = 0;
50 virtual std::unique_ptr<IDistribution2DSampler>
createSampler()
const = 0;
57 double sumsq(
double qx,
double qy)
const;
77 std::string
className() const final {
return "Profile2DCauchy"; }
79 std::vector<ParaMeta>
parDefs() const final
81 return {{
"OmegaX",
"nm",
"Half-width along x axis", 0,
INF, 1.},
82 {
"OmegaY",
"nm",
"Half-width along y axis", 0,
INF, 1.},
84 "direct-space orientation with respect to the first lattice vector", -
M_PI_2,
88 double decayFT2D(
double qx,
double qy)
const override;
90 std::unique_ptr<IDistribution2DSampler>
createSampler()
const override;
105 std::string
className() const final {
return "Profile2DGauss"; }
109 return {{
"OmegaX",
"nm",
"Half-width along x axis", 0,
INF, 1.},
110 {
"OmegaY",
"nm",
"Half-width along y axis", 0,
INF, 1.},
112 "direct-space orientation with respect to the first lattice vector", -
M_PI_2,
116 double decayFT2D(
double qx,
double qy)
const override;
118 std::unique_ptr<IDistribution2DSampler>
createSampler()
const override;
133 std::string
className() const final {
return "Profile2DGate"; }
137 return {{
"OmegaX",
"nm",
"Half-width along x axis", 0,
INF, 1.},
138 {
"OmegaY",
"nm",
"Half-width along y axis", 0,
INF, 1.},
140 "direct-space orientation with respect to the first lattice vector", -
M_PI_2,
144 double decayFT2D(
double qx,
double qy)
const override;
146 std::unique_ptr<IDistribution2DSampler>
createSampler()
const override;
161 std::string
className() const final {
return "Profile2DCone"; }
165 return {{
"OmegaX",
"nm",
"Half-width along x axis", 0,
INF, 1.},
166 {
"OmegaY",
"nm",
"Half-width along y axis", 0,
INF, 1.},
168 "direct-space orientation with respect to the first lattice vector", -
M_PI_2,
172 double decayFT2D(
double qx,
double qy)
const override;
174 std::unique_ptr<IDistribution2DSampler>
createSampler()
const override;
188 std::string
className() const final {
return "Profile2DVoigt"; }
192 return {{
"OmegaX",
"nm",
"Half-width along x axis", 0,
INF, 1.},
193 {
"OmegaY",
"nm",
"Half-width along y axis", 0,
INF, 1.},
195 "direct-space orientation with respect to the first lattice vector", -
M_PI_2,
197 {
"Eta",
"",
"balances between Gauss (eta=0) and Lorentz (eta=1) limiting cases", 0,
201 double decayFT2D(
double qx,
double qy)
const override;
204 std::unique_ptr<IDistribution2DSampler>
createSampler()
const override;
Defines M_PI and some more mathematical constants.
Defines and implements the standard mix-in ICloneable.
Defines interface class IProfile1D, and children thereof.
Interface for polymorphic classes that should not be copied, except by explicit cloning.
Base class for tree-like structures containing parameterized objects.
Interface for two-dimensional distributions in Fourier space.
IProfile2D(const std::vector< double > &PValues)
double sumsq(double qx, double qy) const
double delta() const
Angle in direct space between X- and Y-axis of distribution.
IProfile2D * clone() const override=0
virtual std::unique_ptr< IDistribution2DSampler > createSampler() const =0
virtual double decayFT2D(double qx, double qy) const =0
double decayLengthX() const
virtual std::string pythonConstructor() const
Creates the Python constructor of this class (or derived classes)
double decayLengthY() const
virtual double standardizedFT2D(double qx, double qy) const =0
Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) i...
Two-dimensional Cauchy distribution in Fourier space; corresponds to a normalized exp(-r) in real spa...
std::unique_ptr< IDistribution2DSampler > createSampler() const override
Profile2DCauchy(std::vector< double > P)
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
double decayFT2D(double qx, double qy) const override
double standardizedFT2D(double qx, double qy) const override
Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) i...
Profile2DCauchy * clone() const override
Two-dimensional cone distribution in Fourier space; corresponds to 1-r if r<1 (and 0 otherwise) in re...
Profile2DCone(std::vector< double > P)
double standardizedFT2D(double qx, double qy) const override
Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) i...
std::unique_ptr< IDistribution2DSampler > createSampler() const override
Profile2DCone * clone() const override
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
double decayFT2D(double qx, double qy) const override
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
Two-dimensional gate distribution in Fourier space; corresponds to normalized constant if r<1 (and 0 ...
Profile2DGate(std::vector< double > P)
std::unique_ptr< IDistribution2DSampler > createSampler() const override
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
double standardizedFT2D(double qx, double qy) const override
Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) i...
Profile2DGate * clone() const override
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
double decayFT2D(double qx, double qy) const override
Two-dimensional Gauss distribution in Fourier space; corresponds to normalized exp(-r^2/2) in real sp...
double standardizedFT2D(double qx, double qy) const override
Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) i...
double decayFT2D(double qx, double qy) const override
Profile2DGauss(std::vector< double > P)
Profile2DGauss * clone() const override
std::unique_ptr< IDistribution2DSampler > createSampler() const override
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
Two-dimensional Voigt distribution in Fourier space; corresponds to eta*Gauss + (1-eta)*Cauchy.
std::unique_ptr< IDistribution2DSampler > createSampler() const override
double decayFT2D(double qx, double qy) const override
double standardizedFT2D(double qx, double qy) const override
Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) i...
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
Profile2DVoigt(std::vector< double > P)
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
Profile2DVoigt * clone() const override
std::string pythonConstructor() const override
Creates the Python constructor of this class (or derived classes)