16 #ifndef ROO_HIST_ERROR 
   17 #define ROO_HIST_ERROR 
   27   static const RooHistError &instance();
 
   28   virtual ~RooHistError() {} ;
 
   30   Bool_t getPoissonInterval(Int_t n, Double_t &mu1, Double_t &mu2, Double_t nSigma= 1) 
const;
 
   31   Bool_t getBinomialIntervalAsym(Int_t n, Int_t m, Double_t &a1, Double_t &a2, Double_t nSigma= 1) 
const;
 
   32   Bool_t getBinomialIntervalEff(Int_t n, Int_t m, Double_t &a1, Double_t &a2, Double_t nSigma= 1) 
const;
 
   33   Bool_t getInterval(
const RooAbsFunc *Qu, 
const RooAbsFunc *Ql, Double_t pointEstimate, Double_t stepSize,
 
   34            Double_t &lo, Double_t &hi, Double_t nSigma) 
const;
 
   36   static RooAbsFunc *createPoissonSum(Int_t n) ;
 
   37   static RooAbsFunc *createBinomialSum(Int_t n, Int_t m, Bool_t eff) ;
 
   42   Bool_t getPoissonIntervalCalc(Int_t n, Double_t &mu1, Double_t &mu2, Double_t nSigma= 1) 
const;
 
   43   Double_t _poissonLoLUT[1000] ;
 
   44   Double_t _poissonHiLUT[1000] ;
 
   47   Double_t seek(
const RooAbsFunc &f, Double_t startAt, Double_t step, Double_t value) 
const;
 
   56   class PoissonSum : 
public RooAbsFunc {
 
   58     inline PoissonSum(Int_t n) : RooAbsFunc(1), _n(n) { }
 
   59     inline Double_t operator()(
const Double_t xvec[])
 const {
 
   60       Double_t mu(xvec[0]),result(1),factorial(1);
 
   61       for(Int_t k= 1; k <= _n; k++) {
 
   63    result+= pow(mu,k)/factorial;
 
   65       return exp(-mu)*result;
 
   67     inline Double_t getMinLimit(UInt_t )
 const { 
return 0; }
 
   68     inline Double_t getMaxLimit(UInt_t )
 const { 
return RooNumber::infinity() ; }
 
   81   class BinomialSumAsym : 
public RooAbsFunc {
 
   83     BinomialSumAsym(Int_t n, Int_t m) : RooAbsFunc(1), _n1(n), _N1(n+m) { 
 
   85     inline Double_t operator()(
const Double_t xvec[])
 const  
   87    Double_t p1(0.5*(1+xvec[0])),p2(1-p1),result(0),fact1(1),fact2(1);
 
   88    for(Int_t k= 0; k <= _n1; k++) {
 
   89      if(k > 0) { fact2*= k; fact1*= _N1-k+1; }
 
   90      result+= fact1/fact2*pow(p1,k)*pow(p2,_N1-k);
 
   95     inline Double_t getMinLimit(UInt_t )
 const { 
return -1; }
 
   96     inline Double_t getMaxLimit(UInt_t )
 const { 
return +1; }
 
  112   class BinomialSumEff : 
public RooAbsFunc {
 
  114     BinomialSumEff(Int_t n, Int_t m) : RooAbsFunc(1), _n1(n), _N1(n+m) { 
 
  116     inline Double_t operator()(
const Double_t xvec[])
 const  
  118    Double_t p1(xvec[0]),p2(1-p1),result(0),fact1(1),fact2(1);
 
  119    for(Int_t k= 0; k <= _n1; k++) {
 
  120      if(k > 0) { fact2*= k; fact1*= _N1-k+1; }
 
  121      result+= fact1/fact2*pow(p1,k)*pow(p2,_N1-k);
 
  126     inline Double_t getMinLimit(UInt_t )
 const { 
return  0; }
 
  127     inline Double_t getMaxLimit(UInt_t )
 const { 
return +1; }
 
  134   ClassDef(RooHistError,1)