23 IFTDecayFunction2D::IFTDecayFunction2D(
const NodeMeta& meta, 
const std::vector<double>& PValues)
 
   24     : 
INode(nodeMetaUnion({{
"DecayLengthX", 
"nm", 
"Half-width along x axis", 0, INF, 1.},
 
   25                            {
"DecayLengthY", 
"nm", 
"Half-width along y axis", 0, INF, 1.},
 
   26                            {
"Gamma", 
"rad", 
"orientation with respect to the first lattice vector",
 
   27                             -M_PI_2, +M_PI_2, 0}},
 
   30       m_decay_length_x(m_P[0]), m_decay_length_y(m_P[1]), m_gamma(m_P[2])
 
   36 std::pair<double, double>
 
   40     auto q_bounds_1 = transformToRecLatticeCoordinates(qX, qY, a, b, alpha);
 
   41     auto q_bounds_2 = transformToRecLatticeCoordinates(qX, -qY, a, b, alpha);
 
   42     double qa_max = std::max(std::abs(q_bounds_1.first), std::abs(q_bounds_2.first));
 
   43     double qb_max = std::max(std::abs(q_bounds_1.second), std::abs(q_bounds_2.second));
 
   44     return {qa_max, qb_max};
 
   47 std::pair<double, double> IFTDecayFunction2D::transformToRecLatticeCoordinates(
double qX, 
double qY,
 
   51     double qa = (a * qX * std::cos(m_gamma) - a * qY * std::sin(m_gamma)) / M_TWOPI;
 
   52     double qb = (b * qX * std::cos(alpha - m_gamma) + b * qY * std::sin(alpha - m_gamma)) / M_TWOPI;
 
   60 FTDecayFunction2DCauchy::FTDecayFunction2DCauchy(
const std::vector<double> P)
 
   65 FTDecayFunction2DCauchy::FTDecayFunction2DCauchy(
double decay_length_x, 
double decay_length_y,
 
   78     double sum_sq = qx * qx * m_decay_length_x * m_decay_length_x
 
   79                     + qy * qy * m_decay_length_y * m_decay_length_y;
 
   80     return M_TWOPI * m_decay_length_x * m_decay_length_y * std::pow(1.0 + sum_sq, -1.5);
 
   87 FTDecayFunction2DGauss::FTDecayFunction2DGauss(
const std::vector<double> P)
 
   92 FTDecayFunction2DGauss::FTDecayFunction2DGauss(
double decay_length_x, 
double decay_length_y,
 
  105     double sum_sq = qx * qx * m_decay_length_x * m_decay_length_x
 
  106                     + qy * qy * m_decay_length_y * m_decay_length_y;
 
  107     return M_TWOPI * m_decay_length_x * m_decay_length_y * std::exp(-sum_sq / 2.0);
 
  114 FTDecayFunction2DVoigt::FTDecayFunction2DVoigt(
const std::vector<double> P)
 
  116         {
"FTDecayFunction2DVoigt",
 
  118          {{
"Eta", 
"", 
"balances between Gauss (eta=0) and Cauchy (eta=1) limiting cases", -INF,
 
  125 FTDecayFunction2DVoigt::FTDecayFunction2DVoigt(
double decay_length_x, 
double decay_length_y,
 
  126                                                double gamma, 
double eta)
 
  138     double sum_sq = qx * qx * m_decay_length_x * m_decay_length_x
 
  139                     + qy * qy * m_decay_length_y * m_decay_length_y;
 
  140     return M_TWOPI * m_decay_length_x * m_decay_length_y
 
  141            * (m_eta * std::exp(-sum_sq / 2.0) + (1.0 - m_eta) * std::pow(1.0 + sum_sq, -1.5));
 
Defines classes IFTDecayFunction1D, IFTDecayFunction2D,.
 
Defines namespace MathFunctions.
 
Two-dimensional Cauchy decay function in reciprocal space; corresponds to exp(-r) in real space,...
 
double evaluate(double qx, double qy) const final
evaluate Fourier transformed decay function for q in X,Y coordinates
 
Two-dimensional Gauss decay function in reciprocal space; corresponds to exp(-r^2/2) in real space,...
 
double evaluate(double qx, double qy) const final
evaluate Fourier transformed decay function for q in X,Y coordinates
 
Two-dimensional pseudo-Voigt decay function in reciprocal space; corresponds to eta*Gauss + (1-eta)*C...
 
double evaluate(double qx, double qy) const final
evaluate Fourier transformed decay function for q in X,Y coordinates
 
Interface for two-dimensional decay function in reciprocal space.
 
double gamma() const
get angle between first lattice vector and X-axis of distribution (both in direct space)
 
std::pair< double, double > boundingReciprocalLatticeCoordinates(double qX, double qY, double a, double b, double alpha) const
transform back to a*, b* basis:
 
Base class for tree-like structures containing parameterized objects.