35 #if !defined(R__SOLARIS) && !defined(R__ACC) && !defined(R__FBSD)
41 Double_t GamCf(Double_t a,Double_t x);
42 Double_t GamSer(Double_t a,Double_t x);
43 Double_t VavilovDenEval(Double_t rlam, Double_t *AC, Double_t *HC, Int_t itype);
44 void VavilovSet(Double_t rkappa, Double_t beta2, Bool_t mode, Double_t *WCM, Double_t *AC, Double_t *HC, Int_t &itype, Int_t &npt);
50 Long_t TMath::Hypot(Long_t x, Long_t y)
52 return (Long_t) (hypot((Double_t)x, (Double_t)y) + 0.5);
57 Double_t TMath::Hypot(Double_t x, Double_t y)
64 Double_t TMath::ASinH(Double_t x)
67 if(x==0.0)
return 0.0;
69 return log(x+ax*sqrt(1.+1./(ax*ax)));
77 Double_t TMath::ACosH(Double_t x)
80 if(x==0.0)
return 0.0;
82 return log(x+ax*sqrt(1.-1./(ax*ax)));
90 Double_t TMath::ATanH(Double_t x)
93 return log((1+x)/(1-x))/2;
101 Double_t TMath::Log2(Double_t x)
103 return log(x)/log(2.0);
110 Double_t TMath::DiLog(Double_t x)
112 const Double_t hf = 0.5;
113 const Double_t pi = TMath::Pi();
114 const Double_t pi2 = pi*pi;
115 const Double_t pi3 = pi2/3;
116 const Double_t pi6 = pi2/6;
117 const Double_t pi12 = pi2/12;
118 const Double_t c[20] = {0.42996693560813697, 0.40975987533077105,
119 -0.01858843665014592, 0.00145751084062268,-0.00014304184442340,
120 0.00001588415541880,-0.00000190784959387, 0.00000024195180854,
121 -0.00000003193341274, 0.00000000434545063,-0.00000000060578480,
122 0.00000000008612098,-0.00000000001244332, 0.00000000000182256,
123 -0.00000000000027007, 0.00000000000004042,-0.00000000000000610,
124 0.00000000000000093,-0.00000000000000014, 0.00000000000000002};
126 Double_t t,h,y,s,a,alfa,b1,b2,b0;
127 t=h=y=s=a=alfa=b1=b2=b0=0.;
131 }
else if (x == -1) {
139 b2= TMath::Log(1+1/t);
140 a = -pi3+hf*(b1*b1-b2*b2);
145 a = -pi6+a*(a+TMath::Log(1+1/t));
146 }
else if (t <= -0.5) {
150 a = -pi6+a*(-hf*a+TMath::Log(1+t));
170 for (Int_t i=19;i>=0;i--){
171 b0 = c[i] + alfa*b1-b2;
175 h = -(s*(b0-h*b2)+a);
184 Double_t TMath::Erf(Double_t x)
186 return ::ROOT::Math::erf(x);
194 Double_t TMath::Erfc(Double_t x)
196 return ::ROOT::Math::erfc(x);
203 Double_t TMath::ErfInverse(Double_t x)
206 Double_t kEps = 1e-14;
207 Double_t kConst = 0.8862269254527579;
209 if(TMath::Abs(x) <= kEps)
return kConst*x;
212 Double_t erfi, derfi, y0,y1,dy0,dy1;
213 if(TMath::Abs(x) < 1.0) {
214 erfi = kConst*TMath::Abs(x);
215 y0 = TMath::Erf(0.9*erfi);
217 for (Int_t iter=0; iter<kMaxit; iter++) {
218 y1 = 1. - TMath::Erfc(erfi);
219 dy1 = TMath::Abs(x) - y1;
220 if (TMath::Abs(dy1) < kEps) {
if (x < 0)
return -erfi;
else return erfi;}
225 if(TMath::Abs(derfi/erfi) < kEps) {
if (x < 0)
return -erfi;
else return erfi;}
237 Double_t TMath::ErfcInverse(Double_t x)
241 return - 0.70710678118654752440 * TMath::NormQuantile( 0.5 * x);
247 Double_t TMath::Factorial(Int_t n)
249 if (n <= 0)
return 1.;
265 Double_t TMath::Freq(Double_t x)
267 const Double_t c1 = 0.56418958354775629;
268 const Double_t w2 = 1.41421356237309505;
270 const Double_t p10 = 2.4266795523053175e+2, q10 = 2.1505887586986120e+2,
271 p11 = 2.1979261618294152e+1, q11 = 9.1164905404514901e+1,
272 p12 = 6.9963834886191355e+0, q12 = 1.5082797630407787e+1,
273 p13 =-3.5609843701815385e-2, q13 = 1;
275 const Double_t p20 = 3.00459261020161601e+2, q20 = 3.00459260956983293e+2,
276 p21 = 4.51918953711872942e+2, q21 = 7.90950925327898027e+2,
277 p22 = 3.39320816734343687e+2, q22 = 9.31354094850609621e+2,
278 p23 = 1.52989285046940404e+2, q23 = 6.38980264465631167e+2,
279 p24 = 4.31622272220567353e+1, q24 = 2.77585444743987643e+2,
280 p25 = 7.21175825088309366e+0, q25 = 7.70001529352294730e+1,
281 p26 = 5.64195517478973971e-1, q26 = 1.27827273196294235e+1,
282 p27 =-1.36864857382716707e-7, q27 = 1;
284 const Double_t p30 =-2.99610707703542174e-3, q30 = 1.06209230528467918e-2,
285 p31 =-4.94730910623250734e-2, q31 = 1.91308926107829841e-1,
286 p32 =-2.26956593539686930e-1, q32 = 1.05167510706793207e+0,
287 p33 =-2.78661308609647788e-1, q33 = 1.98733201817135256e+0,
288 p34 =-2.23192459734184686e-2, q34 = 1;
290 Double_t v = TMath::Abs(x)/w2;
292 Double_t ap, aq, h, hc, y;
322 hc = TMath::Exp(-vv)*ap/aq;
336 hc = TMath::Exp(-vv)*(c1+y*ap/aq)/v;
339 if (x > 0)
return 0.5 +0.5*h;
348 Double_t TMath::Gamma(Double_t z)
350 return ::ROOT::Math::tgamma(z);
364 Double_t TMath::Gamma(Double_t a,Double_t x)
366 return ::ROOT::Math::inc_gamma(a, x);
375 Double_t TMath::GamCf(Double_t a,Double_t x)
378 Double_t eps = 3.e-14;
379 Double_t fpmin = 1.e-30;
381 if (a <= 0 || x <= 0)
return 0;
383 Double_t gln = LnGamma(a);
385 Double_t c = 1/fpmin;
389 for (Int_t i=1; i<=itmax; i++) {
390 an = Double_t(-i)*(Double_t(i)-a);
393 if (Abs(d) < fpmin) d = fpmin;
395 if (Abs(c) < fpmin) c = fpmin;
399 if (Abs(del-1) < eps)
break;
402 Double_t v = Exp(-x+a*Log(x)-gln)*h;
412 Double_t TMath::GamSer(Double_t a,Double_t x)
415 Double_t eps = 3.e-14;
417 if (a <= 0 || x <= 0)
return 0;
419 Double_t gln = LnGamma(a);
423 for (Int_t n=1; n<=itmax; n++) {
427 if (TMath::Abs(del) < Abs(sum*eps))
break;
430 Double_t v = sum*Exp(-x+a*Log(x)-gln);
437 Double_t TMath::BreitWigner(Double_t x, Double_t mean, Double_t gamma)
439 Double_t bw = gamma/((x-mean)*(x-mean) + gamma*gamma/4);
448 Double_t TMath::Gaus(Double_t x, Double_t mean, Double_t sigma, Bool_t norm)
450 if (sigma == 0)
return 1.e30;
451 Double_t arg = (x-mean)/sigma;
453 if (arg < -39.0 || arg > 39.0)
return 0.0;
454 Double_t res = TMath::Exp(-0.5*arg*arg);
455 if (!norm)
return res;
456 return res/(2.50662827463100024*sigma);
469 Double_t TMath::Landau(Double_t x, Double_t mu, Double_t sigma, Bool_t norm)
471 if (sigma <= 0)
return 0;
472 Double_t den = ::ROOT::Math::landau_pdf( (x-mu)/sigma );
473 if (!norm)
return den;
486 Double_t TMath::LnGamma(Double_t z)
488 return ::ROOT::Math::lgamma(z);
495 Float_t TMath::Normalize(Float_t v[3])
497 Float_t d = Sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
512 Double_t TMath::Normalize(Double_t v[3])
516 Double_t av0 = Abs(v[0]), av1 = Abs(v[1]), av2 = Abs(v[2]);
518 Double_t amax, foo, bar;
520 if( av0 >= av1 && av0 >= av2 ) {
526 else if (av1 >= av0 && av1 >= av2) {
541 Double_t foofrac = foo/amax, barfrac = bar/amax;
542 Double_t d = amax * Sqrt(1.+foofrac*foofrac+barfrac*barfrac);
568 Double_t TMath::Poisson(Double_t x, Double_t par)
575 Double_t lnpoisson = x*log(par)-par-LnGamma(x+1.);
576 return Exp(lnpoisson);
599 Double_t TMath::PoissonI(Double_t x, Double_t par)
602 return Poisson(ix,par);
621 Double_t TMath::Prob(Double_t chi2,Int_t ndf)
623 if (ndf <= 0)
return 0;
626 if (chi2 < 0)
return 0;
630 return ::ROOT::Math::chisquared_cdf_c(chi2,ndf);
663 Double_t TMath::KolmogorovProb(Double_t z)
665 Double_t fj[4] = {-2,-8,-18,-32}, r[4];
666 const Double_t w = 2.50662827;
668 const Double_t c1 = -1.2337005501361697;
669 const Double_t c2 = -11.103304951225528;
670 const Double_t c3 = -30.842513753404244;
672 Double_t u = TMath::Abs(z);
676 }
else if (u < 0.755) {
677 Double_t v = 1./(u*u);
678 p = 1 - w*(TMath::Exp(c1*v) + TMath::Exp(c2*v) + TMath::Exp(c3*v))/u;
679 }
else if (u < 6.8116) {
684 Int_t maxj = TMath::Max(1,TMath::Nint(3./u));
685 for (Int_t j=0; j<maxj;j++) {
686 r[j] = TMath::Exp(fj[j]*v);
688 p = 2*(r[0] - r[1] +r[2] - r[3]);
789 Double_t TMath::KolmogorovTest(Int_t na,
const Double_t *a, Int_t nb,
const Double_t *b, Option_t *option)
793 TString opt = option;
798 if (!a || !b || na <= 2 || nb <= 2) {
799 Error(
"KolmogorovTest",
"Sets must have more than 2 points");
805 Double_t sa = 1./rna;
806 Double_t sb = 1./rnb;
815 for (Int_t i=0;i<na+nb;i++) {
819 if (ia >= na) {ok = kTRUE;
break;}
820 }
else if (a[ia] > b[ib]) {
823 if (ib >= nb) {ok = kTRUE;
break;}
827 while(ia < na && a[ia] == x) {
831 while(ib < nb && b[ib] == x) {
835 if (ia >= na) {ok = kTRUE;
break;}
836 if (ib >= nb) {ok = kTRUE;
break;}
838 rdmax = TMath::Max(rdmax,TMath::Abs(rdiff));
844 rdmax = TMath::Max(rdmax,TMath::Abs(rdiff));
845 Double_t z = rdmax * TMath::Sqrt(rna*rnb/(rna+rnb));
846 prob = TMath::KolmogorovProb(z);
849 if (opt.Contains(
"D")) {
850 printf(
" Kolmogorov Probability = %g, Max Dist = %g\n",prob,rdmax);
852 if(opt.Contains(
"M"))
return rdmax;
882 Double_t TMath::Voigt(Double_t xx, Double_t sigma, Double_t lg, Int_t r)
884 if ((sigma < 0 || lg < 0) || (sigma==0 && lg==0)) {
889 return lg * 0.159154943 / (xx*xx + lg*lg /4);
893 return 0.39894228 / sigma * TMath::Exp(-xx*xx / (2*sigma*sigma));
897 x = xx / sigma / 1.41421356;
898 y = lg / 2 / sigma / 1.41421356;
905 r0=1.51 * exp(1.144 * (Double_t)r);
906 r1=1.60 * exp(0.554 * (Double_t)r);
910 const Double_t rrtpi = 0.56418958;
912 Double_t y0, y0py0, y0q;
917 Double_t c[6] = { 1.0117281, -0.75197147, 0.012557727, 0.010022008, -0.00024206814, 0.00000050084806};
918 Double_t s[6] = { 1.393237, 0.23115241, -0.15535147, 0.0062183662, 0.000091908299, -0.00000062752596};
919 Double_t t[6] = { 0.31424038, 0.94778839, 1.5976826, 2.2795071, 3.0206370, 3.8897249};
925 Double_t abx, xq, yq, yrrtpi;
926 Double_t xlim0, xlim1, xlim2, xlim3, xlim4;
927 Double_t a0=0, d0=0, d2=0, e0=0, e2=0, e4=0, h0=0, h2=0, h4=0, h6=0;
928 Double_t p0=0, p2=0, p4=0, p6=0, p8=0, z0=0, z2=0, z4=0, z6=0, z8=0;
929 Double_t xp[6], xm[6], yp[6], ym[6];
930 Double_t mq[6], pq[6], mf[6], pf[6];
931 Double_t d, yf, ypy0, ypy0q;
945 xlim3 = 3.097 * y - 0.45;
947 xlim4 = 18.1 * y + 1.65;
956 k = yrrtpi / (xq + yq);
957 }
else if ( abx > xlim1 ) {
964 d = rrtpi / (d0 + xq*(d2 + xq));
965 k = d * y * (a0 + xq);
966 }
else if ( abx > xlim2 ) {
969 h0 = 0.5625 + yq * (4.5 + yq * (10.5 + yq * (6.0 + yq)));
971 h2 = -4.5 + yq * (9.0 + yq * ( 6.0 + yq * 4.0));
972 h4 = 10.5 - yq * (6.0 - yq * 6.0);
973 h6 = -6.0 + yq * 4.0;
974 e0 = 1.875 + yq * (8.25 + yq * (5.5 + yq));
975 e2 = 5.25 + yq * (1.0 + yq * 3.0);
978 d = rrtpi / (h0 + xq * (h2 + xq * (h4 + xq * (h6 + xq))));
979 k = d * y * (e0 + xq * (e2 + xq * (e4 + xq)));
980 }
else if ( abx < xlim3 ) {
983 z0 = 272.1014 + y * (1280.829 + y *
993 z2 = 211.678 + y * (902.3066 + y *
1001 z4 = 78.86585 + y * (308.1852 + y *
1005 (80.39278 + y * 10.0)
1007 z6 = 22.03523 + y * (55.02933 + y *
1009 (53.59518 + y * 10.0)
1011 z8 = 1.496460 + y * (13.39880 + y * 5.0);
1012 p0 = 153.5168 + y * (549.3954 + y *
1019 (4.264678 + y * 0.3183291)
1021 p2 = -34.16955 + y * (-1.322256+ y *
1026 (12.79458 + y * 1.2733163)
1028 p4 = 2.584042 + y * (10.46332 + y *
1031 (12.79568 + y * 1.9099744)
1033 p6 = -0.07272979 + y * (0.9377051 + y *
1034 (4.266322 + y * 1.273316));
1035 p8 = 0.0005480304 + y * 0.3183291;
1037 d = 1.7724538 / (z0 + xq * (z2 + xq * (z4 + xq * (z6 + xq * (z8 + xq)))));
1038 k = d * (p0 + xq * (p2 + xq * (p4 + xq * (p6 + xq * p8))));
1041 ypy0q = ypy0 * ypy0;
1043 for (j = 0; j <= 5; j++) {
1046 mf[j] = 1.0 / (mq[j] + ypy0q);
1048 ym[j] = mf[j] * ypy0;
1051 pf[j] = 1.0 / (pq[j] + ypy0q);
1053 yp[j] = pf[j] * ypy0;
1055 if ( abx <= xlim4 ) {
1056 for (j = 0; j <= 5; j++) {
1057 k = k + c[j]*(ym[j]+yp[j]) - s[j]*(xm[j]-xp[j]) ;
1061 for ( j = 0; j <= 5; j++) {
1063 (mq[j] * mf[j] - y0 * ym[j])
1064 + s[j] * yf * xm[j]) / (mq[j]+y0q)
1065 + (c[j] * (pq[j] * pf[j] - y0 * yp[j])
1066 - s[j] * yf * xp[j]) / (pq[j]+y0q);
1068 k = y * k + exp( -xq );
1071 return k / 2.506628 / sigma;
1091 Bool_t TMath::RootsCubic(
const Double_t coef[4],Double_t &a, Double_t &b, Double_t &c)
1093 Bool_t complex = kFALSE;
1094 Double_t r,s,t,p,q,d,ps3,ps33,qs2,u,v,tmp,lnu,lnv,su,sv,y1,y2,y3;
1098 if (coef[3] == 0)
return complex;
1099 r = coef[2]/coef[3];
1100 s = coef[1]/coef[3];
1101 t = coef[0]/coef[3];
1104 q = (2*r*r*r)/27.0 - (r*s)/3 + t;
1114 lnu = TMath::Log(TMath::Abs(u));
1115 lnv = TMath::Log(TMath::Abs(v));
1116 su = TMath::Sign(1.,u);
1117 sv = TMath::Sign(1.,v);
1118 u = su*TMath::Exp(tmp*lnu);
1119 v = sv*TMath::Exp(tmp*lnv);
1122 y3 = ((u-v)*TMath::Sqrt(3.))/2;
1128 Double_t phi,cphi,phis3,c1,c2,c3,pis3;
1131 cphi = -qs2/TMath::Sqrt(ps33);
1132 phi = TMath::ACos(cphi);
1134 pis3 = TMath::Pi()/3;
1135 c1 = TMath::Cos(phis3);
1136 c2 = TMath::Cos(pis3 + phis3);
1137 c3 = TMath::Cos(pis3 - phis3);
1138 tmp = TMath::Sqrt(ps3);
1190 void TMath::Quantiles(Int_t n, Int_t nprob, Double_t *x, Double_t *quantiles, Double_t *prob, Bool_t isSorted, Int_t *index, Int_t type)
1193 if (type<1 || type>9){
1194 printf(
"illegal value of type\n");
1198 Bool_t isAllocated = kFALSE;
1200 if (index) ind = index;
1203 isAllocated = kTRUE;
1212 for (Int_t i=0; i<nprob; i++){
1222 nppm = n*prob[i]-0.5;
1227 double eps = 4 * TMath::Limits<Double_t>::Epsilon();
1228 j = TMath::FloorNint(nppm + eps);
1233 gamma = ( (nppm -j) > j*TMath::Limits<Double_t>::Epsilon() ) ? 1 : 0;
1235 gamma = ( (nppm -j) > j*TMath::Limits<Double_t>::Epsilon() ) ? 1 : 0.5;
1238 gamma = ( TMath::Abs(nppm -j) <= j*TMath::Limits<Double_t>::Epsilon() && TMath::Even(j) ) ? 0 : 1;
1246 if (type == 4) { a = 0; b = 1; }
1247 else if (type == 5) { a = 0.5; b = 0.5; }
1248 else if (type == 6) { a = 0.; b = 0.; }
1249 else if (type == 7) { a = 1.; b = 1.; }
1250 else if (type == 8) { a = 1./3.; b = a; }
1251 else if (type == 9) { a = 3./8.; b = a; }
1254 double eps = 4 * TMath::Limits<Double_t>::Epsilon();
1255 nppm = a + prob[i] * ( n + 1 -a -b);
1256 j = TMath::FloorNint(nppm + eps);
1258 if (gamma < eps) gamma = 0;
1263 int first = (j > 0 && j <=n) ? j-1 : ( j <=0 ) ? 0 : n-1;
1264 int second = (j > 0 && j < n) ? j : ( j <=0 ) ? 0 : n-1;
1271 xj = TMath::KOrdStat(n, x, first, ind);
1272 xjj = TMath::KOrdStat(n, x, second, ind);
1274 quantiles[i] = (1-gamma)*xj + gamma*xjj;
1296 void TMath::BubbleHigh(Int_t Narr, Double_t *arr1, Int_t *arr2)
1298 if (Narr <= 0)
return;
1299 double *localArr1 =
new double[Narr];
1300 int *localArr2 =
new int[Narr];
1304 for(iEl = 0; iEl < Narr; iEl++) {
1305 localArr1[iEl] = arr1[iEl];
1306 localArr2[iEl] = iEl;
1309 for (iEl = 0; iEl < Narr; iEl++) {
1310 for (iEl2 = Narr-1; iEl2 > iEl; --iEl2) {
1311 if (localArr1[iEl2-1] < localArr1[iEl2]) {
1312 double tmp = localArr1[iEl2-1];
1313 localArr1[iEl2-1] = localArr1[iEl2];
1314 localArr1[iEl2] = tmp;
1316 int tmp2 = localArr2[iEl2-1];
1317 localArr2[iEl2-1] = localArr2[iEl2];
1318 localArr2[iEl2] = tmp2;
1323 for (iEl = 0; iEl < Narr; iEl++) {
1324 arr2[iEl] = localArr2[iEl];
1326 delete [] localArr2;
1327 delete [] localArr1;
1335 void TMath::BubbleLow(Int_t Narr, Double_t *arr1, Int_t *arr2)
1337 if (Narr <= 0)
return;
1338 double *localArr1 =
new double[Narr];
1339 int *localArr2 =
new int[Narr];
1343 for (iEl = 0; iEl < Narr; iEl++) {
1344 localArr1[iEl] = arr1[iEl];
1345 localArr2[iEl] = iEl;
1348 for (iEl = 0; iEl < Narr; iEl++) {
1349 for (iEl2 = Narr-1; iEl2 > iEl; --iEl2) {
1350 if (localArr1[iEl2-1] > localArr1[iEl2]) {
1351 double tmp = localArr1[iEl2-1];
1352 localArr1[iEl2-1] = localArr1[iEl2];
1353 localArr1[iEl2] = tmp;
1355 int tmp2 = localArr2[iEl2-1];
1356 localArr2[iEl2-1] = localArr2[iEl2];
1357 localArr2[iEl2] = tmp2;
1362 for (iEl = 0; iEl < Narr; iEl++) {
1363 arr2[iEl] = localArr2[iEl];
1365 delete [] localArr2;
1366 delete [] localArr1;
1390 ULong_t TMath::Hash(
const void *txt, Int_t ntxt)
1392 return TString::Hash(txt,ntxt);
1398 ULong_t TMath::Hash(
const char *txt)
1400 return Hash(txt, Int_t(strlen(txt)));
1408 Double_t TMath::BesselI0(Double_t x)
1411 const Double_t p1=1.0, p2=3.5156229, p3=3.0899424,
1412 p4=1.2067492, p5=0.2659732, p6=3.60768e-2, p7=4.5813e-3;
1414 const Double_t q1= 0.39894228, q2= 1.328592e-2, q3= 2.25319e-3,
1415 q4=-1.57565e-3, q5= 9.16281e-3, q6=-2.057706e-2,
1416 q7= 2.635537e-2, q8=-1.647633e-2, q9= 3.92377e-3;
1418 const Double_t k1 = 3.75;
1419 Double_t ax = TMath::Abs(x);
1421 Double_t y=0, result=0;
1426 result = p1+y*(p2+y*(p3+y*(p4+y*(p5+y*(p6+y*p7)))));
1429 result = (TMath::Exp(ax)/TMath::Sqrt(ax))*(q1+y*(q2+y*(q3+y*(q4+y*(q5+y*(q6+y*(q7+y*(q8+y*q9))))))));
1442 Double_t TMath::BesselK0(Double_t x)
1445 const Double_t p1=-0.57721566, p2=0.42278420, p3=0.23069756,
1446 p4= 3.488590e-2, p5=2.62698e-3, p6=1.0750e-4, p7=7.4e-6;
1448 const Double_t q1= 1.25331414, q2=-7.832358e-2, q3= 2.189568e-2,
1449 q4=-1.062446e-2, q5= 5.87872e-3, q6=-2.51540e-3, q7=5.3208e-4;
1452 Error(
"TMath::BesselK0",
"*K0* Invalid argument x = %g\n",x);
1456 Double_t y=0, result=0;
1460 result = (-log(x/2.)*TMath::BesselI0(x))+(p1+y*(p2+y*(p3+y*(p4+y*(p5+y*(p6+y*p7))))));
1463 result = (exp(-x)/sqrt(x))*(q1+y*(q2+y*(q3+y*(q4+y*(q5+y*(q6+y*q7))))));
1476 Double_t TMath::BesselI1(Double_t x)
1479 const Double_t p1=0.5, p2=0.87890594, p3=0.51498869,
1480 p4=0.15084934, p5=2.658733e-2, p6=3.01532e-3, p7=3.2411e-4;
1482 const Double_t q1= 0.39894228, q2=-3.988024e-2, q3=-3.62018e-3,
1483 q4= 1.63801e-3, q5=-1.031555e-2, q6= 2.282967e-2,
1484 q7=-2.895312e-2, q8= 1.787654e-2, q9=-4.20059e-3;
1486 const Double_t k1 = 3.75;
1487 Double_t ax = TMath::Abs(x);
1489 Double_t y=0, result=0;
1494 result = x*(p1+y*(p2+y*(p3+y*(p4+y*(p5+y*(p6+y*p7))))));
1497 result = (exp(ax)/sqrt(ax))*(q1+y*(q2+y*(q3+y*(q4+y*(q5+y*(q6+y*(q7+y*(q8+y*q9))))))));
1498 if (x < 0) result = -result;
1511 Double_t TMath::BesselK1(Double_t x)
1514 const Double_t p1= 1., p2= 0.15443144, p3=-0.67278579,
1515 p4=-0.18156897, p5=-1.919402e-2, p6=-1.10404e-3, p7=-4.686e-5;
1517 const Double_t q1= 1.25331414, q2= 0.23498619, q3=-3.655620e-2,
1518 q4= 1.504268e-2, q5=-7.80353e-3, q6= 3.25614e-3, q7=-6.8245e-4;
1521 Error(
"TMath::BesselK1",
"*K1* Invalid argument x = %g\n",x);
1525 Double_t y=0,result=0;
1529 result = (log(x/2.)*TMath::BesselI1(x))+(1./x)*(p1+y*(p2+y*(p3+y*(p4+y*(p5+y*(p6+y*p7))))));
1532 result = (exp(-x)/sqrt(x))*(q1+y*(q2+y*(q3+y*(q4+y*(q5+y*(q6+y*q7))))));
1543 Double_t TMath::BesselK(Int_t n,Double_t x)
1545 if (x <= 0 || n < 0) {
1546 Error(
"TMath::BesselK",
"*K* Invalid argument(s) (n,x) = (%d, %g)\n",n,x);
1550 if (n==0)
return TMath::BesselK0(x);
1551 if (n==1)
return TMath::BesselK1(x);
1555 Double_t bkm = TMath::BesselK0(x);
1556 Double_t bk = TMath::BesselK1(x);
1558 for (Int_t j=1; j<n; j++) {
1559 bkp = bkm+Double_t(j)*tox*bk;
1572 Double_t TMath::BesselI(Int_t n,Double_t x)
1575 const Double_t kBigPositive = 1.e10;
1576 const Double_t kBigNegative = 1.e-10;
1579 Error(
"TMath::BesselI",
"*I* Invalid argument (n,x) = (%d, %g)\n",n,x);
1583 if (n==0)
return TMath::BesselI0(x);
1584 if (n==1)
return TMath::BesselI1(x);
1586 if (x == 0)
return 0;
1587 if (TMath::Abs(x) > kBigPositive)
return 0;
1589 Double_t tox = 2/TMath::Abs(x);
1590 Double_t bip = 0, bim = 0;
1592 Double_t result = 0;
1593 Int_t m = 2*((n+Int_t(sqrt(Float_t(iacc*n)))));
1594 for (Int_t j=m; j>=1; j--) {
1595 bim = bip+Double_t(j)*tox*bi;
1599 if (TMath::Abs(bi) > kBigPositive) {
1600 result *= kBigNegative;
1602 bip *= kBigNegative;
1604 if (j==n) result=bip;
1607 result *= TMath::BesselI0(x)/bi;
1608 if ((x < 0) && (n%2 == 1)) result = -result;
1616 Double_t TMath::BesselJ0(Double_t x)
1619 Double_t xx,y,result,result1,result2;
1620 const Double_t p1 = 57568490574.0, p2 = -13362590354.0, p3 = 651619640.7;
1621 const Double_t p4 = -11214424.18, p5 = 77392.33017, p6 = -184.9052456;
1622 const Double_t p7 = 57568490411.0, p8 = 1029532985.0, p9 = 9494680.718;
1623 const Double_t p10 = 59272.64853, p11 = 267.8532712;
1625 const Double_t q1 = 0.785398164;
1626 const Double_t q2 = -0.1098628627e-2, q3 = 0.2734510407e-4;
1627 const Double_t q4 = -0.2073370639e-5, q5 = 0.2093887211e-6;
1628 const Double_t q6 = -0.1562499995e-1, q7 = 0.1430488765e-3;
1629 const Double_t q8 = -0.6911147651e-5, q9 = 0.7621095161e-6;
1630 const Double_t q10 = 0.934935152e-7, q11 = 0.636619772;
1632 if ((ax=fabs(x)) < 8) {
1634 result1 = p1 + y*(p2 + y*(p3 + y*(p4 + y*(p5 + y*p6))));
1635 result2 = p7 + y*(p8 + y*(p9 + y*(p10 + y*(p11 + y))));
1636 result = result1/result2;
1641 result1 = 1 + y*(q2 + y*(q3 + y*(q4 + y*q5)));
1642 result2 = q6 + y*(q7 + y*(q8 + y*(q9 - y*q10)));
1643 result = sqrt(q11/ax)*(cos(xx)*result1-z*sin(xx)*result2);
1651 Double_t TMath::BesselJ1(Double_t x)
1654 Double_t xx,y,result,result1,result2;
1655 const Double_t p1 = 72362614232.0, p2 = -7895059235.0, p3 = 242396853.1;
1656 const Double_t p4 = -2972611.439, p5 = 15704.48260, p6 = -30.16036606;
1657 const Double_t p7 = 144725228442.0, p8 = 2300535178.0, p9 = 18583304.74;
1658 const Double_t p10 = 99447.43394, p11 = 376.9991397;
1660 const Double_t q1 = 2.356194491;
1661 const Double_t q2 = 0.183105e-2, q3 = -0.3516396496e-4;
1662 const Double_t q4 = 0.2457520174e-5, q5 = -0.240337019e-6;
1663 const Double_t q6 = 0.04687499995, q7 = -0.2002690873e-3;
1664 const Double_t q8 = 0.8449199096e-5, q9 = -0.88228987e-6;
1665 const Double_t q10 = 0.105787412e-6, q11 = 0.636619772;
1667 if ((ax=fabs(x)) < 8) {
1669 result1 = x*(p1 + y*(p2 + y*(p3 + y*(p4 + y*(p5 + y*p6)))));
1670 result2 = p7 + y*(p8 + y*(p9 + y*(p10 + y*(p11 + y))));
1671 result = result1/result2;
1676 result1 = 1 + y*(q2 + y*(q3 + y*(q4 + y*q5)));
1677 result2 = q6 + y*(q7 + y*(q8 + y*(q9 + y*q10)));
1678 result = sqrt(q11/ax)*(cos(xx)*result1-z*sin(xx)*result2);
1679 if (x < 0) result = -result;
1687 Double_t TMath::BesselY0(Double_t x)
1689 Double_t z,xx,y,result,result1,result2;
1690 const Double_t p1 = -2957821389., p2 = 7062834065.0, p3 = -512359803.6;
1691 const Double_t p4 = 10879881.29, p5 = -86327.92757, p6 = 228.4622733;
1692 const Double_t p7 = 40076544269., p8 = 745249964.8, p9 = 7189466.438;
1693 const Double_t p10 = 47447.26470, p11 = 226.1030244, p12 = 0.636619772;
1695 const Double_t q1 = 0.785398164;
1696 const Double_t q2 = -0.1098628627e-2, q3 = 0.2734510407e-4;
1697 const Double_t q4 = -0.2073370639e-5, q5 = 0.2093887211e-6;
1698 const Double_t q6 = -0.1562499995e-1, q7 = 0.1430488765e-3;
1699 const Double_t q8 = -0.6911147651e-5, q9 = 0.7621095161e-6;
1700 const Double_t q10 = -0.934945152e-7, q11 = 0.636619772;
1704 result1 = p1 + y*(p2 + y*(p3 + y*(p4 + y*(p5 + y*p6))));
1705 result2 = p7 + y*(p8 + y*(p9 + y*(p10 + y*(p11 + y))));
1706 result = (result1/result2) + p12*TMath::BesselJ0(x)*log(x);
1711 result1 = 1 + y*(q2 + y*(q3 + y*(q4 + y*q5)));
1712 result2 = q6 + y*(q7 + y*(q8 + y*(q9 + y*q10)));
1713 result = sqrt(q11/x)*(sin(xx)*result1+z*cos(xx)*result2);
1721 Double_t TMath::BesselY1(Double_t x)
1723 Double_t z,xx,y,result,result1,result2;
1724 const Double_t p1 = -0.4900604943e13, p2 = 0.1275274390e13;
1725 const Double_t p3 = -0.5153438139e11, p4 = 0.7349264551e9;
1726 const Double_t p5 = -0.4237922726e7, p6 = 0.8511937935e4;
1727 const Double_t p7 = 0.2499580570e14, p8 = 0.4244419664e12;
1728 const Double_t p9 = 0.3733650367e10, p10 = 0.2245904002e8;
1729 const Double_t p11 = 0.1020426050e6, p12 = 0.3549632885e3;
1730 const Double_t p13 = 0.636619772;
1731 const Double_t q1 = 2.356194491;
1732 const Double_t q2 = 0.183105e-2, q3 = -0.3516396496e-4;
1733 const Double_t q4 = 0.2457520174e-5, q5 = -0.240337019e-6;
1734 const Double_t q6 = 0.04687499995, q7 = -0.2002690873e-3;
1735 const Double_t q8 = 0.8449199096e-5, q9 = -0.88228987e-6;
1736 const Double_t q10 = 0.105787412e-6, q11 = 0.636619772;
1740 result1 = x*(p1 + y*(p2 + y*(p3 + y*(p4 + y*(p5 + y*p6)))));
1741 result2 = p7 + y*(p8 + y*(p9 + y*(p10 + y*(p11 + y*(p12+y)))));
1742 result = (result1/result2) + p13*(TMath::BesselJ1(x)*log(x)-1/x);
1747 result1 = 1 + y*(q2 + y*(q3 + y*(q4 + y*q5)));
1748 result2 = q6 + y*(q7 + y*(q8 + y*(q9 + y*q10)));
1749 result = sqrt(q11/x)*(sin(xx)*result1+z*cos(xx)*result2);
1759 Double_t TMath::StruveH0(Double_t x)
1761 const Int_t n1 = 15;
1762 const Int_t n2 = 25;
1763 const Double_t c1[16] = { 1.00215845609911981, -1.63969292681309147,
1764 1.50236939618292819, -.72485115302121872,
1765 .18955327371093136, -.03067052022988,
1766 .00337561447375194, -2.6965014312602e-4,
1767 1.637461692612e-5, -7.8244408508e-7,
1768 3.021593188e-8, -9.6326645e-10,
1769 2.579337e-11, -5.8854e-13,
1770 1.158e-14, -2e-16 };
1771 const Double_t c2[26] = { .99283727576423943, -.00696891281138625,
1772 1.8205103787037e-4, -1.063258252844e-5,
1773 9.8198294287e-7, -1.2250645445e-7,
1774 1.894083312e-8, -3.44358226e-9,
1775 7.1119102e-10, -1.6288744e-10,
1776 4.065681e-11, -1.091505e-11,
1777 3.12005e-12, -9.4202e-13,
1778 2.9848e-13, -9.872e-14,
1779 3.394e-14, -1.208e-14,
1780 4.44e-15, -1.68e-15,
1785 const Double_t c0 = 2/TMath::Pi();
1788 Double_t alfa, h, r, y, b0, b1, b2;
1789 Double_t v = TMath::Abs(x);
1799 for (i = n1; i >= 0; --i) {
1800 b0 = c1[i] + alfa*b1 - b2;
1812 for (i = n2; i >= 0; --i) {
1813 b0 = c2[i] + alfa*b1 - b2;
1817 h = TMath::BesselY0(v) + r*c0*(b0 - h*b2);
1828 Double_t TMath::StruveH1(Double_t x)
1830 const Int_t n3 = 16;
1831 const Int_t n4 = 22;
1832 const Double_t c3[17] = { .5578891446481605, -.11188325726569816,
1833 -.16337958125200939, .32256932072405902,
1834 -.14581632367244242, .03292677399374035,
1835 -.00460372142093573, 4.434706163314e-4,
1836 -3.142099529341e-5, 1.7123719938e-6,
1837 -7.416987005e-8, 2.61837671e-9,
1838 -7.685839e-11, 1.9067e-12,
1839 -4.052e-14, 7.5e-16,
1841 const Double_t c4[23] = { 1.00757647293865641, .00750316051248257,
1842 -7.043933264519e-5, 2.66205393382e-6,
1843 -1.8841157753e-7, 1.949014958e-8,
1844 -2.6126199e-9, 4.236269e-10,
1845 -7.955156e-11, 1.679973e-11,
1846 -3.9072e-12, 9.8543e-13,
1847 -2.6636e-13, 7.645e-14,
1848 -2.313e-14, 7.33e-15,
1851 -4e-17, 2e-17,-1e-17 };
1853 const Double_t c0 = 2/TMath::Pi();
1854 const Double_t cc = 2/(3*TMath::Pi());
1857 Double_t alfa, h, r, y, b0, b1, b2;
1858 Double_t v = TMath::Abs(x);
1862 }
else if (v <= 0.3) {
1866 i1 = (Int_t)(-8. / TMath::Log10(v));
1867 for (i = 1; i <= i1; ++i) {
1868 h = -h*y / ((2*i+ 1)*(2*i + 3));
1878 for (i = n3; i >= 0; --i) {
1879 b0 = c3[i] + alfa*b1 - b2;
1890 for (i = n4; i >= 0; --i) {
1891 b0 = c4[i] + alfa*b1 - b2;
1895 h = TMath::BesselY1(v) + c0*(b0 - h*b2);
1904 Double_t TMath::StruveL0(Double_t x)
1906 const Double_t pi=TMath::Pi();
1911 Double_t a0,sl0,a1,bi0;
1917 for (i=1; i<=60;i++) {
1918 r*=(x/(2*i+1))*(x/(2*i+1));
1920 if(TMath::Abs(r/s)<1.e-12)
break;
1926 for (i=1; i<=km; i++) {
1927 r*=(2*i-1)*(2*i-1)/x/x;
1929 if(TMath::Abs(r/s)<1.0e-12)
break;
1931 a1=TMath::Exp(x)/TMath::Sqrt(2*pi*x);
1934 for (i=1; i<=16; i++) {
1935 r=0.125*r*(2.0*i-1.0)*(2.0*i-1.0)/(i*x);
1937 if(TMath::Abs(r/bi0)<1.0e-12)
break;
1941 sl0=-2.0/(pi*x)*s+bi0;
1950 Double_t TMath::StruveL1(Double_t x)
1952 const Double_t pi=TMath::Pi();
1953 Double_t a1,sl1,bi1,s;
1959 for (i=1; i<=60;i++) {
1960 r*=x*x/(4.0*i*i-1.0);
1962 if(TMath::Abs(r)<TMath::Abs(s)*1.e-12)
break;
1969 for (i=1; i<=km; i++) {
1970 r*=(2*i+3)*(2*i+1)/x/x;
1972 if(TMath::Abs(r/s)<1.0e-12)
break;
1974 sl1=2.0/pi*(-1.0+1.0/(x*x)+3.0*s/(x*x*x*x));
1975 a1=TMath::Exp(x)/TMath::Sqrt(2*pi*x);
1978 for (i=1; i<=16; i++) {
1979 r=-0.125*r*(4.0-(2.0*i-1.0)*(2.0*i-1.0))/(i*x);
1981 if(TMath::Abs(r/bi1)<1.0e-12)
break;
1991 Double_t TMath::Beta(Double_t p, Double_t q)
1993 return ::ROOT::Math::beta(p, q);
2000 Double_t TMath::BetaCf(Double_t x, Double_t a, Double_t b)
2003 Double_t eps = 3.e-14;
2004 Double_t fpmin = 1.e-30;
2007 Double_t aa, c, d, del, qab, qam, qap;
2013 d = 1.0 - qab*x/qap;
2014 if (TMath::Abs(d)<fpmin) d=fpmin;
2017 for (m=1; m<=itmax; m++) {
2019 aa = m*(b-m)*x/((qam+ m2)*(a+m2));
2021 if(TMath::Abs(d)<fpmin) d = fpmin;
2023 if (TMath::Abs(c)<fpmin) c = fpmin;
2026 aa = -(a+m)*(qab +m)*x/((a+m2)*(qap+m2));
2028 if(TMath::Abs(d)<fpmin) d = fpmin;
2030 if (TMath::Abs(c)<fpmin) c = fpmin;
2034 if (TMath::Abs(del-1)<=eps)
break;
2037 Info(
"TMath::BetaCf",
"a or b too big, or itmax too small, a=%g, b=%g, x=%g, h=%g, itmax=%d",
2051 Double_t TMath::BetaDist(Double_t x, Double_t p, Double_t q)
2053 if ((x<0) || (x>1) || (p<=0) || (q<=0)){
2054 Error(
"TMath::BetaDist",
"parameter value outside allowed range");
2057 Double_t beta = TMath::Beta(p, q);
2058 Double_t r = TMath::Power(x, p-1)*TMath::Power(1-x, q-1)/beta;
2069 Double_t TMath::BetaDistI(Double_t x, Double_t p, Double_t q)
2071 if ((x<0) || (x>1) || (p<=0) || (q<=0)){
2072 Error(
"TMath::BetaDistI",
"parameter value outside allowed range");
2075 Double_t betai = TMath::BetaIncomplete(x, p, q);
2082 Double_t TMath::BetaIncomplete(Double_t x, Double_t a, Double_t b)
2084 return ::ROOT::Math::inc_beta(x, a, b);
2090 Double_t TMath::Binomial(Int_t n,Int_t k)
2092 if (n<0 || k<0 || n<k)
return TMath::SignalingNaN();
2093 if (k==0 || n==k)
return 1;
2095 Int_t k1=TMath::Min(k,n-k);
2098 for (Double_t i=k1;i>1.;--i)
2115 Double_t TMath::BinomialI(Double_t p, Int_t n, Int_t k)
2117 if(k <= 0)
return 1.0;
2118 if(k > n)
return 0.0;
2119 if(k == n)
return TMath::Power(p, n);
2121 return BetaIncomplete(p, Double_t(k), Double_t(n-k+1));
2148 Double_t TMath::CauchyDist(Double_t x, Double_t t, Double_t s)
2150 Double_t temp= (x-t)*(x-t)/(s*s);
2151 Double_t result = 1/(s*TMath::Pi()*(1+temp));
2164 Double_t TMath::ChisquareQuantile(Double_t p, Double_t ndf)
2166 Double_t c[]={0, 0.01, 0.222222, 0.32, 0.4, 1.24, 2.2,
2167 4.67, 6.66, 6.73, 13.32, 60.0, 70.0,
2168 84.0, 105.0, 120.0, 127.0, 140.0, 175.0,
2169 210.0, 252.0, 264.0, 294.0, 346.0, 420.0,
2170 462.0, 606.0, 672.0, 707.0, 735.0, 889.0,
2171 932.0, 966.0, 1141.0, 1182.0, 1278.0, 1740.0,
2174 Double_t aa = 0.6931471806;
2176 Double_t ch, p1, p2, q, t, a, b, x;
2177 Double_t s1, s2, s3, s4, s5, s6;
2179 if (ndf <= 0)
return 0;
2181 Double_t g = TMath::LnGamma(0.5*ndf);
2183 Double_t xx = 0.5 * ndf;
2184 Double_t cp = xx - 1;
2185 if (ndf >= TMath::Log(p)*(-c[5])){
2188 x = TMath::NormQuantile(p);
2191 ch = ndf*TMath::Power((x*TMath::Sqrt(p1) + 1 - p1), 3);
2192 if (ch > c[6]*ndf + 6)
2193 ch = -2 * (TMath::Log(1-p) - cp * TMath::Log(0.5 * ch) + g);
2196 a = TMath::Log(1-p);
2199 p1 = 1 + ch * (c[7]+ch);
2200 p2 = ch * (c[9] + ch * (c[8] + ch));
2201 t = -0.5 + (c[7] + 2 * ch) / p1 - (c[9] + ch * (c[10] + 3 * ch)) / p2;
2202 ch = ch - (1 - TMath::Exp(a + g + 0.5 * ch + cp * aa) *p2 / p1) / t;
2203 }
while (TMath::Abs(q/ch - 1) > c[1]);
2206 ch = TMath::Power((p * xx * TMath::Exp(g + xx * aa)),(1./xx));
2207 if (ch < e)
return ch;
2210 for (Int_t i=0; i<maxit; i++){
2213 p2 = p - TMath::Gamma(xx, p1);
2215 t = p2 * TMath::Exp(xx * aa + g + p1 - cp * TMath::Log(ch));
2217 a = 0.5 * t - b * cp;
2218 s1 = (c[19] + a * (c[17] + a * (c[14] + a * (c[13] + a * (c[12] +c[11] * a))))) / c[24];
2219 s2 = (c[24] + a * (c[29] + a * (c[32] + a * (c[33] + c[35] * a)))) / c[37];
2220 s3 = (c[19] + a * (c[25] + a * (c[28] + c[31] * a))) / c[37];
2221 s4 = (c[20] + a * (c[27] + c[34] * a) + cp * (c[22] + a * (c[30] + c[36] * a))) / c[38];
2222 s5 = (c[13] + c[21] * a + cp * (c[18] + c[26] * a)) / c[37];
2223 s6 = (c[15] + cp * (c[23] + c[16] * cp)) / c[38];
2224 ch = ch + t * (1 + 0.5 * t * s1 - b * cp * (s1 - b * (s2 - b * (s3 - b * (s4 - b * (s5 - b * s6))))));
2225 if (TMath::Abs(q / ch - 1) > e)
break;
2247 Double_t TMath::FDist(Double_t F, Double_t N, Double_t M)
2249 return ::ROOT::Math::fdistribution_pdf(F,N,M);
2266 Double_t TMath::FDistI(Double_t F, Double_t N, Double_t M)
2268 Double_t fi = ::ROOT::Math::fdistribution_cdf(F,N,M);
2315 Double_t TMath::GammaDist(Double_t x, Double_t gamma, Double_t mu, Double_t beta)
2317 if ((x<mu) || (gamma<=0) || (beta <=0)) {
2318 Error(
"TMath::GammaDist",
"illegal parameter values x = %f , gamma = %f beta = %f",x,gamma,beta);
2321 return ::ROOT::Math::gamma_pdf(x, gamma, beta, mu);
2332 Double_t TMath::LaplaceDist(Double_t x, Double_t alpha, Double_t beta)
2335 temp = TMath::Exp(-TMath::Abs((x-alpha)/beta));
2348 Double_t TMath::LaplaceDistI(Double_t x, Double_t alpha, Double_t beta)
2352 temp = 0.5*TMath::Exp(-TMath::Abs((x-alpha)/beta));
2354 temp = 1-0.5*TMath::Exp(-TMath::Abs((x-alpha)/beta));
2404 Double_t TMath::LogNormal(Double_t x, Double_t sigma, Double_t theta, Double_t m)
2406 if ((x<theta) || (sigma<=0) || (m<=0)) {
2407 Error(
"TMath::Lognormal",
"illegal parameter values");
2413 return ::ROOT::Math::lognormal_pdf(x, TMath::Log(m), sigma, theta);
2423 Double_t TMath::NormQuantile(Double_t p)
2425 if ((p<=0)||(p>=1)) {
2426 Error(
"TMath::NormQuantile",
"probability outside (0, 1)");
2430 Double_t a0 = 3.3871328727963666080e0;
2431 Double_t a1 = 1.3314166789178437745e+2;
2432 Double_t a2 = 1.9715909503065514427e+3;
2433 Double_t a3 = 1.3731693765509461125e+4;
2434 Double_t a4 = 4.5921953931549871457e+4;
2435 Double_t a5 = 6.7265770927008700853e+4;
2436 Double_t a6 = 3.3430575583588128105e+4;
2437 Double_t a7 = 2.5090809287301226727e+3;
2438 Double_t b1 = 4.2313330701600911252e+1;
2439 Double_t b2 = 6.8718700749205790830e+2;
2440 Double_t b3 = 5.3941960214247511077e+3;
2441 Double_t b4 = 2.1213794301586595867e+4;
2442 Double_t b5 = 3.9307895800092710610e+4;
2443 Double_t b6 = 2.8729085735721942674e+4;
2444 Double_t b7 = 5.2264952788528545610e+3;
2445 Double_t c0 = 1.42343711074968357734e0;
2446 Double_t c1 = 4.63033784615654529590e0;
2447 Double_t c2 = 5.76949722146069140550e0;
2448 Double_t c3 = 3.64784832476320460504e0;
2449 Double_t c4 = 1.27045825245236838258e0;
2450 Double_t c5 = 2.41780725177450611770e-1;
2451 Double_t c6 = 2.27238449892691845833e-2;
2452 Double_t c7 = 7.74545014278341407640e-4;
2453 Double_t d1 = 2.05319162663775882187e0;
2454 Double_t d2 = 1.67638483018380384940e0;
2455 Double_t d3 = 6.89767334985100004550e-1;
2456 Double_t d4 = 1.48103976427480074590e-1;
2457 Double_t d5 = 1.51986665636164571966e-2;
2458 Double_t d6 = 5.47593808499534494600e-4;
2459 Double_t d7 = 1.05075007164441684324e-9;
2460 Double_t e0 = 6.65790464350110377720e0;
2461 Double_t e1 = 5.46378491116411436990e0;
2462 Double_t e2 = 1.78482653991729133580e0;
2463 Double_t e3 = 2.96560571828504891230e-1;
2464 Double_t e4 = 2.65321895265761230930e-2;
2465 Double_t e5 = 1.24266094738807843860e-3;
2466 Double_t e6 = 2.71155556874348757815e-5;
2467 Double_t e7 = 2.01033439929228813265e-7;
2468 Double_t f1 = 5.99832206555887937690e-1;
2469 Double_t f2 = 1.36929880922735805310e-1;
2470 Double_t f3 = 1.48753612908506148525e-2;
2471 Double_t f4 = 7.86869131145613259100e-4;
2472 Double_t f5 = 1.84631831751005468180e-5;
2473 Double_t f6 = 1.42151175831644588870e-7;
2474 Double_t f7 = 2.04426310338993978564e-15;
2476 Double_t split1 = 0.425;
2478 Double_t konst1=0.180625;
2479 Double_t konst2=1.6;
2481 Double_t q, r, quantile;
2483 if (TMath::Abs(q)<split1) {
2485 quantile = q* (((((((a7 * r + a6) * r + a5) * r + a4) * r + a3)
2486 * r + a2) * r + a1) * r + a0) /
2487 (((((((b7 * r + b6) * r + b5) * r + b4) * r + b3)
2488 * r + b2) * r + b1) * r + 1.);
2496 r=TMath::Sqrt(-TMath::Log(r));
2499 quantile=(((((((c7 * r + c6) * r + c5) * r + c4) * r + c3)
2500 * r + c2) * r + c1) * r + c0) /
2501 (((((((d7 * r + d6) * r + d5) * r + d4) * r + d3)
2502 * r + d2) * r + d1) * r + 1);
2505 quantile=(((((((e7 * r + e6) * r + e5) * r + e4) * r + e3)
2506 * r + e2) * r + e1) * r + e0) /
2507 (((((((f7 * r + f6) * r + f5) * r + f4) * r + f3)
2508 * r + f2) * r + f1) * r + 1);
2510 if (q<0) quantile=-quantile;
2524 Bool_t TMath::Permute(Int_t n, Int_t *a)
2530 for(i=n-2; i>-1; i--) {
2537 if(i1==-1)
return kFALSE;
2541 for(i=n-1;i>i1;i--) {
2552 for(i=0;i<(n-i1-1)/2;i++) {
2590 Double_t TMath::Student(Double_t T, Double_t ndf)
2597 Double_t rh = 0.5*r;
2598 Double_t rh1 = rh + 0.5;
2599 Double_t denom = TMath::Sqrt(r*TMath::Pi())*TMath::Gamma(rh)*TMath::Power(1+T*T/r, rh1);
2600 return TMath::Gamma(rh1)/denom;
2612 Double_t TMath::StudentI(Double_t T, Double_t ndf)
2616 Double_t si = (T>0) ?
2617 (1 - 0.5*BetaIncomplete((r/(r + T*T)), r*0.5, 0.5)) :
2618 0.5*BetaIncomplete((r/(r + T*T)), r*0.5, 0.5);
2640 Double_t TMath::StudentQuantile(Double_t p, Double_t ndf, Bool_t lower_tail)
2646 if (ndf<1 || p>=1 || p<=0) {
2647 Error(
"TMath::StudentQuantile",
"illegal parameter values");
2650 if ((lower_tail && p>0.5)||(!lower_tail && p<0.5)){
2652 q=2*(lower_tail ? (1-p) : p);
2655 q=2*(lower_tail? p : (1-p));
2659 temp=TMath::PiOver2()*q;
2660 quantile = TMath::Cos(temp)/TMath::Sin(temp);
2663 quantile = TMath::Sqrt(2./(q*(2-q))-2);
2665 Double_t a=1./(ndf-0.5);
2666 Double_t b=48./(a*a);
2667 Double_t c=((20700*a/b -98)*a-16)*a+96.36;
2668 Double_t d=((94.5/(b+c)-3.)/b+1)*TMath::Sqrt(a*TMath::PiOver2())*ndf;
2670 Double_t y=TMath::Power(x, (2./ndf));
2673 x=TMath::NormQuantile(q*0.5);
2675 if (ndf<5) c+=0.3*(ndf-4.5)*(x+0.6);
2676 c+=(((0.05*d*x-5.)*x-7.)*x-2.)*x +b;
2677 y=(((((0.4*y+6.3)*y+36.)*y+94.5)/c - y-3.)/b+1)*x;
2679 if(y>0.002) y = TMath::Exp(y)-1;
2682 y=((1./(((ndf+6.)/(ndf*y)-0.089*d-0.822)*(ndf+2.)*3)+0.5/(ndf+4.))*y-1.)*
2683 (ndf+1.)/(ndf+2.)+1/y;
2685 quantile = TMath::Sqrt(ndf*y);
2688 if(neg) quantile=-quantile;
2741 Double_t TMath::Vavilov(Double_t x, Double_t kappa, Double_t beta2)
2743 Double_t *ac =
new Double_t[14];
2744 Double_t *hc =
new Double_t[9];
2748 TMath::VavilovSet(kappa, beta2, 0, 0, ac, hc, itype, npt);
2749 Double_t v = TMath::VavilovDenEval(x, ac, hc, itype);
2774 Double_t TMath::VavilovI(Double_t x, Double_t kappa, Double_t beta2)
2776 Double_t *ac =
new Double_t[14];
2777 Double_t *hc =
new Double_t[9];
2778 Double_t *wcm =
new Double_t[201];
2783 TMath::VavilovSet(kappa, beta2, 1, wcm, ac, hc, itype, npt);
2784 if (x < ac[0]) v = 0;
2785 else if (x >=ac[8]) v = 1;
2788 k = Int_t(xx*ac[10]);
2789 v = TMath::Min(wcm[k] + (xx - k*ac[9])*(wcm[k+1]-wcm[k])*ac[10], 1.);
2803 Double_t TMath::LandauI(Double_t x)
2805 return ::ROOT::Math::landau_cdf(x);
2812 void TMath::VavilovSet(Double_t rkappa, Double_t beta2, Bool_t mode, Double_t *WCM, Double_t *AC, Double_t *HC, Int_t &itype, Int_t &npt)
2815 Double_t BKMNX1 = 0.02, BKMNY1 = 0.05, BKMNX2 = 0.12, BKMNY2 = 0.05,
2816 BKMNX3 = 0.22, BKMNY3 = 0.05, BKMXX1 = 0.1 , BKMXY1 = 1,
2817 BKMXX2 = 0.2 , BKMXY2 = 1 , BKMXX3 = 0.3 , BKMXY3 = 1;
2819 Double_t FBKX1 = 2/(BKMXX1-BKMNX1), FBKX2 = 2/(BKMXX2-BKMNX2),
2820 FBKX3 = 2/(BKMXX3-BKMNX3), FBKY1 = 2/(BKMXY1-BKMNY1),
2821 FBKY2 = 2/(BKMXY2-BKMNY2), FBKY3 = 2/(BKMXY3-BKMNY3);
2823 Double_t FNINV[] = {0, 1, 0.5, 0.33333333, 0.25, 0.2};
2825 Double_t EDGEC[]= {0, 0, 0.16666667e+0, 0.41666667e-1, 0.83333333e-2,
2826 0.13888889e-1, 0.69444444e-2, 0.77160493e-3};
2828 Double_t U1[] = {0, 0.25850868e+0, 0.32477982e-1, -0.59020496e-2,
2829 0. , 0.24880692e-1, 0.47404356e-2,
2830 -0.74445130e-3, 0.73225731e-2, 0. ,
2831 0.11668284e-2, 0. , -0.15727318e-2,-0.11210142e-2};
2833 Double_t U2[] = {0, 0.43142611e+0, 0.40797543e-1, -0.91490215e-2,
2834 0. , 0.42127077e-1, 0.73167928e-2,
2835 -0.14026047e-2, 0.16195241e-1, 0.24714789e-2,
2836 0.20751278e-2, 0. , -0.25141668e-2,-0.14064022e-2};
2838 Double_t U3[] = {0, 0.25225955e+0, 0.64820468e-1, -0.23615759e-1,
2839 0. , 0.23834176e-1, 0.21624675e-2,
2840 -0.26865597e-2, -0.54891384e-2, 0.39800522e-2,
2841 0.48447456e-2, -0.89439554e-2, -0.62756944e-2,-0.24655436e-2};
2843 Double_t U4[] = {0, 0.12593231e+1, -0.20374501e+0, 0.95055662e-1,
2844 -0.20771531e-1, -0.46865180e-1, -0.77222986e-2,
2845 0.32241039e-2, 0.89882920e-2, -0.67167236e-2,
2846 -0.13049241e-1, 0.18786468e-1, 0.14484097e-1};
2848 Double_t U5[] = {0, -0.24864376e-1, -0.10368495e-2, 0.14330117e-2,
2849 0.20052730e-3, 0.18751903e-2, 0.12668869e-2,
2850 0.48736023e-3, 0.34850854e-2, 0. ,
2851 -0.36597173e-3, 0.19372124e-2, 0.70761825e-3, 0.46898375e-3};
2853 Double_t U6[] = {0, 0.35855696e-1, -0.27542114e-1, 0.12631023e-1,
2854 -0.30188807e-2, -0.84479939e-3, 0. ,
2855 0.45675843e-3, -0.69836141e-2, 0.39876546e-2,
2856 -0.36055679e-2, 0. , 0.15298434e-2, 0.19247256e-2};
2858 Double_t U7[] = {0, 0.10234691e+2, -0.35619655e+1, 0.69387764e+0,
2859 -0.14047599e+0, -0.19952390e+1, -0.45679694e+0,
2860 0. , 0.50505298e+0};
2861 Double_t U8[] = {0, 0.21487518e+2, -0.11825253e+2, 0.43133087e+1,
2862 -0.14500543e+1, -0.34343169e+1, -0.11063164e+1,
2863 -0.21000819e+0, 0.17891643e+1, -0.89601916e+0,
2864 0.39120793e+0, 0.73410606e+0, 0. ,-0.32454506e+0};
2866 Double_t V1[] = {0, 0.27827257e+0, -0.14227603e-2, 0.24848327e-2,
2867 0. , 0.45091424e-1, 0.80559636e-2,
2868 -0.38974523e-2, 0. , -0.30634124e-2,
2869 0.75633702e-3, 0.54730726e-2, 0.19792507e-2};
2871 Double_t V2[] = {0, 0.41421789e+0, -0.30061649e-1, 0.52249697e-2,
2872 0. , 0.12693873e+0, 0.22999801e-1,
2873 -0.86792801e-2, 0.31875584e-1, -0.61757928e-2,
2874 0. , 0.19716857e-1, 0.32596742e-2};
2876 Double_t V3[] = {0, 0.20191056e+0, -0.46831422e-1, 0.96777473e-2,
2877 -0.17995317e-2, 0.53921588e-1, 0.35068740e-2,
2878 -0.12621494e-1, -0.54996531e-2, -0.90029985e-2,
2879 0.34958743e-2, 0.18513506e-1, 0.68332334e-2,-0.12940502e-2};
2881 Double_t V4[] = {0, 0.13206081e+1, 0.10036618e+0, -0.22015201e-1,
2882 0.61667091e-2, -0.14986093e+0, -0.12720568e-1,
2883 0.24972042e-1, -0.97751962e-2, 0.26087455e-1,
2884 -0.11399062e-1, -0.48282515e-1, -0.98552378e-2};
2886 Double_t V5[] = {0, 0.16435243e-1, 0.36051400e-1, 0.23036520e-2,
2887 -0.61666343e-3, -0.10775802e-1, 0.51476061e-2,
2888 0.56856517e-2, -0.13438433e-1, 0. ,
2889 0. , -0.25421507e-2, 0.20169108e-2,-0.15144931e-2};
2891 Double_t V6[] = {0, 0.33432405e-1, 0.60583916e-2, -0.23381379e-2,
2892 0.83846081e-3, -0.13346861e-1, -0.17402116e-2,
2893 0.21052496e-2, 0.15528195e-2, 0.21900670e-2,
2894 -0.13202847e-2, -0.45124157e-2, -0.15629454e-2, 0.22499176e-3};
2896 Double_t V7[] = {0, 0.54529572e+1, -0.90906096e+0, 0.86122438e-1,
2897 0. , -0.12218009e+1, -0.32324120e+0,
2898 -0.27373591e-1, 0.12173464e+0, 0. ,
2899 0. , 0.40917471e-1};
2901 Double_t V8[] = {0, 0.93841352e+1, -0.16276904e+1, 0.16571423e+0,
2902 0. , -0.18160479e+1, -0.50919193e+0,
2903 -0.51384654e-1, 0.21413992e+0, 0. ,
2904 0. , 0.66596366e-1};
2906 Double_t W1[] = {0, 0.29712951e+0, 0.97572934e-2, 0. ,
2907 -0.15291686e-2, 0.35707399e-1, 0.96221631e-2,
2908 -0.18402821e-2, -0.49821585e-2, 0.18831112e-2,
2909 0.43541673e-2, 0.20301312e-2, -0.18723311e-2,-0.73403108e-3};
2911 Double_t W2[] = {0, 0.40882635e+0, 0.14474912e-1, 0.25023704e-2,
2912 -0.37707379e-2, 0.18719727e+0, 0.56954987e-1,
2913 0. , 0.23020158e-1, 0.50574313e-2,
2914 0.94550140e-2, 0.19300232e-1};
2916 Double_t W3[] = {0, 0.16861629e+0, 0. , 0.36317285e-2,
2917 -0.43657818e-2, 0.30144338e-1, 0.13891826e-1,
2918 -0.58030495e-2, -0.38717547e-2, 0.85359607e-2,
2919 0.14507659e-1, 0.82387775e-2, -0.10116105e-1,-0.55135670e-2};
2921 Double_t W4[] = {0, 0.13493891e+1, -0.26863185e-2, -0.35216040e-2,
2922 0.24434909e-1, -0.83447911e-1, -0.48061360e-1,
2923 0.76473951e-2, 0.24494430e-1, -0.16209200e-1,
2924 -0.37768479e-1, -0.47890063e-1, 0.17778596e-1, 0.13179324e-1};
2926 Double_t W5[] = {0, 0.10264945e+0, 0.32738857e-1, 0. ,
2927 0.43608779e-2, -0.43097757e-1, -0.22647176e-2,
2928 0.94531290e-2, -0.12442571e-1, -0.32283517e-2,
2929 -0.75640352e-2, -0.88293329e-2, 0.52537299e-2, 0.13340546e-2};
2931 Double_t W6[] = {0, 0.29568177e-1, -0.16300060e-2, -0.21119745e-3,
2932 0.23599053e-2, -0.48515387e-2, -0.40797531e-2,
2933 0.40403265e-3, 0.18200105e-2, -0.14346306e-2,
2934 -0.39165276e-2, -0.37432073e-2, 0.19950380e-2, 0.12222675e-2};
2936 Double_t W8[] = {0, 0.66184645e+1, -0.73866379e+0, 0.44693973e-1,
2937 0. , -0.14540925e+1, -0.39529833e+0,
2938 -0.44293243e-1, 0.88741049e-1};
2941 if (rkappa <0.01 || rkappa >12) {
2942 Error(
"Vavilov distribution",
"illegal value of kappa");
2950 Double_t x, y, xx, yy, x2, x3, y2, y3, xy, p2, p3, q2, q3, pq;
2951 if (rkappa >= 0.29) {
2954 Double_t wk = 1./TMath::Sqrt(rkappa);
2956 AC[0] = (-0.032227*beta2-0.074275)*rkappa + (0.24533*beta2+0.070152)*wk + (-0.55610*beta2-3.1579);
2957 AC[8] = (-0.013483*beta2-0.048801)*rkappa + (-1.6921*beta2+8.3656)*wk + (-0.73275*beta2-3.5226);
2959 DSIGM[1] = TMath::Sqrt(rkappa/(1-0.5*beta2));
2960 for (j=1; j<=4; j++) {
2961 DRK[j+1] = DRK[1]*DRK[j];
2962 DSIGM[j+1] = DSIGM[1]*DSIGM[j];
2963 ALFA[j+1] = (FNINV[j]-beta2*FNINV[j+1])*DRK[j];
2965 HC[0]=TMath::Log(rkappa)+beta2+0.42278434;
2967 HC[2]=ALFA[3]*DSIGM[3];
2968 HC[3]=(3*ALFA[2]*ALFA[2] + ALFA[4])*DSIGM[4]-3;
2969 HC[4]=(10*ALFA[2]*ALFA[3]+ALFA[5])*DSIGM[5]-10*HC[2];
2973 for (j=2; j<=7; j++)
2975 HC[8]=0.39894228*HC[1];
2977 else if (rkappa >=0.22) {
2980 x = 1+(rkappa-BKMXX3)*FBKX3;
2981 y = 1+(TMath::Sqrt(beta2)-BKMXY3)*FBKY3;
2994 AC[1] = W1[1] + W1[2]*x + W1[4]*x3 + W1[5]*y + W1[6]*y2 + W1[7]*y3 +
2995 W1[8]*xy + W1[9]*p2 + W1[10]*p3 + W1[11]*q2 + W1[12]*q3 + W1[13]*pq;
2996 AC[2] = W2[1] + W2[2]*x + W2[3]*x2 + W2[4]*x3 + W2[5]*y + W2[6]*y2 +
2997 W2[8]*xy + W2[9]*p2 + W2[10]*p3 + W2[11]*q2;
2998 AC[3] = W3[1] + W3[3]*x2 + W3[4]*x3 + W3[5]*y + W3[6]*y2 + W3[7]*y3 +
2999 W3[8]*xy + W3[9]*p2 + W3[10]*p3 + W3[11]*q2 + W3[12]*q3 + W3[13]*pq;
3000 AC[4] = W4[1] + W4[2]*x + W4[3]*x2 + W4[4]*x3 + W4[5]*y + W4[6]*y2 + W4[7]*y3 +
3001 W4[8]*xy + W4[9]*p2 + W4[10]*p3 + W4[11]*q2 + W4[12]*q3 + W4[13]*pq;
3002 AC[5] = W5[1] + W5[2]*x + W5[4]*x3 + W5[5]*y + W5[6]*y2 + W5[7]*y3 +
3003 W5[8]*xy + W5[9]*p2 + W5[10]*p3 + W5[11]*q2 + W5[12]*q3 + W5[13]*pq;
3004 AC[6] = W6[1] + W6[2]*x + W6[3]*x2 + W6[4]*x3 + W6[5]*y + W6[6]*y2 + W6[7]*y3 +
3005 W6[8]*xy + W6[9]*p2 + W6[10]*p3 + W6[11]*q2 + W6[12]*q3 + W6[13]*pq;
3006 AC[8] = W8[1] + W8[2]*x + W8[3]*x2 + W8[5]*y + W8[6]*y2 + W8[7]*y3 + W8[8]*xy;
3008 }
else if (rkappa >= 0.12) {
3011 x = 1 + (rkappa-BKMXX2)*FBKX2;
3012 y = 1 + (TMath::Sqrt(beta2)-BKMXY2)*FBKY2;
3025 AC[1] = V1[1] + V1[2]*x + V1[3]*x2 + V1[5]*y + V1[6]*y2 + V1[7]*y3 +
3026 V1[9]*p2 + V1[10]*p3 + V1[11]*q2 + V1[12]*q3;
3027 AC[2] = V2[1] + V2[2]*x + V2[3]*x2 + V2[5]*y + V2[6]*y2 + V2[7]*y3 +
3028 V2[8]*xy + V2[9]*p2 + V2[11]*q2 + V2[12]*q3;
3029 AC[3] = V3[1] + V3[2]*x + V3[3]*x2 + V3[4]*x3 + V3[5]*y + V3[6]*y2 + V3[7]*y3 +
3030 V3[8]*xy + V3[9]*p2 + V3[10]*p3 + V3[11]*q2 + V3[12]*q3 + V3[13]*pq;
3031 AC[4] = V4[1] + V4[2]*x + V4[3]*x2 + V4[4]*x3 + V4[5]*y + V4[6]*y2 + V4[7]*y3 +
3032 V4[8]*xy + V4[9]*p2 + V4[10]*p3 + V4[11]*q2 + V4[12]*q3;
3033 AC[5] = V5[1] + V5[2]*x + V5[3]*x2 + V5[4]*x3 + V5[5]*y + V5[6]*y2 + V5[7]*y3 +
3034 V5[8]*xy + V5[11]*q2 + V5[12]*q3 + V5[13]*pq;
3035 AC[6] = V6[1] + V6[2]*x + V6[3]*x2 + V6[4]*x3 + V6[5]*y + V6[6]*y2 + V6[7]*y3 +
3036 V6[8]*xy + V6[9]*p2 + V6[10]*p3 + V6[11]*q2 + V6[12]*q3 + V6[13]*pq;
3037 AC[7] = V7[1] + V7[2]*x + V7[3]*x2 + V7[5]*y + V7[6]*y2 + V7[7]*y3 +
3038 V7[8]*xy + V7[11]*q2;
3039 AC[8] = V8[1] + V8[2]*x + V8[3]*x2 + V8[5]*y + V8[6]*y2 + V8[7]*y3 +
3040 V8[8]*xy + V8[11]*q2;
3044 if (rkappa >=0.02) itype = 3;
3046 x = 1+(rkappa-BKMXX1)*FBKX1;
3047 y = 1+(TMath::Sqrt(beta2)-BKMXY1)*FBKY1;
3061 AC[1] = U1[1] + U1[2]*x + U1[3]*x2 + U1[5]*y + U1[6]*y2 + U1[7]*y3 +
3062 U1[8]*xy + U1[10]*p3 + U1[12]*q3 + U1[13]*pq;
3063 AC[2] = U2[1] + U2[2]*x + U2[3]*x2 + U2[5]*y + U2[6]*y2 + U2[7]*y3 +
3064 U2[8]*xy + U2[9]*p2 + U2[10]*p3 + U2[12]*q3 + U2[13]*pq;
3065 AC[3] = U3[1] + U3[2]*x + U3[3]*x2 + U3[5]*y + U3[6]*y2 + U3[7]*y3 +
3066 U3[8]*xy + U3[9]*p2 + U3[10]*p3 + U3[11]*q2 + U3[12]*q3 + U3[13]*pq;
3067 AC[4] = U4[1] + U4[2]*x + U4[3]*x2 + U4[4]*x3 + U4[5]*y + U4[6]*y2 + U4[7]*y3 +
3068 U4[8]*xy + U4[9]*p2 + U4[10]*p3 + U4[11]*q2 + U4[12]*q3;
3069 AC[5] = U5[1] + U5[2]*x + U5[3]*x2 + U5[4]*x3 + U5[5]*y + U5[6]*y2 + U5[7]*y3 +
3070 U5[8]*xy + U5[10]*p3 + U5[11]*q2 + U5[12]*q3 + U5[13]*pq;
3071 AC[6] = U6[1] + U6[2]*x + U6[3]*x2 + U6[4]*x3 + U6[5]*y + U6[7]*y3 +
3072 U6[8]*xy + U6[9]*p2 + U6[10]*p3 + U6[12]*q3 + U6[13]*pq;
3073 AC[7] = U7[1] + U7[2]*x + U7[3]*x2 + U7[4]*x3 + U7[5]*y + U7[6]*y2 + U7[8]*xy;
3075 AC[8] = U8[1] + U8[2]*x + U8[3]*x2 + U8[4]*x3 + U8[5]*y + U8[6]*y2 + U8[7]*y3 +
3076 U8[8]*xy + U8[9]*p2 + U8[10]*p3 + U8[11]*q2 + U8[13]*pq;
3080 AC[9] = (AC[8] - AC[0])/npt;
3083 x = (AC[7]-AC[8])/(AC[7]*AC[8]);
3084 y = 1./TMath::Log(AC[8]/AC[7]);
3086 AC[11] = p2*(AC[1]*TMath::Exp(-AC[2]*(AC[7]+AC[5]*p2)-
3087 AC[3]*TMath::Exp(-AC[4]*(AC[7]+AC[6]*p2)))-0.045*y/AC[7])/(1+x*y*AC[7]);
3088 AC[12] = (0.045+x*AC[11])*y;
3090 if (itype == 4) AC[13] = 0.995/LandauI(AC[8]);
3092 if (mode==0)
return;
3098 fl = TMath::VavilovDenEval(x, AC, HC, itype);
3099 for (k=1; k<=npt; k++) {
3101 fu = TMath::VavilovDenEval(x, AC, HC, itype);
3102 WCM[k] = WCM[k-1] + fl + fu;
3106 for (k=1; k<=npt; k++)
3113 Double_t TMath::VavilovDenEval(Double_t rlam, Double_t *AC, Double_t *HC, Int_t itype)
3116 if (rlam < AC[0] || rlam > AC[8])
3123 x = (rlam + HC[0])*HC[1];
3126 for (k=2; k<=8; k++) {
3128 h[k+1] = x*h[k]-fn*h[k-1];
3131 for (k=2; k<=6; k++)
3133 v = HC[8]*TMath::Exp(-0.5*x*x)*TMath::Max(s, 0.);
3135 else if (itype == 2) {
3137 v = AC[1]*TMath::Exp(-AC[2]*(rlam+AC[5]*x) - AC[3]*TMath::Exp(-AC[4]*(rlam+AC[6]*x)));
3139 else if (itype == 3) {
3142 v = AC[1]*TMath::Exp(-AC[2]*(rlam+AC[5]*x)-AC[3]*TMath::Exp(-AC[4]*(rlam+AC[6]*x)));
3145 v = (AC[11]*x + AC[12])*x;
3148 else if (itype == 4) {
3149 v = AC[13]*TMath::Landau(rlam);
3156 #ifdef R__HAS_VECCORE
3158 template ROOT::Double_v vecCore::math::Sin(
const ROOT::Double_v & x);
3159 template ROOT::Double_v vecCore::math::Cos(
const ROOT::Double_v & x);
3160 template ROOT::Double_v vecCore::math::ASin(
const ROOT::Double_v & x);
3161 template ROOT::Double_v vecCore::math::ATan(
const ROOT::Double_v & x);
3162 template ROOT::Double_v vecCore::math::ATan2(
const ROOT::Double_v & x,
const ROOT::Double_v & y);