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)