25 IFTDistribution2D::IFTDistribution2D(
const NodeMeta& meta,
const std::vector<double>& PValues)
26 :
INode(nodeMetaUnion({{
"OmegaX",
"nm",
"Half-width along x axis", 0, INF, 1.},
27 {
"OmegaY",
"nm",
"Half-width along y axis", 0, INF, 1.},
29 "direct-space orientation with respect to the first lattice vector",
30 -M_PI_2, +M_PI_2, 0}},
33 m_omega_x(m_P[0]), m_omega_y(m_P[1]), m_gamma(m_P[2])
37 double IFTDistribution2D::sumsq(
double qx,
double qy)
const
39 return qx * qx * m_omega_x * m_omega_x + qy * qy * m_omega_y * m_omega_y;
46 FTDistribution2DCauchy::FTDistribution2DCauchy(
const std::vector<double> P)
51 FTDistribution2DCauchy::FTDistribution2DCauchy(
double omega_x,
double omega_y,
double gamma)
63 return std::pow(1.0 + sumsq(qx, qy), -1.5);
66 std::unique_ptr<IDistribution2DSampler> FTDistribution2DCauchy::createSampler()
const
68 return std::make_unique<Distribution2DCauchySampler>(m_omega_x, m_omega_y);
75 FTDistribution2DGauss::FTDistribution2DGauss(
const std::vector<double> P)
80 FTDistribution2DGauss::FTDistribution2DGauss(
double omega_x,
double omega_y,
double gamma)
92 return std::exp(-sumsq(qx, qy) / 2);
95 std::unique_ptr<IDistribution2DSampler> FTDistribution2DGauss::createSampler()
const
97 return std::make_unique<Distribution2DGaussSampler>(m_omega_x, m_omega_y);
104 FTDistribution2DGate::FTDistribution2DGate(
const std::vector<double> P)
109 FTDistribution2DGate::FTDistribution2DGate(
double omega_x,
double omega_y,
double gamma)
121 double scaled_q = std::sqrt(sumsq(qx, qy));
125 std::unique_ptr<IDistribution2DSampler> FTDistribution2DGate::createSampler()
const
127 return std::make_unique<Distribution2DGateSampler>(m_omega_x, m_omega_y);
134 FTDistribution2DCone::FTDistribution2DCone(
const std::vector<double> P)
139 FTDistribution2DCone::FTDistribution2DCone(
double omega_x,
double omega_y,
double gamma)
151 double scaled_q = std::sqrt(sumsq(qx, qy));
152 if (scaled_q < std::numeric_limits<double>::epsilon())
153 return 1.0 - 3.0 * scaled_q * scaled_q / 40.0;
160 std::unique_ptr<IDistribution2DSampler> FTDistribution2DCone::createSampler()
const
162 return std::make_unique<Distribution2DConeSampler>(m_omega_x, m_omega_y);
169 FTDistribution2DVoigt::FTDistribution2DVoigt(
const std::vector<double> P)
171 {
"FTDistribution2DVoigt",
173 {{
"Eta",
"",
"balances between Gauss (eta=0) and Cauchy (eta=1) limiting cases", -INF,
180 FTDistribution2DVoigt::FTDistribution2DVoigt(
double omega_x,
double omega_y,
double gamma,
193 double sum_sq = sumsq(qx, qy);
194 return m_eta * std::exp(-sum_sq / 2) + (1.0 - m_eta) * std::pow(1.0 + sum_sq, -1.5);
197 std::unique_ptr<IDistribution2DSampler> FTDistribution2DVoigt::createSampler()
const
201 std::ostringstream ostr;
202 ostr <<
"FTDistribution2DVoigt::createSampler() -> Error in class initialization";
203 ostr <<
"\n\n Has not been implemented yet...stay tuned!";
Defines many exception classes in namespace Exceptionss.
Defines interface class IFTDistribution2D, and children thereof.
Defines classes RealIntegrator, ComplexIntegrator.
Defines namespace MathFunctions.
Two-dimensional Cauchy distribution in Fourier space; corresponds to a normalized exp(-r) in real spa...
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 cone distribution in Fourier space; corresponds to 1-r if r<1 (and 0 otherwise) in re...
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 ...
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 Gauss distribution in Fourier space; corresponds to normalized exp(-r^2/2) in real sp...
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.
double evaluate(double qx, double qy) const final
evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real...
Interface for two-dimensional distributions in Fourier space.
Base class for tree-like structures containing parameterized objects.
To integrate a real function of a real variable.
double Bessel_J0(double x)
Bessel function of the first kind and order 0.
double Bessel_J1c(double x)
Bessel function Bessel_J1(x)/x.