40 return 3.14159265358979323846;
91 return 1.4142135623730950488016887242097;
99 return 2.71828182845904523536;
106 return 2.30258509299404568402;
113 return 0.43429448190325182765;
191 return 6.62606876e-34;
205 return 0.00000052e-34;
213 return 1.054571596e-34;
220 return 1.0e7 *
Hbar();
227 return 0.000000082e-34;
249 return 1.3806503e-23;
263 return 0.0000024e-23;
285 return 6.02214199e+23;
292 return 0.00000047e+23;
324 return (1000.0 *
R()) /
MWair();
331 return 0.577215664901532860606512090082402431042;
338 return 1.602176462e-19;
345 return 0.000000063e-19;
403 inline static T Min();
404 inline static T Max();
431 template <
typename Iterator> Iterator
LocMin(Iterator
first, Iterator last);
433 template <
typename Iterator> Iterator
LocMax(Iterator
first, Iterator last);
455 template <
typename T>
T *
Cross(
const T v1[3],
const T v2[3],
T out[3]);
461 template <
typename T>
inline T NormCross(
const T v1[3],
const T v2[3],
T out[3]);
464 template <
typename T>
T *
Normal2Plane(
const T v1[3],
const T v2[3],
const T v3[3],
T normal[3]);
507 template <
typename Iterator,
typename WeightIterator>
Double_t Mean(Iterator
first, Iterator last, WeightIterator wfirst);
514 template <
typename Iterator,
typename WeightIterator>
Double_t RMS(Iterator
first, Iterator last, WeightIterator wfirst);
518 template <
typename Iterator,
typename WeightIterator>
Double_t StdDev(Iterator
first, Iterator last, WeightIterator wfirst) {
return RMS<Iterator,WeightIterator>(
first,last,wfirst); }
523 template <
class Element,
typename Size> Element
KOrdStat(
Size n,
const Element *
a,
Size k,
Size *work = 0);
567#if defined(R__WIN32) && !defined(__CINT__)
569# define finite _finite
572#if defined(R__AIX) || defined(R__SOLARIS_CC50) || \
573 defined(R__HPUX11) || defined(R__GLIBC) || \
574 (defined(R__MACOSX) )
577# ifdef R__SOLARIS_CC50
578 extern "C" {
int finite(
double); }
591 extern double sin(
double);
592 extern double cos(
double);
593 extern double tan(
double);
600 extern double atan2(
double,
double);
602 extern double exp(
double);
603 extern double pow(
double,
double);
604 extern double log(
double);
617 _CRTIMP
double ldexp(
double,
int);
618 _CRTIMP
double ceil(
double);
619 _CRTIMP
double floor(
double);
658 if (
x > 1.)
return 0;
669 if (
y == 0)
return 0;
670 if (
y > 0)
return Pi()/2;
706 if ( i & 1 &&
x + 0.5 ==
T(i) ) i--;
709 if ( i & 1 &&
x - 0.5 ==
T(i) ) i++;
736 {
return pow(
x,
y); }
760#if defined(R__FAST_MATH)
763 const unsigned long long mask = 0x7FF0000000000000LL;
764 union {
unsigned long long l;
double d;}
v;
766 return (
v.l&mask)!=mask;
769# if defined(R__HPUX11)
770 {
return isfinite(
x); }
771# elif defined(R__MACOSX)
774 {
return isfinite(
x); }
777 {
return std::isfinite(
x); }
789#if defined(R__FAST_MATH)
792 const unsigned int mask = 0x7f800000;
793 union {
unsigned int l;
float d;}
v;
795 return (
v.l&mask)!=mask;
798{
return std::isfinite(
x); }
806#if defined (R__FAST_MATH)
833 } ieee_double_shape_type;
835#define EXTRACT_WORDS(ix0,ix1,d) \
837 ieee_double_shape_type ew_u; \
839 (ix0) = ew_u.parts.msw; \
840 (ix1) = ew_u.parts.lsw; \
847 EXTRACT_WORDS(hx, lx,
x);
851 return (hx == 0x7ff00000) && (lx != 0);
857 } ieee_float_shape_type;
859#define GET_FLOAT_WORD(i,d) \
861 ieee_float_shape_type gf_u; \
869 GET_FLOAT_WORD (wx,
x);
871 return (
Bool_t)(wx > 0x7f800000);
876#if defined(R__FAST_MATH)
891 return std::numeric_limits<Double_t>::quiet_NaN();
897 return std::numeric_limits<Double_t>::signaling_NaN();
903 return std::numeric_limits<Double_t>::infinity();
910 return (std::numeric_limits<T>::min)();
917 return (std::numeric_limits<T>::max)();
941 return *std::min_element(
a,
a+
n);
948 return *std::max_element(
a,
a+
n);
961 if (
n <= 0 || !
a)
return -1;
976template <
typename Iterator>
979 return std::min_element(
first, last);
989 if (
n <= 0 || !
a)
return -1;
1004template <
typename Iterator>
1008 return std::max_element(
first, last);
1013template <
typename Iterator>
1018 while (
first != last )
1032template <
typename Iterator,
typename WeightIterator>
1039 while (
first != last ) {
1041 ::Error(
"TMath::Mean",
"w[%d] = %.4e < 0 ?!",i,*w);
1044 sum += (*w) * (*first);
1051 ::Error(
"TMath::Mean",
"sum of weights == 0 ?!");
1060template <
typename T>
1073template <
typename Iterator>
1078 while (
first != last ) {
1079 if (*
first == 0)
return 0.;
1092template <
typename T>
1106template <
typename Iterator>
1114 while (
first != last ) {
1116 tot += (
x - mean)*(
x - mean);
1130template <
typename Iterator,
typename WeightIterator>
1137 while (
first != last ) {
1140 sumw2 += (*w) * (*w);
1141 tot += (*w) * (
x - mean)*(
x - mean);
1154template <
typename T>
1165 out[0] = v1[1] * v2[2] - v1[2] * v2[1];
1166 out[1] = v1[2] * v2[0] - v1[0] * v2[2];
1167 out[2] = v1[0] * v2[1] - v1[1] * v2[0];
1181 v1[0] =
p2[0] -
p1[0];
1182 v1[1] =
p2[1] -
p1[1];
1183 v1[2] =
p2[2] -
p1[2];
1185 v2[0] =
p3[0] -
p1[0];
1186 v2[1] =
p3[1] -
p1[1];
1187 v2[2] =
p3[2] -
p1[2];
1202 for (i=0; i<np; i++) {
1203 if ((
y[i]<yp &&
y[j]>=yp) || (
y[j]<yp &&
y[i]>=yp)) {
1204 if (
x[i]+(yp-
y[i])/(
y[j]-
y[i])*(
x[j]-
x[i])<xp) {
1205 oddNodes = !oddNodes;
1238 const Int_t kWorkMax = 100;
1240 if (
n <= 0 || !
a)
return 0;
1251 isAllocated =
kTRUE;
1258 for (
Int_t j = 0; j <
n; j++) {
1260 ::Error(
"TMath::Median",
"w[%d] = %.4e < 0 ?!",j,w[j]);
1261 if (isAllocated)
delete [] ind;
1273 for (jl = 0; jl <
n; jl++) {
1275 if (
sum >= sumTot2)
break;
1280 for (jh =
n-1; jh >= 0; jh--) {
1282 if (
sum <= sumTot2)
break;
1285 median = 0.5*(
a[ind[jl]]+
a[ind[jh]]);
1320template <
class Element,
typename Size>
1324 const Int_t kWorkMax = 100;
1329 Size i, ir, j,
l, mid;
1332 Index workLocal[kWorkMax];
1340 isAllocated =
kTRUE;
1345 for (
Size ii=0; ii<
n; ii++) {
1353 if (ir ==
l+1 &&
a[ind[ir]]<
a[ind[
l]])
1354 {temp = ind[
l]; ind[
l]=ind[ir]; ind[ir]=temp;}
1355 Element tmp =
a[ind[rk]];
1361 {temp = ind[mid]; ind[mid]=ind[
l+1]; ind[
l+1]=temp;}
1362 if (
a[ind[
l]]>
a[ind[ir]])
1363 {temp = ind[
l]; ind[
l]=ind[ir]; ind[ir]=temp;}
1365 if (
a[ind[
l+1]]>
a[ind[ir]])
1366 {temp=ind[
l+1]; ind[
l+1]=ind[ir]; ind[ir]=temp;}
1368 if (
a[ind[
l]]>
a[ind[
l+1]])
1369 {temp = ind[
l]; ind[
l]=ind[
l+1]; ind[
l+1]=temp;}
1375 do i++;
while (
a[ind[i]]<
a[arr]);
1376 do j--;
while (
a[ind[j]]>
a[arr]);
1378 {temp=ind[i]; ind[i]=ind[j]; ind[j]=temp;}
1382 if (j>=rk) ir = j-1;
static double p3(double t, double a, double b, double c, double d)
static double p1(double t, double a, double b)
static double p2(double t, double a, double b, double c)
void Error(const char *location, const char *msgfmt,...)
TGLVector3 Cross(const TGLVector3 &v1, const TGLVector3 &v2)
double atan2(double, double)
double pow(double, double)
double ldexp(double, int)
double beta(double x, double y)
Calculates the beta function.
Namespace for new Math classes and functions.
Namespace for new ROOT classes and functions.
RooCmdArg Index(RooCategory &icat)
static constexpr double s
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 Poisson distribution function for (x,par) This is a non-smooth function.
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.
Double_t Normalize(Double_t v[3])
Normalize a vector v in place.
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.
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()
Double_t ATan2(Double_t, Double_t)
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) The Poisson PDF is implemented by means of Eule...
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 long int sum(long int i)