1#ifndef ROOT_TEfficiency_cxx
2#define ROOT_TEfficiency_cxx
653fPassedHistogram(nullptr),
654fTotalHistogram(nullptr),
709 Info(
"TEfficiency",
"given histograms are filled with weights");
714 Error(
"TEfficiency(const TH1&,const TH1&)",
"histograms are not consistent -> results are useless");
715 Warning(
"TEfficiency(const TH1&,const TH1&)",
"using two empty TH1D('h1','h1',10,0,10)");
937 fTotalHistogram =
new TH3D(
"total",
"total",nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup);
938 fPassedHistogram =
new TH3D(
"passed",
"passed",nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup);
1012 fBeta_alpha(rEff.fBeta_alpha),
1013 fBeta_beta(rEff.fBeta_beta),
1014 fBeta_bin_params(rEff.fBeta_bin_params),
1015 fConfLevel(rEff.fConfLevel),
1016 fDirectory(nullptr),
1017 fFunctions(nullptr),
1018 fPaintGraph(nullptr),
1019 fPaintHisto(nullptr),
1020 fWeight(rEff.fWeight)
1023 rEff.TObject::Copy(*
this);
1044 rEff.TAttLine::Copy(*
this);
1045 rEff.TAttFill::Copy(*
this);
1046 rEff.TAttMarker::Copy(*
this);
1111 return ((
mode + delta) > 1) ? 1.0 : (
mode + delta);
1113 return ((
mode - delta) < 0) ? 0.0 : (
mode - delta);
1130 ::Error(
"FeldmanCousins",
"Error running FC method - return 0 or 1");
1132 return (bUpper) ? upper : lower;
1161 double alpha = 1.-level;
1185 const double alpha = 1. - level;
1186 const bool equal_tailed =
true;
1187 const double alpha_min = equal_tailed ? alpha/2 : alpha;
1188 const double tol = 1
e-9;
1198 if ( passed > 0 && passed < 1) {
1201 p = (p1 - p0) * passed + p0;
1205 while (std::abs(pmax - pmin) > tol) {
1206 p = (pmin + pmax)/2;
1214 double vmin = (bUpper) ? alpha_min : 1.- alpha_min;
1286 return (bUpper) ? upper : lower;
1304 if((
a > 0) && (
b > 0))
1307 gROOT->Error(
"TEfficiency::BayesianCentral",
"Invalid input parameters - return 1");
1312 if((
a > 0) && (
b > 0))
1315 gROOT->Error(
"TEfficiency::BayesianCentral",
"Invalid input parameters - return 0");
1359 if (
a <= 0 ||
b <= 0) {
1360 lower = 0; upper = 1;
1361 gROOT->Error(
"TEfficiency::BayesianShortest",
"Invalid input parameters - return [0,1]");
1380 if (
a==
b &&
a<=1.0) {
1394 bool ret = minim.
Minimize(100, 1.E-10,1.E-10);
1396 gROOT->Error(
"TEfficiency::BayesianShortes",
"Error finding the shortest interval");
1413 if (
a <= 0 ||
b <= 0 ) {
1414 gROOT->Error(
"TEfficiency::BayesianMean",
"Invalid input parameters - return 0");
1436 if (
a <= 0 ||
b <= 0 ) {
1437 gROOT->Error(
"TEfficiency::BayesianMode",
"Invalid input parameters - return 0");
1440 if (
a <= 1 ||
b <= 1) {
1441 if (
a <
b)
return 0;
1442 if (
a >
b)
return 1;
1443 if (
a ==
b)
return 0.5;
1483 const TAxis* ax1 =
nullptr;
1484 const TAxis* ax2 =
nullptr;
1491 ax2 =
total.GetXaxis();
1495 ax2 =
total.GetYaxis();
1499 ax2 =
total.GetZaxis();
1504 gROOT->Info(
"TEfficiency::CheckBinning",
"Histograms are not consistent: they have different number of bins");
1510 gROOT->Info(
"TEfficiency::CheckBinning",
"Histograms are not consistent: they have different bin edges");
1532 gROOT->Error(
"TEfficiency::CheckConsistency",
"passed TEfficiency objects have different dimensions");
1537 gROOT->Error(
"TEfficiency::CheckConsistency",
"passed TEfficiency objects have different binning");
1542 gROOT->Error(
"TEfficiency::CheckConsistency",
"passed TEfficiency objects do not have consistent bin contents");
1565 Int_t nbinsx, nbinsy, nbinsz, nbins;
1572 case 1: nbins = nbinsx + 2;
break;
1573 case 2: nbins = (nbinsx + 2) * (nbinsy + 2);
break;
1574 case 3: nbins = (nbinsx + 2) * (nbinsy + 2) * (nbinsz + 2);
break;
1578 for(
Int_t i = 0; i < nbins; ++i) {
1580 gROOT->Info(
"TEfficiency::CheckEntries",
"Histograms are not consistent: passed bin content > total bin content");
1593 if (pass.
GetSumw2N() == 0 &&
total.GetSumw2N() == 0)
return false;
1600 total.GetStats(stattotal);
1623 Error(
"CreatePaintingGraph",
"Call this function only for dimension == 1");
1629 graph->SetName(
"eff_graph");
1642 Error(
"CreatePaintingGraph",
"Call this function only for dimension == 2");
1648 graph->SetName(
"eff_graph");
1663 Bool_t plot0Bins =
false;
1664 if (
option.Contains(
"e0") ) plot0Bins =
true;
1672 double * px =
graph->GetX();
1673 double * py =
graph->GetY();
1674 double * pz =
graph->GetZ();
1675 double * exl =
graph->GetEXlow();
1676 double * exh =
graph->GetEXhigh();
1677 double * eyl =
graph->GetEYlow();
1678 double * eyh =
graph->GetEYhigh();
1679 double * ezl =
graph->GetEZlow();
1680 double * ezh =
graph->GetEZhigh();
1697 if (ipoint >=
graph->GetN() ) {
1698 graph->SetPoint(ipoint,
x,
y,z);
1699 graph->SetPointError(ipoint,xlow,xup,ylow,yup,zlow,zup);
1721 if (oldTitle != newTitle ) {
1722 graph->SetTitle(newTitle);
1729 if (xlabel)
graph->GetXaxis()->SetTitle(xlabel);
1730 if (ylabel)
graph->GetYaxis()->SetTitle(ylabel);
1731 if (zlabel)
graph->GetZaxis()->SetTitle(zlabel);
1755 graph->GetHistogram();
1766 Bool_t plot0Bins =
false;
1767 if (
option.Contains(
"e0") ) plot0Bins =
true;
1776 double * px =
graph->GetX();
1777 double * py =
graph->GetY();
1778 double * exl =
graph->GetEXlow();
1779 double * exh =
graph->GetEXhigh();
1780 double * eyl =
graph->GetEYlow();
1781 double * eyh =
graph->GetEYhigh();
1783 for (
Int_t i = 0; i < npoints; ++i) {
1792 if (j >=
graph->GetN() ) {
1794 graph->SetPointError(j,xlow,xup,ylow,yup);
1812 if (oldTitle != newTitle ) {
1813 graph->SetTitle(newTitle);
1819 if (xlabel)
graph->GetXaxis()->SetTitle(xlabel);
1820 if (ylabel)
graph->GetYaxis()->SetTitle(ylabel);
1837 graph->GetHistogram();
1848 Error(
"CreatePaintingistogram",
"Call this function only for dimension == 2");
1856 TH2 * hist =
nullptr;
1899 for(
Int_t i = 0; i < nbinsx + 2; ++i) {
1900 for(
Int_t j = 0; j < nbinsy + 2; ++j) {
1971 Double_t alpha = (1.0 - level) / 2;
2082 for (
int i = 0; i <
n ; ++i) {
2083 if(pass[i] >
total[i]) {
2084 ::Error(
"TEfficiency::Combine",
"total events = %i < passed events %i",
total[i],pass[i]);
2085 ::Info(
"TEfficiency::Combine",
"stop combining");
2090 ktot +=
w[i] * pass[i];
2095 double norm = sumw/sumw2;
2099 ::Error(
"TEfficiency::Combine",
"total = %f < passed %f",ntot,ktot);
2100 ::Info(
"TEfficiency::Combine",
"stop combining");
2104 double a = ktot + alpha;
2105 double b = ntot - ktot + beta;
2107 double mean =
a/(
a+
b);
2113 if (shortestInterval)
2171 std::vector<TH1*> vTotal; vTotal.reserve(
n);
2172 std::vector<TH1*> vPassed; vPassed.reserve(
n);
2173 std::vector<Double_t> vWeights; vWeights.reserve(
n);
2189 level = atof( opt(pos,opt.
Length() ).
Data() );
2190 if((level <= 0) || (level >= 1))
2198 for(
Int_t k = 0; k <
n; ++k) {
2200 vWeights.push_back(
w[k]);
2202 gROOT->Error(
"TEfficiency::Combine",
"invalid custom weight found w = %.2lf",
w[k]);
2203 gROOT->Info(
"TEfficiency::Combine",
"stop combining");
2212 while((obj = next())) {
2238 vWeights.push_back(pEff->
fWeight);
2253 if(vTotal.empty()) {
2254 gROOT->Error(
"TEfficiency::Combine",
"no TEfficiency objects in given list");
2255 gROOT->Info(
"TEfficiency::Combine",
"stop combining");
2260 if(bWeights && (
n != (
Int_t)vTotal.size())) {
2261 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());
2262 gROOT->Info(
"TEfficiency::Combine",
"stop combining");
2266 Int_t nbins_max = vTotal.at(0)->GetNbinsX();
2268 for(
UInt_t i=0; i<vTotal.size(); ++i) {
2270 gROOT->Warning(
"TEfficiency::Combine",
"histograms have not the same binning -> results may be useless");
2271 if(vTotal.at(i)->GetNbinsX() < nbins_max) nbins_max = vTotal.at(i)->GetNbinsX();
2276 gROOT->Info(
"TEfficiency::Combine",
"combining %i TEfficiency objects",(
Int_t)vTotal.size());
2278 gROOT->Info(
"TEfficiency::Combine",
"using custom weights");
2280 gROOT->Info(
"TEfficiency::Combine",
"using the following prior probability for the efficiency: P(e) ~ Beta(e,%.3lf,%.3lf)",alpha,beta);
2283 gROOT->Info(
"TEfficiency::Combine",
"using individual priors of each TEfficiency object");
2284 gROOT->Info(
"TEfficiency::Combine",
"confidence level = %.2lf",level);
2288 std::vector<Double_t>
x(nbins_max);
2289 std::vector<Double_t> xlow(nbins_max);
2290 std::vector<Double_t> xhigh(nbins_max);
2291 std::vector<Double_t> eff(nbins_max);
2292 std::vector<Double_t> efflow(nbins_max);
2293 std::vector<Double_t> effhigh(nbins_max);
2297 Int_t num = vTotal.size();
2298 std::vector<Int_t> pass(num);
2299 std::vector<Int_t>
total(num);
2304 for(
Int_t i=1; i <= nbins_max; ++i) {
2306 x[i-1] = vTotal.at(0)->GetBinCenter(i);
2307 xlow[i-1] =
x[i-1] - vTotal.at(0)->GetBinLowEdge(i);
2308 xhigh[i-1] = vTotal.at(0)->GetBinWidth(i) - xlow[i-1];
2310 for(
Int_t j = 0; j < num; ++j) {
2311 pass[j] = (
Int_t)(vPassed.at(j)->GetBinContent(i) + 0.5);
2312 total[j] = (
Int_t)(vTotal.at(j)->GetBinContent(i) + 0.5);
2316 eff[i-1] =
Combine(up,low,num,&pass[0],&
total[0],alpha,beta,level,&vWeights[0],opt.
Data());
2318 if(eff[i-1] == -1) {
2319 gROOT->Error(
"TEfficiency::Combine",
"error occurred during combining");
2320 gROOT->Info(
"TEfficiency::Combine",
"stop combining");
2323 efflow[i-1]= eff[i-1] - low;
2324 effhigh[i-1]= up - eff[i-1];
2514 Bool_t bDeleteOld =
true;
2515 if(
option.Contains(
"+")) {
2516 option.ReplaceAll(
"+",
"");
2525 if (!
option.Contains(
"N")) {
2532 while((obj = next())) {
2652 if (tw2 <= 0 )
return pw/tw;
2655 double norm = tw/tw2;
2656 aa = pw * norm + alpha;
2657 bb = (tw - pw) * norm + beta;
2661 aa = passed + alpha;
2662 bb =
total - passed + beta;
2705 if (tw2 <= 0)
return 0;
2710 Double_t bb = (tw - pw) * norm + beta;
2726 Warning(
"GetEfficiencyErrorLow",
"frequentist confidence intervals for weights are only supported by the normal approximation");
2727 Info(
"GetEfficiencyErrorLow",
"setting statistic option to kFNormal");
2731 Double_t variance = ( pw2 * (1. - 2 * eff) + tw2 * eff *eff ) / ( tw * tw) ;
2738 return (eff - delta < 0) ? eff : delta;
2785 if (tw2 <= 0)
return 0;
2790 Double_t bb = (tw - pw) * norm + beta;
2806 Warning(
"GetEfficiencyErrorUp",
"frequentist confidence intervals for weights are only supported by the normal approximation");
2807 Info(
"GetEfficiencyErrorUp",
"setting statistic option to kFNormal");
2811 Double_t variance = ( pw2 * (1. - 2 * eff) + tw2 * eff *eff ) / ( tw * tw) ;
2817 return (eff + delta > 1) ? 1.-eff : delta;
2874 while((obj = next())) {
2908 if (
total == 0)
return (bUpper) ? 1 : 0;
2914 return ((average + delta) > 1) ? 1.0 : (average + delta);
2916 return ((average - delta) < 0) ? 0.0 : (average - delta);
2941 Fatal(
"operator+=",
"Adding to a non consistent TEfficiency object which has not a total or a passed histogram ");
2946 Warning(
"operator+=",
"no operation: adding an empty object");
2950 Fatal(
"operator+=",
"Adding a non consistent TEfficiency object which has not a total or a passed histogram ");
3008 rhs.TAttLine::Copy(*
this);
3009 rhs.TAttFill::Copy(*
this);
3010 rhs.TAttMarker::Copy(*
this);
3063 while ((obj = next())) {
3066 ((
TF1 *)obj)->Paint(
"sameC");
3074 bool drawGraph2D =
false;
3075 if (
option.Contains(
"GRAPH")) {
3076 option.ReplaceAll(
"GRAPH",
"");
3102 Warning(
"Paint",
"Painting 3D efficiency is not implemented");
3116 static Int_t naxis = 0;
3117 TString sxaxis=
"xAxis",syaxis=
"yAxis",szaxis=
"zAxis";
3140 out <<
indent <<
"Double_t " << sxaxis <<
"["
3143 if (i != 0) out <<
", ";
3146 out <<
"}; " << std::endl;
3149 out <<
indent <<
"Double_t " << syaxis <<
"["
3152 if (i != 0) out <<
", ";
3155 out <<
"}; " << std::endl;
3159 out <<
indent <<
"Double_t " << szaxis <<
"["
3162 if (i != 0) out <<
", ";
3165 out <<
"}; " << std::endl;
3170 static Int_t eff_count = 0;
3173 eff_name += eff_count;
3175 const char*
name = eff_name.
Data();
3178 const char quote =
'"';
3179 out <<
indent << std::endl;
3181 <<
"(" << quote <<
GetName() << quote <<
"," << quote
3209 out <<
");" << std::endl;
3210 out <<
indent << std::endl;
3224 out <<
indent <<
name <<
"->SetUseWeightedEvents();" << std::endl;
3241 for(
Int_t i = 0; i < nbins; ++i) {
3242 out <<
indent <<
name <<
"->SetTotalEvents(" << i <<
"," <<
3244 out <<
indent <<
name <<
"->SetPassedEvents(" << i <<
"," <<
3251 while((obj = next())) {
3254 out <<
indent <<
name <<
"->GetListOfFunctions()->Add("
3255 << obj->
GetName() <<
");" << std::endl;
3267 if (!
option.Contains(
"nodraw"))
3268 out<<
indent <<
name<<
"->Draw(" << quote << opt << quote <<
");"
3287 Warning(
"SetBetaAlpha(Double_t)",
"invalid shape parameter %.2lf",alpha);
3305 Warning(
"SetBetaBeta(Double_t)",
"invalid shape parameter %.2lf",beta);
3345 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3349 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3365 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3369 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3385 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3389 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3405 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3409 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3426 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3430 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3447 Error(
"SetBins",
"Using wrong SetBins function for a %d-d histogram",
GetDimension());
3451 Warning(
"SetBins",
"Histogram entries will be lost after SetBins");
3466 if((level > 0) && (level < 1))
3469 Warning(
"SetConfidenceLevel(Double_t)",
"invalid confidence level %.2lf",level);
3521 if(events <= fTotalHistogram->GetBinContent(bin)) {
3526 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);
3687 title_passed.
Insert(pos,
" (passed)");
3688 title_total.
Insert(pos,
" (total)");
3691 title_passed.
Append(
" (passed)");
3692 title_total.
Append(
" (total)");
3720 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);
3781 gROOT->Info(
"TEfficiency::SetUseWeightedEvents",
"Handle weighted events for computing efficiency");
3801 Warning(
"SetWeight",
"invalid weight %.2lf",weight);
3829 if (
total == 0)
return (bUpper) ? 1 : 0;
3835 * (1 - average) + kappa * kappa / 4);
3837 return ((
mode + delta) > 1) ? 1.0 : (
mode + delta);
3839 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.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
void Copy(TAttMarker &attmarker) const
Copy this marker attributes to a new TAttMarker.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
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.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
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.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
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 FillGraph2D(TGraph2DAsymmErrors *graph, Option_t *opt) const
Fill the graph to be painted with information from TEfficiency Internal method called by TEfficiency:...
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
TGraph2DAsymmErrors * fPaintGraph2D
! Temporary graph for painting
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.
TGraph2DAsymmErrors * CreateGraph2D(Option_t *opt="") const
Create the graph used be painted (for dim=1 TEfficiency) The return object is managed by the caller.
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
void Copy(TObject &f1) const override
Copy this F1 to a new F1.
TClass * IsA() const override
Provides an indirection to the TFitResult class and with a semantics identical to a TFitResult pointe...
Graph 2D class with errors.
void Paint(Option_t *option="") override
Paints this 2D graph with its current attributes.
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/set the title.
virtual Int_t GetNbinsY() const
virtual Int_t GetNbinsZ() const
virtual Int_t GetDimension() const
@ 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.
@ kNstat
Size of statistics data (up to TProfile3D)
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)
void ToUpper()
Change string to upper case.
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