27 return r * exp(-q * r / 8.0);
32 return r / (1.0 + (q * r) * (q * r));
38 const complex_t qyWdiv2 = width * qy / 2.0;
39 const complex_t qzHdiv2 = height * qz / 2.0;
52 return factor *
M_PI_2 * height;
56 return factor *
M_PI_4 * height;
57 return factor *
M_PI_2 * height *
Math::sinc(qy * width * 0.5) / (1.0 - aaa2);
64 const auto integrand = [&](
double u) ->
complex_t {
65 return sin(u) *
exp_I(az * std::cos(u)) * (ay == 0. ? u : sin(ay * u) / ay);
68 return factor * integral *
exp_I(az) * (height / 2);
82 const double a_scale = std::abs(a);
83 const double w_scale = std::abs(qyW2);
85 if (w_scale < 1.e-5) {
94 const complex_t gamma_p = (a + qyW2) * 0.5;
95 const complex_t gamma_m = (a - qyW2) * 0.5;
97 result =
mul_I(
exp_I(-qyd) * result / (qyW2 * 2.));
99 return factor * result;
complex_t mul_I(complex_t z)
Returns product I*z, where I is the imaginary unit.
std::complex< double > complex_t
complex_t exp_I(complex_t z)
Returns exp(I*z), where I is the imaginary unit.
Defines M_PI and some more mathematical constants.
Defines functions in namespace Math.
Defines classes RealIntegrator, ComplexIntegrator.
Declares computations in namespace ripples.
To integrate a complex function of a real variable.
complex_t integrate(const std::function< complex_t(double)> &f, double lmin, double lmax)
double sinc(double x)
sinc function:
complex_t profile_yz_cosine(complex_t qy, complex_t qz, double width, double height)
Complex form factor of cosine ripple.
complex_t profile_yz_bar(complex_t qy, complex_t qz, double width, double height)
Complex form factor of rectangular ripple (bar).
complex_t factor_x_box(complex_t q, double l)
complex_t factor_x_Lorentz(complex_t q, double l)
complex_t profile_yz_triangular(complex_t qy, complex_t qz, double width, double height, double asymmetry)
Complex form factor of triangular ripple.
complex_t factor_x_Gauss(complex_t q, double l)