26 {
"OmegaY",
"nm",
"Half-width along y axis", 0,
INF, 1.},
28 "direct-space orientation with respect to the first lattice vector",
64 return std::pow(1.0 +
sumsq(qx, qy), -1.5);
93 return std::exp(-
sumsq(qx, qy) / 2);
122 double scaled_q = std::sqrt(
sumsq(qx, qy));
152 double scaled_q = std::sqrt(
sumsq(qx, qy));
153 if (scaled_q < std::numeric_limits<double>::epsilon())
154 return 1.0 - 3.0 * scaled_q * scaled_q / 40.0;
157 [](
double x) ->
double {
return x * x *
Math::Bessel::J0(x); }, 0.0, scaled_q);
158 return 6.0 * (
Math::Bessel::J1c(scaled_q) - integral / scaled_q / scaled_q / scaled_q);
172 {
"FTDistribution2DVoigt",
174 {{
"Eta",
"",
"balances between Gauss (eta=0) and Cauchy (eta=1) limiting cases", -
INF,
194 double sum_sq =
sumsq(qx, qy);
195 return m_eta * std::exp(-sum_sq / 2) + (1.0 -
m_eta) * std::pow(1.0 + sum_sq, -1.5);
202 std::ostringstream ostr;
203 ostr <<
"FTDistribution2DVoigt::createSampler() -> Error in class initialization";
204 ostr <<
"\n\n Has not been implemented yet...stay tuned!";
205 throw std::runtime_error(ostr.str());
Defines Bessel functions in namespace Math.
Defines interface class IFTDistribution2D, and children thereof.
NodeMeta nodeMetaUnion(const std::vector< ParaMeta > &base, const NodeMeta &other)
Defines classes RealIntegrator, ComplexIntegrator.
Two-dimensional Cauchy distribution in Fourier space; corresponds to a normalized exp(-r) in real spa...
FTDistribution2DCauchy(const std::vector< double > P)
double evaluate(double qx, double qy) const final
evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real...
FTDistribution2DCauchy * clone() const final
std::unique_ptr< IDistribution2DSampler > createSampler() const final
Two-dimensional cone distribution in Fourier space; corresponds to 1-r if r<1 (and 0 otherwise) in re...
std::unique_ptr< IDistribution2DSampler > createSampler() const final
FTDistribution2DCone(const std::vector< double > P)
FTDistribution2DCone * clone() const final
double evaluate(double qx, double qy) const final
evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real...
Two-dimensional gate distribution in Fourier space; corresponds to normalized constant if r<1 (and 0 ...
FTDistribution2DGate(const std::vector< double > P)
FTDistribution2DGate * clone() const final
double evaluate(double qx, double qy) const final
evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real...
std::unique_ptr< IDistribution2DSampler > createSampler() const final
Two-dimensional Gauss distribution in Fourier space; corresponds to normalized exp(-r^2/2) in real sp...
FTDistribution2DGauss(const std::vector< double > P)
std::unique_ptr< IDistribution2DSampler > createSampler() const final
FTDistribution2DGauss * clone() const final
double evaluate(double qx, double qy) const final
evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real...
Two-dimensional Voigt distribution in Fourier space; corresponds to eta*Gauss + (1-eta)*Cauchy.
FTDistribution2DVoigt(const std::vector< double > P)
double evaluate(double qx, double qy) const final
evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real...
FTDistribution2DVoigt * clone() const final
std::unique_ptr< IDistribution2DSampler > createSampler() const final
Interface for two-dimensional distributions in Fourier space.
IFTDistribution2D(const NodeMeta &meta, const std::vector< double > &PValues)
double sumsq(double qx, double qy) const
Base class for tree-like structures containing parameterized objects.
To integrate a real function of a real variable.
double integrate(const std::function< double(double)> &f, double lmin, double lmax)
double J0(double x)
Bessel function of the first kind and order 0.
double J1c(double x)
Bessel function J1(x)/x.