Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooHistError.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooHistError.h,v 1.14 2007/05/11 09:11:30 verkerke Exp $
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16#ifndef ROO_HIST_ERROR
17#define ROO_HIST_ERROR
18
19#include "Rtypes.h"
20#include "RooNumber.h"
21#include "RooAbsFunc.h"
22#include <cmath>
23#include <iostream>
24
26public:
27 static const RooHistError &instance();
28 virtual ~RooHistError() {} ;
29
30 bool getPoissonInterval(Int_t n, double &mu1, double &mu2, double nSigma= 1) const;
31 bool getBinomialIntervalAsym(Int_t n, Int_t m, double &a1, double &a2, double nSigma= 1) const;
32 bool getBinomialIntervalEff(Int_t n, Int_t m, double &a1, double &a2, double nSigma= 1) const;
33 bool getInterval(const RooAbsFunc *Qu, const RooAbsFunc *Ql, double pointEstimate, double stepSize,
34 double &lo, double &hi, double nSigma) const;
35
37 static RooAbsFunc *createBinomialSum(Int_t n, Int_t m, bool eff) ;
38
39private:
40 double seek(const RooAbsFunc &f, double startAt, double step, double value) const;
41
42 // -----------------------------------------------------------
43 // Define a 1-dim RooAbsFunc of mu that evaluates the sum:
44 //
45 // Q(n|mu) = Sum_{k=nullptr}^{n} P(k|mu)
46 //
47 // where P(n|mu) = exp(-mu) mu**n / n! is the Poisson PDF.
48 // -----------------------------------------------------------
49 class PoissonSum : public RooAbsFunc {
50 public:
51 inline PoissonSum(Int_t n) : RooAbsFunc(1), _n(n) { }
52 inline double operator()(const double xvec[]) const override {
53 double mu(xvec[0]);
54 double result(1);
55 double factorial(1);
56 for (Int_t k = 1; k <= _n; k++) {
57 factorial *= k;
58 result += pow(mu, k) / factorial;
59 }
60 return exp(-mu)*result;
61 };
62 inline double getMinLimit(UInt_t /*index*/) const override { return 0; }
63 inline double getMaxLimit(UInt_t /*index*/) const override { return RooNumber::infinity() ; }
64 private:
66 };
67
68 // -----------------------------------------------------------
69 // Define a 1-dim RooAbsFunc of a that evaluates the sum:
70 //
71 // Q(n|n+m,a) = Sum_{k=nullptr}^{n} B(k|n+m,a)
72 //
73 // where B(n|n+m,a) = (n+m)!/(n!m!) ((1+a)/2)**n ((1-a)/2)**m
74 // is the Binomial PDF.
75 // -----------------------------------------------------------
76 class BinomialSumAsym : public RooAbsFunc {
77 public:
80 inline double operator()(const double xvec[]) const override
81 {
82 double p1(0.5 * (1 + xvec[0]));
83 double p2(1 - p1);
84 double result(0);
85 double fact1(1);
86 double fact2(1);
87 for (Int_t k = 0; k <= _n1; k++) {
88 if (k > 0) {
89 fact2 *= k;
90 fact1 *= _N1 - k + 1;
91 }
92 result += fact1 / fact2 * pow(p1, k) * pow(p2, _N1 - k);
93 }
94 return result;
95 };
96
97 inline double getMinLimit(UInt_t /*index*/) const override { return -1; }
98 inline double getMaxLimit(UInt_t /*index*/) const override { return +1; }
99
100 private:
101 Int_t _n1 ; ///< WVE Solaris CC5 doesn't want _n or _N here (likely compiler bug)
103 } ;
104
105
106 // -----------------------------------------------------------
107 // Define a 1-dim RooAbsFunc of a that evaluates the sum:
108 //
109 // Q(n|n+m,a) = Sum_{k=nullptr}^{n} B(k|n+m,a)
110 //
111 // where B(n|n+m,a) = (n+m)!/(n!m!) ((1+a)/2)**n ((1-a)/2)**m
112 // is the Binomial PDF.
113 // -----------------------------------------------------------
114 class BinomialSumEff : public RooAbsFunc {
115 public:
118 inline double operator()(const double xvec[]) const override
119 {
120 double p1(xvec[0]);
121 double p2(1 - p1);
122 double result(0);
123 double fact1(1);
124 double fact2(1);
125 for(Int_t k= 0; k <= _n1; k++) {
126 if(k > 0) { fact2*= k; fact1*= _N1-k+1; }
127 result+= fact1/fact2*pow(p1,k)*pow(p2,_N1-k);
128 }
129 return result;
130 };
131
132 inline double getMinLimit(UInt_t /*index*/) const override { return 0; }
133 inline double getMaxLimit(UInt_t /*index*/) const override { return +1; }
134
135 private:
136 Int_t _n1 ; ///< WVE Solaris CC5 doesn't want _n or _N here (likely compiler bug)
138 } ;
139
140};
141
142#endif
#define f(i)
Definition RSha256.hxx:104
int Int_t
Signed integer 4 bytes (int)
Definition RtypesCore.h:59
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
#define hi
Abstract interface for evaluating a real-valued function of one real variable and performing numerica...
Definition RooAbsFunc.h:27
double getMaxLimit(UInt_t) const override
Int_t _n1
WVE Solaris CC5 doesn't want _n or _N here (likely compiler bug)
BinomialSumAsym(Int_t n, Int_t m)
double operator()(const double xvec[]) const override
double getMinLimit(UInt_t) const override
BinomialSumEff(Int_t n, Int_t m)
double operator()(const double xvec[]) const override
double getMinLimit(UInt_t) const override
double getMaxLimit(UInt_t) const override
Int_t _n1
WVE Solaris CC5 doesn't want _n or _N here (likely compiler bug)
double getMinLimit(UInt_t) const override
double getMaxLimit(UInt_t) const override
double operator()(const double xvec[]) const override
Singleton class used to calculate the error bars for each bin of a RooHist object.
bool getBinomialIntervalAsym(Int_t n, Int_t m, double &a1, double &a2, double nSigma=1) const
Return 'nSigma' binomial confidence interval for (n,m).
static const RooHistError & instance()
Return a reference to a singleton object that is created the first time this method is called.
virtual ~RooHistError()
bool getBinomialIntervalEff(Int_t n, Int_t m, double &a1, double &a2, double nSigma=1) const
Return 'nSigma' binomial confidence interval for (n,m).
bool getInterval(const RooAbsFunc *Qu, const RooAbsFunc *Ql, double pointEstimate, double stepSize, double &lo, double &hi, double nSigma) const
Calculate a confidence interval using the cumulative functions provided.
double seek(const RooAbsFunc &f, double startAt, double step, double value) const
Scan f(x)-value until it changes sign.
bool getPoissonInterval(Int_t n, double &mu1, double &mu2, double nSigma=1) const
Calculate a confidence interval for the expected number of events given n observed (unweighted) event...
static RooAbsFunc * createPoissonSum(Int_t n)
Create and return a PoissonSum function binding.
static RooAbsFunc * createBinomialSum(Int_t n, Int_t m, bool eff)
Create and return a BinomialSum function binding.
static constexpr double infinity()
Return internal infinity representation.
Definition RooNumber.h:25
const Int_t n
Definition legend1.C:16
TMarker m
Definition textangle.C:8