22 #include "Riostream.h" 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);
52 return (Long_t) (hypot((Double_t)x, (Double_t)y) + 0.5);
67 if(x==0.0)
return 0.0;
69 return log(x+ax*
sqrt(1.+1./(ax*ax)));
80 if(x==0.0)
return 0.0;
82 return log(x+ax*
sqrt(1.-1./(ax*ax)));
93 return log((1+x)/(1-x))/2;
112 const Double_t hf = 0.5;
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) {
140 a = -pi3+hf*(b1*b1-b2*b2);
146 }
else if (t <= -0.5) {
170 for (Int_t i=19;i>=0;i--){
171 b0 = c[i] + alfa*b1-b2;
175 h = -(s*(b0-h*b2)+a);
206 Double_t kEps = 1
e-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);
217 for (Int_t iter=0; iter<kMaxit; iter++) {
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;}
249 if (n <= 0)
return 1.;
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;
339 if (x > 0)
return 0.5 +0.5*h;
378 Double_t eps = 3.e-14;
379 Double_t fpmin = 1.e-30;
381 if (a <= 0 || x <= 0)
return 0;
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;
415 Double_t eps = 3.e-14;
417 if (a <= 0 || x <= 0)
return 0;
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);
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;
455 if (!norm)
return res;
456 return res/(2.50662827463100024*sigma);
471 if (sigma <= 0)
return 0;
473 if (!norm)
return den;
497 Float_t d =
Sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
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);
575 Double_t lnpoisson = x*
log(par)-par-
LnGamma(x+1.);
576 return Exp(lnpoisson);
623 if (ndf <= 0)
return 0;
626 if (chi2 < 0)
return 0;
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);
679 }
else if (u < 6.8116) {
685 for (Int_t j=0; j<maxj;j++) {
688 p = 2*(r[0] - r[1] +r[2] - r[3]);
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));
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;
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;
1128 Double_t phi,cphi,phis3,c1,c2,c3,pis3;
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;
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; }
1255 nppm = a + prob[i] * ( n + 1 -a -
b);
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;
1274 quantiles[i] = (1-
gamma)*xj + gamma*xjj;
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;
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;
1400 return Hash(txt, Int_t(strlen(txt)));
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))))))));
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))))));
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;
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))))));
1545 if (x <= 0 || n < 0) {
1546 Error(
"TMath::BesselK",
"*K* Invalid argument(s) (n,x) = (%d, %g)\n",n,x);
1558 for (Int_t j=1; j<n; j++) {
1559 bkp = bkm+Double_t(j)*tox*bk;
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);
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;
1608 if ((x < 0) && (n%2 == 1)) result = -result;
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);
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;
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))));
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);
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)))));
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);
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, -2
e-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,
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;
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 -4
e-17, 2
e-17,-1e-17 };
1857 Double_t alfa, h, r,
y, b0, b1, b2;
1858 Double_t
v = TMath::Abs(x);
1862 }
else if (v <= 0.3) {
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;
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;
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;
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));
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.0
e-12)
break;
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",
2053 if ((x<0) || (x>1) || (p<=0) || (q<=0)){
2054 Error(
"TMath::BetaDist",
"parameter value outside allowed range");
2071 if ((x<0) || (x>1) || (p<=0) || (q<=0)){
2072 Error(
"TMath::BetaDistI",
"parameter value outside allowed range");
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)
2117 if(k <= 0)
return 1.0;
2118 if(k > n)
return 0.0;
2150 Double_t temp= (x-t)*(x-t)/(s*s);
2151 Double_t result = 1/(s*
TMath::Pi()*(1+temp));
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;
2183 Double_t xx = 0.5 * ndf;
2184 Double_t cp = xx - 1;
2192 if (ch > c[6]*ndf + 6)
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]);
2207 if (ch < e)
return ch;
2210 for (Int_t i=0; i<maxit; i++){
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;
2317 if ((x<mu) || (gamma<=0) || (beta <=0)) {
2318 Error(
"TMath::GammaDist",
"illegal parameter values x = %f , gamma = %f beta = %f",x,gamma,beta);
2335 temp =
TMath::Exp(-TMath::Abs((x-alpha)/beta));
2352 temp = 0.5*
TMath::Exp(-TMath::Abs((x-alpha)/beta));
2354 temp = 1-0.5*
TMath::Exp(-TMath::Abs((x-alpha)/beta));
2406 if ((x<theta) || (sigma<=0) || (m<=0)) {
2407 Error(
"TMath::Lognormal",
"illegal parameter values");
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.);
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;
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++) {
2597 Double_t rh = 0.5*r;
2598 Double_t rh1 = rh + 0.5;
2616 Double_t si = (T>0) ?
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));
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;
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;
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;
2688 if(neg) quantile=-quantile;
2743 Double_t *ac =
new Double_t[14];
2744 Double_t *hc =
new Double_t[9];
2776 Double_t *ac =
new Double_t[14];
2777 Double_t *hc =
new Double_t[9];
2778 Double_t *wcm =
new Double_t[201];
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.);
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) {
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);
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];
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;
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;
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;
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]);
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;
3099 for (k=1; k<=npt; k++) {
3102 WCM[k] = WCM[k-1] + fl + fu;
3106 for (k=1; k<=npt; k++)
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) {
3139 else if (itype == 3) {
3145 v = (AC[11]*x + AC[12])*x;
3148 else if (itype == 4) {
3156 #ifdef R__HAS_VECCORE double lognormal_pdf(double x, double m, double s, double x0=0)
Probability density function of the lognormal distribution.
Double_t BesselI(Int_t n, Double_t x)
Compute the Integer Order Modified Bessel function I_n(x) for n=0,1,2,...
constexpr Double_t HC()
in
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 erf(double x)
Error function encountered in integrating the normal distribution.
Double_t Landau(Double_t x, Double_t mpv=0, Double_t sigma=1, Bool_t norm=kFALSE)
The LANDAU function.
Double_t ErfInverse(Double_t x)
returns the inverse error function x must be <-1<x<1
Double_t BreitWigner(Double_t x, Double_t mean=0, Double_t gamma=1)
Calculate a Breit Wigner function with mean and gamma.
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 PoissonI(Double_t x, Double_t par)
Compute the Poisson distribution function for (x,par) This is a non-smooth function.
Float_t Normalize(Float_t v[3])
Normalize a vector v in place.
Double_t KolmogorovProb(Double_t z)
Calculates the Kolmogorov distribution function,.
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 ...
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, at which the quantile is computed 2nd argument - the number of degrees of freedom of the Student distribution When the 3rd argument lower_tail is kTRUE (default)- the algorithm returns such x0, that.
Double_t NormQuantile(Double_t p)
Computes quantiles for standard normal distribution N(0, 1) at probability p.
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 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...
double inc_beta(double x, double a, double b)
Calculates the normalized (regularized) incomplete beta function.
Double_t Log2(Double_t x)
Double_t StruveH1(Double_t x)
Struve functions of order 0.
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...
Int_t FloorNint(Double_t x)
Double_t Gamma(Double_t z)
Computation of gamma(z) for all z.
you should not use this method at all Int_t y
double tgamma(double x)
The gamma function is defined to be the extension of the factorial to real numbers.
Double_t BesselJ1(Double_t x)
Bessel function J0(x) for any real x.
Double_t GamCf(Double_t a, Double_t x)
Computation of the incomplete gamma function P(a,x) via its continued fraction representation.
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...
Double_t StudentI(Double_t T, Double_t ndf)
Calculates the cumulative distribution function of Student's t-distribution second parameter stands f...
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
double beta(double x, double y)
Calculates the beta function.
double erfc(double x)
Complementary error function.
int Sign(const T &x)
sign.
Double_t BesselY1(Double_t x)
Bessel function Y0(x) for positive x.
Double_t ChisquareQuantile(Double_t p, Double_t ndf)
Evaluate the quantiles of the chi-squared probability distribution function.
double landau_pdf(double x, double xi=1, double x0=0)
Probability density function of the Landau distribution: with where .
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.
Double_t Log10(Double_t x)
Double_t BesselI1(Double_t x)
modified Bessel function K_0(x)
Double_t Freq(Double_t x)
Computation of the normal frequency function freq(x).
Double_t VavilovDenEval(Double_t rlam, Double_t *AC, Double_t *HC, Int_t itype)
Internal function, called by Vavilov and VavilovSet.
Double_t GamSer(Double_t a, Double_t x)
Computation of the incomplete gamma function P(a,x) via its series representation.
double fdistribution_cdf(double x, double n, double m, double x0=0)
Cumulative distribution function of the F-distribution (lower tail).
double gamma_pdf(double x, double alpha, double theta, double x0=0)
Probability density function of the gamma distribution.
Double_t ATan2(Double_t, Double_t)
void BubbleLow(Int_t Narr, Double_t *arr1, Int_t *arr2)
Opposite ordering of the array arr2[] to that of BubbleHigh.
Double_t Erfc(Double_t x)
Compute the complementary error function erfc(x).
double landau_cdf(double x, double xi=1, double x0=0)
Cumulative distribution function of the Landau distribution (lower tail).
Double_t DiLog(Double_t x)
Modified Struve functions of order 1.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t Int_t m
VecExpr< UnaryOp< Fabs< T >, VecExpr< A, T, D >, T >, T, D > fabs(const VecExpr< A, T, D > &rhs)
Double_t VavilovI(Double_t x, Double_t kappa, Double_t beta2)
Returns the value of the Vavilov distribution function.
Double_t BesselY0(Double_t x)
Bessel function J1(x) for any real x.
Double_t Erf(Double_t x)
Computation of the error function erf(x).
Double_t BetaDistI(Double_t x, Double_t p, Double_t q)
Computes the distribution function of the Beta distribution.
Double_t StruveL1(Double_t x)
Modified Struve functions of order 0.
Double_t Voigt(Double_t x, Double_t sigma, Double_t lg, Int_t r=4)
Computation of Voigt function (normalised).
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)
Internal function, called by Vavilov and VavilovI.
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 StruveL0(Double_t x)
Struve functions of order 1.
double fdistribution_pdf(double x, double n, double m, double x0=0)
Probability density function of the F-distribution.
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 ...
Double_t Binomial(Int_t n, Int_t k)
Calculate the binomial coefficient n over k.
Double_t LandauI(Double_t x)
Returns the value of the Landau distribution function at point x.
Double_t BesselJ0(Double_t x)
modified Bessel function K_1(x)
Double_t ErfcInverse(Double_t x)
returns the inverse of the complementary error function x must be 0<x<2 implement using the quantile ...
Double_t SignalingNaN()
Returns a signaling NaN as defined by IEEE 754](http://en.wikipedia.org/wiki/NaN#Signaling_NaN) ...
ULong_t Hash(const void *txt, Int_t ntxt)
Calculates hash index from any char string.
* x
Deprecated and error prone model selection interface.
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...
Double_t Student(Double_t T, Double_t ndf)
Computes density function for Student's t- distribution (the probability function (integral of densit...
Double_t Beta(Double_t p, Double_t q)
Calculates Beta-function Gamma(p)*Gamma(q)/Gamma(p+q).
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.
Double_t BesselI0(Double_t x)
integer order modified Bessel function K_n(x)
Double_t BesselK(Int_t n, Double_t x)
integer order modified Bessel function I_n(x)
Double_t StruveH0(Double_t x)
Bessel function Y1(x) for positive x.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
Double_t Hypot(Double_t x, Double_t y)
Double_t BesselK0(Double_t x)
modified Bessel function I_0(x)
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...
you should not use this method at all Int_t Int_t z
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...
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 chisquared_cdf_c(double x, double r, double x0=0)
Complement of the cumulative distribution function of the distribution with degrees of freedom (upp...
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.
Double_t Factorial(Int_t i)
Compute factorial(n).
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Double_t BesselK1(Double_t x)
modified Bessel function I_1(x)
Double_t LnGamma(Double_t z)
Computation of ln[gamma(z)] for all z.
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.
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 Sqrt(Double_t x)
double lgamma(double x)
Calculates the logarithm of the gamma function.
Double_t BetaIncomplete(Double_t x, Double_t a, Double_t b)
Calculates the incomplete Beta-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 inc_gamma(double a, double x)
Calculates the normalized (regularized) lower incomplete gamma function (lower integral) ...
static T Epsilon()
Returns minimum double representation.
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
constexpr Double_t PiOver2()
Double_t Vavilov(Double_t x, Double_t kappa, Double_t beta2)
Returns the value of the Vavilov density function.