1#ifndef ROOT_TEfficiency_cxx
2#define ROOT_TEfficiency_cxx
708 Info(
"TEfficiency",
"given histograms are filled with weights");
713 Error(
"TEfficiency(const TH1&,const TH1&)",
"histograms are not consistent -> results are useless");
714 Warning(
"TEfficiency(const TH1&,const TH1&)",
"using two empty TH1D('h1','h1',10,0,10)");
936 fTotalHistogram =
new TH3D(
"total",
"total",nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup);
937 fPassedHistogram =
new TH3D(
"passed",
"passed",nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup);
1011 fBeta_alpha(rEff.fBeta_alpha),
1012 fBeta_beta(rEff.fBeta_beta),
1013 fBeta_bin_params(rEff.fBeta_bin_params),
1014 fConfLevel(rEff.fConfLevel),
1019 fWeight(rEff.fWeight)
1022 rEff.TObject::Copy(*
this);
1043 rEff.TAttLine::Copy(*
this);
1044 rEff.TAttFill::Copy(*
this);
1045 rEff.TAttMarker::Copy(*
this);
1110 return ((
mode + delta) > 1) ? 1.0 : (
mode + delta);
1112 return ((
mode - delta) < 0) ? 0.0 : (
mode - delta);
1129 ::Error(
"FeldmanCousins",
"Error running FC method - return 0 or 1");
1131 return (bUpper) ? upper : lower;
1160 double alpha = 1.-level;
1184 const double alpha = 1. - level;
1185 const bool equal_tailed =
true;
1186 const double alpha_min = equal_tailed ? alpha/2 : alpha;
1187 const double tol = 1
e-9;
1197 if ( passed > 0 && passed < 1) {
1200 p = (p1 - p0) * passed + p0;
1204 while (std::abs(pmax - pmin) > tol) {
1205 p = (pmin + pmax)/2;
1213 double vmin = (bUpper) ? alpha_min : 1.- alpha_min;
1285 return (bUpper) ? upper : lower;
1303 if((
a > 0) && (
b > 0))
1306 gROOT->Error(
"TEfficiency::BayesianCentral",
"Invalid input parameters - return 1");
1311 if((
a > 0) && (
b > 0))
1314 gROOT->Error(
"TEfficiency::BayesianCentral",
"Invalid input parameters - return 0");
1358 if (
a <= 0 ||
b <= 0) {
1359 lower = 0; upper = 1;
1360 gROOT->Error(
"TEfficiency::BayesianShortest",
"Invalid input parameters - return [0,1]");
1379 if (
a==
b &&
a<=1.0) {
1393 bool ret = minim.
Minimize(100, 1.E-10,1.E-10);
1395 gROOT->Error(
"TEfficiency::BayesianShortes",
"Error finding the shortest interval");
1412 if (
a <= 0 ||
b <= 0 ) {
1413 gROOT->Error(
"TEfficiency::BayesianMean",
"Invalid input parameters - return 0");
1435 if (
a <= 0 ||
b <= 0 ) {
1436 gROOT->Error(
"TEfficiency::BayesianMode",
"Invalid input parameters - return 0");
1439 if (
a <= 1 ||
b <= 1) {
1440 if (
a <
b)
return 0;
1441 if (
a >
b)
return 1;
1442 if (
a ==
b)
return 0.5;
1482 const TAxis* ax1 = 0;
1483 const TAxis* ax2 = 0;
1490 ax2 =
total.GetXaxis();
1494 ax2 =
total.GetYaxis();
1498 ax2 =
total.GetZaxis();
1503 gROOT->Info(
"TEfficiency::CheckBinning",
"Histograms are not consistent: they have different number of bins");
1509 gROOT->Info(
"TEfficiency::CheckBinning",
"Histograms are not consistent: they have different bin edges");
1531 gROOT->Error(
"TEfficiency::CheckConsistency",
"passed TEfficiency objects have different dimensions");
1536 gROOT->Error(
"TEfficiency::CheckConsistency",
"passed TEfficiency objects have different binning");
1541 gROOT->Error(
"TEfficiency::CheckConsistency",
"passed TEfficiency objects do not have consistent bin contents");
1564 Int_t nbinsx, nbinsy, nbinsz, nbins;
1571 case 1: nbins = nbinsx + 2;
break;
1572 case 2: nbins = (nbinsx + 2) * (nbinsy + 2);
break;
1573 case 3: nbins = (nbinsx + 2) * (nbinsy + 2) * (nbinsz + 2);
break;
1577 for(
Int_t i = 0; i < nbins; ++i) {
1579 gROOT->Info(
"TEfficiency::CheckEntries",
"Histograms are not consistent: passed bin content > total bin content");
1592 if (pass.
GetSumw2N() == 0 &&
total.GetSumw2N() == 0)
return false;
1599 total.GetStats(stattotal);
1622 Error(
"CreatePaintingGraph",
"Call this function only for dimension == 1");
1629 graph->SetName(
"eff_graph");
1645 Bool_t plot0Bins =
false;
1646 if (
option.Contains(
"e0") ) plot0Bins =
true;
1655 double * px =
graph->GetX();
1656 double * py =
graph->GetY();
1657 double * exl =
graph->GetEXlow();
1658 double * exh =
graph->GetEXhigh();
1659 double * eyl =
graph->GetEYlow();
1660 double * eyh =
graph->GetEYhigh();
1662 for (
Int_t i = 0; i < npoints; ++i) {
1671 if (j >=
graph->GetN() ) {
1673 graph->SetPointError(j,xlow,xup,ylow,yup);
1691 if (oldTitle != newTitle ) {
1692 graph->SetTitle(newTitle);
1698 if (xlabel)
graph->GetXaxis()->SetTitle(xlabel);
1699 if (ylabel)
graph->GetYaxis()->SetTitle(ylabel);
1716 graph->GetHistogram();
1727 Error(
"CreatePaintingistogram",
"Call this function only for dimension == 2");
1778 for(
Int_t i = 0; i < nbinsx + 2; ++i) {
1779 for(
Int_t j = 0; j < nbinsy + 2; ++j) {
1850 Double_t alpha = (1.0 - level) / 2;
1961 for (
int i = 0; i <
n ; ++i) {
1962 if(pass[i] >
total[i]) {
1963 ::Error(
"TEfficiency::Combine",
"total events = %i < passed events %i",
total[i],pass[i]);
1964 ::Info(
"TEfficiency::Combine",
"stop combining");
1969 ktot +=
w[i] * pass[i];
1974 double norm = sumw/sumw2;
1978 ::Error(
"TEfficiency::Combine",
"total = %f < passed %f",ntot,ktot);
1979 ::Info(
"TEfficiency::Combine",
"stop combining");
1983 double a = ktot + alpha;
1984 double b = ntot - ktot + beta;
1986 double mean =
a/(
a+
b);
1992 if (shortestInterval)
2050 std::vector<TH1*> vTotal; vTotal.reserve(
n);
2051 std::vector<TH1*> vPassed; vPassed.reserve(
n);
2052 std::vector<Double_t> vWeights; vWeights.reserve(
n);
2068 level = atof( opt(pos,opt.
Length() ).
Data() );
2069 if((level <= 0) || (level >= 1))
2077 for(
Int_t k = 0; k <
n; ++k) {
2079 vWeights.push_back(
w[k]);
2081 gROOT->Error(
"TEfficiency::Combine",
"invalid custom weight found w = %.2lf",
w[k]);
2082 gROOT->Info(
"TEfficiency::Combine",
"stop combining");
2091 while((obj = next())) {
2117 vWeights.push_back(pEff->
fWeight);
2132 if(vTotal.empty()) {
2133 gROOT->Error(
"TEfficiency::Combine",
"no TEfficiency objects in given list");
2134 gROOT->Info(
"TEfficiency::Combine",
"stop combining");
2139 if(bWeights && (
n != (
Int_t)vTotal.size())) {
2140 gROOT->Error(
"TEfficiency::Combine",
"number of weights n=%i differs from number of TEfficiency objects k=%i which should be combined",
n,(
Int_t)vTotal.size());
2141 gROOT->Info(
"TEfficiency::Combine",
"stop combining");
2145 Int_t nbins_max = vTotal.at(0)->GetNbinsX();
2147 for(
UInt_t i=0; i<vTotal.size(); ++i) {
2149 gROOT->Warning(
"TEfficiency::Combine",
"histograms have not the same binning -> results may be useless");
2150 if(vTotal.at(i)->GetNbinsX() < nbins_max) nbins_max = vTotal.at(i)->GetNbinsX();
2155 gROOT->Info(
"TEfficiency::Combine",
"combining %i TEfficiency objects",(
Int_t)vTotal.size());
2157 gROOT->Info(
"TEfficiency::Combine",
"using custom weights");
2159 gROOT->Info(
"TEfficiency::Combine",
"using the following prior probability for the efficiency: P(e) ~ Beta(e,%.3lf,%.3lf)",alpha,beta);
2162 gROOT->Info(
"TEfficiency::Combine",
"using individual priors of each TEfficiency object");
2163 gROOT->Info(
"TEfficiency::Combine",
"confidence level = %.2lf",level);
2167 std::vector<Double_t>
x(nbins_max);
2168 std::vector<Double_t> xlow(nbins_max);
2169 std::vector<Double_t> xhigh(nbins_max);
2170 std::vector<Double_t> eff(nbins_max);
2171 std::vector<Double_t> efflow(nbins_max);
2172 std::vector<Double_t> effhigh(nbins_max);
2176 Int_t num = vTotal.size();
2177 std::vector<Int_t> pass(num);
2178 std::vector<Int_t>
total(num);
2183 for(
Int_t i=1; i <= nbins_max; ++i) {
2185 x[i-1] = vTotal.at(0)->GetBinCenter(i);
2186 xlow[i-1] =
x[i-1] - vTotal.at(0)->GetBinLowEdge(i);
2187 xhigh[i-1] = vTotal.at(0)->GetBinWidth(i) - xlow[i-1];
2189 for(
Int_t j = 0; j < num; ++j) {
2190 pass[j] = (
Int_t)(vPassed.at(j)->GetBinContent(i) + 0.5);
2191 total[j] = (
Int_t)(vTotal.at(j)->GetBinContent(i) + 0.5);
2195 eff[i-1] =
Combine(up,low,num,&pass[0],&
total[0],alpha,beta,level,&vWeights[0],opt.
Data());
2197 if(eff[i-1] == -1) {
2198 gROOT->Error(
"TEfficiency::Combine",
"error occurred during combining");
2199 gROOT->Info(
"TEfficiency::Combine",
"stop combining");
2202 efflow[i-1]= eff[i-1] - low;
2203 effhigh[i-1]= up - eff[i-1];
2390 Bool_t bDeleteOld =
true;
2391 if(
option.Contains(
"+")) {
2392 option.ReplaceAll(
"+",
"");
2406 while((obj = next())) {
2526 if (tw2 <= 0 )
return pw/tw;
2529 double norm = tw/tw2;
2530 aa = pw * norm + alpha;
2531 bb = (tw - pw) * norm + beta;
2535 aa = passed + alpha;
2536 bb =
total - passed + beta;
2579 if (tw2 <= 0)
return 0;
2584 Double_t bb = (tw - pw) * norm + beta;
2600 Warning(
"GetEfficiencyErrorLow",
"frequentist confidence intervals for weights are only supported by the normal approximation");
2601 Info(
"GetEfficiencyErrorLow",
"setting statistic option to kFNormal");
2605 Double_t variance = ( pw2 * (1. - 2 * eff) + tw2 * eff *eff ) / ( tw * tw) ;
2612 return (eff - delta < 0) ? eff : delta;
2659 if (tw2 <= 0)
return 0;
2664 Double_t bb = (tw - pw) * norm + beta;
2680 Warning(
"GetEfficiencyErrorUp",
"frequentist confidence intervals for weights are only supported by the normal approximation");
2681 Info(
"GetEfficiencyErrorUp",
"setting statistic option to kFNormal");
2685 Double_t variance = ( pw2 * (1. - 2 * eff) + tw2 * eff *eff ) / ( tw * tw) ;
2691 return (eff + delta > 1) ? 1.-eff : delta;
2748 while((obj = next())) {
2782 if (
total == 0)
return (bUpper) ? 1 : 0;
2788 return ((average + delta) > 1) ? 1.0 : (average + delta);
2790 return ((average - delta) < 0) ? 0.0 : (average - delta);
2815 Fatal(
"operator+=",
"Adding to a non consistent TEfficiency object which has not a total or a passed histogram ");
2820 Warning(
"operator+=",
"no operation: adding an empty object");
2824 Fatal(
"operator+=",
"Adding a non consistent TEfficiency object which has not a total or a passed histogram ");
2880 rhs.TAttLine::Copy(*
this);
2881 rhs.TAttFill::Copy(*
this);
2882 rhs.TAttMarker::Copy(*
this);
2934 while((obj = next())) {
2937 ((
TF1*)obj)->Paint(
"sameC");
2957 Warning(
"Paint",
"Painting 3D efficiency is not implemented");
2971 static Int_t naxis = 0;
2972 TString sxaxis=
"xAxis",syaxis=
"yAxis",szaxis=
"zAxis";
2995 out <<
indent <<
"Double_t " << sxaxis <<
"["
2998 if (i != 0) out <<
", ";
3001 out <<
"}; " << std::endl;
3004 out <<
indent <<
"Double_t " << syaxis <<
"["
3007 if (i != 0) out <<
", ";
3010 out <<
"}; " << std::endl;
3014 out <<
indent <<
"Double_t " << szaxis <<
"["
3017 if (i != 0) out <<
", ";
3020 out <<
"}; " << std::endl;
3025 static Int_t eff_count = 0;
3028 eff_name += eff_count;
3030 const char*
name = eff_name.
Data();
3033 const char quote =
'"';
3034 out <<
indent << std::endl;
3036 <<
"(" << quote <<
GetName() << quote <<
"," << quote
3064 out <<
");" << std::endl;
3065 out <<
indent << std::endl;
3079 out <<
indent <<
name <<
"->SetUseWeightedEvents();" << std::endl;
3096 for(
Int_t i = 0; i < nbins; ++i) {
3097 out <<
indent <<
name <<
"->SetTotalEvents(" << i <<
"," <<
3099 out <<
indent <<
name <<
"->SetPassedEvents(" << i <<
"," <<
3106 while((obj = next())) {
3109 out <<
indent <<
name <<
"->GetListOfFunctions()->Add("
3110 << obj->
GetName() <<
");" << std::endl;
3122 if (!
option.Contains(
"nodraw"))
3123 out<<
indent <<
name<<
"->Draw(" << quote << opt << quote <<
");"
3142 Warning(
"SetBetaAlpha(Double_t)",
"invalid shape parameter %.2lf",alpha);
3160 Warning(
"SetBetaBeta(Double_t)",
"invalid shape parameter %.2lf",beta);
3200 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3204 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3220 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3224 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3240 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3244 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3260 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3264 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3281 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3285 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3302 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3306 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3321 if((level > 0) && (level < 1))
3324 Warning(
"SetConfidenceLevel(Double_t)",
"invalid confidence level %.2lf",level);
3376 if(events <= fTotalHistogram->GetBinContent(bin)) {
3381 Error(
"SetPassedEvents(Int_t,Int_t)",
"total number of events (%.1lf) in bin %i is less than given number of passed events %i",
fTotalHistogram->
GetBinContent(bin),bin,events);
3542 title_passed.
Insert(pos,
" (passed)");
3543 title_total.
Insert(pos,
" (total)");
3546 title_passed.
Append(
" (passed)");
3547 title_total.
Append(
" (total)");
3575 Error(
"SetTotalEvents(Int_t,Int_t)",
"passed number of events (%.1lf) in bin %i is bigger than given number of total events %i",
fPassedHistogram->
GetBinContent(bin),bin,events);
3636 gROOT->Info(
"TEfficiency::SetUseWeightedEvents",
"Handle weighted events for computing efficiency");
3656 Warning(
"SetWeight",
"invalid weight %.2lf",weight);
3684 if (
total == 0)
return (bUpper) ? 1 : 0;
3690 * (1 - average) + kappa * kappa / 4);
3692 return ((
mode + delta) > 1) ? 1.0 : (
mode + delta);
3694 return ((
mode - delta) < 0) ? 0.0 : (
mode - delta);
static void indent(ostringstream &buf, int indent_level)
const TEfficiency operator+(const TEfficiency &lhs, const TEfficiency &rhs)
Addition operator.
const Double_t kDefBetaAlpha
const Double_t kDefWeight
const Double_t kDefBetaBeta
const TEfficiency::EStatOption kDefStatOpt
const Double_t kDefConfLevel
static unsigned int total
winID h TVirtualViewer3D TVirtualGLPainter p
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 on
Option_t Option_t TPoint TPoint const char mode
void Calculate(const double X, const double n)
User class for performing function minimization.
void SetFunction(const ROOT::Math::IGenFunction &f, double xlow, double xup)
Sets function to be minimized.
bool Minimize(int maxIter, double absTol=1.E-8, double relTol=1.E-10) override
Find minimum position iterating until convergence specified by the absolute and relative tolerance or...
void SetNpx(int npx)
Set the number of point used to bracket root using a grid.
double XMinimum() const override
Return current estimate of the position of the minimum.
double FValMinimum() const override
Return function value at current estimate of the minimum.
Template class to wrap any C++ callable object which takes one argument i.e.
Double_t At(Int_t i) const
const Double_t * GetArray() const
Fill Area Attributes class.
void Copy(TAttFill &attfill) const
Copy this fill attributes to a new TAttFill.
virtual void SaveFillAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1001)
Save fill attributes as C++ statement(s) on output stream out.
void Copy(TAttLine &attline) const
Copy this line attributes to a new TAttLine.
virtual void SaveLineAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t widdef=1)
Save line attributes as C++ statement(s) on output stream out.
virtual void SaveMarkerAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t sizdef=1)
Save line attributes as C++ statement(s) on output stream out.
void Copy(TAttMarker &attmarker) const
Copy this marker attributes to a new TAttMarker.
Class to manage histogram axis.
virtual void SetBinLabel(Int_t bin, const char *label)
Set label for bin.
Bool_t IsVariableBinSize() const
const char * GetTitle() const override
Returns title of object.
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
const TArrayD * GetXbins() const
const char * GetBinLabel(Int_t bin) const
Return label for bin.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
virtual Int_t FindFixBin(Double_t x) const
Find bin number corresponding to abscissa x.
THashList * GetLabels() const
Binomial fitter for the division of two histograms.
TFitResultPtr Fit(TF1 *f1, Option_t *option="")
Carry out the fit of the given function to the given histograms.
Collection abstract base class.
virtual Bool_t IsEmpty() const
TDirectory::TContext keeps track and restore the current directory.
Describe directory structure in memory.
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
virtual TObject * Remove(TObject *)
Remove an object from the in-memory list.
Class to handle efficiency histograms.
void Draw(Option_t *opt="") override
Draws the current TEfficiency object.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute action corresponding to one event.
static Bool_t FeldmanCousinsInterval(Double_t total, Double_t passed, Double_t level, Double_t &lower, Double_t &upper)
Calculates the interval boundaries using the frequentist methods of Feldman-Cousins.
static Double_t BetaMode(Double_t alpha, Double_t beta)
Compute the mode of the beta distribution.
Bool_t SetPassedEvents(Int_t bin, Int_t events)
Sets the number of passed events in the given global bin.
TH2 * CreateHistogram(Option_t *opt="") const
Create the histogram used to be painted (for dim=2 TEfficiency) The return object is managed by the c...
static Bool_t BetaShortestInterval(Double_t level, Double_t alpha, Double_t beta, Double_t &lower, Double_t &upper)
Calculates the boundaries for a shortest confidence interval for a Beta distribution.
static Bool_t CheckWeights(const TH1 &pass, const TH1 &total)
Check if both histogram are weighted.
static Double_t BetaMean(Double_t alpha, Double_t beta)
Compute the mean (average) of the beta distribution.
TEfficiency()
Default constructor.
Double_t GetBetaAlpha(Int_t bin=-1) const
void FillWeighted(Bool_t bPassed, Double_t weight, Double_t x, Double_t y=0, Double_t z=0)
This function is used for filling the two histograms with a weight.
~TEfficiency() override
default destructor
TList * GetListOfFunctions()
static Double_t Bayesian(Double_t total, Double_t passed, Double_t level, Double_t alpha, Double_t beta, Bool_t bUpper, Bool_t bShortest=false)
Calculates the boundaries for a Bayesian confidence interval (shortest or central interval depending ...
static Double_t AgrestiCoull(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
Calculates the boundaries for the frequentist Agresti-Coull interval.
Long64_t Merge(TCollection *list)
Merges the TEfficiency objects in the given list to the given TEfficiency object using the operator+=...
std::vector< std::pair< Double_t, Double_t > > fBeta_bin_params
Parameter for prior beta distribution different bin by bin (default vector is empty)
static Double_t FeldmanCousins(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
Calculates the boundaries for the frequentist Feldman-Cousins interval.
EStatOption fStatisticOption
Defines how the confidence intervals are determined.
void SetStatisticOption(EStatOption option)
Sets the statistic option which affects the calculation of the confidence interval.
void Paint(Option_t *opt) override
Paints this TEfficiency object.
void SetWeight(Double_t weight)
Sets the global weight for this TEfficiency object.
TH1 * fTotalHistogram
Histogram for total number of events.
Int_t GetDimension() const
returns the dimension of the current TEfficiency object
TEfficiency & operator+=(const TEfficiency &rhs)
Adds the histograms of another TEfficiency object to current histograms.
Bool_t SetBins(Int_t nx, Double_t xmin, Double_t xmax)
Set the bins for the underlined passed and total histograms If the class have been already filled the...
void Build(const char *name, const char *title)
Building standard data structure of a TEfficiency object.
TH1 * GetCopyPassedHisto() const
Returns a cloned version of fPassedHistogram.
Double_t GetEfficiencyErrorUp(Int_t bin) const
Returns the upper error on the efficiency in the given global bin.
Double_t fBeta_alpha
Global parameter for prior beta distribution (default = 1)
Bool_t UsesBayesianStat() const
void SavePrimitive(std::ostream &out, Option_t *opt="") override
Have histograms fixed bins along each axis?
void SetBetaBeta(Double_t beta)
Sets the shape parameter β.
Double_t GetConfidenceLevel() const
static Bool_t CheckBinning(const TH1 &pass, const TH1 &total)
Checks binning for each axis.
void SetName(const char *name) override
Sets the name.
static Double_t BetaCentralInterval(Double_t level, Double_t alpha, Double_t beta, Bool_t bUpper)
Calculates the boundaries for a central confidence interval for a Beta distribution.
Int_t GetGlobalBin(Int_t binx, Int_t biny=0, Int_t binz=0) const
Returns the global bin number which can be used as argument for the following functions:
TH1 * fPassedHistogram
Histogram for events which passed certain criteria.
static Double_t MidPInterval(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
Calculates the boundaries using the mid-P binomial interval (Lancaster method) from B.
void SetBetaAlpha(Double_t alpha)
Sets the shape parameter α.
@ kIsBayesian
Bayesian statistics are used.
@ kUseWeights
Use weights.
@ kPosteriorMode
Use posterior mean for best estimate (Bayesian statistics)
@ kUseBinPrior
Use a different prior for each bin.
@ kShortestInterval
Use shortest interval.
static Bool_t CheckEntries(const TH1 &pass, const TH1 &total, Option_t *opt="")
Checks whether bin contents are compatible with binomial statistics.
static Double_t Normal(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
Returns the confidence limits for the efficiency supposing that the efficiency follows a normal distr...
Double_t fWeight
Weight for all events (default = 1)
Bool_t SetPassedHistogram(const TH1 &rPassed, Option_t *opt)
Sets the histogram containing the passed events.
Bool_t SetTotalEvents(Int_t bin, Int_t events)
Sets the number of total events in the given global bin.
Double_t GetBetaBeta(Int_t bin=-1) const
Double_t(* fBoundary)(Double_t, Double_t, Double_t, Bool_t)
! Pointer to a method calculating the boundaries of confidence intervals
void FillGraph(TGraphAsymmErrors *graph, Option_t *opt) const
Fill the graph to be painted with information from TEfficiency Internal method called by TEfficiency:...
static Double_t Combine(Double_t &up, Double_t &low, Int_t n, const Int_t *pass, const Int_t *total, Double_t alpha, Double_t beta, Double_t level=0.683, const Double_t *w=nullptr, Option_t *opt="")
void FillHistogram(TH2 *h2) const
Fill the 2d histogram to be painted with information from TEfficiency 2D Internal method called by TE...
Int_t FindFixBin(Double_t x, Double_t y=0, Double_t z=0) const
Returns the global bin number containing the given values.
TDirectory * fDirectory
! Pointer to directory holding this TEfficiency object
void SetUseWeightedEvents(Bool_t on=kTRUE)
static Double_t Wilson(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
Calculates the boundaries for the frequentist Wilson interval.
TEfficiency & operator=(const TEfficiency &rhs)
Assignment operator.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute distance from point px,py to a graph.
Double_t fConfLevel
Confidence level (default = 0.683, 1 sigma)
Double_t fBeta_beta
Global parameter for prior beta distribution (default = 1)
Double_t GetEfficiency(Int_t bin) const
Returns the efficiency in the given global bin.
Bool_t SetTotalHistogram(const TH1 &rTotal, Option_t *opt)
Sets the histogram containing all events.
void Fill(Bool_t bPassed, Double_t x, Double_t y=0, Double_t z=0)
This function is used for filling the two histograms.
void SetDirectory(TDirectory *dir)
Sets the directory holding this TEfficiency object.
TGraphAsymmErrors * fPaintGraph
! Temporary graph for painting
TGraphAsymmErrors * CreateGraph(Option_t *opt="") const
Create the graph used be painted (for dim=1 TEfficiency) The return object is managed by the caller.
EStatOption GetStatisticOption() const
TList * fFunctions
->Pointer to list of functions
void SetBetaBinParameters(Int_t bin, Double_t alpha, Double_t beta)
Sets different shape parameter α and β for the prior distribution for each bin.
static Bool_t CheckConsistency(const TH1 &pass, const TH1 &total, Option_t *opt="")
Checks the consistence of the given histograms.
Double_t GetWeight() const
TH1 * GetCopyTotalHisto() const
Returns a cloned version of fTotalHistogram.
static Double_t ClopperPearson(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
Calculates the boundaries for the frequentist Clopper-Pearson interval.
void SetConfidenceLevel(Double_t level)
Sets the confidence level (0 < level < 1) The default value is 1-sigma :~ 0.683.
Double_t GetEfficiencyErrorLow(Int_t bin) const
Returns the lower error on the efficiency in the given global bin.
EStatOption
Enumeration type for different statistic options for calculating confidence intervals kF* ....
@ kBJeffrey
Jeffrey interval (Prior ~ Beta(0.5,0.5)
@ kFWilson
Wilson interval.
@ kFAC
Agresti-Coull interval.
@ kMidP
Mid-P Lancaster interval.
@ kBUniform
Prior ~ Uniform = Beta(1,1)
@ kFFC
Feldman-Cousins interval.
@ kBBayesian
User specified Prior ~ Beta(fBeta_alpha,fBeta_beta)
@ kFNormal
Normal approximation.
@ kFCP
Clopper-Pearson interval (recommended by PDG)
void SetTitle(const char *title) override
Sets the title.
TFitResultPtr Fit(TF1 *f1, Option_t *opt="")
Fits the efficiency using the TBinomialEfficiencyFitter class.
TH2 * fPaintHisto
! Temporary histogram for painting
Provides an indirection to the TFitResult class and with a semantics identical to a TFitResult pointe...
TGraph with asymmetric error bars.
void Paint(Option_t *chopt="") override
Draw this graph with its current attributes.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute action corresponding to one event.
virtual void PaintStats(TF1 *fit)
Draw the stats.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute distance from point px,py to a graph.
1-D histogram with a double per channel (see TH1 documentation)}
1-D histogram with a float per channel (see TH1 documentation)}
TH1 is the base class of all histogram classes in ROOT.
virtual void SetDirectory(TDirectory *dir)
By default, when a histogram is created, it is added to the list of histogram objects in the current ...
virtual void SetNormFactor(Double_t factor=1)
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute distance from point px,py to a line.
virtual void GetStats(Double_t *stats) const
fill the array stats from the contents of this histogram The array stats must be correctly dimensione...
void SetTitle(const char *title) override
Change (i.e.
virtual Int_t GetNbinsY() const
virtual Int_t GetNbinsZ() const
virtual Int_t GetDimension() const
@ kNstat
Size of statistics data (up to TProfile3D)
@ kIsAverage
Bin contents are average (used by Add)
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
virtual Int_t GetNcells() const
virtual Int_t GetBin(Int_t binx, Int_t biny=0, Int_t binz=0) const
Return Global bin number corresponding to binx,y,z.
virtual Int_t GetNbinsX() const
virtual Bool_t Add(TF1 *h1, Double_t c1=1, Option_t *option="")
Performs the operation: this = this + c1*f1 if errors are defined (see TH1::Sumw2),...
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual Double_t GetBinLowEdge(Int_t bin) const
Return bin lower edge for 1D histogram.
virtual Double_t GetEntries() const
Return the current number of entries.
void SetName(const char *name) override
Change the name of this histogram.
void Paint(Option_t *option="") override
Control routine to paint any kind of histograms.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute action corresponding to one event.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
virtual TArrayD * GetSumw2()
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width for 1D histogram.
virtual Int_t GetSumw2N() const
TObject * Clone(const char *newname="") const override
Make a complete copy of the underlying object.
virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax)
Redefine x axis parameters.
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
virtual void SetStats(Bool_t stats=kTRUE)
Set statistics option on/off.
2-D histogram with a double per channel (see TH1 documentation)}
2-D histogram with a float per channel (see TH1 documentation)}
Service class for 2-D histogram classes.
void SetBinContent(Int_t bin, Double_t content) override
Set bin content.
3-D histogram with a double per channel (see TH1 documentation)}
The 3-D histogram classes derived from the 1-D histogram classes.
void Add(TObject *obj) override
TObject * Remove(TObject *obj) override
Remove object from the list.
TObject * First() const override
Return the first object in the list. Returns 0 when list is empty.
void Delete(Option_t *option="") override
Remove all objects from the list AND delete all heap based objects.
The TNamed class is the base class for all named ROOT classes.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
virtual void SetName(const char *name)
Set the name of the TNamed.
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
@ kInvalidObject
if object ctor succeeded but object should not be used
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void ToLower()
Change string to lower-case.
TString & Insert(Ssiz_t pos, const char *s)
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
TString & Append(const char *cs)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
double beta_pdf(double x, double a, double b)
Probability density function of the beta distribution.
double beta_cdf(double x, double a, double b)
Cumulative distribution function of the beta distribution Upper tail of the integral of the beta_pdf.
double beta_cdf_c(double x, double a, double b)
Complement of the cumulative distribution function of the beta distribution.
double normal_quantile(double z, double sigma)
Inverse ( ) of the cumulative distribution function of the lower tail of the normal (Gaussian) distri...
double normal_quantile_c(double z, double sigma)
Inverse ( ) of the cumulative distribution function of the upper tail of the normal (Gaussian) distri...
double beta_quantile_c(double x, double a, double b)
Inverse ( ) of the cumulative distribution function of the lower tail of the beta distribution (beta_...
double beta_quantile(double x, double a, double b)
Inverse ( ) of the cumulative distribution function of the upper tail of the beta distribution (beta_...
R__ALWAYS_INLINE bool HasBeenDeleted(const TObject *obj)
Check if the TObject's memory has been deleted.
Bool_t AreEqualRel(Double_t af, Double_t bf, Double_t relPrec)
Comparing floating points.
Beta_interval_length(Double_t level, Double_t alpha, Double_t beta)
Double_t operator()(double lower) const