/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/MdcPatRec/MdcxReco/MdcxReco-00-01-59/src/Mdcxprobab.cxx

Go to the documentation of this file.
00001 #include <math.h>
00002 #include "MdcxReco/Mdcxprobab.h"
00003 
00004 extern float Mdcxprobab(int& ndof, float& chisq) {
00005 
00006   //constants
00007   static float srtopi = 2.0/sqrt(2.0*M_PI);
00008   static float upl = 100.0;  //FIXME
00009 
00010   float prob = 0.0;
00011   if(ndof <= 0) return prob;
00012   if(chisq < 0.0) return prob;
00013   if(ndof <= 60) {
00014     //full treatment
00015     if(chisq > upl) return prob;
00016     float sum = exp(-0.5*chisq);
00017     float term = sum;
00018 
00019     int m = ndof/2;
00020     if(2*m == ndof) {
00021       if(m == 1) return sum;
00022       for(int i = 2; i <= m; i++) {
00023         term = 0.5*term*chisq/(i-1);
00024         sum += term;
00025       }//(int i=2; i<=m)
00026       return sum;
00027       //even
00028     } else {
00029       //odd
00030       float srty = sqrt(chisq);
00031       float temp = srty/M_SQRT2;
00032       prob = erfc(temp);
00033       if(ndof == 1) return prob;
00034       if(ndof == 3) return (srtopi*srty*sum+prob);
00035       m--;
00036       for(int i = 1; i <= m; i++) {
00037         term = term*chisq/(2*i+1);
00038         sum += term;
00039       }//(int i=1; i<=m; i++)
00040       return (srtopi*srty*sum + prob);
00041 
00042     }//(2*m==ndof)
00043 
00044   } else {
00045     //asymtotic Gaussian approx
00046     float srty = sqrt(chisq) - sqrt(ndof - 0.5);
00047     if(srty < 12.0) prob=0.5*erfc(srty);
00048     return prob;
00049 
00050   }//ndof<30
00051 
00052   // cannot reach following line; warning on OSF; so comment it out
00053   // return prob;
00054 }//endof Mdcxprobab
00055 

Generated on Tue Nov 29 23:13:37 2016 for BOSS_7.0.2 by  doxygen 1.4.7