39 return 3.14159265358979323846;
90 return 1.4142135623730950488016887242097;
98 return 2.71828182845904523536;
105 return 2.30258509299404568402;
112 return 0.43429448190325182765;
194 return 6.62607015e-34;
218 return 1.054571817e-34;
225 return 1.0e7 *
Hbar();
293 return 6.02214076e+23;
334 return (1000.0 *
R()) /
MWair();
341 return 0.577215664901532860606512090082402431042;
348 return 1.602176634e-19;
415 inline static T
Min();
416 inline static T
Max();
445 template <
typename Iterator> Iterator
LocMin(Iterator
first, Iterator last);
447 template <
typename Iterator> Iterator
LocMax(Iterator
first, Iterator last);
469 template <
typename T> T *
Cross(
const T
v1[3],
const T
v2[3], T out[3]);
475 template <
typename T>
inline T
NormCross(
const T
v1[3],
const T
v2[3],T out[3]);
478 template <
typename T> T *
Normal2Plane(
const T
v1[3],
const T
v2[3],
const T
v3[3], T normal[3]);
521 template <
typename Iterator,
typename WeightIterator>
Double_t Mean(Iterator
first, Iterator last, WeightIterator wfirst);
528 template <
typename Iterator,
typename WeightIterator>
Double_t RMS(Iterator
first, Iterator last, WeightIterator wfirst);
532 template <
typename Iterator,
typename WeightIterator>
Double_t StdDev(Iterator
first, Iterator last, WeightIterator wfirst) {
return RMS<Iterator,WeightIterator>(
first,last,wfirst); }
537 template <
class Element,
typename Size> Element
KOrdStat(Size
n,
const Element *
a, Size k, Size *work = 0);
581#if defined(R__WIN32) && !defined(__CINT__)
583# define finite _finite
586#if defined(R__AIX) || defined(R__SOLARIS_CC50) || \
587 defined(R__HPUX11) || defined(R__GLIBC) || \
588 (defined(R__MACOSX) )
591# ifdef R__SOLARIS_CC50
592 extern "C" {
int finite(
double); }
605 extern double sin(
double);
606 extern double cos(
double);
607 extern double tan(
double);
614 extern double atan2(
double,
double);
616 extern double exp(
double);
617 extern double pow(
double,
double);
618 extern double log(
double);
631 _CRTIMP
double ldexp(
double,
int);
632 _CRTIMP
double ceil(
double);
633 _CRTIMP
double floor(
double);
681 if (
y == 0)
return 0;
682 if (
y > 0)
return Pi()/2;
718 if ( i & 1 &&
x + 0.5 == T(i) ) i--;
721 if ( i & 1 &&
x - 0.5 == T(i) ) i++;
736 {
return std::pow(
x,
y); }
744 {
return std::pow(
x,
y); }
748 {
return pow(
x,
y); }
753 return std::pow(
x,
y);
772#if defined(R__FAST_MATH)
775 const unsigned long long mask = 0x7FF0000000000000LL;
776 union {
unsigned long long l;
double d;}
v;
778 return (
v.l&mask)!=mask;
781# if defined(R__HPUX11)
782 {
return isfinite(
x); }
783# elif defined(R__MACOSX)
786 {
return isfinite(
x); }
789 {
return std::isfinite(
x); }
801#if defined(R__FAST_MATH)
804 const unsigned int mask = 0x7f800000;
805 union {
unsigned int l;
float d;}
v;
807 return (
v.l&mask)!=mask;
810{
return std::isfinite(
x); }
818#if defined (R__FAST_MATH)
845 } ieee_double_shape_type;
847#define EXTRACT_WORDS(ix0,ix1,d) \
849 ieee_double_shape_type ew_u; \
851 (ix0) = ew_u.parts.msw; \
852 (ix1) = ew_u.parts.lsw; \
859 EXTRACT_WORDS(hx, lx,
x);
863 return (hx == 0x7ff00000) && (lx != 0);
869 } ieee_float_shape_type;
871#define GET_FLOAT_WORD(i,d) \
873 ieee_float_shape_type gf_u; \
881 GET_FLOAT_WORD (wx,
x);
883 return (
Bool_t)(wx > 0x7f800000);
888#if defined(R__FAST_MATH)
903 return std::numeric_limits<Double_t>::quiet_NaN();
909 return std::numeric_limits<Double_t>::signaling_NaN();
915 return std::numeric_limits<Double_t>::infinity();
922 return (std::numeric_limits<T>::min)();
929 return (std::numeric_limits<T>::max)();
936 return std::numeric_limits<T>::epsilon();
953 return *std::min_element(
a,
a+
n);
960 return *std::max_element(
a,
a+
n);
973 if (
n <= 0 || !
a)
return -1;
988template <
typename Iterator>
991 return std::min_element(
first, last);
1001 if (
n <= 0 || !
a)
return -1;
1016template <
typename Iterator>
1020 return std::max_element(
first, last);
1025template <
typename Iterator>
1030 while (
first != last )
1044template <
typename Iterator,
typename WeightIterator>
1051 while (
first != last ) {
1053 ::Error(
"TMath::Mean",
"w[%d] = %.4e < 0 ?!",i,*w);
1056 sum += (*w) * (*first);
1063 ::Error(
"TMath::Mean",
"sum of weights == 0 ?!");
1072template <
typename T>
1085template <
typename Iterator>
1090 while (
first != last ) {
1091 if (*
first == 0)
return 0.;
1104template <
typename T>
1118template <
typename Iterator>
1126 while (
first != last ) {
1128 tot += (
x - mean)*(
x - mean);
1142template <
typename Iterator,
typename WeightIterator>
1149 while (
first != last ) {
1152 sumw2 += (*w) * (*w);
1153 tot += (*w) * (
x - mean)*(
x - mean);
1166template <
typename T>
1177 out[0] =
v1[1] *
v2[2] -
v1[2] *
v2[1];
1178 out[1] =
v1[2] *
v2[0] -
v1[0] *
v2[2];
1179 out[2] =
v1[0] *
v2[1] -
v1[1] *
v2[0];
1193 v1[0] = p2[0] - p1[0];
1194 v1[1] = p2[1] - p1[1];
1195 v1[2] = p2[2] - p1[2];
1197 v2[0] = p3[0] - p1[0];
1198 v2[1] = p3[1] - p1[1];
1199 v2[2] = p3[2] - p1[2];
1214 for (i=0; i<np; i++) {
1215 if ((
y[i]<yp &&
y[j]>=yp) || (
y[j]<yp &&
y[i]>=yp)) {
1216 if (
x[i]+(yp-
y[i])/(
y[j]-
y[i])*(
x[j]-
x[i])<xp) {
1217 oddNodes = !oddNodes;
1250 const Int_t kWorkMax = 100;
1252 if (
n <= 0 || !
a)
return 0;
1263 isAllocated =
kTRUE;
1270 for (
Int_t j = 0; j <
n; j++) {
1272 ::Error(
"TMath::Median",
"w[%d] = %.4e < 0 ?!",j,w[j]);
1273 if (isAllocated)
delete [] ind;
1285 for (jl = 0; jl <
n; jl++) {
1287 if (
sum >= sumTot2)
break;
1292 for (jh =
n-1; jh >= 0; jh--) {
1294 if (
sum <= sumTot2)
break;
1297 median = 0.5*(
a[ind[jl]]+
a[ind[jh]]);
1332template <
class Element,
typename Size>
1336 const Int_t kWorkMax = 100;
1341 Size i, ir, j,
l, mid;
1344 Index workLocal[kWorkMax];
1352 isAllocated =
kTRUE;
1357 for (Size ii=0; ii<
n; ii++) {
1365 if (ir ==
l+1 &&
a[ind[ir]]<
a[ind[
l]])
1366 {temp = ind[
l]; ind[
l]=ind[ir]; ind[ir]=temp;}
1367 Element tmp =
a[ind[rk]];
1373 {temp = ind[mid]; ind[mid]=ind[
l+1]; ind[
l+1]=temp;}
1374 if (
a[ind[
l]]>
a[ind[ir]])
1375 {temp = ind[
l]; ind[
l]=ind[ir]; ind[ir]=temp;}
1377 if (
a[ind[
l+1]]>
a[ind[ir]])
1378 {temp=ind[
l+1]; ind[
l+1]=ind[ir]; ind[ir]=temp;}
1380 if (
a[ind[
l]]>
a[ind[
l+1]])
1381 {temp = ind[
l]; ind[
l]=ind[
l+1]; ind[
l+1]=temp;}
1387 do i++;
while (
a[ind[i]]<
a[arr]);
1388 do j--;
while (
a[ind[j]]>
a[arr]);
1390 {temp=ind[i]; ind[i]=ind[j]; ind[j]=temp;}
1394 if (j>=rk) ir = j-1;
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
TGLVector3 Cross(const TGLVector3 &v1, const TGLVector3 &v2)
double atan2(double, double)
double pow(double, double)
double ldexp(double, int)
Namespace for new Math classes and functions.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Double_t FDistI(Double_t F, Double_t N, Double_t M)
Calculates the cumulative distribution function of F-distribution, this function occurs in the statis...
Double_t GeomMean(Long64_t n, const T *a)
Return the geometric mean of an array a of size n.
Double_t LogNormal(Double_t x, Double_t sigma, Double_t theta=0, Double_t m=1)
Computes the density of LogNormal distribution at point x.
constexpr Double_t G()
Gravitational constant in: .
T * Normal2Plane(const T v1[3], const T v2[3], const T v3[3], T normal[3])
Calculate a normal vector of a plane.
Double_t DiLog(Double_t x)
Modified Struve functions of order 1.
Double_t BetaDist(Double_t x, Double_t p, Double_t q)
Computes the probability density function of the Beta distribution (the distribution function is comp...
Double_t BesselI(Int_t n, Double_t x)
Compute the Integer Order Modified Bessel function I_n(x) for n=0,1,2,... and any real x.
Element KOrdStat(Size n, const Element *a, Size k, Size *work=0)
Returns k_th order statistic of the array a of size n (k_th smallest element out of n elements).
Double_t Gaus(Double_t x, Double_t mean=0, Double_t sigma=1, Bool_t norm=kFALSE)
Calculate a gaussian function with mean and sigma.
constexpr Double_t GUncertainty()
Gravitational constant uncertainty.
constexpr Double_t C()
Velocity of light in .
Double_t Factorial(Int_t i)
Compute factorial(n).
Double_t KolmogorovTest(Int_t na, const Double_t *a, Int_t nb, const Double_t *b, Option_t *option)
Statistical test whether two one-dimensional sets of points are compatible with coming from the same ...
constexpr Double_t GhbarCUncertainty()
uncertainty.
Long64_t LocMin(Long64_t n, const T *a)
Return index of array with the minimum element.
constexpr Double_t Ccgs()
constexpr Double_t SigmaUncertainty()
Stefan-Boltzmann constant uncertainty.
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
Double_t BinomialI(Double_t p, Int_t n, Int_t k)
Suppose an event occurs with probability p per trial Then the probability P of its occurring k or mor...
Double_t Vavilov(Double_t x, Double_t kappa, Double_t beta2)
Returns the value of the Vavilov density function.
Double_t Binomial(Int_t n, Int_t k)
Calculate the binomial coefficient n over k.
Float_t Normalize(Float_t v[3])
Normalize a vector v in place.
constexpr Double_t NaUncertainty()
Avogadro constant (Avogadro's Number) uncertainty.
Double_t Prob(Double_t chi2, Int_t ndf)
Computation of the probability for a certain Chi-squared (chi2) and number of degrees of freedom (ndf...
Bool_t IsInside(T xp, T yp, Int_t np, T *x, T *y)
Function which returns kTRUE if point xp,yp lies inside the polygon defined by the np points in array...
Double_t Log2(Double_t x)
Double_t BesselK1(Double_t x)
modified Bessel function I_1(x)
void BubbleHigh(Int_t Narr, Double_t *arr1, Int_t *arr2)
Bubble sort variant to obtain the order of an array's elements into an index in order to do more usef...
Double_t BesselI1(Double_t x)
modified Bessel function K_0(x)
Double_t Erf(Double_t x)
Computation of the error function erf(x).
Bool_t Permute(Int_t n, Int_t *a)
Simple recursive algorithm to find the permutations of n natural numbers, not necessarily all distinc...
Double_t QuietNaN()
Returns a quiet NaN as defined by IEEE 754
Double_t Floor(Double_t x)
Double_t PoissonI(Double_t x, Double_t par)
Compute the Discrete Poisson distribution function for (x,par).
Double_t CauchyDist(Double_t x, Double_t t=0, Double_t s=1)
Computes the density of Cauchy distribution at point x by default, standard Cauchy distribution is us...
Double_t StruveL1(Double_t x)
Modified Struve functions of order 0.
constexpr Double_t Gn()
Standard acceleration of gravity in .
Double_t LaplaceDistI(Double_t x, Double_t alpha=0, Double_t beta=1)
Computes the distribution function of Laplace distribution at point x, with location parameter alpha ...
ULong_t Hash(const void *txt, Int_t ntxt)
Calculates hash index from any char string.
constexpr Double_t QeUncertainty()
Elementary charge uncertainty.
constexpr Double_t K()
Boltzmann's constant in .
Double_t BreitWigner(Double_t x, Double_t mean=0, Double_t gamma=1)
Calculate a Breit Wigner function with mean and gamma.
constexpr Double_t Sqrt2()
constexpr Double_t KUncertainty()
Boltzmann's constant uncertainty.
constexpr Double_t Hbarcgs()
Double_t Landau(Double_t x, Double_t mpv=0, Double_t sigma=1, Bool_t norm=kFALSE)
The LANDAU function.
Double_t Voigt(Double_t x, Double_t sigma, Double_t lg, Int_t r=4)
Computation of Voigt function (normalised).
Double_t Student(Double_t T, Double_t ndf)
Computes density function for Student's t- distribution (the probability function (integral of densit...
constexpr Double_t CUncertainty()
Speed of light uncertainty.
constexpr Double_t Qe()
Elementary charge in .
Double_t Ceil(Double_t x)
constexpr Double_t PiOver2()
constexpr Double_t HCcgs()
T MinElement(Long64_t n, const T *a)
Return minimum of array a of length n.
Double_t BetaDistI(Double_t x, Double_t p, Double_t q)
Computes the distribution function of the Beta distribution.
T NormCross(const T v1[3], const T v2[3], T out[3])
Calculate the Normalized Cross Product of two vectors.
Int_t Finite(Double_t x)
Check if it is finite with a mask in order to be consistent in presence of fast math.
Int_t FloorNint(Double_t x)
Double_t BesselK0(Double_t x)
modified Bessel function I_0(x)
Double_t BesselY0(Double_t x)
Bessel function J1(x) for any real x.
Double_t ATan2(Double_t y, Double_t x)
constexpr Double_t RUncertainty()
Universal gas constant uncertainty.
Double_t BetaCf(Double_t x, Double_t a, Double_t b)
Continued fraction evaluation by modified Lentz's method used in calculation of incomplete Beta funct...
Long64_t LocMax(Long64_t n, const T *a)
Return index of array with the maximum element.
Double_t ErfInverse(Double_t x)
returns the inverse error function x must be <-1<x<1
Double_t LaplaceDist(Double_t x, Double_t alpha=0, Double_t beta=1)
Computes the probability density function of Laplace distribution at point x, with location parameter...
constexpr Double_t E()
Base of natural log:
constexpr Double_t GnUncertainty()
Standard acceleration of gravity uncertainty.
constexpr Double_t Hcgs()
constexpr Double_t HUncertainty()
Planck's constant uncertainty.
constexpr Double_t DegToRad()
Conversion from degree to radian:
Double_t Mean(Long64_t n, const T *a, const Double_t *w=0)
Return the weighted mean of an array a with length n.
Double_t Erfc(Double_t x)
Compute the complementary error function erfc(x).
Double_t VavilovI(Double_t x, Double_t kappa, Double_t beta2)
Returns the value of the Vavilov distribution function.
constexpr Double_t Sigma()
Stefan-Boltzmann constant in .
Double_t Beta(Double_t p, Double_t q)
Calculates Beta-function Gamma(p)*Gamma(q)/Gamma(p+q).
constexpr Double_t Kcgs()
Double_t Poisson(Double_t x, Double_t par)
Compute the Poisson distribution function for (x,par).
constexpr Double_t H()
Planck's constant in .
Double_t Sqrt(Double_t x)
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Int_t CeilNint(Double_t x)
Double_t Ldexp(Double_t x, Int_t exp)
Double_t BesselJ0(Double_t x)
modified Bessel function K_1(x)
constexpr Double_t LogE()
Base-10 log of e (to convert ln to log)
Double_t Gamma(Double_t z)
Computation of gamma(z) for all z.
constexpr Double_t MWair()
Molecular weight of dry air 1976 US Standard Atmosphere in or
constexpr Double_t Gcgs()
Double_t StruveL0(Double_t x)
Struve functions of order 1.
Double_t NormQuantile(Double_t p)
Computes quantiles for standard normal distribution N(0, 1) at probability p.
constexpr Double_t Ln10()
Natural log of 10 (to convert log to ln)
Double_t Hypot(Double_t x, Double_t y)
constexpr Double_t EulerGamma()
Euler-Mascheroni Constant.
constexpr Double_t PiOver4()
Double_t StruveH0(Double_t x)
Bessel function Y1(x) for positive x.
constexpr Double_t R()
Universal gas constant ( ) in
Double_t LnGamma(Double_t z)
Computation of ln[gamma(z)] for all z.
Bool_t AreEqualRel(Double_t af, Double_t bf, Double_t relPrec)
Bool_t AreEqualAbs(Double_t af, Double_t bf, Double_t epsilon)
Double_t KolmogorovProb(Double_t z)
Calculates the Kolmogorov distribution function,.
constexpr Double_t InvPi()
Bool_t RootsCubic(const Double_t coef[4], Double_t &a, Double_t &b, Double_t &c)
Calculates roots of polynomial of 3rd order a*x^3 + b*x^2 + c*x + d, where.
Double_t ChisquareQuantile(Double_t p, Double_t ndf)
Evaluate the quantiles of the chi-squared probability distribution function.
Double_t FDist(Double_t F, Double_t N, Double_t M)
Computes the density function of F-distribution (probability function, integral of density,...
Double_t RMS(Long64_t n, const T *a, const Double_t *w=0)
Return the Standard Deviation of an array a with length n.
Double_t SignalingNaN()
Returns a signaling NaN as defined by IEEE 754](http://en.wikipedia.org/wiki/NaN#Signaling_NaN)
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)
T * Cross(const T v1[3], const T v2[3], T out[3])
Calculate the Cross Product of two vectors: out = [v1 x v2].
void BubbleLow(Int_t Narr, Double_t *arr1, Int_t *arr2)
Opposite ordering of the array arr2[] to that of BubbleHigh.
Double_t BesselK(Int_t n, Double_t x)
integer order modified Bessel function I_n(x)
constexpr Double_t Na()
Avogadro constant (Avogadro's Number) in .
Double_t Median(Long64_t n, const T *a, const Double_t *w=0, Long64_t *work=0)
Return the median of the array a where each entry i has weight w[i] .
T MaxElement(Long64_t n, const T *a)
Return maximum of array a of length n.
Double_t BesselJ1(Double_t x)
Bessel function J0(x) for any real x.
Double_t BetaIncomplete(Double_t x, Double_t a, Double_t b)
Calculates the incomplete Beta-function.
constexpr Double_t Rgair()
Dry Air Gas Constant (R / MWair) in
constexpr Double_t Hbar()
in
Double_t StruveH1(Double_t x)
Struve functions of order 0.
Double_t Freq(Double_t x)
Computation of the normal frequency function freq(x).
Double_t LandauI(Double_t x)
Returns the value of the Landau distribution function at point x.
void Quantiles(Int_t n, Int_t nprob, Double_t *x, Double_t *quantiles, Double_t *prob, Bool_t isSorted=kTRUE, Int_t *index=0, Int_t type=7)
Computes sample quantiles, corresponding to the given probabilities.
constexpr Double_t RadToDeg()
Conversion from radian to degree:
Double_t BesselI0(Double_t x)
integer order modified Bessel function K_n(x)
Double_t Log10(Double_t x)
Double_t StudentI(Double_t T, Double_t ndf)
Calculates the cumulative distribution function of Student's t-distribution second parameter stands f...
Double_t StudentQuantile(Double_t p, Double_t ndf, Bool_t lower_tail=kTRUE)
Computes quantiles of the Student's t-distribution 1st argument is the probability,...
Double_t BesselY1(Double_t x)
Bessel function Y0(x) for positive x.
Double_t StdDev(Long64_t n, const T *a, const Double_t *w=0)
Double_t GammaDist(Double_t x, Double_t gamma, Double_t mu=0, Double_t beta=1)
Computes the density function of Gamma distribution at point x.
constexpr Double_t GhbarC()
in
constexpr Double_t HC()
in
constexpr Double_t TwoPi()
constexpr Double_t HbarUncertainty()
uncertainty.
Double_t Infinity()
Returns an infinity as defined by the IEEE standard.
Double_t ErfcInverse(Double_t x)
returns the inverse of the complementary error function x must be 0<x<2 implement using the quantile ...
static T Min()
Returns maximum representation for type T.
static T Epsilon()
Returns minimum double representation.
static T Max()
Returns minimum double representation.
static uint64_t sum(uint64_t i)