BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
anonymous_namespace{IPeakShape.cpp} Namespace Reference

Functions

double FisherDistribution (double x, double kappa)
 
double FisherPrefactor (double kappa)
 
double MisesPrefactor (double kappa)
 
double Gauss3D (double q2, double domainsize)
 
double Cauchy3D (double q2, double domainsize)
 

Variables

const double maxkappa = std::log(1.0 / std::numeric_limits<double>::epsilon()) / 2.0
 
const double maxkappa2 = std::log(std::numeric_limits<double>::max())
 

Function Documentation

◆ FisherDistribution()

double anonymous_namespace{IPeakShape.cpp}::FisherDistribution ( double  x,
double  kappa 
)

Definition at line 27 of file IPeakShape.cpp.

28 {
29  if (kappa <= 0.0) {
30  return 1.0 / (4.0 * M_PI);
31  }
32  double prefactor = kappa / (4.0 * M_PI);
33  if (kappa > maxkappa) {
34  return 2.0 * prefactor * std::exp(kappa * (x - 1.0));
35  }
36  return prefactor * std::exp(kappa * x) / std::sinh(kappa);
37 }
#define M_PI
Definition: MathConstants.h:39

References M_PI, maxkappa, and anonymous_namespace{ProfileHelper.cpp}::prefactor.

Referenced by GaussFisherPeakShape::evaluate(), LorentzFisherPeakShape::evaluate(), and MisesFisherGaussPeakShape::evaluate().

◆ FisherPrefactor()

double anonymous_namespace{IPeakShape.cpp}::FisherPrefactor ( double  kappa)

Definition at line 39 of file IPeakShape.cpp.

40 {
41  if (kappa <= 0.0) {
42  return 1.0 / (4.0 * M_PI);
43  }
44  if (kappa > maxkappa) {
45  return kappa / 2.0 / M_PI;
46  } else {
47  return kappa * std::exp(kappa) / 4.0 / M_PI / std::sinh(kappa);
48  }
49 }

References M_PI, and maxkappa.

Referenced by MisesFisherGaussPeakShape::evaluate().

◆ MisesPrefactor()

double anonymous_namespace{IPeakShape.cpp}::MisesPrefactor ( double  kappa)

Definition at line 51 of file IPeakShape.cpp.

52 {
53  if (kappa <= 0.0) {
54  return 1.0 / (2.0 * M_PI);
55  }
56  if (kappa > maxkappa2) {
57  return std::sqrt(kappa / 2.0 / M_PI) / (1.0 + 1.0 / (8.0 * kappa));
58  } else {
59  return std::exp(kappa) / (2.0 * M_PI * MathFunctions::Bessel_I0(kappa));
60  }
61 }
double Bessel_I0(double x)
Modified Bessel function of the first kind and order 0.

References MathFunctions::Bessel_I0(), M_PI, and maxkappa2.

Referenced by MisesFisherGaussPeakShape::evaluate(), and MisesGaussPeakShape::evaluate().

Here is the call graph for this function:

◆ Gauss3D()

double anonymous_namespace{IPeakShape.cpp}::Gauss3D ( double  q2,
double  domainsize 
)

Definition at line 63 of file IPeakShape.cpp.

64 {
65  double norm_factor = std::pow(domainsize / std::sqrt(M_TWOPI), 3.0);
66  double exponent = -q2 * domainsize * domainsize / 2.0;
67  return norm_factor * std::exp(exponent);
68 }
#define M_TWOPI
Definition: MathConstants.h:49

References M_TWOPI.

Referenced by IsotropicGaussPeakShape::evaluate(), GaussFisherPeakShape::evaluate(), MisesFisherGaussPeakShape::evaluate(), MisesGaussPeakShape::evaluate(), and MisesGaussPeakShape::integrand().

◆ Cauchy3D()

double anonymous_namespace{IPeakShape.cpp}::Cauchy3D ( double  q2,
double  domainsize 
)

Definition at line 70 of file IPeakShape.cpp.

71 {
72  double lorentz1 = domainsize / (1.0 + q2 * domainsize * domainsize) / M_PI;
73  return domainsize * lorentz1 * lorentz1;
74 }

References M_PI.

Referenced by IsotropicLorentzPeakShape::evaluate(), and LorentzFisherPeakShape::evaluate().

Variable Documentation

◆ maxkappa

const double anonymous_namespace{IPeakShape.cpp}::maxkappa = std::log(1.0 / std::numeric_limits<double>::epsilon()) / 2.0

Definition at line 24 of file IPeakShape.cpp.

Referenced by FisherDistribution(), and FisherPrefactor().

◆ maxkappa2

const double anonymous_namespace{IPeakShape.cpp}::maxkappa2 = std::log(std::numeric_limits<double>::max())

Definition at line 25 of file IPeakShape.cpp.

Referenced by MisesPrefactor().