BOSS 7.0.7
BESIII Offline Software System
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Mdcxprobab.h File Reference

Go to the source code of this file.

Functions

float Mdcxprobab (int &ndof, float &chisq)
 

Function Documentation

◆ Mdcxprobab()

float Mdcxprobab ( int &  ndof,
float &  chisq 
)

Definition at line 4 of file Mdcxprobab.cxx.

4 {
5
6 //constants
7 static float srtopi = 2.0/sqrt(2.0*M_PI);
8 static float upl = 100.0; //FIXME
9
10 float prob = 0.0;
11 if(ndof <= 0) return prob;
12 if(chisq < 0.0) return prob;
13 if(ndof <= 60) {
14 //full treatment
15 if(chisq > upl) return prob;
16 float sum = exp(-0.5*chisq);
17 float term = sum;
18
19 int m = ndof/2;
20 if(2*m == ndof) {
21 if(m == 1) return sum;
22 for(int i = 2; i <= m; i++) {
23 term = 0.5*term*chisq/(i-1);
24 sum += term;
25 }//(int i=2; i<=m)
26 return sum;
27 //even
28 } else {
29 //odd
30 float srty = sqrt(chisq);
31 float temp = srty/M_SQRT2;
32 prob = erfc(temp);
33 if(ndof == 1) return prob;
34 if(ndof == 3) return (srtopi*srty*sum+prob);
35 m--;
36 for(int i = 1; i <= m; i++) {
37 term = term*chisq/(2*i+1);
38 sum += term;
39 }//(int i=1; i<=m; i++)
40 return (srtopi*srty*sum + prob);
41
42 }//(2*m==ndof)
43
44 } else {
45 //asymtotic Gaussian approx
46 float srty = sqrt(chisq) - sqrt(ndof - 0.5);
47 if(srty < 12.0) prob=0.5*erfc(srty);
48 return prob;
49
50 }//ndof<30
51
52 // cannot reach following line; warning on OSF; so comment it out
53 // return prob;
54}//endof Mdcxprobab
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:252
#define M_PI
Definition: TConstant.h:4

Referenced by MdcxCosmicSewer::execute(), MdcxFittedHel::Grow(), MdcxFittedHel::IterateFit(), and MdcxFindTracks::process().