Base class describing a Vavilov distribution.
The Vavilov distribution is defined in P.V. Vavilov: Ionization losses of high-energy heavy particles, Sov. Phys. JETP 5 (1957) 749 [Zh. Eksp. Teor. Fiz. 32 (1957) 920].
The probability density function of the Vavilov distribution as function of Landau's parameter is given by:
\[ p(\lambda_L; \kappa, \beta^2) = \frac{1}{2 \pi i}\int_{c-i\infty}^{c+i\infty} \phi(s) e^{\lambda_L s} ds\]
where \(\phi(s) = e^{C} e^{\psi(s)}\) with \( C = \kappa (1+\beta^2 \gamma )\) and \(\psi(s)= s \ln \kappa + (s+\beta^2 \kappa) \cdot \left ( \int \limits_{0}^{1} \frac{1 - e^{\frac{-st}{\kappa}}}{t} \,d t- \gamma \right ) - \kappa \, e^{\frac{-s}{\kappa}}\). \( \gamma = 0.5772156649\dots\) is Euler's constant.
For the class Vavilov, Pdf returns the Vavilov distribution as function of Landau's parameter \(\lambda_L = \lambda_V/\kappa - \ln \kappa\), which is the convention used in the CERNLIB routines, and in the tables by S.M. Seltzer and M.J. Berger: Energy loss stragglin of protons and mesons: Tabulation of the Vavilov distribution, pp 187-203 in: National Research Council (U.S.), Committee on Nuclear Science: Studies in penetration of charged particles in matter, Nat. Akad. Sci. Publication 1133, Nucl. Sci. Series Report No. 39, Washington (Nat. Akad. Sci.) 1964, 388 pp. Available from Google books
Therefore, for small values of \(\kappa < 0.01\), pdf approaches the Landau distribution.
For values \(\kappa > 10\), the Gauss approximation should be used with \(\mu\) and \(\sigma\) given by Vavilov::Mean(kappa, beta2) and sqrt(Vavilov::Variance(kappa, beta2).
The original Vavilov pdf is obtained by v.Pdf(lambdaV/kappa-log(kappa))/kappa.
Two subclasses are provided:
Both subclasses store coefficients needed to calculate \(p(\lambda; \kappa, \beta^2)\) for fixed values of \(\kappa\) and \(\beta^2\). Changing these values is computationally expensive.
VavilovFast is about 5 times faster for the calculation of the Pdf than VavilovAccurate; initialization takes about 100 times longer than calculation of the Pdf value. For the quantile calculation, VavilovFast is 30 times faster for the initialization, and 6 times faster for subsequent calculations. Initialization for Quantile takes 27 (11) times longer than subsequent calls for VavilovFast (VavilovAccurate).
Public Member Functions | |
Vavilov () | |
Default constructor. More... | |
virtual | ~Vavilov () |
Destructor. More... | |
virtual double | Cdf (double x) const =0 |
Evaluate the Vavilov cumulative probability density function. More... | |
virtual double | Cdf (double x, double kappa, double beta2)=0 |
Evaluate the Vavilov cumulative probability density function, and set kappa and beta2, if necessary. More... | |
virtual double | Cdf_c (double x) const =0 |
Evaluate the Vavilov complementary cumulative probability density function. More... | |
virtual double | Cdf_c (double x, double kappa, double beta2)=0 |
Evaluate the Vavilov complementary cumulative probability density function, and set kappa and beta2, if necessary. More... | |
virtual double | GetBeta2 () const =0 |
Return the current value of \(\beta^2\). More... | |
virtual double | GetKappa () const =0 |
Return the current value of \(\kappa\). More... | |
virtual double | GetLambdaMax () const =0 |
Return the maximum value of \(\lambda\) for which \(p(\lambda; \kappa, \beta^2)\) is nonzero in the current approximation. More... | |
virtual double | GetLambdaMin () const =0 |
Return the minimum value of \(\lambda\) for which \(p(\lambda; \kappa, \beta^2)\) is nonzero in the current approximation. More... | |
virtual double | Kurtosis () const |
Return the theoretical kurtosis \(\gamma_2 = \frac{1/3 - \beta^2/4}{\kappa^3 \sigma^4}\). More... | |
virtual double | Mean () const |
Return the theoretical mean \(\mu = \gamma-1- \ln \kappa - \beta^2\), where \(\gamma = 0.5772\dots\) is Euler's constant. More... | |
virtual double | Mode () const |
Return the value of \(\lambda\) where the pdf is maximal. More... | |
virtual double | Mode (double kappa, double beta2) |
Return the value of \(\lambda\) where the pdf is maximal function, and set kappa and beta2, if necessary. More... | |
virtual double | Pdf (double x) const =0 |
Evaluate the Vavilov probability density function. More... | |
virtual double | Pdf (double x, double kappa, double beta2)=0 |
Evaluate the Vavilov probability density function, and set kappa and beta2, if necessary. More... | |
virtual double | Quantile (double z) const =0 |
Evaluate the inverse of the Vavilov cumulative probability density function. More... | |
virtual double | Quantile (double z, double kappa, double beta2)=0 |
Evaluate the inverse of the Vavilov cumulative probability density function, and set kappa and beta2, if necessary. More... | |
virtual double | Quantile_c (double z) const =0 |
Evaluate the inverse of the complementary Vavilov cumulative probability density function. More... | |
virtual double | Quantile_c (double z, double kappa, double beta2)=0 |
Evaluate the inverse of the complementary Vavilov cumulative probability density function, and set kappa and beta2, if necessary. More... | |
virtual void | SetKappaBeta2 (double kappa, double beta2)=0 |
Change \(\kappa\) and \(\beta^2\) and recalculate coefficients if necessary. More... | |
virtual double | Skewness () const |
Return the theoretical skewness \(\gamma_1 = \frac{1/2 - \beta^2/3}{\kappa^2 \sigma^3} \). More... | |
virtual double | Variance () const |
Return the theoretical variance \(\sigma^2 = \frac{1 - \beta^2/2}{\kappa}\). More... | |
Static Public Member Functions | |
static double | Kurtosis (double kappa, double beta2) |
Return the theoretical kurtosis \(\gamma_2 = \frac{1/3 - \beta^2/4}{\kappa^3 \sigma^4}\). More... | |
static double | Mean (double kappa, double beta2) |
Return the theoretical Mean \(\mu = \gamma-1- \ln \kappa - \beta^2\). More... | |
static double | Skewness (double kappa, double beta2) |
Return the theoretical skewness \(\gamma_1 = \frac{1/2 - \beta^2/3}{\kappa^2 \sigma^3} \). More... | |
static double | Variance (double kappa, double beta2) |
Return the theoretical Variance \(\sigma^2 = \frac{1 - \beta^2/2}{\kappa}\). More... | |
#include <Math/Vavilov.h>
ROOT::Math::Vavilov::Vavilov | ( | ) |
Default constructor.
Definition at line 46 of file Vavilov.cxx.
|
virtual |
Destructor.
Definition at line 50 of file Vavilov.cxx.
|
pure virtual |
Evaluate the Vavilov cumulative probability density function.
x | The Landau parameter \(x = \lambda_L\) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Evaluate the Vavilov cumulative probability density function, and set kappa and beta2, if necessary.
x | The Landau parameter \(x = \lambda_L\) |
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Evaluate the Vavilov complementary cumulative probability density function.
x | The Landau parameter \(x = \lambda_L\) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Evaluate the Vavilov complementary cumulative probability density function, and set kappa and beta2, if necessary.
x | The Landau parameter \(x = \lambda_L\) |
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Return the current value of \(\beta^2\).
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Return the current value of \(\kappa\).
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Return the maximum value of \(\lambda\) for which \(p(\lambda; \kappa, \beta^2)\) is nonzero in the current approximation.
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Return the minimum value of \(\lambda\) for which \(p(\lambda; \kappa, \beta^2)\) is nonzero in the current approximation.
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
virtual |
Return the theoretical kurtosis \(\gamma_2 = \frac{1/3 - \beta^2/4}{\kappa^3 \sigma^4}\).
Definition at line 105 of file Vavilov.cxx.
|
static |
Return the theoretical kurtosis \(\gamma_2 = \frac{1/3 - \beta^2/4}{\kappa^3 \sigma^4}\).
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Definition at line 109 of file Vavilov.cxx.
|
virtual |
Return the theoretical mean \(\mu = \gamma-1- \ln \kappa - \beta^2\), where \(\gamma = 0.5772\dots\) is Euler's constant.
Definition at line 80 of file Vavilov.cxx.
|
static |
Return the theoretical Mean \(\mu = \gamma-1- \ln \kappa - \beta^2\).
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Definition at line 84 of file Vavilov.cxx.
|
virtual |
Return the value of \(\lambda\) where the pdf is maximal.
Reimplemented in ROOT::Math::VavilovAccurate.
Definition at line 56 of file Vavilov.cxx.
|
virtual |
Return the value of \(\lambda\) where the pdf is maximal function, and set kappa and beta2, if necessary.
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Reimplemented in ROOT::Math::VavilovAccurate.
Definition at line 75 of file Vavilov.cxx.
|
pure virtual |
Evaluate the Vavilov probability density function.
x | The Landau parameter \(x = \lambda_L\) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Evaluate the Vavilov probability density function, and set kappa and beta2, if necessary.
x | The Landau parameter \(x = \lambda_L\) |
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Evaluate the inverse of the Vavilov cumulative probability density function.
z | The argument \(z\), which must be in the range \(0 \le z \le 1\) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Evaluate the inverse of the Vavilov cumulative probability density function, and set kappa and beta2, if necessary.
z | The argument \(z\), which must be in the range \(0 \le z \le 1\) |
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Evaluate the inverse of the complementary Vavilov cumulative probability density function.
z | The argument \(z\), which must be in the range \(0 \le z \le 1\) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Evaluate the inverse of the complementary Vavilov cumulative probability density function, and set kappa and beta2, if necessary.
z | The argument \(z\), which must be in the range \(0 \le z \le 1\) |
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
pure virtual |
Change \(\kappa\) and \(\beta^2\) and recalculate coefficients if necessary.
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Implemented in ROOT::Math::VavilovAccurate, and ROOT::Math::VavilovFast.
|
virtual |
Return the theoretical skewness \(\gamma_1 = \frac{1/2 - \beta^2/3}{\kappa^2 \sigma^3} \).
Definition at line 96 of file Vavilov.cxx.
|
static |
Return the theoretical skewness \(\gamma_1 = \frac{1/2 - \beta^2/3}{\kappa^2 \sigma^3} \).
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Definition at line 100 of file Vavilov.cxx.
|
virtual |
Return the theoretical variance \(\sigma^2 = \frac{1 - \beta^2/2}{\kappa}\).
Definition at line 88 of file Vavilov.cxx.
|
static |
Return the theoretical Variance \(\sigma^2 = \frac{1 - \beta^2/2}{\kappa}\).
kappa | The parameter \(\kappa\), which should be in the range \(0.01 \le \kappa \le 10 \) |
beta2 | The parameter \(\beta^2\), which must be in the range \(0 \le \beta^2 \le 1 \) |
Definition at line 92 of file Vavilov.cxx.