66 : fNYErrors(0), fSumErrorsMode(
TGraphMultiErrors::kOnlyFirst), fExL(nullptr), fExH(nullptr)
75 SetNameTitle(
name, title);
97 SetNameTitle(
name, title);
109 :
TGraph(np,
x,
y), fNYErrors(1), fSumErrorsMode(
m)
114 for (
Int_t i = 0; i < fNpoints; i++) {
147 SetNameTitle(
name, title);
159 :
TGraph(np,
x,
y), fNYErrors(1), fSumErrorsMode(
m)
167 memcpy(fExL, exL,
n);
171 memcpy(fExH, exH,
n);
176 fEyL[0].Set(fNpoints, eyL);
181 fEyH[0].Set(fNpoints, eyH);
199 SetNameTitle(
name, title);
212 const Float_t *exH, std::vector<std::vector<Float_t>> eyL,
213 std::vector<std::vector<Float_t>> eyH,
Int_t m)
214 :
TGraph(np,
x,
y), fNYErrors(ne), fSumErrorsMode(
m)
219 for (
Int_t i = 0; i < fNpoints; i++) {
229 for (
Int_t j = 0; j < fNYErrors; j++) {
231 fEyL[j][i] = eyL[j][i];
235 fEyH[j][i] = eyH[j][i];
254 std::vector<std::vector<Float_t>> eyL, std::vector<std::vector<Float_t>> eyH,
258 SetNameTitle(
name, title);
270 const Double_t *exH, std::vector<std::vector<Double_t>> eyL,
271 std::vector<std::vector<Double_t>> eyH,
Int_t m)
272 :
TGraph(np,
x,
y), fNYErrors(ne), fSumErrorsMode(
m)
280 memcpy(fExL, exL,
n);
284 memcpy(fExH, exH,
n);
288 for (
Int_t i = 0; i < fNpoints; i++) {
289 for (
Int_t j = 0; j < fNYErrors; j++) {
291 fEyL[j][i] = eyL[j][i];
295 fEyH[j][i] = eyH[j][i];
314 std::vector<std::vector<Double_t>> eyL, std::vector<std::vector<Double_t>> eyH,
318 SetNameTitle(
name, title);
329 const Float_t *exH, std::vector<TArrayF> eyL, std::vector<TArrayF> eyH,
Int_t m)
330 :
TGraph(np,
x,
y), fNYErrors(ne), fSumErrorsMode(
m)
335 for (
Int_t i = 0; i < fNpoints; i++) {
345 for (
Int_t j = 0; j < fNYErrors; j++) {
346 if (
Int_t(eyL.size()) > j && eyL[j].GetSize() > i)
347 fEyL[j][i] = eyL[j][i];
350 if (
Int_t(eyH.size()) > j && eyH[j].GetSize() > i)
351 fEyH[j][i] = eyH[j][i];
369 std::vector<TArrayF> eyH,
Int_t m)
372 SetNameTitle(
name, title);
383 const Double_t *exH, std::vector<TArrayD> eyL, std::vector<TArrayD> eyH,
Int_t m)
384 :
TGraph(np,
x,
y), fNYErrors(ne), fSumErrorsMode(
m)
392 memcpy(fExL, exL,
n);
396 memcpy(fExH, exH,
n);
400 for (
Int_t i = 0; i < fNpoints; i++) {
401 for (
Int_t j = 0; j < fNYErrors; j++) {
402 if (
Int_t(eyL.size()) > j && eyL[j].GetSize() > i)
403 fEyL[j][i] = eyL[j][i];
406 if (
Int_t(eyH.size()) > j && eyH[j].GetSize() > i)
407 fEyH[j][i] = eyH[j][i];
426 std::vector<TArrayD> eyL, std::vector<TArrayD> eyH,
Int_t m)
429 SetNameTitle(
name, title);
443 : fNYErrors(1), fSumErrorsMode(
m)
460 for (
Int_t i = 0; i < fNpoints; i++) {
461 fX[i] = tvX(itvXL + i);
462 fY[i] = tvY(itvYL + i);
463 fExL[i] = tvExL(itvExLL + i);
464 fExH[i] = tvExH(itvExHL + i);
465 fEyL[0][i] = tvEyL(itvEyLL + i);
466 fEyH[0][i] = tvEyH(itvEyHL + i);
483 : fNYErrors(1), fSumErrorsMode(
m)
500 for (
Int_t i = 0; i < fNpoints; i++) {
501 fX[i] = tvX(i + itvXL);
502 fY[i] = tvY(i + itvYL);
503 fExL[i] = tvExL(i + itvExLL);
504 fExH[i] = tvExH(i + itvExHL);
505 fEyL[0][i] = tvEyL(i + itvEyLL);
506 fEyH[0][i] = tvEyH(i + itvEyHL);
522 : fNYErrors(ne), fSumErrorsMode(
m)
537 for (
Int_t i = 0; i < fNpoints; i++) {
538 fX[i] = tvX(i + itvXL);
539 fY[i] = tvY(i + itvYL);
540 fExL[i] = tvExL(i + itvExLL);
541 fExH[i] = tvExH(i + itvExHL);
543 for (
Int_t j = 0; j < ne; j++) {
544 fEyL[j][i] = tvEyL[j](i + tvEyL[j].
GetLwb());
545 fEyH[j][i] = tvEyH[j](i + tvEyH[j].
GetLwb());
562 : fNYErrors(ne), fSumErrorsMode(
m)
577 for (
Int_t i = 0; i < fNpoints; i++) {
578 fX[i] = tvX(i + itvXL);
579 fY[i] = tvY(i + itvYL);
580 fExL[i] = tvExL(i + itvExLL);
581 fExH[i] = tvExH(i + itvExHL);
583 for (
Int_t j = 0; j < ne; j++) {
584 fEyL[j][i] = tvEyL[j](i + tvEyL[j].
GetLwb());
585 fEyH[j][i] = tvEyH[j](i + tvEyH[j].
GetLwb());
604 memcpy(fExL, tgme.
fExL,
n);
605 memcpy(fExH, tgme.
fExH,
n);
607 for (
Int_t j = 0; j < fNYErrors; j++) {
608 fEyL[j] = tgme.
fEyL[j];
609 fEyH[j] = tgme.
fEyH[j];
667 for (
Int_t i = 0; i < fNpoints; i++) {
668 fExL[i] =
h->GetBinWidth(i + 1) *
gStyle->GetErrorX();
669 fExH[i] =
h->GetBinWidth(i + 1) *
gStyle->GetErrorX();
670 fEyL[0][i] =
h->GetBinError(i + 1);
671 fEyH[0][i] =
h->GetBinError(i + 1);
673 for (
Int_t j = 1; j < fNYErrors; j++) {
693 if (!pass || !
total) {
694 Error(
"TGraphMultiErrors",
"Invalid histogram pointers");
701 std::string sname =
"divide_" + std::string(pass->
GetName()) +
"_by_" + std::string(
total->GetName());
706 pass->TAttLine::Copy(*
this);
707 pass->TAttFill::Copy(*
this);
708 pass->TAttMarker::Copy(*
this);
710 Divide(pass,
total, option);
806 memmove(&arrays[2][obegin], &
fExL[ibegin],
n);
807 memmove(&arrays[3][obegin], &
fExH[ibegin],
n);
808 memmove(&arrays[4][obegin], &
fEyLSum[ibegin],
n);
809 memmove(&arrays[5][obegin], &
fEyHSum[ibegin],
n);
811 memmove(&
fExL[obegin], &
fExL[ibegin],
n);
812 memmove(&
fExH[obegin], &
fExH[ibegin],
n);
831 memset(
fExL + begin, 0,
n);
832 memset(
fExH + begin, 0,
n);
837 memset(
fEyL[j].GetArray() + begin, 0,
n);
838 memset(
fEyH[j].GetArray() + begin, 0,
n);
869 for (
Int_t i = 0; i < tgme->
GetN(); i++) {
881 Warning(
"DoMerge",
"Merging a %s is not compatible with a TGraphMultiErrors - Errors will be ignored",
911 std::vector<Double_t> fExLSorted(numSortedPoints);
912 std::vector<Double_t> fExHSorted(numSortedPoints);
914 std::generate(fExLSorted.begin(), fExLSorted.end(),
915 [begin = low, &sorting_indices,
this]()
mutable { return fExL[sorting_indices[begin++]]; });
916 std::generate(fExHSorted.begin(), fExHSorted.end(),
917 [begin = low, &sorting_indices,
this]()
mutable { return fExH[sorting_indices[begin++]]; });
919 std::copy(fExLSorted.begin(), fExLSorted.end(),
fExL + low);
920 std::copy(fExHSorted.begin(), fExHSorted.end(),
fExH + low);
923 std::vector<Double_t> fEyLSorted(numSortedPoints);
924 std::vector<Double_t> fEyHSorted(numSortedPoints);
926 std::generate(fEyLSorted.begin(), fEyLSorted.end(),
927 [begin = low, &sorting_indices, &j,
this]()
mutable { return fEyL[j].GetArray()[sorting_indices[begin++]]; });
928 std::generate(fEyHSorted.begin(), fEyHSorted.end(),
929 [begin = low, &sorting_indices, &j,
this]()
mutable { return fEyL[j].GetArray()[sorting_indices[begin++]]; });
931 std::copy(fEyLSorted.begin(), fEyLSorted.end(),
fEyL[j].GetArray() + low);
932 std::copy(fEyHSorted.begin(), fEyHSorted.end(),
fEyL[j].GetArray() + low);
949 fEyL.emplace_back(np, eyL);
950 fEyH.emplace_back(np, eyH);
998 if (
f->Eval(
x,
y - eyL) <
f->Eval(
x,
y + eyH)) {
1034 if (!pass || !
total) {
1035 Error(
"Divide",
"one of the passed pointers is zero");
1041 Error(
"Divide",
"passed histograms are not one-dimensional");
1047 Bool_t bEffective =
false;
1053 for (
int i = 0; i < pass->
GetNbinsX(); ++i) {
1066 if (
total->GetSumw2()->fN > 0) {
1067 for (
int i = 0; i <
total->GetNbinsX(); ++i) {
1068 tsumw +=
total->GetBinContent(i);
1069 tsumw2 +=
total->GetSumw2()->At(i);
1072 tsumw =
total->GetSumOfWeights();
1085 TString option = opt;
1096 Bool_t bIsBayesian =
false;
1105 Info(
"Divide",
"weight will be considered in the Histogram Ratio");
1112 sscanf(strstr(option.
Data(),
"cl="),
"cl=%lf", &level);
1113 if ((level > 0) && (level < 1))
1116 Warning(
"Divide",
"given confidence level %.3lf is invalid", level);
1158 sscanf(strstr(option.
Data(),
"b("),
"b(%lf,%lf)", &
a, &
b);
1162 Warning(
"Divide",
"given shape parameter for alpha %.2lf is invalid",
a);
1166 Warning(
"Divide",
"given shape parameter for beta %.2lf is invalid",
b);
1172 Bool_t usePosteriorMode =
false;
1173 if (bIsBayesian && option.
Contains(
"mode")) {
1174 usePosteriorMode =
true;
1178 Bool_t plot0Bins =
false;
1184 Bool_t useShortestInterval =
false;
1185 if (bIsBayesian && (option.
Contains(
"sh") || (usePosteriorMode && !option.
Contains(
"cen")))) {
1186 useShortestInterval =
true;
1190 Bool_t bPoissonRatio =
false;
1192 bPoissonRatio =
true;
1199 Warning(
"Divide",
"Histograms have weights: only Normal or Bayesian error calculation is supported");
1200 Info(
"Divide",
"Using now the Normal approximation for weighted histograms");
1203 if (bPoissonRatio) {
1205 Error(
"Divide",
"passed histograms are not of the same dimension");
1210 Error(
"Divide",
"passed histograms are not consistent");
1216 Error(
"Divide",
"passed histograms are not consistent");
1234 Double_t tw = 0, tw2 = 0, pw = 0, pw2 = 0, wratio = 1;
1236 for (
Int_t b = 1;
b <= nbins; ++
b) {
1238 Double_t eff = 0., low = 0., upper = 0.;
1242 tw =
total->GetBinContent(
b);
1243 tw2 = (
total->GetSumw2()->fN > 0) ?
total->GetSumw2()->At(
b) : tw;
1247 if (bPoissonRatio) {
1253 if (pw == 0 && pw2 == 0)
1256 p = (pw * pw) / pw2;
1258 if (tw == 0 && tw2 == 0)
1261 t = (tw * tw) / tw2;
1263 if (pw > 0 && tw > 0)
1265 wratio = (pw * t) / (p * tw);
1266 else if (pw == 0 && tw > 0)
1269 wratio = (psumw2 * t) / (psumw * tw);
1270 else if (tw == 0 && pw > 0)
1273 wratio = (pw * tsumw) / (p * tsumw2);
1284 }
else if (tw <= 0 && !plot0Bins)
1300 if (t == 0. && !plot0Bins)
1306 if ((bEffective && !bPoissonRatio) && tw2 <= 0) {
1314 if (bEffective && !bPoissonRatio) {
1316 double norm = tw / tw2;
1317 aa = pw * norm + alpha;
1318 bb = (tw - pw) * norm + beta;
1320 aa = double(p) + alpha;
1321 bb = double(t - p) +
beta;
1323 if (usePosteriorMode)
1328 if (useShortestInterval) {
1338 if (bEffective && !bPoissonRatio) {
1347 double variance = (pw2 * (1. - 2 * eff) + tw2 * eff * eff) / (tw * tw);
1350 double prob = 0.5 * (1. - conf);
1353 upper = eff + delta;
1364 low = pBound(t, p, conf,
false);
1365 upper = pBound(t, p, conf,
true);
1369 if (bPoissonRatio) {
1372 low = low / (1. - low);
1373 upper = upper / (1. - upper);
1387 SetPointEY(npoint, 0, eff - low, upper - eff);
1394 Warning(
"Divide",
"Number of graph points is different than histogram bins - %d points have been skipped",
1398 Info(
"Divide",
"made a graph with %d points from %d bins", npoint, nbins);
1399 Info(
"Divide",
"used confidence level: %.2lf\n", conf);
1401 Info(
"Divide",
"used prior probability ~ beta(%.2lf,%.2lf)", alpha, beta);
1433 if (
fY[i] - eyLMax <
ymin) {
1443 if (
fY[i] + eyHMax >
ymax)
1634 return fEyL[
e].GetArray();
1645 return fEyH[
e].GetArray();
1741 printf(
"x[%d]=%g, y[%d]=%g", i,
fX[i], i,
fY[i]);
1743 printf(
", exl[%d]=%g", i,
fExL[i]);
1745 printf(
", exh[%d]=%g", i,
fExH[i]);
1748 printf(
", eyl[%d][%d]=%g", j, i,
fEyL[j][i]);
1751 printf(
", eyh[%d][%d]=%g", j, i,
fEyH[j][i]);
1769 out <<
" tgme->SetPoint(" << i <<
", " <<
fX[i] <<
", " <<
fY[i] <<
");\n";
1770 out <<
" tgme->SetPointEX(" << i <<
", " <<
fExL[i] <<
", " <<
fExH[i] <<
");\n";
1773 out <<
" tgme->SetPointEY(" << i <<
", " << j <<
", " <<
fEyL[j][i] <<
", " <<
fEyH[j][i] <<
");\n";
1789 TString opt = option; opt.
ToLower();
1799 for (
size_t d=0;
d<
fEyL.size();
d++)
1802 for (
size_t d=0;
d<
fEyH.size();
d++)
1817 Error(
"SetPointError",
"Cannot be used without gPad, requires last mouse position");
1831 if (dpx * dpx + dpy * dpy < 25) {
2075 taf->TAttFill::Copy(*
this);
2086 taf->TAttLine::Copy(*
this);
2110 fAttFill[
e].SetFillColorAlpha(fcolor, falpha);
2143 fAttLine[
e].SetLineColorAlpha(lcolor, lalpha);
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
int Int_t
Signed integer 4 bytes (int).
char Char_t
Character 1 byte (char).
short Width_t
Line width (short).
bool Bool_t
Boolean (0=false, 1=true) (bool).
double Double_t
Double 8 bytes.
short Color_t
Color number (short).
short Style_t
Style number (short).
float Float_t
Float 4 bytes (float).
const char Option_t
Option string (const char).
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
static unsigned int total
TVectorT< Double_t > TVectorD
TVectorT< Float_t > TVectorF
Double_t At(Int_t i) const
void Copy(TAttFill &attfill) const
void Copy(TAttLine &attline) const
static Double_t AgrestiCoull(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
static Double_t BetaMode(Double_t alpha, Double_t beta)
static Bool_t CheckConsistency(const TH1 &pass, const TH1 &total, Option_t *opt="")
static Double_t Wilson(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
static Double_t Normal(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
static Double_t FeldmanCousins(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
static Double_t BetaCentralInterval(Double_t level, Double_t alpha, Double_t beta, Bool_t bUpper)
static Double_t ClopperPearson(Double_t total, Double_t passed, Double_t level, Bool_t bUpper)
static Double_t BetaMean(Double_t alpha, Double_t beta)
static Bool_t BetaShortestInterval(Double_t level, Double_t alpha, Double_t beta, Double_t &lower, Double_t &upper)
static Bool_t CheckBinning(const TH1 &pass, const TH1 &total)
Double_t * fEyLSum
! Array of summed Y low errors for fitting
virtual void SetFillStyle(Int_t e, Style_t fstyle)
virtual Color_t GetFillColor() const
Return the fill area color.
Double_t * GetEYhigh() const override
virtual TAttFill * GetAttFill(Int_t e)
Double_t GetErrorX(Int_t i) const override
virtual Style_t GetFillStyle() const
Return the fill area style.
Double_t GetErrorXhigh(Int_t i) const override
virtual Color_t GetLineColor() const
Return the line color.
Double_t GetErrorYlow(Int_t i) const override
void Divide(const TH1 *pass, const TH1 *total, Option_t *opt="cp")
std::vector< TAttLine > fAttLine
The AttLine attributes of the different errors.
virtual void DeleteYError(Int_t e)
Double_t GetErrorXlow(Int_t i) const override
virtual TAttLine * GetAttLine(Int_t e)
virtual void SetEYlow(Int_t e, Int_t np, const Double_t *eyL)
void Print(Option_t *chopt="") const override
This method must be overridden when a class wants to print itself.
virtual void SetPointEXhigh(Int_t i, Double_t exH)
TGraphMultiErrors & operator=(const TGraphMultiErrors &tgme)
virtual void SetEYhigh(Int_t e, Int_t np, const Double_t *eyH)
void CopyAndRelease(Double_t **newarrays, Int_t ibegin, Int_t iend, Int_t obegin) override
virtual void SetPointEYlow(Int_t i, Int_t ne, const Double_t *eyL)
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
virtual void SetLineColorAlpha(Int_t e, Color_t lcolor, Float_t lalpha)
Int_t fSumErrorsMode
How y errors are summed: kOnlyFirst = Only First; kSquareSum = Squared Sum; kSum = Absolute Addition.
virtual void SetPointEX(Int_t i, Double_t exL, Double_t exH)
virtual Width_t GetLineWidth() const
Return the line width.
virtual void SetAttFill(Int_t e, TAttFill *taf)
virtual void SetPointEYhigh(Int_t i, Int_t ne, const Double_t *eyH)
Double_t * GetEXhigh() const override
@ kAbsSum
Calculate the absolute sum of all errors.
@ kSquareSum
Calculate the square sum of all errors.
@ kOnlyFirst
Only take errors from first dimension.
virtual void SetPointEXlow(Int_t i, Double_t exL)
Bool_t CopyPoints(Double_t **arrays, Int_t ibegin, Int_t iend, Int_t obegin) override
Double_t * fExL
[fNpoints] array of X low errors
void FillZero(Int_t begin, Int_t end, Bool_t from_ctor=kTRUE) override
virtual void AddYError(Int_t np, const Double_t *eyL=nullptr, const Double_t *eyH=nullptr)
virtual void SetAttLine(Int_t e, TAttLine *tal)
std::vector< TArrayD > fEyH
Two dimensional array of Y high errors.
virtual Style_t GetLineStyle() const
Return the line style.
void Scale(Double_t c1=1., Option_t *option="y") override
Double_t * GetEXlow() const override
virtual void SetPointError(Double_t exL, Double_t exH, Double_t eyL1, Double_t eyH1, Double_t eyL2=0., Double_t eyH2=0., Double_t eyL3=0., Double_t eyH3=0.)
void CalcYErrorsSum() const
virtual void BayesDivide(const TH1 *pass, const TH1 *total, Option_t *opt="")
virtual void SetLineStyle(Int_t e, Style_t lstyle)
~TGraphMultiErrors() override
Double_t * fEyHSum
! Array of summed Y high errors for fitting
virtual void SetFillColor(Int_t e, Color_t fcolor)
Double_t * GetEYlow() const override
void Apply(TF1 *f) override
Int_t GetNYErrors() const
void SwapPoints(Int_t pos1, Int_t pos2) override
virtual void SetSumErrorsMode(Int_t m)
std::vector< TAttFill > fAttFill
The AttFill attributes of the different errors.
void UpdateArrays(const std::vector< Int_t > &sorting_indices, Int_t numSortedPoints, Int_t low) override
virtual void SetPointEY(Int_t i, Int_t ne, const Double_t *eyL, const Double_t *eyH)
virtual void SetEY(Int_t e, Int_t np, const Double_t *eyL, const Double_t *eyH)
Double_t * fExH
[fNpoints] array of X high errors
virtual void SetFillColorAlpha(Int_t e, Color_t fcolor, Float_t falpha)
void ComputeRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) const override
Int_t fNYErrors
The amount of different y-errors.
std::vector< TArrayD > fEyL
Two dimensional array of Y low errors.
Double_t GetErrorY(Int_t i) const override
virtual void SetLineWidth(Int_t e, Width_t lwidth)
Double_t ** Allocate(Int_t size) override
Bool_t DoMerge(const TGraph *tg) override
virtual void SetLineColor(Int_t e, Color_t lcolor)
Double_t GetErrorYhigh(Int_t i) const override
Int_t fNpoints
Number of points <= fMaxSize.
Int_t fMaxSize
!Current dimension of arrays fX and fY
virtual void FillZero(Int_t begin, Int_t end, Bool_t from_ctor=kTRUE)
TH1F * fHistogram
Pointer to histogram used for drawing axis.
virtual Bool_t DoMerge(const TGraph *g)
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
virtual void Scale(Double_t c1=1., Option_t *option="y")
TClass * IsA() const override
Double_t * fY
[fNpoints] array of Y points
virtual void Set(Int_t n)
Double_t ** AllocateArrays(Int_t Narrays, Int_t arraySize)
virtual void SwapPoints(Int_t pos1, Int_t pos2)
virtual Int_t GetPoint(Int_t i, Double_t &x, Double_t &y) const
virtual Bool_t CopyPoints(Double_t **newarrays, Int_t ibegin, Int_t iend, Int_t obegin)
void SaveHistogramAndFunctions(std::ostream &out, const char *varname, Option_t *option)
Double_t * fX
[fNpoints] array of X points
static void SwapValues(Double_t *arr, Int_t pos1, Int_t pos2)
virtual void ComputeRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) const
virtual void UpdateArrays(const std::vector< Int_t > &sorting_indices, Int_t numSortedPoints, Int_t low)
TGraph & operator=(const TGraph &)
TH1 is the base class of all histogram classes in ROOT.
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
virtual Int_t GetDimension() const
virtual Double_t GetSumOfWeights() const
Return the sum of weights across all bins excluding under/overflows.
virtual Int_t GetNbinsX() const
virtual Double_t GetBinLowEdge(Int_t bin) const
Return bin lower edge for 1D histogram.
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.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
static void SavePrimitiveConstructor(std::ostream &out, TClass *cl, const char *variable_name, const char *constructor_agrs="", Bool_t empty_line=kTRUE)
Save object constructor in the output stream "out".
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void ToLower()
Change string to lower-case.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
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(double x, double y)
Calculates the beta function.
VecExpr< UnaryOp< Sqrt< T >, VecExpr< A, T, D >, T >, T, D > sqrt(const VecExpr< A, T, D > &rhs)
double ratio(double numerator, double denominator)
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Int_t Finite(Double_t x)
Check if it is finite with a mask in order to be consistent in presence of fast math.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
static uint64_t sum(uint64_t i)