537 class DifferentDimension:
public std::exception {};
538 class DifferentNumberOfBins:
public std::exception {};
539 class DifferentAxisLimits:
public std::exception {};
540 class DifferentBinLimits:
public std::exception {};
541 class DifferentLabels:
public std::exception {};
551 fFunctions =
new TList;
557 fTsumw = fTsumw2=fTsumwx=fTsumwx2=0;
562 fBinStatErrOpt = kNormal;
564 fYaxis.SetName(
"yaxis");
565 fZaxis.SetName(
"zaxis");
566 fXaxis.SetParent(
this);
567 fYaxis.SetParent(
this);
568 fZaxis.SetParent(
this);
638 if (nbins <= 0) {
Warning(
"TH1",
"nbins is <=0 - set to nbins = 1"); nbins = 1; }
660 if (nbins <= 0) {
Warning(
"TH1",
"nbins is <=0 - set to nbins = 1"); nbins = 1; }
682 if (nbins <= 0) {
Warning(
"TH1",
"nbins is <=0 - set to nbins = 1"); nbins = 1; }
773 Error(
"Add",
"Attempt to add a non-existing function");
793 for (
Int_t i = 0; i < 10; ++i) s1[i] = 0;
799 Int_t bin, binx, biny, binz;
804 for (binz = 0; binz < ncellsz; ++binz) {
806 for (biny = 0; biny < ncellsy; ++biny) {
808 for (binx = 0; binx < ncellsx; ++binx) {
812 bin = binx + ncellsx * (biny + ncellsy * binz);
858 Error(
"Add",
"Attempt to add a non-existing histogram");
869 }
catch(DifferentNumberOfBins&) {
871 Info(
"Add",
"Attempt to add histograms with different number of bins - trying to use TH1::Merge");
873 Error(
"Add",
"Attempt to add histograms with different number of bins : nbins h1 = %d , nbins h2 = %d",
GetNbinsX(), h1->
GetNbinsX());
876 }
catch(DifferentAxisLimits&) {
878 Info(
"Add",
"Attempt to add histograms with different axis limits - trying to use TH1::Merge");
880 Warning(
"Add",
"Attempt to add histograms with different axis limits");
881 }
catch(DifferentBinLimits&) {
883 Info(
"Add",
"Attempt to add histograms with different bin limits - trying to use TH1::Merge");
885 Warning(
"Add",
"Attempt to add histograms with different bin limits");
886 }
catch(DifferentLabels&) {
889 Info(
"Add",
"Attempt to add histograms with different labels - trying to use TH1::Merge");
891 Info(
"Warning",
"Attempt to add histograms with different labels");
896 l.
Add(const_cast<TH1*>(h1));
897 auto iret =
Merge(&l);
909 Bool_t resetStats = (c1 < 0);
939 if (e1sq) w1 = 1. / e1sq;
944 double sf = (s2[0] != 0) ? s2[1]/s2[0] : 1;
948 if (e2sq) w2 = 1. / e2sq;
953 double sf = (s1[0] != 0) ? s1[1]/s1[0] : 1;
958 double y = (w1*y1 + w2*y2)/(w1 + w2);
961 double err2 = 1./(w1 + w2);
962 if (err2 < 1.
E-200) err2 = 0;
978 if (i == 1) s1[i] += c1*c1*s2[i];
979 else s1[i] += c1*s2[i];
1020 Error(
"Add",
"Attempt to add a non-existing histogram");
1028 if (h1 == h2 && c2 < 0) {c2 = 0; normWidth =
kTRUE;}
1037 }
catch(DifferentNumberOfBins&) {
1039 Info(
"Add",
"Attempt to add histograms with different number of bins - trying to use TH1::Merge");
1041 Error(
"Add",
"Attempt to add histograms with different number of bins : nbins h1 = %d , nbins h2 = %d",
GetNbinsX(), h1->
GetNbinsX());
1044 }
catch(DifferentAxisLimits&) {
1046 Info(
"Add",
"Attempt to add histograms with different axis limits - trying to use TH1::Merge");
1048 Warning(
"Add",
"Attempt to add histograms with different axis limits");
1049 }
catch(DifferentBinLimits&) {
1051 Info(
"Add",
"Attempt to add histograms with different bin limits - trying to use TH1::Merge");
1053 Warning(
"Add",
"Attempt to add histograms with different bin limits");
1054 }
catch(DifferentLabels&) {
1057 Info(
"Add",
"Attempt to add histograms with different labels - trying to use TH1::Merge");
1059 Info(
"Warning",
"Attempt to add histograms with different labels");
1065 l.
Add(const_cast<TH1*>(h1));
1066 l.
Add(const_cast<TH1*>(h2));
1068 auto iret =
Merge(&l);
1088 Bool_t resetStats = (c1*c2 < 0) || normWidth;
1095 if (i == 1) s3[i] = c1*c1*s1[i] + c2*c2*s2[i];
1097 else s3[i] = c1*s1[i] + c2*s2[i];
1113 Int_t bin, binx, biny, binz;
1114 for (binz = 0; binz < nbinsz; ++binz) {
1116 for (biny = 0; biny < nbinsy; ++biny) {
1118 for (binx = 0; binx < nbinsx; ++binx) {
1120 bin =
GetBin(binx, biny, binz);
1141 if (e1sq) w1 = 1./ e1sq;
1145 double sf = (s1[0] != 0) ? s1[1]/s1[0] : 1;
1149 if (e2sq) w2 = 1./ e2sq;
1153 double sf = (s2[0] != 0) ? s2[1]/s2[0] : 1;
1158 double y = (w1*y1 + w2*y2)/(w1 + w2);
1161 double err2 = 1./(w1 + w2);
1162 if (err2 < 1.
E-200) err2 = 0;
1244 if (nbentries == 0) {
1254 if (nbentries < 0 && action == 0)
return 0;
1257 if (nbentries < 0) {
1258 nbentries = -nbentries;
1270 for (
Int_t i=1;i<nbentries;i++) {
1272 if (x < xmin) xmin =
x;
1273 if (x > xmax) xmax =
x;
1291 DoFillN(nbentries,&buffer[2],&buffer[1],2);
1325 if (nbentries < 0) {
1328 nbentries = -nbentries;
1360 if ( h2Array->
fN != fN ) {
1361 throw DifferentBinLimits();
1365 for (
int i = 0; i < fN; ++i ) {
1367 throw DifferentBinLimits();
1388 throw DifferentLabels();
1393 throw DifferentLabels();
1396 for (
int i = 1; i <= a1->
GetNbins(); ++i) {
1399 if (label1 != label2) {
1400 throw DifferentLabels();
1416 throw DifferentAxisLimits();
1429 ::Info(
"CheckEqualAxes",
"Axes have different number of bins : nbin1 = %d nbin2 = %d",a1->
GetNbins(),a2->
GetNbins() );
1434 }
catch (DifferentAxisLimits&) {
1435 ::Info(
"CheckEqualAxes",
"Axes have different limits");
1440 }
catch (DifferentBinLimits&) {
1441 ::Info(
"CheckEqualAxes",
"Axes have different bin limits");
1448 }
catch (DifferentLabels&) {
1449 ::Info(
"CheckEqualAxes",
"Axes have different labels");
1464 Int_t nbins1 = lastBin1-firstBin1 + 1;
1472 if (firstBin2 < lastBin2) {
1474 nbins2 = lastBin1-firstBin1 + 1;
1479 if (nbins1 != nbins2 ) {
1480 ::Info(
"CheckConsistentSubAxes",
"Axes have different number of bins");
1486 ::Info(
"CheckConsistentSubAxes",
"Axes have different limits");
1498 if (h1 == h2)
return true;
1501 throw DifferentDimension();
1513 (dim > 1 && nbinsy != h2->
GetNbinsY()) ||
1514 (dim > 2 && nbinsz != h2->
GetNbinsZ()) ) {
1515 throw DifferentNumberOfBins();
1831 Int_t ndf = 0, igood = 0;
1839 printf(
"Chi2 = %f, Prob = %g, NDF = %d, igood = %d\n", chi2,prob,ndf,igood);
1842 if (ndf == 0)
return 0;
1890 Int_t i_start, i_end;
1891 Int_t j_start, j_end;
1892 Int_t k_start, k_end;
1921 Error(
"Chi2TestX",
"Histograms have different dimensions.");
1926 if (nbinx1 != nbinx2) {
1927 Error(
"Chi2TestX",
"different number of x channels");
1929 if (nbiny1 != nbiny2) {
1930 Error(
"Chi2TestX",
"different number of y channels");
1932 if (nbinz1 != nbinz2) {
1933 Error(
"Chi2TestX",
"different number of z channels");
1937 i_start = j_start = k_start = 1;
1968 ndf = (i_end - i_start + 1) * (j_end - j_start + 1) * (k_end - k_start + 1) - 1;
1975 if (scaledHistogram && !comparisonUU) {
1976 Info(
"Chi2TestX",
"NORM option should be used together with UU option. It is ignored");
1983 Double_t effEntries1 = (s[1] ? s[0] * s[0] / s[1] : 0.0);
1987 Double_t effEntries2 = (s[1] ? s[0] * s[0] / s[1] : 0.0);
1989 if (!comparisonUU && !comparisonUW && !comparisonWW ) {
1991 if (
TMath::Abs(sumBinContent1 - effEntries1) < 1) {
1992 if (
TMath::Abs(sumBinContent2 - effEntries2) < 1) comparisonUU =
true;
1993 else comparisonUW =
true;
1995 else comparisonWW =
true;
1999 if (
TMath::Abs(sumBinContent1 - effEntries1) >= 1) {
2000 Warning(
"Chi2TestX",
"First histogram is not unweighted and option UW has been requested");
2003 if ( (!scaledHistogram && comparisonUU) ) {
2004 if ( (
TMath::Abs(sumBinContent1 - effEntries1) >= 1) || (
TMath::Abs(sumBinContent2 - effEntries2) >= 1) ) {
2005 Warning(
"Chi2TestX",
"Both histograms are not unweighted and option UU has been requested");
2011 if (comparisonUU && scaledHistogram) {
2012 for (
Int_t i = i_start; i <= i_end; ++i) {
2013 for (
Int_t j = j_start; j <= j_end; ++j) {
2014 for (
Int_t k = k_start; k <= k_end; ++k) {
2023 if (e1sq > 0.0) cnt1 =
TMath::Floor(cnt1 * cnt1 / e1sq + 0.5);
2026 if (e2sq > 0.0) cnt2 =
TMath::Floor(cnt2 * cnt2 / e2sq + 0.5);
2037 if (sumw1 <= 0.0 || sumw2 <= 0.0) {
2038 Error(
"Chi2TestX",
"Cannot use option NORM when one histogram has all zero errors");
2043 for (
Int_t i = i_start; i <= i_end; ++i) {
2044 for (
Int_t j = j_start; j <= j_end; ++j) {
2045 for (
Int_t k = k_start; k <= k_end; ++k) {
2059 if (sum1 == 0.0 || sum2 == 0.0) {
2060 Error(
"Chi2TestX",
"one histogram is empty");
2064 if ( comparisonWW && ( sumw1 <= 0.0 && sumw2 <= 0.0 ) ){
2065 Error(
"Chi2TestX",
"Hist1 and Hist2 have both all zero errors\n");
2075 for (
Int_t i = i_start; i <= i_end; ++i) {
2076 for (
Int_t j = j_start; j <= j_end; ++j) {
2077 for (
Int_t k = k_start; k <= k_end; ++k) {
2084 if (scaledHistogram) {
2089 if (e1sq > 0) cnt1 =
TMath::Floor(cnt1 * cnt1 / e1sq + 0.5);
2092 if (e2sq > 0) cnt2 =
TMath::Floor(cnt2 * cnt2 / e2sq + 0.5);
2096 if (
Int_t(cnt1) == 0 &&
Int_t(cnt2) == 0) --ndf;
2103 if (res) res[i - i_start] = (cnt1 - nexp1) /
TMath::Sqrt(nexp1);
2109 Double_t correc = (1. - sum1 /
sum) * (1. - cntsum / sum);
2113 chi2 += delta * delta / cntsum;
2118 chi2 /= sum1 * sum2;
2123 Info(
"Chi2TestX",
"There is a bin in h1 with less than 1 event.\n");
2127 Info(
"Chi2TestX",
"There is a bin in h2 with less than 1 event.\n");
2138 if ( comparisonUW ) {
2139 for (
Int_t i = i_start; i <= i_end; ++i) {
2140 for (
Int_t j = j_start; j <= j_end; ++j) {
2141 for (
Int_t k = k_start; k <= k_end; ++k) {
2150 if (cnt1 * cnt1 == 0 && cnt2 * cnt2 == 0) {
2156 if (cnt2 * cnt2 == 0 && e2sq == 0) {
2160 e2sq = sumw2 / sum2;
2165 Error(
"Chi2TestX",
"Hist2 has in bin (%d,%d,%d) zero content and zero errors\n", i, j, k);
2171 if (e2sq > 0 && cnt2 * cnt2 / e2sq < 10)
n++;
2173 Double_t var1 = sum2 * cnt2 - sum1 * e2sq;
2174 Double_t var2 = var1 * var1 + 4. * sum2 * sum2 * cnt1 * e2sq;
2179 while (var1 * var1 + cnt1 == 0 || var1 + var2 == 0) {
2182 var1 = sum2 * cnt2 - sum1 * e2sq;
2183 var2 = var1 * var1 + 4. * sum2 * sum2 * cnt1 * e2sq;
2187 while (var1 + var2 == 0) {
2190 var1 = sum2 * cnt2 - sum1 * e2sq;
2191 var2 = var1 * var1 + 4. * sum2 * sum2 * cnt1 * e2sq;
2192 while (var1 * var1 + cnt1 == 0 || var1 + var2 == 0) {
2195 var1 = sum2 * cnt2 - sum1 * e2sq;
2196 var2 = var1 * var1 + 4. * sum2 * sum2 * cnt1 * e2sq;
2201 Double_t probb = (var1 + var2) / (2. * sum2 * sum2);
2209 chi2 += delta1 * delta1 / nexp1;
2212 chi2 += delta2 * delta2 / e2sq;
2217 Double_t temp1 = sum2 * e2sq / var2;
2218 Double_t temp2 = 1.0 + (sum1 * e2sq - sum2 * cnt2) / var2;
2219 temp2 = temp1 * temp1 * sum1 * probb * (1.0 - probb) + temp2 * temp2 * e2sq / 4.0;
2232 Info(
"Chi2TestX",
"There is a bin in h1 with less than 1 event.\n");
2236 Info(
"Chi2TestX",
"There is a bin in h2 with less than 10 effective events.\n");
2246 for (
Int_t i = i_start; i <= i_end; ++i) {
2247 for (
Int_t j = j_start; j <= j_end; ++j) {
2248 for (
Int_t k = k_start; k <= k_end; ++k) {
2258 if (cnt1 * cnt1 == 0 && cnt2 * cnt2 == 0) {
2263 if (e1sq == 0 && e2sq == 0) {
2265 Error(
"Chi2TestX",
"h1 and h2 both have bin %d,%d,%d with all zero errors\n", i,j,k);
2271 chi2 += delta * delta /
sigma;
2274 Double_t temp = cnt1 * sum1 * e2sq + cnt2 * sum2 * e1sq;
2287 res[i - i_start] =
z;
2290 if (e1sq > 0 && cnt1 * cnt1 / e1sq < 10) m++;
2291 if (e2sq > 0 && cnt2 * cnt2 / e2sq < 10)
n++;
2297 Info(
"Chi2TestX",
"There is a bin in h1 with less than 10 effective events.\n");
2301 Info(
"Chi2TestX",
"There is a bin in h2 with less than 10 effective events.\n");
2318 Error(
"Chisquare",
"Function pointer is Null - return -1");
2369 for (
Int_t binz=1; binz <= nbinsz; ++binz) {
2370 for (
Int_t biny=1; biny <= nbinsy; ++biny) {
2371 for (
Int_t binx=1; binx <= nbinsx; ++binx) {
2374 if (onlyPositive && y < 0) {
2375 Error(
"ComputeIntegral",
"Bin content is negative - return a NaN value");
2386 Error(
"ComputeIntegral",
"Integral = zero");
return 0;
2429 hintegrated->
Reset();
2432 for (
Int_t binz = 1; binz <= nbinsz; ++binz) {
2433 for (
Int_t biny = 1; biny <= nbinsy; ++biny) {
2434 for (
Int_t binx = 1; binx <= nbinsx; ++binx) {
2435 const Int_t bin = hintegrated->
GetBin(binx, biny, binz);
2443 for (
Int_t binz = nbinsz; binz >= 1; --binz) {
2444 for (
Int_t biny = nbinsy; biny >= 1; --biny) {
2445 for (
Int_t binx = nbinsx; binx >= 1; --binx) {
2446 const Int_t bin = hintegrated->
GetBin(binx, biny, binz);
2472 ((
TH1&)obj).fDirectory->Remove(&obj);
2473 ((
TH1&)obj).fDirectory = 0;
2487 delete [] ((
TH1&)obj).fBuffer;
2488 ((
TH1&)obj).fBuffer = 0;
2494 ((
TH1&)obj).fBuffer = buf;
2499 if (a) a->
Set(fNcells);
2520 ((
TH1&)obj).fXaxis.SetParent(&obj);
2521 ((
TH1&)obj).fYaxis.SetParent(&obj);
2522 ((
TH1&)obj).fZaxis.SetParent(&obj);
2534 ((
TH1&)obj).fDirectory = 0;
2552 if(newname && strlen(newname) ) {
2607 Error(
"Add",
"Attempt to divide by a non-existing function");
2625 Int_t bin, binx, biny, binz;
2630 for (binz = 0; binz < nz; ++binz) {
2631 xx[2] = fZaxis.GetBinCenter(binz);
2632 for (biny = 0; biny <
ny; ++biny) {
2633 xx[1] = fYaxis.GetBinCenter(biny);
2634 for (binx = 0; binx <
nx; ++binx) {
2635 xx[0] = fXaxis.GetBinCenter(binx);
2638 bin = binx + nx * (biny + ny * binz);
2646 else fSumw2.fArray[bin] = 0;
2675 Error(
"Divide",
"Input histogram passed does not exist (NULL).");
2684 }
catch(DifferentNumberOfBins&) {
2685 Error(
"Divide",
"Cannot divide histograms with different number of bins");
2687 }
catch(DifferentAxisLimits&) {
2688 Warning(
"Divide",
"Dividing histograms with different axis limits");
2689 }
catch(DifferentBinLimits&) {
2690 Warning(
"Divide",
"Dividing histograms with different bin limits");
2691 }
catch(DifferentLabels&) {
2692 Warning(
"Divide",
"Dividing histograms with different labels");
2706 if (c1 == 0) { fSumw2.fArray[i] = 0;
continue; }
2747 Error(
"Divide",
"At least one of the input histograms passed does not exist (NULL).");
2757 }
catch(DifferentNumberOfBins&) {
2758 Error(
"Divide",
"Cannot divide histograms with different number of bins");
2760 }
catch(DifferentAxisLimits&) {
2761 Warning(
"Divide",
"Dividing histograms with different axis limits");
2762 }
catch(DifferentBinLimits&) {
2763 Warning(
"Divide",
"Dividing histograms with different bin limits");
2764 }
catch(DifferentLabels&) {
2765 Warning(
"Divide",
"Dividing histograms with different labels");
2770 Error(
"Divide",
"Coefficient of dividing histogram cannot be zero");
2788 if (b2 == 0) { fSumw2.fArray[i] = 0;
continue; }
2800 fSumw2.fArray[i] =
TMath::Abs( ( (1. - 2.* b1 / b2) * e1sq + b1sq * e2sq / b2sq ) / b2sq );
2804 fSumw2.fArray[i] = 0;
2807 fSumw2.fArray[i] = c1sq * c2sq * (e1sq * b2sq + e2sq * b1sq) / (c2sq * c2sq * b2sq * b2sq);
2860 if (index>indb && index<indk) index = -1;
2866 if (!
gPad->IsEditable())
gROOT->MakeDefCanvas();
2868 if (
gPad->GetX1() == 0 &&
gPad->GetX2() == 1 &&
2869 gPad->GetY1() == 0 &&
gPad->GetY2() == 1 &&
2870 gPad->GetListOfPrimitives()->GetSize()==0) opt2.
Remove(index,4);
2877 gPad->IncrementPaletteColor(1, opt1);
2879 if (index>=0) opt2.
Remove(index,4);
2928 Error(
"DrawNormalized",
"Sum of weights is null. Cannot normalize histogram: %s",
GetName());
2937 if (fSumw2.fN == 0) {
2940 if (opt.
IsNull() || opt ==
"SAME") opt +=
"HIST";
2975 Int_t range, stat, add;
2990 Int_t nbinsx = fXaxis.GetNbins();
2991 Int_t nbinsy = fYaxis.GetNbins();
2992 Int_t nbinsz = fZaxis.GetNbins();
2995 for (
Int_t binz = 1; binz <= nbinsz; ++binz) {
2996 x[2] = fZaxis.GetBinCenter(binz);
2997 for (
Int_t biny = 1; biny <= nbinsy; ++biny) {
2998 x[1] = fYaxis.GetBinCenter(biny);
2999 for (
Int_t binx = 1; binx <= nbinsx; ++binx) {
3001 x[0] = fXaxis.GetBinCenter(binx);
3002 if (range && !f1->
IsInside(x))
continue;
3006 if (fSumw2.fN) fSumw2.fArray[bin] +=
TMath::Abs(fu);
3099 for (
Int_t binx = 1; binx<=ndim[0]; binx++) {
3100 for (
Int_t biny=1; biny<=ndim[1]; biny++) {
3101 for (
Int_t binz=1; binz<=ndim[2]; binz++) {
3130 bin =fXaxis.FindBin(x);
3131 if (bin <0)
return -1;
3133 if (fSumw2.fN) ++fSumw2.fArray[bin];
3134 if (bin == 0 || bin > fXaxis.GetNbins()) {
3163 bin =fXaxis.FindBin(x);
3164 if (bin <0)
return -1;
3166 if (fSumw2.fN) fSumw2.fArray[bin] += w*w;
3168 if (bin == 0 || bin > fXaxis.GetNbins()) {
3196 bin =fXaxis.FindBin(namex);
3197 if (bin <0)
return -1;
3199 if (fSumw2.fN) fSumw2.fArray[bin] += w*w;
3201 if (bin == 0 || bin > fXaxis.GetNbins())
return -1;
3207 Double_t x = fXaxis.GetBinCenter(bin);
3233 for (i=0;i<ntimes;i+=stride) {
3240 DoFillN((ntimes-i)/stride,&x[i],&w[i],stride);
3244 DoFillN(ntimes, x, w, stride);
3257 Int_t nbins = fXaxis.GetNbins();
3259 for (i=0;i<ntimes;i+=stride) {
3260 bin =fXaxis.FindBin(x[i]);
3261 if (bin <0)
continue;
3264 if (fSumw2.fN) fSumw2.fArray[bin] += ww*ww;
3266 if (bin == 0 || bin > nbins) {
3298 if (!f1) {
Error(
"FillRandom",
"Unknown function: %s",fname);
return; }
3305 if (fXaxis.GetXmax() <= fXaxis.GetXmin()) {
3308 Info(
"FillRandom",
"Using function axis and range [%g,%g]",xmin, xmax);
3314 Int_t nbinsx = last-first+1;
3318 for (binx=1;binx<=nbinsx;binx++) {
3320 integral[binx] = integral[binx-1] + fint;
3324 if (integral[nbinsx] == 0 ) {
3326 Error(
"FillRandom",
"Integral = zero");
return;
3328 for (bin=1;bin<=nbinsx;bin++) integral[bin] /= integral[nbinsx];
3331 for (loop=0;loop<ntimes;loop++) {
3337 +xAxis->
GetBinWidth(ibin+first)*(r1-integral[ibin])/(integral[ibin+1] - integral[ibin]);
3361 if (!h) {
Error(
"FillRandom",
"Null histogram");
return; }
3363 Error(
"FillRandom",
"Histograms with different dimensions");
return;
3368 Int_t first = fXaxis.GetFirst();
3369 Int_t last = fXaxis.GetLast();
3370 Int_t nbins = last-first+1;
3371 if (ntimes > 10*nbins) {
3375 if (sumw == 0)
return;
3377 for (
Int_t bin=first;bin<=last;bin++) {
3382 if (fSumw2.fN) fSumw2.fArray[bin] += cont;
3389 if (sumgen < ntimes) {
3391 for (i =
Int_t(sumgen+0.5); i < ntimes; ++i)
3397 else if (sumgen > ntimes) {
3399 i =
Int_t(sumgen+0.5);
3400 while( i > ntimes) {
3402 Int_t ibin = fXaxis.FindBin(x);
3415 catch(std::exception&) {}
3422 for (loop=0;loop<ntimes;loop++) {
3442 return fXaxis.FindBin(x);
3445 Int_t nx = fXaxis.GetNbins()+2;
3446 Int_t binx = fXaxis.FindBin(x);
3447 Int_t biny = fYaxis.FindBin(y);
3448 return binx + nx*biny;
3451 Int_t nx = fXaxis.GetNbins()+2;
3452 Int_t ny = fYaxis.GetNbins()+2;
3453 Int_t binx = fXaxis.FindBin(x);
3454 Int_t biny = fYaxis.FindBin(y);
3455 Int_t binz = fZaxis.FindBin(z);
3456 return binx + nx*(biny +ny*binz);
3475 return fXaxis.FindFixBin(x);
3478 Int_t nx = fXaxis.GetNbins()+2;
3479 Int_t binx = fXaxis.FindFixBin(x);
3480 Int_t biny = fYaxis.FindFixBin(y);
3481 return binx + nx*biny;
3484 Int_t nx = fXaxis.GetNbins()+2;
3485 Int_t ny = fYaxis.GetNbins()+2;
3486 Int_t binx = fXaxis.FindFixBin(x);
3487 Int_t biny = fYaxis.FindFixBin(y);
3488 Int_t binz = fZaxis.FindFixBin(z);
3489 return binx + nx*(biny +ny*binz);
3503 Warning(
"FindFirstBinAbove",
"Invalid axis number : %d, axis x assumed\n",axis);
3506 Int_t nbins = fXaxis.GetNbins();
3522 Warning(
"FindLastBinAbove",
"Invalid axis number : %d, axis x assumed\n",axis);
3525 Int_t nbins = fXaxis.GetNbins();
3526 for (
Int_t bin=nbins;bin>=1;bin--) {
3565 linear= (
char*)strstr(fname,
"++");
3572 f1=
new TF1(fname, fname, xxmin, xxmax);
3573 return Fit(f1,option,goption,xxmin,xxmax);
3576 f2=
new TF2(fname, fname);
3577 return Fit(f2,option,goption,xxmin,xxmax);
3580 f3=
new TF3(fname, fname);
3581 return Fit(f3,option,goption,xxmin,xxmax);
3586 f1 = (
TF1*)
gROOT->GetFunction(fname);
3587 if (!f1) {
Printf(
"Unknown function: %s",fname);
return -1; }
3588 return Fit(f1,option,goption,xxmin,xxmax);
3916 gROOT->MakeDefCanvas();
3919 Error(
"FitPanel",
"Unable to create a default canvas");
3926 if (handler && handler->
LoadPlugin() != -1) {
3928 Error(
"FitPanel",
"Unable to create the FitPanel");
3931 Error(
"FitPanel",
"Unable to find the FitPanel plug-in");
3976 asym->SetTitle(title);
3986 top->
Add(h1,h2,1,-c2);
3987 bottom->
Add(h1,h2,1,c2);
3988 asym->Divide(top,bottom);
3990 Int_t xmax = asym->GetNbinsX();
3992 Int_t zmax = asym->GetNbinsZ();
4002 for(
Int_t k=1; k<= zmax; k++){
4018 Double_t error = 2*
TMath::Sqrt(a*a*c2*c2*dbsq + c2*c2*b*b*dasq+a*a*b*b*dc2*dc2)/(bot*bot);
4019 asym->SetBinError(i,j,k,error);
4081 return (s[1] ? s[0]*s[0]/s[1] :
TMath::Abs(s[0]) );
4091 return ((
TH1*)
this)->GetPainter()->GetObjectInfo(px,py);
4192 Error(
"GetQuantiles",
"Only available for 1-d histograms");
4202 Int_t nq = nprobSum;
4207 for (i=1;i<nq;i++) {
4212 for (i = 0; i < nq; i++) {
4214 while (ibin < nbins-1 &&
fIntegral[ibin+1] == prob[i]) {
4215 if (
fIntegral[ibin+2] == prob[i]) ibin++;
4220 if (dint > 0) q[i] +=
GetBinWidth(ibin+1)*(prob[i]-fIntegral[ibin])/dint;
4223 if (!probSum)
delete [] prob;
4252 allcha = sumx = sumx2 = 0;
4253 for (bin=hxfirst;bin<=hxlast;bin++) {
4256 if (val > valmax) valmax = val;
4261 if (allcha == 0)
return;
4263 stddev = sumx2/allcha - mean*mean;
4266 if (stddev == 0) stddev = binwidx*(hxlast-hxfirst+1)/4;
4273 Double_t constant = 0.5*(valmax+binwidx*allcha/(sqrtpi*stddev));
4281 if ((mean < xmin || mean > xmax) && stddev > (xmax-xmin)) {
4282 mean = 0.5*(xmax+
xmin);
4283 stddev = 0.5*(xmax-
xmin);
4302 Int_t nchanx = hxlast - hxfirst + 1;
4323 Int_t nchanx = hxlast - hxfirst + 1;
4326 if (nchanx <=1 || npar == 1) {
4349 const Int_t idim = 20;
4360 if (m > idim || m > n)
return;
4363 for (l = 2; l <=
m; ++
l) {
4365 b[m + l*20 - 21] = zero;
4372 for (k = hxfirst; k <= hxlast; ++k) {
4377 for (l = 2; l <=
m; ++
l) {
4380 da[l-1] += power*yk;
4382 for (l = 2; l <=
m; ++
l) {
4384 b[m + l*20 - 21] += power;
4387 for (i = 3; i <=
m; ++i) {
4388 for (k = i; k <=
m; ++k) {
4389 b[k - 1 + (i-1)*20 - 21] = b[k + (i-2)*20 - 21];
4394 for (i=0; i<
m; ++i) a[i] = da[i];
4414 xbar = ybar = x2bar = xybar = 0;
4419 for (i = hxfirst; i <= hxlast; ++i) {
4423 if (yk <= 0) yk = 1
e-9;
4432 det = fn*x2bar - xbar*xbar;
4440 a0 = (x2bar*ybar - xbar*xybar) / det;
4441 a1 = (fn*xybar - xbar*ybar) / det;
4452 Int_t a_dim1, a_offset, b_dim1, b_offset;
4454 Int_t im1, jp1, nm1, nmi;
4460 b_offset = b_dim1 + 1;
4463 a_offset = a_dim1 + 1;
4466 if (idim < n)
return;
4469 for (j = 1; j <=
n; ++j) {
4470 if (a[j + j*a_dim1] <= 0) { ifail = -1;
return; }
4471 a[j + j*a_dim1] = one / a[j + j*a_dim1];
4472 if (j == n)
continue;
4474 for (l = jp1; l <=
n; ++
l) {
4475 a[j + l*a_dim1] = a[j + j*a_dim1] * a[l + j*a_dim1];
4476 s1 = -a[l + (j+1)*a_dim1];
4477 for (i = 1; i <= j; ++i) { s1 = a[l + i*a_dim1] * a[i + (j+1)*a_dim1] + s1; }
4478 a[l + (j+1)*a_dim1] = -s1;
4483 for (l = 1; l <= k; ++
l) {
4484 b[l*b_dim1 + 1] = a[a_dim1 + 1]*b[l*b_dim1 + 1];
4487 for (l = 1; l <= k; ++
l) {
4488 for (i = 2; i <=
n; ++i) {
4490 s21 = -b[i + l*b_dim1];
4491 for (j = 1; j <= im1; ++j) {
4492 s21 = a[i + j*a_dim1]*b[j + l*b_dim1] + s21;
4494 b[i + l*b_dim1] = -a[i + i*a_dim1]*s21;
4497 for (i = 1; i <= nm1; ++i) {
4499 s22 = -b[nmi + l*b_dim1];
4500 for (j = 1; j <= i; ++j) {
4502 s22 = a[nmi + nmjp1*a_dim1]*b[nmjp1 + l*b_dim1] + s22;
4504 b[nmi + l*b_dim1] = -s22;
4542 if (binx < 0) binx = 0;
4543 if (binx > ofx) binx = ofx;
4555 Int_t ny = fYaxis.GetNbins()+2;
4558 binx = binglobal%
nx;
4564 binx = binglobal%
nx;
4565 biny = ((binglobal-binx)/nx)%
ny;
4570 binx = binglobal%
nx;
4571 biny = ((binglobal-binx)/nx)%
ny;
4572 binz = ((binglobal-binx)/nx -biny)/
ny;
4589 Error(
"GetRandom",
"Function only valid for 1-d histograms");
4596 if (fIntegral[nbinsx+1] !=
fEntries) integral = ((
TH1*)
this)->ComputeIntegral(
true);
4597 else integral = fIntegral[nbinsx];
4599 integral = ((
TH1*)
this)->ComputeIntegral(
true);
4601 if (integral == 0)
return 0;
4608 if (r1 > fIntegral[ibin]) x +=
4609 GetBinWidth(ibin+1)*(r1-fIntegral[ibin])/(fIntegral[ibin+1] - fIntegral[ibin]);
4640 if (bin < 0) bin = 0;
4641 if (bin >= fNcells) bin = fNcells-1;
4666 Error(
"GetBinWithContent",
"function is only valid for 1-D histograms");
4672 if (firstx <= 0) firstx = 1;
4673 if (lastx < firstx) lastx = fXaxis.GetNbins();
4676 for (
Int_t i=firstx;i<=lastx;i++) {
4678 if (diff <= 0) {binx = i;
return diff;}
4679 if (diff < curmax && diff <= maxdiff) {curmax = diff, binminx=i;}
4714 return y0 + (x-x0)*((y1-y0)/(x1-x0));
4723 Error(
"Interpolate",
"This function must be called with 1 argument for a TH1");
4732 Error(
"Interpolate",
"This function must be called with 1 argument for a TH1");
4763 Error(
"IsBinOverflow",
"Invalid axis value");
4780 return (binx <= 0 || biny <= 0);
4782 return (binx <= 0 || biny <= 0 || binz <= 0);
4793 Error(
"IsBinUnderflow",
"Invalid axis value");
4810 Error(
"LabelsDeflate",
"Invalid axis option %s",ax);
4821 while ((obj = next())) {
4823 if (ibin > nbins) nbins = ibin;
4825 if (nbins < 1) nbins = 1;
4828 if (nbins==axis->
GetNbins())
return;
4830 TH1 *hold = (
TH1*)IsA()->New();
4838 if (xmax <= xmin) xmax = xmin +
nbins;
4840 axis->
Set(nbins,xmin,xmax);
4842 Int_t errors = fSumw2.fN;
4843 if (errors) fSumw2.Set(fNcells);
4853 Int_t bin,binx,biny,binz;
4854 for (bin=0; bin < hold->
fNcells; ++bin) {
4881 TH1 *hold = (
TH1*)IsA()->New();;
4889 xmax = xmin + 2*(xmax-
xmin);
4892 axis->
Set(2*nbins,xmin,xmax);
4894 Int_t errors = fSumw2.fN;
4895 if (errors) fSumw2.Set(fNcells);
4902 Int_t bin,ibin,binx,biny,binz;
4903 for (ibin =0; ibin < hold->
fNcells; ibin++) {
4906 bin =
GetBin(binx,biny,binz);
4914 if (errors) fSumw2.fArray[bin] += hold->
fSumw2.
fArray[ibin];
4943 Warning(
"LabelsOption",
"Cannot sort. No labels");
4976 if (sort < 0)
return;
4978 Error(
"LabelsOption",
"Sorting by value not implemented for 3-D histograms");
4984 std::vector<Int_t>
a(n+2);
4987 std::vector<Double_t> cont;
4988 std::vector<Double_t> errors;
4990 TIter nextold(labels);
4992 while ((obj=nextold())) {
5000 if (fSumw2.fN) errors.resize(n);
5001 for (i=1;i<=
n;i++) {
5003 if (!errors.empty()) errors[i-1] =
GetBinError(i);
5007 for (i=1;i<=
n;i++) {
5009 if (!errors.empty())
SetBinError(i,errors[a[i-1]]);
5011 for (i=1;i<=
n;i++) {
5012 obj = labold->
At(a[i-1]);
5017 std::vector<Double_t> pcont(n+2);
5018 Int_t nx = fXaxis.GetNbins();
5019 Int_t ny = fYaxis.GetNbins();
5020 cont.resize( (nx+2)*(ny+2));
5021 if (fSumw2.fN) errors.resize( (nx+2)*(ny+2));
5022 for (i=1;i<=
nx;i++) {
5023 for (j=1;j<=
ny;j++) {
5025 if (!errors.empty()) errors[i+nx*j] =
GetBinError(i,j);
5028 pcont[k-1] += cont[i+nx*j];
5034 obj = labold->
At(a[i]);
5039 for (i=1;i<=
n;i++) {
5040 for (j=1;j<=
ny;j++) {
5042 if (!errors.empty())
SetBinError(i,j,errors[a[i-1]+1+nx*j]);
5048 for (i=1;i<=
nx;i++) {
5049 for (j=1;j<=
n;j++) {
5051 if (!errors.empty())
SetBinError(i,j,errors[i+nx*(a[j-1]+1)]);
5060 const UInt_t kUsed = 1<<18;
5064 for (i=1;i<=
n;i++) {
5065 const char *label =
"zzzzzzzzzzzz";
5066 for (j=1;j<=
n;j++) {
5067 obj = labold->
At(j-1);
5069 if (obj->
TestBit(kUsed))
continue;
5071 if (strcmp(label,obj->
GetName()) < 0)
continue;
5082 for (i=1;i<=
n;i++) {
5083 obj = labels->
At(i-1);
5090 if (fSumw2.fN) errors.resize(n+2);
5091 for (i=1;i<=
n;i++) {
5093 if (!errors.empty()) errors[i] =
GetBinError(a[i]);
5095 for (i=1;i<=
n;i++) {
5100 Int_t nx = fXaxis.GetNbins()+2;
5101 Int_t ny = fYaxis.GetNbins()+2;
5103 if (fSumw2.fN) errors.resize(nx*ny);
5104 for (i=0;i<
nx;i++) {
5105 for (j=0;j<
ny;j++) {
5107 if (!errors.empty()) errors[i+nx*j] =
GetBinError(i,j);
5111 for (i=1;i<=
n;i++) {
5112 for (j=0;j<
ny;j++) {
5114 if (!errors.empty())
SetBinError(i,j,errors[a[i]+nx*j]);
5118 for (i=0;i<
nx;i++) {
5119 for (j=1;j<=
n;j++) {
5121 if (!errors.empty())
SetBinError(i,j,errors[i+nx*a[j]]);
5126 Int_t nx = fXaxis.GetNbins()+2;
5127 Int_t ny = fYaxis.GetNbins()+2;
5128 Int_t nz = fZaxis.GetNbins()+2;
5129 cont.resize(nx*ny*nz);
5130 if (fSumw2.fN) errors.resize(nx*ny*nz);
5131 for (i=0;i<
nx;i++) {
5132 for (j=0;j<
ny;j++) {
5133 for (k=0;k<nz;k++) {
5135 if (!errors.empty()) errors[i+nx*(j+ny*k)] =
GetBinError(i,j,k);
5141 for (i=1;i<=
n;i++) {
5142 for (j=0;j<
ny;j++) {
5143 for (k=0;k<nz;k++) {
5145 if (!errors.empty())
SetBinError(i,j,k,errors[a[i]+nx*(j+ny*k)]);
5152 for (i=0;i<
nx;i++) {
5153 for (j=1;j<=
n;j++) {
5154 for (k=0;k<nz;k++) {
5156 if (!errors.empty())
SetBinError(i,j,k,errors[i+nx*(a[j]+ny*k)]);
5163 for (i=0;i<
nx;i++) {
5164 for (j=0;j<
ny;j++) {
5165 for (k=1;k<=
n;k++) {
5167 if (!errors.empty())
SetBinError(i,j,k,errors[i+nx*(j+ny*a[k])]);
5203 bool isEquidistant =
true;
5205 for (
int i = 1; i < axis.
GetNbins(); ++i) {
5208 isEquidistant &= match;
5212 return isEquidistant;
5239 if (width1 == 0 || width2 == 0)
5270 delta = (xmax - destAxis.
GetXmax())/width1;
5275 delta = (xmax - anAxis.
GetXmax())/width2;
5280 delta = (xmax - destAxis.
GetXmax())/width1;
5285 printf(
"TH1::RecomputeAxisLimits - Impossible\n");
5365 Error(
"Add",
"Attempt to multiply by a non-existing function");
5387 for (
Int_t binz = 0; binz < nz; ++binz) {
5388 xx[2] = fZaxis.GetBinCenter(binz);
5389 for (
Int_t biny = 0; biny <
ny; ++biny) {
5390 xx[1] = fYaxis.GetBinCenter(biny);
5391 for (
Int_t binx = 0; binx <
nx; ++binx) {
5392 xx[0] = fXaxis.GetBinCenter(binx);
5395 Int_t bin = binx + nx * (biny + ny *binz);
5427 Error(
"Multiply",
"Attempt to multiply by a non-existing histogram");
5436 }
catch(DifferentNumberOfBins&) {
5437 Error(
"Multiply",
"Attempt to multiply histograms with different number of bins");
5439 }
catch(DifferentAxisLimits&) {
5440 Warning(
"Multiply",
"Attempt to multiply histograms with different axis limits");
5441 }
catch(DifferentBinLimits&) {
5442 Warning(
"Multiply",
"Attempt to multiply histograms with different bin limits");
5443 }
catch(DifferentLabels&) {
5444 Warning(
"Multiply",
"Attempt to multiply histograms with different labels");
5489 Error(
"Multiply",
"Attempt to multiply by a non-existing histogram");
5499 }
catch(DifferentNumberOfBins&) {
5500 Error(
"Multiply",
"Attempt to multiply histograms with different number of bins");
5502 }
catch(DifferentAxisLimits&) {
5503 Warning(
"Multiply",
"Attempt to multiply histograms with different axis limits");
5504 }
catch(DifferentBinLimits&) {
5505 Warning(
"Multiply",
"Attempt to multiply histograms with different bin limits");
5506 }
catch(DifferentLabels&) {
5507 Warning(
"Multiply",
"Attempt to multiply histograms with different labels");
5608 if ((ngroup <= 0) || (ngroup > nbins)) {
5609 Error(
"Rebin",
"Illegal value of ngroup=%d",ngroup);
5614 Error(
"Rebin",
"Operation valid on 1-D histograms only");
5617 if (!newname && xbins) {
5618 Error(
"Rebin",
"if xbins is specified, newname must be given");
5622 Int_t newbins = nbins/ngroup;
5624 Int_t nbg = nbins/ngroup;
5625 if (nbg*ngroup != nbins) {
5626 Warning(
"Rebin",
"ngroup=%d is not an exact divider of nbins=%d.",ngroup,nbins);
5644 if (fSumw2.fN != 0) {
5646 for (bin=0;bin<nbins+2;bin++) oldErrors[bin] =
GetBinError(bin);
5650 if (xbins[0] < fXaxis.GetXmin() && oldBins[0] != 0 )
5651 Warning(
"Rebin",
"underflow entries will not be used when rebinning");
5652 if (xbins[newbins] > fXaxis.GetXmax() && oldBins[nbins+1] != 0 )
5653 Warning(
"Rebin",
"overflow entries will not be used when rebinning");
5659 if ((newname && strlen(newname) > 0) || xbins) {
5669 bool resetStat =
false;
5671 if(!xbins && (newbins*ngroup != nbins)) {
5672 xmax = fXaxis.GetBinUpEdge(newbins*ngroup);
5676 Int_t nDivisions = fXaxis.GetNdivisions();
5677 Color_t axisColor = fXaxis.GetAxisColor();
5678 Color_t labelColor = fXaxis.GetLabelColor();
5679 Style_t labelFont = fXaxis.GetLabelFont();
5680 Float_t labelOffset = fXaxis.GetLabelOffset();
5681 Float_t labelSize = fXaxis.GetLabelSize();
5682 Float_t tickLength = fXaxis.GetTickLength();
5683 Float_t titleOffset = fXaxis.GetTitleOffset();
5684 Float_t titleSize = fXaxis.GetTitleSize();
5685 Color_t titleColor = fXaxis.GetTitleColor();
5686 Style_t titleFont = fXaxis.GetTitleFont();
5688 if(!xbins && (fXaxis.GetXbins()->GetSize() > 0)){
5690 for(i = 0; i <= newbins; ++i) bins[i] = fXaxis.GetBinLowEdge(1+i*ngroup);
5696 hnew->
SetBins(newbins,xmin,xmax);
5700 fXaxis.SetNdivisions(nDivisions);
5701 fXaxis.SetAxisColor(axisColor);
5702 fXaxis.SetLabelColor(labelColor);
5703 fXaxis.SetLabelFont(labelFont);
5704 fXaxis.SetLabelOffset(labelOffset);
5705 fXaxis.SetLabelSize(labelSize);
5706 fXaxis.SetTickLength(tickLength);
5707 fXaxis.SetTitleOffset(titleOffset);
5708 fXaxis.SetTitleSize(titleSize);
5709 fXaxis.SetTitleColor(titleColor);
5710 fXaxis.SetTitleFont(titleFont);
5716 while( fXaxis.GetBinCenter(startbin) < newxmin && startbin <=
nbins ) {
5719 Int_t oldbin = startbin;
5721 for (bin = 1;bin<=newbins;bin++) {
5724 Int_t imax = ngroup;
5726 for (i=0;i<ngroup;i++) {
5727 if( (oldbin+i > nbins) ||
5728 ( hnew !=
this && (fXaxis.GetBinCenter(oldbin+i) > xbinmax)) ) {
5732 binContent += oldBins[oldbin+i];
5733 if (oldErrors) binError += oldErrors[oldbin+i]*oldErrors[oldbin+i];
5743 for (i = 0; i < startbin; ++i) {
5744 binContent += oldBins[i];
5745 if (oldErrors) binError += oldErrors[i]*oldErrors[i];
5752 for (i = oldbin; i <= nbins+1; ++i) {
5753 binContent += oldBins[i];
5754 if (oldErrors) binError += oldErrors[i]*oldErrors[i];
5763 if (!resetStat) hnew->
PutStats(stat);
5765 if (oldErrors)
delete [] oldErrors;
5784 if (xmin >= xmax)
return kFALSE;
5790 while (point < xmin) {
5793 xmin = xmin - range;
5802 while (point >= xmax) {
5805 xmax = xmax + range;
5853 TH1 *hold = (
TH1*)IsA()->New();
5866 if (axis == &fXaxis) iaxis = 1;
5867 if (axis == &fYaxis) iaxis = 2;
5868 if (axis == &fZaxis) iaxis = 3;
5869 bool firstw =
kTRUE;
5870 Int_t binx,biny, binz = 0;
5871 Int_t ix = 0,iy = 0,iz = 0;
5874 for (
Int_t bin = 0; bin < ncells; ++bin) {
5877 ix = fXaxis.FindFixBin(bx);
5880 iy = fYaxis.FindFixBin(by);
5883 iz = fZaxis.FindFixBin(bz);
5888 if (content == 0)
continue;
5891 Warning(
"ExtendAxis",
"Histogram %s has underflow or overflow in the axis that is extendable"
5892 " their content will be lost",
GetName() );
5941 if (opt.
Contains(
"width"))
Add(
this,
this, c1, -1);
5945 if (fSumw2.fN)
for(
Int_t i = 0; i <
fNcells; ++i) fSumw2.fArray[i] *= (c1 * c1);
5951 if (ncontours == 0)
return;
5952 Double_t* levels = fContour.GetArray();
5953 for (
Int_t i = 0; i < ncontours; ++i) levels[i] *= c1;
5962 if (
GetDimension() > 1) canExtend &= fYaxis.CanExtend();
5963 if (
GetDimension() > 2) canExtend &= fZaxis.CanExtend();
5976 if (fXaxis.CanExtend()) oldExtendBitMask |=
kXaxis;
5977 if (extendBitMask &
kXaxis) fXaxis.SetCanExtend(
kTRUE);
5978 else fXaxis.SetCanExtend(
kFALSE);
5981 if (fYaxis.CanExtend()) oldExtendBitMask |=
kYaxis;
5982 if (extendBitMask &
kYaxis) fYaxis.SetCanExtend(
kTRUE);
5983 else fYaxis.SetCanExtend(
kFALSE);
5987 if (fZaxis.CanExtend()) oldExtendBitMask |=
kZaxis;
5988 if (extendBitMask &
kZaxis) fZaxis.SetCanExtend(
kTRUE);
5989 else fZaxis.SetCanExtend(
kFALSE);
5992 return oldExtendBitMask;
6038 str1 = str1(isc+1, lns);
6039 isc = str1.
Index(
";");
6042 str2.ReplaceAll(
"#semicolon",10,
";",1);
6043 fXaxis.SetTitle(str2.Data());
6045 str1 = str1(isc+1, lns);
6046 isc = str1.
Index(
";");
6049 str2.ReplaceAll(
"#semicolon",10,
";",1);
6050 fYaxis.SetTitle(str2.Data());
6052 str1 = str1(isc+1, lns);
6054 fZaxis.SetTitle(str1.
Data());
6057 fYaxis.SetTitle(str1.
Data());
6061 fXaxis.SetTitle(str1.
Data());
6078 ::Error(
"SmoothArray",
"Need at least 3 points for smoothing: n = %d",nn);
6085 std::vector<double> yy(nn);
6086 std::vector<double> zz(nn);
6087 std::vector<double> rr(nn);
6089 for (
Int_t pass=0;pass<ntimes;pass++) {
6091 std::copy(xx, xx+nn, zz.begin() );
6093 for (
int noent = 0; noent < 2; ++noent) {
6096 for (
int kk = 0; kk < 3; kk++) {
6097 std::copy(zz.begin(), zz.end(), yy.begin());
6098 int medianType = (kk != 1) ? 3 : 5;
6099 int ifirst = (kk != 1 ) ? 1 : 2;
6100 int ilast = (kk != 1 ) ? nn-1 : nn -2;
6104 for ( ii = ifirst; ii < ilast; ii++) {
6105 assert(ii - ifirst >= 0);
6106 for (
int jj = 0; jj < medianType; jj++) {
6107 hh[jj] = yy[ii - ifirst + jj ];
6116 hh[2] = 3*zz[1] - 2*zz[2];
6121 hh[2] = 3*zz[nn - 2] - 2*zz[nn - 3];
6126 for (ii = 0; ii < 3; ii++) {
6131 for (ii = 0; ii < 3; ii++) {
6132 hh[ii] = yy[nn - 3 + ii];
6139 std::copy ( zz.begin(), zz.end(), yy.begin() );
6142 for (ii = 2; ii < (nn - 2); ii++) {
6143 if (zz[ii - 1] != zz[ii])
continue;
6144 if (zz[ii] != zz[ii + 1])
continue;
6145 hh[0] = zz[ii - 2] - zz[ii];
6146 hh[1] = zz[ii + 2] - zz[ii];
6147 if (hh[0] * hh[1] <= 0)
continue;
6150 yy[ii] = -0.5*zz[ii - 2*jk] + zz[ii]/0.75 + zz[ii + 2*jk] /6.;
6151 yy[ii + jk] = 0.5*(zz[ii + 2*jk] - zz[ii - 2*jk]) + zz[ii];
6156 for (ii = 1; ii < nn - 1; ii++) {
6157 zz[ii] = 0.25*yy[ii - 1] + 0.5*yy[ii] + 0.25*yy[ii + 1];
6160 zz[nn - 1] = yy[nn - 1];
6165 std::copy(zz.begin(), zz.end(), rr.begin());
6168 for (ii = 0; ii <
nn; ii++) {
6169 zz[ii] = xx[ii] - zz[ii];
6177 for (ii = 0; ii <
nn; ii++) {
6178 if (xmin < 0) xx[ii] = rr[ii] + zz[ii];
6180 else xx[ii] =
TMath::Max((rr[ii] + zz[ii]),0.0 );
6196 Error(
"Smooth",
"Smooth only supported for 1-d histograms");
6199 Int_t nbins = fXaxis.GetNbins();
6201 Error(
"Smooth",
"Smooth only supported for histograms with >= 3 bins. Nbins = %d",nbins);
6212 firstbin= fXaxis.GetFirst();
6213 lastbin = fXaxis.GetLast();
6215 nbins = lastbin - firstbin + 1;
6219 for (i=0;i<
nbins;i++) {
6225 for (i=0;i<
nbins;i++) {
6247 void TH1::Streamer(
TBuffer &b)
6252 if (fDirectory) fDirectory->Remove(
this);
6258 fXaxis.SetParent(
this);
6259 fYaxis.SetParent(
this);
6260 fZaxis.SetParent(
this);
6263 while ((obj=next())) {
6269 TNamed::Streamer(b);
6270 TAttLine::Streamer(b);
6271 TAttFill::Streamer(b);
6272 TAttMarker::Streamer(b);
6277 fXaxis.SetParent(
this);
6278 fYaxis.SetParent(
this);
6279 fZaxis.SetParent(
this);
6295 for (
Int_t i=0;i<
n;i++) fContour.fArray[i] = contour[i];
6301 fContour.Streamer(b);
6331 else if (opt.
Contains(
"range")) all = 1;
6332 else if (opt.
Contains(
"base")) all = 2;
6335 Int_t bin, binx, biny, binz;
6336 Int_t firstx=0,lastx=0,firsty=0,lasty=0,firstz=0,lastz=0;
6338 lastx = fXaxis.GetNbins()+1;
6339 if (
fDimension > 1) lasty = fYaxis.GetNbins()+1;
6340 if (
fDimension > 2) lastz = fZaxis.GetNbins()+1;
6342 firstx = fXaxis.GetFirst(); lastx = fXaxis.GetLast();
6343 if (
fDimension > 1) {firsty = fYaxis.GetFirst(); lasty = fYaxis.GetLast();}
6344 if (
fDimension > 2) {firstz = fZaxis.GetFirst(); lastz = fZaxis.GetLast();}
6348 printf(
" Title = %s\n",
GetTitle());
6349 printf(
" NbinsX= %d, xmin= %g, xmax=%g", fXaxis.GetNbins(), fXaxis.GetXmin(), fXaxis.GetXmax());
6350 if(
fDimension > 1) printf(
", NbinsY= %d, ymin= %g, ymax=%g", fYaxis.GetNbins(), fYaxis.GetXmin(), fYaxis.GetXmax());
6351 if(
fDimension > 2) printf(
", NbinsZ= %d, zmin= %g, zmax=%g", fZaxis.GetNbins(), fZaxis.GetXmin(), fZaxis.GetXmax());
6359 for (binx=firstx;binx<=lastx;binx++) {
6360 x = fXaxis.GetBinCenter(binx);
6363 if(fSumw2.fN) printf(
" fSumw[%d]=%g, x=%g, error=%g\n",binx,w,x,e);
6364 else printf(
" fSumw[%d]=%g, x=%g\n",binx,w,x);
6368 for (biny=firsty;biny<=lasty;biny++) {
6369 y = fYaxis.GetBinCenter(biny);
6370 for (binx=firstx;binx<=lastx;binx++) {
6372 x = fXaxis.GetBinCenter(binx);
6375 if(fSumw2.fN) printf(
" fSumw[%d][%d]=%g, x=%g, y=%g, error=%g\n",binx,biny,w,x,y,e);
6376 else printf(
" fSumw[%d][%d]=%g, x=%g, y=%g\n",binx,biny,w,x,y);
6381 for (binz=firstz;binz<=lastz;binz++) {
6382 z = fZaxis.GetBinCenter(binz);
6383 for (biny=firsty;biny<=lasty;biny++) {
6384 y = fYaxis.GetBinCenter(biny);
6385 for (binx=firstx;binx<=lastx;binx++) {
6386 bin =
GetBin(binx,biny,binz);
6387 x = fXaxis.GetBinCenter(binx);
6390 if(fSumw2.fN) printf(
" fSumw[%d][%d][%d]=%g, x=%g, y=%g, z=%g, error=%g\n",binx,biny,binz,w,x,y,z,e);
6391 else printf(
" fSumw[%d][%d][%d]=%g, x=%g, y=%g, z=%g\n",binx,biny,binz,w,x,y,z);
6405 fSumw2.Set(fNcells);
6425 if (fIntegral) {
delete []
fIntegral; fIntegral = 0;}
6449 if (opt ==
"ICES")
return;
6479 static Int_t nxaxis = 0;
6480 static Int_t nyaxis = 0;
6481 static Int_t nzaxis = 0;
6482 TString sxaxis=
"xAxis",syaxis=
"yAxis",szaxis=
"zAxis";
6493 if (i != 0) out <<
", ";
6496 out <<
"}; " << std::endl;
6509 if (i != 0) out <<
", ";
6512 out <<
"}; " << std::endl;
6525 if (i != 0) out <<
", ";
6528 out <<
"}; " << std::endl;
6532 out <<
" "<<std::endl;
6542 static Int_t hcounter = 0;
6549 histName += hcounter;
6552 const char *hname = histName.
Data();
6553 if (!strlen(hname)) hname =
"unnamed";
6557 t.ReplaceAll(
"\\",
"\\\\");
6558 t.ReplaceAll(
"\"",
"\\\"");
6559 out << hname <<
" = new " <<
ClassName() <<
"(" << quote
6560 << hname << quote <<
"," << quote<< t.Data() << quote
6563 out <<
", "<<sxaxis;
6570 out <<
", "<<syaxis;
6578 out <<
", "<<szaxis;
6583 out <<
");" << std::endl;
6587 for (bin=0;bin<
fNcells;bin++) {
6590 out<<
" "<<hname<<
"->SetBinContent("<<bin<<
","<<bc<<
");"<<std::endl;
6596 for (bin=0;bin<
fNcells;bin++) {
6599 out<<
" "<<hname<<
"->SetBinError("<<bin<<
","<<be<<
");"<<std::endl;
6616 out<<
" "<<hname<<
"->SetBarOffset("<<
GetBarOffset()<<
");"<<std::endl;
6619 out<<
" "<<hname<<
"->SetBarWidth("<<
GetBarWidth()<<
");"<<std::endl;
6622 out<<
" "<<hname<<
"->SetMinimum("<<
fMinimum<<
");"<<std::endl;
6625 out<<
" "<<hname<<
"->SetMaximum("<<
fMaximum<<
");"<<std::endl;
6628 out<<
" "<<hname<<
"->SetNormFactor("<<
fNormFactor<<
");"<<std::endl;
6631 out<<
" "<<hname<<
"->SetEntries("<<
fEntries<<
");"<<std::endl;
6633 if (fDirectory == 0) {
6634 out<<
" "<<hname<<
"->SetDirectory(0);"<<std::endl;
6637 out<<
" "<<hname<<
"->SetStats(0);"<<std::endl;
6640 out<<
" "<<hname<<
"->SetOption("<<quote<<
fOption.
Data()<<quote<<
");"<<std::endl;
6645 if (ncontours > 0) {
6646 out<<
" "<<hname<<
"->SetContour("<<ncontours<<
");"<<std::endl;
6648 for (
Int_t bin=0;bin<ncontours;bin++) {
6649 if (
gPad->GetLogz()) {
6654 out<<
" "<<hname<<
"->SetContourLevel("<<bin<<
","<<zlevel<<
");"<<std::endl;
6661 static Int_t funcNumber = 0;
6666 out<<
" "<<hname<<
"->GetListOfFunctions()->Add("
6667 <<
Form(
"%s%d",obj->
GetName(),funcNumber)<<
");"<<std::endl;
6669 out<<
" "<<hname<<
"->GetListOfFunctions()->Add(ptstats);"<<std::endl;
6670 out<<
" ptstats->SetParent("<<hname<<
");"<<std::endl;
6672 out<<
" "<<hname<<
"->GetListOfFunctions()->Add("
6674 <<
","<<quote<<lnk->
GetOption()<<quote<<
");"<<std::endl;
6683 fXaxis.SaveAttributes(out,hname,
"->GetXaxis()");
6684 fYaxis.SaveAttributes(out,hname,
"->GetYaxis()");
6685 fZaxis.SaveAttributes(out,hname,
"->GetZaxis()");
6689 out<<
" "<<hname<<
"->Draw("
6690 <<quote<<option<<quote<<
");"<<std::endl;
6701 fXaxis.ResetAttAxis(
"X");
6702 fYaxis.ResetAttAxis(
"Y");
6703 fZaxis.ResetAttAxis(
"Z");
6733 while ((obj = next())) {
6763 if (axis<1 || (axis>3 && axis<11) || axis>13)
return 0;
6767 if (stats[0] == 0)
return 0;
6769 Int_t ax[3] = {2,4,7};
6770 return stats[ax[axis-1]]/stats[0];
6775 return ( neff > 0 ? stddev/
TMath::Sqrt(neff) : 0. );
6817 if (axis<1 || (axis>3 && axis<11) || axis>13)
return 0;
6822 if (stats[0] == 0)
return 0;
6823 Int_t ax[3] = {2,4,7};
6824 Int_t axm = ax[axis%10 - 1];
6825 x = stats[axm]/stats[0];
6826 stddev2 =
TMath::Abs(stats[axm+1]/stats[0] -x*x);
6833 return ( neff > 0 ?
TMath::Sqrt(stddev2/(2*neff) ) : 0. );
6869 if (axis > 0 && axis <= 3){
6873 Double_t stddev3 = stddev*stddev*stddev;
6875 Int_t firstBinX = fXaxis.GetFirst();
6876 Int_t lastBinX = fXaxis.GetLast();
6877 Int_t firstBinY = fYaxis.GetFirst();
6878 Int_t lastBinY = fYaxis.GetLast();
6879 Int_t firstBinZ = fZaxis.GetFirst();
6880 Int_t lastBinZ = fZaxis.GetLast();
6884 if (firstBinX == 1) firstBinX = 0;
6885 if (lastBinX == fXaxis.GetNbins() ) lastBinX += 1;
6888 if (firstBinY == 1) firstBinY = 0;
6889 if (lastBinY == fYaxis.GetNbins() ) lastBinY += 1;
6892 if (firstBinZ == 1) firstBinZ = 0;
6893 if (lastBinZ == fZaxis.GetNbins() ) lastBinZ += 1;
6900 for (
Int_t binx = firstBinX; binx <= lastBinX; binx++) {
6901 for (
Int_t biny = firstBinY; biny <= lastBinY; biny++) {
6902 for (
Int_t binz = firstBinZ; binz <= lastBinZ; binz++) {
6903 if (axis==1 ) x = fXaxis.GetBinCenter(binx);
6904 else if (axis==2 ) x = fYaxis.GetBinCenter(biny);
6905 else if (axis==3 ) x = fZaxis.GetBinCenter(binz);
6908 sum+=w*(x-mean)*(x-mean)*(x-mean);
6915 else if (axis > 10 && axis <= 13) {
6922 Error(
"GetSkewness",
"illegal value of parameter");
6938 if (axis > 0 && axis <= 3){
6942 Double_t stddev4 = stddev*stddev*stddev*stddev;
6944 Int_t firstBinX = fXaxis.GetFirst();
6945 Int_t lastBinX = fXaxis.GetLast();
6946 Int_t firstBinY = fYaxis.GetFirst();
6947 Int_t lastBinY = fYaxis.GetLast();
6948 Int_t firstBinZ = fZaxis.GetFirst();
6949 Int_t lastBinZ = fZaxis.GetLast();
6953 if (firstBinX == 1) firstBinX = 0;
6954 if (lastBinX == fXaxis.GetNbins() ) lastBinX += 1;
6957 if (firstBinY == 1) firstBinY = 0;
6958 if (lastBinY == fYaxis.GetNbins() ) lastBinY += 1;
6961 if (firstBinZ == 1) firstBinZ = 0;
6962 if (lastBinZ == fZaxis.GetNbins() ) lastBinZ += 1;
6969 for (
Int_t binx = firstBinX; binx <= lastBinX; binx++) {
6970 for (
Int_t biny = firstBinY; biny <= lastBinY; biny++) {
6971 for (
Int_t binz = firstBinZ; binz <= lastBinZ; binz++) {
6972 if (axis==1 ) x = fXaxis.GetBinCenter(binx);
6973 else if (axis==2 ) x = fYaxis.GetBinCenter(biny);
6974 else if (axis==3 ) x = fZaxis.GetBinCenter(binz);
6977 sum+=w*(x-mean)*(x-mean)*(x-mean)*(x-mean);
6984 }
else if (axis > 10 && axis <= 13) {
6988 return ( neff > 0 ?
TMath::Sqrt(24./neff ) : 0. );
6991 Error(
"GetKurtosis",
"illegal value of parameter");
7036 for (bin=0;bin<4;bin++) stats[bin] = 0;
7038 Int_t firstBinX = fXaxis.GetFirst();
7039 Int_t lastBinX = fXaxis.GetLast();
7042 if (firstBinX == 1) firstBinX = 0;
7043 if (lastBinX == fXaxis.GetNbins() ) lastBinX += 1;
7045 for (binx = firstBinX; binx <= lastBinX; binx++) {
7046 x = fXaxis.GetBinCenter(binx);
7052 stats[1] += err*err;
7095 if (fSumw2.fN > 0 &&
fTsumw > 0 && stats[1] > 0 )
fEntries = stats[0]*stats[0]/ stats[1];
7105 Int_t bin,binx,biny,binz;
7107 for(binz=1; binz<=fZaxis.GetNbins(); binz++) {
7108 for(biny=1; biny<=fYaxis.GetNbins(); biny++) {
7109 for(binx=1; binx<=fXaxis.GetNbins(); binx++) {
7110 bin =
GetBin(binx,biny,binz);
7127 return Integral(fXaxis.GetFirst(),fXaxis.GetLast(),option);
7140 return DoIntegral(binx1,binx2,0,-1,0,-1,err,option);
7167 if (binx1 < 0) binx1 = 0;
7168 if (binx2 >= nx || binx2 < binx1) binx2 = nx - 1;
7172 if (biny1 < 0) biny1 = 0;
7173 if (biny2 >= ny || biny2 < biny1) biny2 = ny - 1;
7175 biny1 = 0; biny2 = 0;
7180 if (binz1 < 0) binz1 = 0;
7181 if (binz2 >= nz || binz2 < binz1) binz2 = nz - 1;
7183 binz1 = 0; binz2 = 0;
7196 for (
Int_t binx = binx1; binx <= binx2; ++binx) {
7197 if (width) dx = fXaxis.GetBinWidth(binx);
7198 for (
Int_t biny = biny1; biny <= biny2; ++biny) {
7199 if (width) dy = fYaxis.GetBinWidth(biny);
7200 for (
Int_t binz = binz1; binz <= binz2; ++binz) {
7204 dz = fZaxis.GetBinWidth(binz);
7253 printf(
" AndersonDarlingTest Prob = %g, AD TestStatistic = %g\n",pvalue,advalue);
7255 if (opt.
Contains(
"T") )
return advalue;
7266 Error(
"AndersonDarlingTest",
"Histograms must be 1-D");
7367 if (h2 == 0)
return 0;
7375 Error(
"KolmogorovTest",
"Histograms must be 1-D\n");
7381 Error(
"KolmogorovTest",
"Histograms have different number of bins, %d and %d\n",ncx1,ncx2);
7391 Error(
"KolmogorovTest",
"Histograms are not consistent: they have different bin edges");
7405 if (opt.
Contains(
"O")) ilast = ncx1 +1;
7406 for (bin = ifirst; bin <= ilast; bin++) {
7415 Error(
"KolmogorovTest",
"Histogram1 %s integral is zero\n",h1->
GetName());
7419 Error(
"KolmogorovTest",
"Histogram2 %s integral is zero\n",h2->
GetName());
7428 esum1 = sum1 * sum1 / w1;
7433 esum2 = sum2 * sum2 / w2;
7437 if (afunc2 && afunc1) {
7438 Error(
"KolmogorovTest",
"Errors are zero for both histograms\n");
7447 Double_t dfmax =0, rsum1 = 0, rsum2 = 0;
7449 for (bin=ifirst;bin<=ilast;bin++) {
7471 if (opt.
Contains(
"N") && !(afunc1 || afunc2 ) ) {
7475 Double_t chi2 = d12*d12/(esum1+esum2);
7478 if (prob > 0 && prb2 > 0) prob *= prb2*(1-
TMath::Log(prob*prb2));
7482 const Int_t nEXPT = 1000;
7483 if (opt.
Contains(
"X") && !(afunc1 || afunc2 ) ) {
7488 for (
Int_t i=0; i < nEXPT; i++) {
7492 if (dSEXPT>dfmax) prb3 += 1.0;
7500 printf(
" Kolmo Prob h1 = %s, sum bin content =%g effective entries =%g\n",h1->
GetName(),sum1,esum1);
7501 printf(
" Kolmo Prob h2 = %s, sum bin content =%g effective entries =%g\n",h2->
GetName(),sum2,esum2);
7502 printf(
" Kolmo Prob = %g, Max Dist = %g\n",prob,dfmax);
7504 printf(
" Kolmo Prob = %f for shape alone, =%f for normalisation alone\n",prb1,prb2);
7506 printf(
" Kolmo Prob = %f with %d pseudo-experiments\n",prb3,nEXPT);
7512 if(opt.
Contains(
"M"))
return dfmax;
7513 else if(opt.
Contains(
"X"))
return prb3;
7543 for (
Int_t level=0; level<nlevels; level++) levels[level] = fContour.fArray[level];
7554 return (level >= 0 && level < fContour.fN) ? fContour.fArray[level] : 0.0;
7564 if (level <0 || level >= fContour.fN)
return 0;
7565 Double_t zlevel = fContour.fArray[level];
7571 if (zlevel <= 0)
return 0;
7587 if (buffersize <= 0) {
7591 if (buffersize < 100) buffersize = 100;
7613 fContour.Set(nlevels);
7618 for (level=0; level<nlevels; level++) fContour.fArray[level] = levels[level];
7623 if ((zmin == zmax) && (zmin != 0)) {
7629 if (zmax <= 0)
return;
7630 if (zmin <= 0) zmin = 0.001*zmax;
7633 dz = (zmax-zmin)/
Double_t(nlevels);
7635 for (level=0; level<nlevels; level++) {
7636 fContour.fArray[level] = zmin + dz*
Double_t(level);
7646 if (level < 0 || level >= fContour.fN)
return;
7648 fContour.fArray[level] = value;
7669 if (fBuffer) ((
TH1*)
this)->BufferEmpty();
7671 Int_t bin, binx, biny, binz;
7672 Int_t xfirst = fXaxis.GetFirst();
7673 Int_t xlast = fXaxis.GetLast();
7674 Int_t yfirst = fYaxis.GetFirst();
7675 Int_t ylast = fYaxis.GetLast();
7676 Int_t zfirst = fZaxis.GetFirst();
7677 Int_t zlast = fZaxis.GetLast();
7678 Double_t maximum = -FLT_MAX, value;
7679 for (binz=zfirst;binz<=zlast;binz++) {
7680 for (biny=yfirst;biny<=ylast;biny++) {
7681 for (binx=xfirst;binx<=xlast;binx++) {
7682 bin =
GetBin(binx,biny,binz);
7684 if (value > maximum && value < maxval) maximum = value;
7706 if (fBuffer) ((
TH1*)
this)->BufferEmpty();
7708 Int_t bin, binx, biny, binz;
7710 Int_t xfirst = fXaxis.GetFirst();
7711 Int_t xlast = fXaxis.GetLast();
7712 Int_t yfirst = fYaxis.GetFirst();
7713 Int_t ylast = fYaxis.GetLast();
7714 Int_t zfirst = fZaxis.GetFirst();
7715 Int_t zlast = fZaxis.GetLast();
7716 Double_t maximum = -FLT_MAX, value;
7717 locm = locmax = locmay = locmaz = 0;
7718 for (binz=zfirst;binz<=zlast;binz++) {
7719 for (biny=yfirst;biny<=ylast;biny++) {
7720 for (binx=xfirst;binx<=xlast;binx++) {
7721 bin =
GetBin(binx,biny,binz);
7723 if (value > maximum) {
7754 if (fBuffer) ((
TH1*)
this)->BufferEmpty();
7756 Int_t bin, binx, biny, binz;
7757 Int_t xfirst = fXaxis.GetFirst();
7758 Int_t xlast = fXaxis.GetLast();
7759 Int_t yfirst = fYaxis.GetFirst();
7760 Int_t ylast = fYaxis.GetLast();
7761 Int_t zfirst = fZaxis.GetFirst();
7762 Int_t zlast = fZaxis.GetLast();
7764 for (binz=zfirst;binz<=zlast;binz++) {
7765 for (biny=yfirst;biny<=ylast;biny++) {
7766 for (binx=xfirst;binx<=xlast;binx++) {
7767 bin =
GetBin(binx,biny,binz);
7769 if (value < minimum && value > minval) minimum = value;
7791 if (fBuffer) ((
TH1*)
this)->BufferEmpty();
7793 Int_t bin, binx, biny, binz;
7795 Int_t xfirst = fXaxis.GetFirst();
7796 Int_t xlast = fXaxis.GetLast();
7797 Int_t yfirst = fYaxis.GetFirst();
7798 Int_t ylast = fYaxis.GetLast();
7799 Int_t zfirst = fZaxis.GetFirst();
7800 Int_t zlast = fZaxis.GetLast();
7802 locm = locmix = locmiy = locmiz = 0;
7803 for (binz=zfirst;binz<=zlast;binz++) {
7804 for (biny=yfirst;biny<=ylast;biny++) {
7805 for (binx=xfirst;binx<=xlast;binx++) {
7806 bin =
GetBin(binx,biny,binz);
7808 if (value < minimum) {
7848 if (fBuffer) ((
TH1*)
this)->BufferEmpty();
7850 Int_t bin, binx, biny, binz;
7851 Int_t xfirst = fXaxis.GetFirst();
7852 Int_t xlast = fXaxis.GetLast();
7853 Int_t yfirst = fYaxis.GetFirst();
7854 Int_t ylast = fYaxis.GetLast();
7855 Int_t zfirst = fZaxis.GetFirst();
7856 Int_t zlast = fZaxis.GetLast();
7860 for (binz=zfirst;binz<=zlast;binz++) {
7861 for (biny=yfirst;biny<=ylast;biny++) {
7862 for (binx=xfirst;binx<=xlast;binx++) {
7863 bin =
GetBin(binx,biny,binz);
7865 if (value < min) min = value;
7866 if (value > max) max = value;
7884 Error(
"SetBins",
"Operation only valid for 1-d histograms");
7887 fXaxis.SetRange(0,0);
7888 fXaxis.Set(nx,xmin,xmax);
7894 fSumw2.Set(fNcells);
7911 Error(
"SetBins",
"Operation only valid for 1-d histograms");
7914 fXaxis.SetRange(0,0);
7915 fXaxis.Set(nx,xBins);
7921 fSumw2.Set(fNcells);
7937 Error(
"SetBins",
"Operation only valid for 2-D histograms");
7940 fXaxis.SetRange(0,0);
7941 fYaxis.SetRange(0,0);
7942 fXaxis.Set(nx,xmin,xmax);
7943 fYaxis.Set(ny,ymin,ymax);
7945 fNcells = (nx+2)*(ny+2);
7948 fSumw2.Set(fNcells);
7965 Error(
"SetBins",
"Operation only valid for 2-D histograms");
7968 fXaxis.SetRange(0,0);
7969 fYaxis.SetRange(0,0);
7970 fXaxis.Set(nx,xBins);
7971 fYaxis.Set(ny,yBins);
7973 fNcells = (nx+2)*(ny+2);
7976 fSumw2.Set(fNcells);
7992 Error(
"SetBins",
"Operation only valid for 3-D histograms");
7995 fXaxis.SetRange(0,0);
7996 fYaxis.SetRange(0,0);
7997 fZaxis.SetRange(0,0);
7998 fXaxis.Set(nx,xmin,xmax);
7999 fYaxis.Set(ny,ymin,ymax);
8000 fZaxis.Set(nz,zmin,zmax);
8001 fNcells = (nx+2)*(ny+2)*(nz+2);
8004 fSumw2.Set(fNcells);
8022 Error(
"SetBins",
"Operation only valid for 3-D histograms");
8025 fXaxis.SetRange(0,0);
8026 fYaxis.SetRange(0,0);
8027 fZaxis.SetRange(0,0);
8028 fXaxis.Set(nx,xBins);
8029 fYaxis.Set(ny,yBins);
8030 fZaxis.Set(nz,zBins);
8031 fNcells = (nx+2)*(ny+2)*(nz+2);
8034 fSumw2.Set(fNcells);
8053 if (fDirectory == dir)
return;
8054 if (fDirectory) fDirectory->Remove(
this);
8056 if (fDirectory) fDirectory->
Append(
this);
8077 if (fDirectory) fDirectory->Remove(
this);
8079 if (fDirectory) fDirectory->Append(
this);
8134 if (fSumw2.fN > 0 ) fSumw2.Set(0);
8138 if (fSumw2.fN == fNcells) {
8140 Warning(
"Sumw2",
"Sum of squares of weights structure already created");
8144 fSumw2.Set(fNcells);
8175 if (bin < 0) bin = 0;
8176 if (bin >= fNcells) bin = fNcells-1;
8177 if (fBuffer) ((
TH1*)
this)->BufferEmpty();
8178 if (fSumw2.fN)
return TMath::Sqrt(fSumw2.fArray[bin]);
8195 if (bin < 0) bin = 0;
8196 if (bin >= fNcells) bin = fNcells-1;
8197 if (fBuffer) ((
TH1*)
this)->BufferEmpty();
8205 Warning(
"GetBinErrorLow",
"Histogram has negative bin content-force usage to normal errors");
8210 if (n == 0)
return 0;
8225 if (bin < 0) bin = 0;
8226 if (bin >= fNcells) bin = fNcells-1;
8227 if (fBuffer) ((
TH1*)
this)->BufferEmpty();
8235 Warning(
"GetBinErrorUp",
"Histogram has negative bin content-force usage to normal errors");
8254 Error(
"GetBinCenter",
"Invalid method for a %d-d histogram - return a NaN",
fDimension);
8265 Error(
"GetBinLowEdge",
"Invalid method for a %d-d histogram - return a NaN",
fDimension);
8276 Error(
"GetBinWidth",
"Invalid method for a %d-d histogram - return a NaN",
fDimension);
8287 fXaxis.GetCenter(center);
8300 fXaxis.GetLowEdge(edge);
8303 Error(
"GetLowEdge",
"Invalid method for a %d-d histogram ",
fDimension);
8312 if (bin < 0 || bin>= fSumw2.fN)
return;
8313 fSumw2.fArray[bin] = error * error;
8327 if (bin < 0)
return;
8328 if (bin >= fNcells-1) {
8344 if (binx < 0 || binx > fXaxis.GetNbins() + 1)
return;
8345 if (biny < 0 || biny > fYaxis.GetNbins() + 1)
return;
8354 if (binx < 0 || binx > fXaxis.GetNbins() + 1)
return;
8355 if (biny < 0 || biny > fYaxis.GetNbins() + 1)
return;
8356 if (binz < 0 || binz > fZaxis.GetNbins() + 1)
return;
8391 return (
TH1*)
gROOT->ProcessLineFast(
Form(
"TSpectrum::StaticBackground((TH1*)0x%lx,%d,\"%s\")",
8392 (
ULong_t)
this, niter, option));
8405 return (
Int_t)
gROOT->ProcessLineFast(
Form(
"TSpectrum::StaticSearch((TH1*)0x%lx,%g,\"%s\",%g)",
8406 (
ULong_t)
this, sigma, option, threshold));
8424 ::Error(
"TransformHisto",
"Invalid FFT transform class");
8429 ::Error(
"TransformHisto",
"Only 1d and 2D transform are supported");
8443 hout =
new TH1D(name, name,n[0], 0, n[0]);
8445 hout =
new TH2D(name, name, n[0], 0, n[0], n[1], 0, n[1]);
8453 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8454 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8455 ind[0] = binx-1; ind[1] = biny-1;
8461 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8462 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8463 ind[0] = binx-1; ind[1] = biny-1;
8472 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8473 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8474 ind[0] = binx-1; ind[1] = biny-1;
8480 ::Error(
"TransformHisto",
"No complex numbers in the output");
8487 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8488 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8489 ind[0] = binx-1; ind[1] = biny-1;
8495 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8496 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8497 ind[0] = binx-1; ind[1] = biny-1;
8506 for (binx = 1; binx<=hout->
GetNbinsX(); binx++){
8507 for (biny=1; biny<=hout->
GetNbinsY(); biny++){
8508 ind[0] = binx-1; ind[1] = biny-1;
8529 printf(
"Pure real output, no phase");
8560 std::ostringstream strm;
8579 if (fgDefaultSumw2) Sumw2();
8587 : TH1(name,title,nbins,xlow,xup)
8592 if (xlow >= xup) SetBuffer(fgBufferSize);
8593 if (fgDefaultSumw2) Sumw2();
8601 : TH1(name,title,nbins,xbins)
8605 if (fgDefaultSumw2) Sumw2();
8613 : TH1(name,title,nbins,xbins)
8617 if (fgDefaultSumw2) Sumw2();
8649 if (newval > -128 && newval < 128) {
fArray[bin] =
Char_t(newval);
return;}
8650 if (newval < -127)
fArray[bin] = -127;
8651 if (newval > 127)
fArray[bin] = 127;
8677 if (n < 0) n = fXaxis.GetNbins() + 2;
8760 if (fgDefaultSumw2) Sumw2();
8768 : TH1(name,title,nbins,xlow,xup)
8773 if (xlow >= xup) SetBuffer(fgBufferSize);
8774 if (fgDefaultSumw2) Sumw2();
8782 : TH1(name,title,nbins,xbins)
8786 if (fgDefaultSumw2) Sumw2();
8794 : TH1(name,title,nbins,xbins)
8798 if (fgDefaultSumw2) Sumw2();
8830 if (newval > -32768 && newval < 32768) {
fArray[bin] =
Short_t(newval);
return;}
8831 if (newval < -32767)
fArray[bin] = -32767;
8832 if (newval > 32767)
fArray[bin] = 32767;
8858 if (n < 0) n = fXaxis.GetNbins() + 2;
8941 if (fgDefaultSumw2) Sumw2();
8949 : TH1(name,title,nbins,xlow,xup)
8954 if (xlow >= xup) SetBuffer(fgBufferSize);
8955 if (fgDefaultSumw2) Sumw2();
8963 : TH1(name,title,nbins,xbins)
8967 if (fgDefaultSumw2) Sumw2();
8975 : TH1(name,title,nbins,xbins)
8979 if (fgDefaultSumw2) Sumw2();
9011 if (newval > -2147483647 && newval < 2147483647) {
fArray[bin] =
Int_t(newval);
return;}
9012 if (newval < -2147483647)
fArray[bin] = -2147483647;
9013 if (newval > 2147483647)
fArray[bin] = 2147483647;
9039 if (n < 0) n = fXaxis.GetNbins() + 2;
9123 if (fgDefaultSumw2) Sumw2();
9131 : TH1(name,title,nbins,xlow,xup)
9136 if (xlow >= xup) SetBuffer(fgBufferSize);
9137 if (fgDefaultSumw2) Sumw2();
9145 : TH1(name,title,nbins,xbins)
9149 if (fgDefaultSumw2) Sumw2();
9157 : TH1(name,title,nbins,xbins)
9161 if (fgDefaultSumw2) Sumw2();
9169 : TH1(
"TVectorF",
"",v.GetNrows(),0,v.GetNrows())
9174 for (
Int_t i=0;i<fNcells-2;i++) {
9175 SetBinContent(i+1,
v(i+ivlow));
9178 if (fgDefaultSumw2) Sumw2();
9219 if (n < 0) n = fXaxis.GetNbins() + 2;
9302 if (fgDefaultSumw2) Sumw2();
9310 : TH1(name,title,nbins,xlow,xup)
9315 if (xlow >= xup) SetBuffer(fgBufferSize);
9316 if (fgDefaultSumw2) Sumw2();
9324 : TH1(name,title,nbins,xbins)
9328 if (fgDefaultSumw2) Sumw2();
9336 : TH1(name,title,nbins,xbins)
9340 if (fgDefaultSumw2) Sumw2();
9348 : TH1(
"TVectorD",
"",v.GetNrows(),0,v.GetNrows())
9353 for (
Int_t i=0;i<fNcells-2;i++) {
9354 SetBinContent(i+1,
v(i+ivlow));
9357 if (fgDefaultSumw2) Sumw2();
9398 if (n < 0) n = fXaxis.GetNbins() + 2;
9475 if(hid >= 0) hname.
Form(
"h%d",hid);
9476 else hname.
Form(
"h_%d",hid);
9483 TH1 *
R__H(
const char * hname)
static void StatOverflows(Bool_t flag=kTRUE)
if flag=kTRUE, underflows and overflows are used by the Fill functions in the computation of statisti...
Abstract array base class.
virtual void Browse(TBrowser *b)
Browse the Histogram object.
Int_t GetFirst() const
Return first bin on the axis i.e.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save primitive as a C++ statement(s) on output stream out.
virtual const char * GetTitle() const
Returns title of object.
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
void Copy(TAttMarker &attmarker) const
Copy this marker attributes to a new TAttMarker.
virtual Style_t GetLineStyle() const
Return the line style.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void SetNameTitle(const char *name, const char *title)
Change the name and title of this histogram.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Option_t * GetOption() const
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
Return Global bin number corresponding to x,y,z.
object has not been deleted
Double_t fNormFactor
Normalization factor.
virtual void SetBarOffset(Float_t offset=0.25)
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
virtual Int_t ShowPeaks(Double_t sigma=2, Option_t *option="", Double_t threshold=0.05)
Interface to TSpectrum::Search.
virtual Double_t GetBinErrorLow(Int_t bin) const
Return lower error associated to bin number bin.
TList * GetListOfFunctions() const
TH1D & operator=(const TH1D &h1)
Operator =.
void SetBarWidth(Float_t barwidth=0.5)
static long int sum(long int i)
virtual void Paint(Option_t *option="")
Control routine to paint any kind of histograms.
virtual TH1 * DrawNormalized(Option_t *option="", Double_t norm=1) const
Draw a normalized copy of this histogram.
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual Double_t PoissonD(Double_t mean)
Generates a random number according to a Poisson law.
Double_t Floor(Double_t x)
void Set(Int_t n)
Set size of this array to n chars.
Int_t AxisChoice(Option_t *axis) const
Choose an axis according to "axis".
virtual ~TH1I()
Destructor.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
virtual void SetMaximum(Double_t maximum=-1111)
double Chisquare(const TH1 &h1, TF1 &f1, bool useRange, bool usePL=false)
compute the chi2 value for an histogram given a function (see TH1::Chisquare for the documentation) ...
void UseCurrentStyle()
Copy current attributes from/to current style.
virtual void LabelsOption(Option_t *option="h", Option_t *axis="X")
Set option(s) to draw axis with labels.
virtual void SetLimits(Double_t xmin, Double_t xmax)
virtual Double_t Chi2TestX(const TH1 *h2, Double_t &chi2, Int_t &ndf, Int_t &igood, Option_t *option="UU", Double_t *res=0) const
The computation routine of the Chisquare test.
virtual Int_t FindLastBinAbove(Double_t threshold=0, Int_t axis=1) const
Find last bin with content > threshold for axis (1=x, 2=y, 3=z) if no bins with content > threshold i...
Option_t * GetDrawOption() const
Get option used by the graphics system to draw this object.
Short_t fBarWidth
(1000*width) for bar charts or legos
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
static Bool_t fgDefaultSumw2
!flag to call TH1::Sumw2 automatically at histogram creation time
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)=0
Computes distance from point (px,py) to the object.
TVirtualHistPainter * GetPainter(Option_t *option="")
Return pointer to painter.
virtual void FitPanel()
Display a panel with all histogram fit options.
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
Bool_t GetCanvasPreferGL() const
Style_t GetHistLineStyle() const
virtual void GetStats(Double_t *stats) const
fill the array stats from the contents of this histogram The array stats must be correctly dimensione...
virtual Int_t GetMaximumBin() const
Return location of bin with maximum value in the range.
const char * GetBinLabel(Int_t bin) const
Return label for bin.
Double_t KolmogorovProb(Double_t z)
Calculates the Kolmogorov distribution function,.
virtual void Set(Int_t n)=0
virtual void SetError(const Double_t *error)
Replace bin errors by values in array error.
TString & ReplaceAll(const TString &s1, const TString &s2)
TAxis fYaxis
Y axis descriptor.
virtual Int_t BufferFill(Double_t x, Double_t w)
accumulate arguments in buffer.
virtual void SetContour(Int_t nlevels, const Double_t *levels=0)
Set the number and values of contour levels.
R__EXTERN TStyle * gStyle
virtual void PutStats(Double_t *stats)
Replace current statistics with the values in array stats.
void SetHistLineWidth(Width_t width=1)
virtual Int_t GetDimension() const
TList * fFunctions
->Pointer to list of functions (fits and user)
virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax)
Redefine x axis parameters.
virtual void SetName(const char *name)
Set the name of the TNamed.
TH1 * GetAsymmetry(TH1 *h2, Double_t c2=1, Double_t dc2=0)
Return an histogram containing the asymmetry of this histogram with h2, where the asymmetry is define...
static Bool_t fgStatOverflows
!flag to use under/overflows in statistics
static Bool_t SameLimitsAndNBins(const TAxis &axis1, const TAxis &axis2)
Same limits and bins.
virtual ~TH1F()
Destructor.
void Build()
Creates histogram basic data structure.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void H1LeastSquareSeqnd(Int_t n, Double_t *a, Int_t idim, Int_t &ifail, Int_t k, Double_t *b)
Extracted from CERN Program library routine DSEQN.
virtual Bool_t GetTimeDisplay() const
virtual Int_t GetQuantiles(Int_t nprobSum, Double_t *q, const Double_t *probSum=0)
Compute Quantiles for this histogram Quantile x_q of a probability distribution Function F is defined...
void Copy(TAttLine &attline) const
Copy this line attributes to a new TAttLine.
void ToUpper()
Change string to upper case.
virtual void Reset(Option_t *option="")
Reset.
static bool CheckAxisLimits(const TAxis *a1, const TAxis *a2)
Check that the axis limits of the histograms are the same.
Buffer base class used for serializing objects.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
virtual void Copy(TObject &hnew) const
Copy this to newth1.
virtual void Copy(TObject &hnew) const
Copy this to newth1.
virtual void SetMinimum(Double_t minimum=-1111)
static THLimitsFinder * GetLimitsFinder()
Return pointer to the current finder.
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
Int_t LoadPlugin()
Load the plugin library for this handler.
double gamma_quantile_c(double z, double alpha, double theta)
Inverse ( ) of the cumulative distribution function of the upper tail of the gamma distribution (gamm...
static Bool_t AddDirectoryStatus()
Static function: cannot be inlined on Windows/NT.
tomato 1-D histogram with a float per channel (see TH1 documentation)}
virtual TObject * GetUserFunc() const
tomato 1-D histogram with a short per channel (see TH1 documentation)
void H1InitExpo()
Compute Initial values of parameters for an exponential.
Array of floats (32 bits per element).
virtual Double_t GetNormFactor() const
void Copy(TAttFill &attfill) const
Copy this fill attributes to a new TAttFill.
TH1 * GetCumulative(Bool_t forward=kTRUE, const char *suffix="_cumulative") const
Return a pointer to an histogram containing the cumulative The cumulative can be computed both in the...
Short_t Min(Short_t a, Short_t b)
void ToLower()
Change string to lower-case.
TTime operator/(const TTime &t1, const TTime &t2)
void SetBarOffset(Float_t baroff=0.5)
R__EXTERN TVirtualMutex * gROOTMutex
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual void Smooth(Int_t ntimes=1, Option_t *option="")
Smooth bin contents of this histogram.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
Histogram is forced to be not weighted even when the histogram is filled with weighted different than...
virtual Double_t GetStdDevError(Int_t axis=1) const
Return error of standard deviation estimation for Normal distribution.
TArrayD fSumw2
Array of sum of squares of weights.
virtual void UseCurrentStyle()
Set current style settings in this object This function is called when either TCanvas::UseCurrentStyl...
virtual Int_t GetNbinsX() const
static Bool_t AlmostInteger(Double_t a, Double_t epsilon=0.00000001)
Test if a double is almost an integer.
virtual void GetLowEdge(Double_t *edge) const
Fill array with low edge of bins for 1D histogram Better to use h1.GetXaxis().GetLowEdge(edge) ...
virtual Double_t Integral(Double_t a, Double_t b, Double_t epsrel=1.e-12)
IntegralOneDim or analytical integral.
Style_t GetHistFillStyle() const
void Copy(TArrayD &array) const
virtual Int_t FindGoodLimits(TH1 *h, Double_t xmin, Double_t xmax)
compute the best axis limits for the X axis.
static Bool_t RecomputeAxisLimits(TAxis &destAxis, const TAxis &anAxis)
Finds new limits for the axis for the Merge function.
TAxis fZaxis
Z axis descriptor.
virtual Double_t GetEntries() const
Return the current number of entries.
virtual Bool_t Multiply(TF1 *h1, Double_t c1=1)
Performs the operation: this = this*c1*f1 if errors are defined (see TH1::Sumw2), errors are also rec...
Long_t ExecPlugin(int nargs, const T &...params)
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
TH1 * R__H(Int_t hid)
return pointer to histogram with name hid if id >=0 h_id if id <0
virtual void GetCenter(Double_t *center) const
Fill array with center of bins for 1D histogram Better to use h1.GetXaxis().GetCenter(center) ...
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
Double_t Prob(Double_t chi2, Int_t ndf)
Computation of the probability for a certain Chi-squared (chi2) and number of degrees of freedom (ndf...
static bool CheckBinLimits(const TAxis *a1, const TAxis *a2)
Check bin limits.
virtual TH1 * GetHistogram() const
Return a pointer to the histogram used to visualise the function.
Array of integers (32 bits per element).
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void SetBuffer(Int_t buffersize, Option_t *option="")
Set the maximum number of entries to be kept in the buffer.
Double_t fTsumwx2
Total Sum of weight*X*X.
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
TObject * Clone(const char *newname=0) const
Make a complete copy of the underlying object.
if object in a list can be deleted
virtual void SetBarWidth(Float_t width=0.5)
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
static TVirtualHistPainter * HistPainter(TH1 *obj)
Static function returning a pointer to the current histogram painter.
virtual void SetPoint(Int_t ipoint, Double_t re, Double_t im=0)=0
TDirectory * fDirectory
!Pointer to directory holding this histogram
static void SetDefaultSumw2(Bool_t sumw2=kTRUE)
When this static function is called with sumw2=kTRUE, all new histograms will automatically activate ...
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width for 1D histogram.
virtual TObject * Clone(const char *newname="") const
Make a clone of an collection using the Streamer facility.
const char * Data() const
virtual Double_t GetSkewness(Int_t axis=1) const
static bool CheckConsistentSubAxes(const TAxis *a1, Int_t firstBin1, Int_t lastBin1, const TAxis *a2, Int_t firstBin2=0, Int_t lastBin2=0)
Check that two sub axis are the same.
NOTE: Must always be 0 !!!
virtual Double_t Interpolate(Double_t x)
Given a point x, approximates the value via linear interpolation based on the two nearest bin centers...
virtual Int_t GetContour(Double_t *levels=0)
Return contour values into array levels if pointer levels is non zero.
TH1C & operator=(const TH1C &h1)
Operator =.
virtual void Paint(Option_t *option="")=0
This method must be overridden if a class wants to paint itself.
virtual Double_t GetRandom() const
Return a random number distributed according the histogram bin contents.
Fill Area Attributes class.
static Int_t FitOptionsMake(Option_t *option, Foption_t &Foption)
Decode string choptin and fill fitOption structure.
virtual Double_t GetBinErrorUp(Int_t bin) const
Return upper error associated to bin number bin.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
virtual void Eval(TF1 *f1, Option_t *option="")
Evaluate function f1 at the center of bins of this histogram.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return bin lower edge for 1D histogram.
Float_t GetBarOffset() const
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
static Bool_t GetDefaultSumw2()
Return kTRUE if TH1::Sumw2 must be called when creating new histograms.
void SetHistFillColor(Color_t color=1)
static void SetDefaultBufferSize(Int_t buffersize=1000)
Static function to set the default buffer size for automatic histograms.
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.
The TNamed class is the base class for all named ROOT classes.
virtual ~TH1()
Histogram default destructor.
virtual Bool_t IsEmpty() const
Double_t GetAt(Int_t i) const
virtual Double_t DoIntegral(Int_t ix1, Int_t ix2, Int_t iy1, Int_t iy2, Int_t iz1, Int_t iz2, Double_t &err, Option_t *opt, Bool_t doerr=kFALSE) const
Internal function compute integral and optionally the error between the limits specified by the bin n...
TTime operator-(const TTime &t1, const TTime &t2)
virtual void Copy(TObject &named) const
Copy this to obj.
virtual TObject * FindObject(const char *name) const
Search object named name in the list of functions.
Double_t Log10(Double_t x)
virtual void SetContourLevel(Int_t level, Double_t value)
Set value for one contour level.
Abstract interface to a histogram painter.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
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.
TString & Append(const char *cs)
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)
void H1InitGaus()
Compute Initial values of parameters for a gaussian.
virtual void DrawPanel()=0
errors from Poisson interval at 95% CL (~ 2 sigma)
TString fOption
histogram options
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.
Float_t GetBarWidth() const
virtual Int_t * GetN() const =0
virtual void GetRange(Double_t *xmin, Double_t *xmax) const
Return range of a generic N-D function.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual Bool_t FindNewAxisLimits(const TAxis *axis, const Double_t point, Double_t &newMin, Double_t &newMax)
finds new limits for the axis so that point is within the range and the limits are compatible with th...
virtual TH1 * DrawCopy(Option_t *option="", const char *name_postfix="_copy") const
Copy this histogram and Draw in the current pad.
TString operator+(const TString &s1, const TString &s2)
Use the special concatenation constructor.
virtual void SetContent(const Double_t *content)
Replace bin contents by the contents of array content.
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
virtual void ResetStats()
Reset the statistics including the number of entries and replace with values calculates from bin cont...
void Set(Int_t n)
Set size of this array to n ints.
TArrayD fContour
Array to display contour levels.
virtual void SetBinError(Int_t bin, Double_t error)
See convention for numbering bins in TH1::GetBin.
virtual Double_t ComputeIntegral(Bool_t onlyPositive=false)
Compute integral (cumulative sum of bins) The result stored in fIntegral is used by the GetRandom fun...
user specified contour levels
virtual void LabelsInflate(Option_t *axis="X")
Double the number of bins for axis.
void AndersonDarling2SamplesTest(Double_t &pvalue, Double_t &testStat) const
virtual void SetTimeDisplay(Int_t value)
Double_t fTsumwx
Total Sum of weight*X.
void H1LeastSquareFit(Int_t n, Int_t m, Double_t *a)
Least squares lpolynomial fitting without weights.
virtual Bool_t Divide(TF1 *f1, Double_t c1=1)
Performs the operation: this = this/(c1*f1) if errors are defined (see TH1::Sumw2), errors are also recalculated.
virtual Double_t GetEffectiveEntries() const
Number of effective entries of the histogram.
static Bool_t fgAddDirectory
!flag to add histograms to the directory
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
void Set(Int_t n)
Set size of this array to n shorts.
virtual Double_t Rndm()
Machine independent random number generator.
Double_t fMinimum
Minimum value for plotting.
virtual void ExtendAxis(Double_t x, TAxis *axis)
Histogram is resized along axis such that x is in the axis range.
Bool_t AreEqualRel(Double_t af, Double_t bf, Double_t relPrec)
virtual TH1 * FFT(TH1 *h_output, Option_t *option)
This function allows to do discrete Fourier transforms of TH1 and TH2.
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute distance from point px,py to a line.
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Using a TBrowser one can browse all ROOT objects.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
virtual Double_t * GetIntegral()
Return a pointer to the array of bins integral.
virtual Double_t AndersonDarlingTest(const TH1 *h2, Option_t *option="") const
Statistical test of compatibility in shape between this histogram and h2, using the Anderson-Darling ...
virtual void SetRange(Int_t first=0, Int_t last=0)
Set the viewing range for the axis from bin first to last.
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
virtual Size_t GetMarkerSize() const
Return the marker size.
void Clear(Option_t *option="")
Remove all objects from the list.
std::string printValue(const TDatime *val)
Print a TDatime at the prompt.
virtual void SetParLimits(Int_t ipar, Double_t parmin, Double_t parmax)
Set limits for parameter ipar.
Color_t GetHistFillColor() const
void FillData(BinData &dv, const TH1 *hist, TF1 *func=0)
fill the data vector from a TH1.
virtual void Print(Option_t *option="") const
Print some global quantities for this histogram.
virtual Double_t GetMean(Int_t axis=1) const
For axis = 1,2 or 3 returns the mean value of the histogram along X,Y or Z axis.
Width_t GetHistLineWidth() const
virtual void FillRandom(const char *fname, Int_t ntimes=5000)
Fill histogram following distribution in function fname.
virtual Double_t Integral(Option_t *option="") const
Return integral of bin contents.
void SetHistFillStyle(Style_t styl=0)
static void SmoothArray(Int_t NN, Double_t *XX, Int_t ntimes=1)
Smooth array xx, translation of Hbook routine hsmoof.F based on algorithm 353QH twice presented by J...
Class to manage histogram axis.
virtual void Draw(Option_t *option="")
Draw this histogram with options.
static bool CheckBinLabels(const TAxis *a1, const TAxis *a2)
Check that axis have same labels.
Array of shorts (16 bits per element).
virtual Double_t GetPointReal(Int_t ipoint, Bool_t fromInput=kFALSE) const =0
if object ctor succeeded but object should not be used
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Redefines TObject::GetObjectInfo.
A 3-Dim function with parameters.
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
tomato 1-D histogram with an int per channel (see TH1 documentation)}
TTime operator*(const TTime &t1, const TTime &t2)
virtual Double_t IntegralAndError(Int_t binx1, Int_t binx2, Double_t &err, Option_t *option="") const
Return integral of bin contents in range [binx1,binx2] and its error.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual TObject * Remove(TObject *obj)
Remove object from the list.
virtual void Copy(TObject &hnew) const
Copy this to newth1.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)=0
Execute action corresponding to an event at (px,py).
unsigned int r1[N_CITIES]
Provides an indirection to the TFitResult class and with a semantics identical to a TFitResult pointe...
static TH1 * TransformHisto(TVirtualFFT *fft, TH1 *h_output, Option_t *option)
For a given transform (first parameter), fills the histogram (second parameter) with the transform ou...
static TVirtualFFT * FFT(Int_t ndim, Int_t *n, Option_t *option)
Returns a pointer to the FFT of requested size and type.
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 Color_t GetFillColor() const
Return the fill area color.
Collection abstract base class.
TObject * GetObject() const
virtual Double_t KolmogorovTest(const TH1 *h2, Option_t *option="") const
Statistical test of compatibility in shape between this histogram and h2, using Kolmogorov test...
static Int_t fgBufferSize
!default buffer size for automatic histograms
virtual TH1 * Rebin(Int_t ngroup=2, const char *newname="", const Double_t *xbins=0)
Rebin this histogram.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Double_t fEntries
Number of entries.
virtual Double_t GetMeanError(Int_t axis=1) const
Return standard error of mean of this histogram along the X axis.
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.
Bool_t TestBit(UInt_t f) const
virtual void LabelsDeflate(Option_t *axis="X")
Reduce the number of bins for the axis passed in the option to the number of bins having a label...
virtual void DoFillN(Int_t ntimes, const Double_t *x, const Double_t *w, Int_t stride=1)
Internal method to fill histogram content from a vector called directly by TH1::BufferEmpty.
char * Form(const char *fmt,...)
virtual void Transform()=0
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
static TVirtualFitter * GetFitter()
static: return the current Fitter
virtual Double_t GetSumOfWeights() const
Return the sum of weights excluding under/overflows.
virtual TH1 * ShowBackground(Int_t niter=20, Option_t *option="same")
This function calculates the background spectrum in this histogram.
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
virtual ~TH1C()
Destructor.
static void RejectPoint(Bool_t reject=kTRUE)
Static function to set the global flag to reject points the fgRejectPoint global flag is tested by al...
virtual Int_t GetNbinsZ() const
void AbstractMethod(const char *method) const
Use this method to implement an "abstract" method that you don't want to leave purely abstract...
virtual const char * GetName() const
Returns name of object.
virtual Int_t GetSumw2N() const
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual Double_t GetKurtosis(Int_t axis=1) const
Class describing the binned data sets : vectors of x coordinates, y values and optionally error on y ...
Bin contents are average (used by Add)
virtual Double_t Chi2Test(const TH1 *h2, Option_t *option="UU", Double_t *res=0) const
test for comparing weighted and unweighted histograms
Double_t * fIntegral
!Integral of bins used by GetRandom
virtual TObjLink * FirstLink() const
static bool CheckConsistency(const TH1 *h1, const TH1 *h2)
Check histogram compatibility.
void SetName(const char *name)
A 2-Dim function with parameters.
TH1()
Histogram default constructor.
R__EXTERN TRandom * gRandom
virtual Color_t GetLineColor() const
Return the line color.
tomato 1-D histogram with a double per channel (see TH1 documentation)}
static Int_t GetDefaultBufferSize()
Static function return the default buffer size for automatic histograms the parameter fgBufferSize ma...
virtual void Rebuild(Option_t *option="")
Using the current bin info, recompute the arrays for contents and errors.
if object destructor must call RecursiveRemove()
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
virtual void RecursiveRemove(TObject *obj)
Recursively remove object from the list of functions.
EBinErrorOpt fBinStatErrOpt
option for bin statistical errors
virtual Int_t GetXlast() const
errors with Normal (Wald) approximation: errorUp=errorLow= sqrt(N)
#define R__LOCKGUARD2(mutex)
virtual void Copy(TObject &hnew) const
Copy this to newth1.
TVirtualFFT is an interface class for Fast Fourier Transforms.
virtual void SetName(const char *name)
Change the name of this histogram.
static TVirtualFFT * SineCosine(Int_t ndim, Int_t *n, Int_t *r2rkind, Option_t *option)
Returns a pointer to a sine or cosine transform of requested size and kind.
TString & Remove(Ssiz_t pos)
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
Double_t fTsumw2
Total Sum of squares of weights.
virtual void GetPointComplex(Int_t ipoint, Double_t &re, Double_t &im, Bool_t fromInput=kFALSE) const =0
virtual Int_t GetSize() const
static const double x1[5]
virtual TObject * Remove(TObject *)
Remove an object from the in-memory list.
class describing the range in the coordinates it supports multiple range in a coordinate.
virtual const char * GetName() const
Returns name of object.
void SetHistLineStyle(Style_t styl=0)
virtual void SavePrimitiveHelp(std::ostream &out, const char *hname, Option_t *option="")
Helper function for the SavePrimitive functions from TH1 or classes derived from TH1, eg TProfile, TProfile2D.
Double_t fTsumw
Total Sum of weights.
virtual void Copy(TObject &axis) const
Copy axis structure to another axis.
Describe directory structure in memory.
Double_t Median(Long64_t n, const T *a, const Double_t *w=0, Long64_t *work=0)
double func(double *x, double *p)
TH1I & operator=(const TH1I &h1)
Operator =.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
void forward(const LAYERDATA &prevLayerData, LAYERDATA &currLayerData)
apply the weights (and functions) in forward direction of the DNN
THist< 2, double, THistStatContent, THistStatUncertainty > TH2D
Color_t GetHistLineColor() const
virtual Int_t FindFixBin(Double_t x, Double_t y=0, Double_t z=0) const
Return Global bin number corresponding to x,y,z.
virtual Int_t GetMinimumBin() const
Return location of bin with minimum value in the range.
static bool IsEquidistantBinning(const TAxis &axis)
Test if the binning is equidistant.
Short_t fBarOffset
(1000*offset) for bar charts or legos
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Array of doubles (64 bits per element).
Bool_t IsBinOverflow(Int_t bin, Int_t axis=0) const
Return true if the bin is overflow.
virtual UInt_t GetUniqueID() const
Return the unique object id.
void FitOptionsMake(EFitObjectType type, const char *option, Foption_t &fitOption)
Decode list of options into fitOption.
virtual void InitArgs(const Double_t *x, const Double_t *params)
Initialize parameters addresses.
virtual Double_t RetrieveBinContent(Int_t bin) const
Raw retrieval of bin content on internal data structure see convention for numbering bins in TH1::Get...
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), errors are also recalculated.
Abstract Base Class for Fitting.
virtual Int_t GetXfirst() const
Int_t GetLast() const
Return last bin on the axis i.e.
virtual UInt_t SetCanExtend(UInt_t extendBitMask)
Make the histogram axes extendable / not extendable according to the bit mask returns the previous bi...
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
Mother of all ROOT objects.
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
you should not use this method at all Int_t Int_t z
virtual Int_t FindFirstBinAbove(Double_t threshold=0, Int_t axis=1) const
Find first bin with content > threshold for axis (1=x, 2=y, 3=z) if no bins with content > threshold ...
virtual void ClearUnderflowAndOverflow()
Remove all the content from the underflow and overflow bins, without changing the number of entries A...
virtual TObject * First() const
Return the first object in the list. Returns 0 when list is empty.
virtual Int_t GetNbinsY() const
Bool_t IsBinUnderflow(Int_t bin, Int_t axis=0) const
Return true if the bin is underflow.
TH1S & operator=(const TH1S &h1)
Operator =.
virtual Double_t GetBinErrorSqUnchecked(Int_t bin) const
THashList * GetLabels() const
Double_t fMaximum
Maximum value for plotting.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual void DirectoryAutoAdd(TDirectory *)
Perform the automatic addition of the histogram to the given directory.
TVirtualHistPainter * fPainter
!pointer to histogram painter
static Bool_t RejectedPoint()
See TF1::RejectPoint above.
virtual void DrawPanel()
Display a panel with all histogram drawing options.
virtual void Add(TObject *obj)
Int_t fBufferSize
fBuffer size
double f2(const double *x)
virtual void RecursiveRemove(TObject *obj)
Remove object from this collection and recursively remove the object from all other objects (and coll...
virtual void Copy(TObject &hnew) const
Copy this histogram structure to newth1.
virtual void FillN(Int_t ntimes, const Double_t *x, const Double_t *w, Int_t stride=1)
Fill this histogram with an array x and weights w.
Short_t Max(Short_t a, Short_t b)
virtual Double_t Chisquare(TF1 *f1, Option_t *option="") const
Compute and return the chisquare of this histogram with respect to a function The chisquare is comput...
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual void Copy(TObject &hnew) const
Copy this to newth1.
virtual void SetBinsLength(Int_t=-1)
virtual TObject * GetObjectFit() const
tomato 1-D histogram with a byte per channel (see TH1 documentation)
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Evaluate this function.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Double_t Ceil(Double_t x)
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
virtual Bool_t CanExtendAllAxes() const
Returns true if all axes are extendable.
Int_t fDimension
!Histogram dimension (1, 2 or 3 dim)
THist< 1, double, THistStatContent, THistStatUncertainty > TH1D
virtual Int_t BufferEmpty(Int_t action=0)
Fill histogram with all entries in the buffer.
virtual void SetParent(TObject *obj)
void Set(Int_t n)
Set size of this array to n floats.
virtual ~TH1D()
Destructor.
virtual void SetEntries(Double_t n)
TAxis fXaxis
X axis descriptor.
const TArrayD * GetXbins() const
virtual void SetParameter(Int_t param, Double_t value)
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
virtual void SetTitle(const char *title)
Change (i.e.
TFitResultPtr FitObject(TH1 *h1, TF1 *f1, Foption_t &option, const ROOT::Math::MinimizerOptions &moption, const char *goption, ROOT::Fit::DataRange &range)
fitting function for a TH1 (called from TH1::Fit)
virtual Int_t GetNdim() const =0
virtual Double_t GetStdDev(Int_t axis=1) const
Returns the Standard Deviation (Sigma).
virtual Int_t Poisson(Double_t mean)
Generates a random integer N according to a Poisson law.
Double_t Sqrt(Double_t x)
virtual void GetMinimumAndMaximum(Double_t &min, Double_t &max) const
Retrieve the minimum and maximum values in the histogram.
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual Bool_t IsInside(const Double_t *x) const
return kTRUE if the point is inside the function range
virtual void Set(Int_t nbins, Double_t xmin, Double_t xmax)
Initialize axis with fix bins.
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual Double_t GetMaximum(Double_t maxval=FLT_MAX) const
Return maximum value smaller than maxval of bins in the range, unless the value has been overridden b...
virtual Width_t GetLineWidth() const
Return the line width.
static Bool_t AlmostEqual(Double_t a, Double_t b, Double_t epsilon=0.00000001)
Test if two double are almost equal.
virtual Double_t EvalPar(const Double_t *x, const Double_t *params=0)
Evaluate function with given coordinates and parameters.
void SetHistLineColor(Color_t color=1)
virtual Float_t GetBarWidth() const
Double_t * fBuffer
[fBufferSize] entry buffer
virtual void GetBinXYZ(Int_t binglobal, Int_t &binx, Int_t &biny, Int_t &binz) const
Return binx, biny, binz corresponding to the global bin number globalbin see TH1::GetBin function abo...
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
Fit histogram with function fname.
virtual Int_t GetNcells() const
double norm(double *x, double *p)
virtual void UpdateBinContent(Int_t bin, Double_t content)
Raw update of bin content on internal data structure see convention for numbering bins in TH1::GetBin...
void Set(Int_t n)
Set size of this array to n doubles.
virtual TF1 * GetFunction(const char *name) const
Return pointer to function with name.
static bool CheckEqualAxes(const TAxis *a1, const TAxis *a2)
Check that the axis are the same.
double gamma_quantile(double z, double alpha, double theta)
Inverse ( ) of the cumulative distribution function of the lower tail of the gamma distribution (gamm...
virtual ~TH1S()
Destructor.
virtual Int_t GetNpar() const
void H1InitPolynom()
Compute Initial values of parameters for a polynom.
virtual void SetStats(Bool_t stats=kTRUE)
Set statistics option on/off.
TH1F & operator=(const TH1F &h1)
Operator =.
Long64_t BinarySearch(Long64_t n, const T *array, T value)
virtual Double_t GetMinimum(Double_t minval=-FLT_MAX) const
Return minimum value larger than minval of bins in the range, unless the value has been overridden by...
virtual Double_t GetContourLevel(Int_t level) const
Return value of contour number level.
virtual Double_t GetContourLevelPad(Int_t level) const
Return the value of contour number "level" in Pad coordinates.
virtual Double_t GetBinWithContent(Double_t c, Int_t &binx, Int_t firstx=0, Int_t lastx=0, Double_t maxdiff=0) const
Compute first binx in the range [firstx,lastx] for which diff = abs(bin_content-c) <= maxdiff...
virtual Float_t GetBarOffset() const
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
virtual Long64_t Merge(TCollection *list)
Add all histograms in the collection to this histogram.
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual Option_t * GetType() const =0
virtual Int_t ReadArray(Bool_t *&b)=0
Int_t fNcells
number of bins(1D), cells (2D) +U/Overflows
T MinElement(Long64_t n, const T *a)
void H1LeastSquareLinearFit(Int_t ndata, Double_t &a0, Double_t &a1, Int_t &ifail)
Least square linear fit without weights.
Array of chars or bytes (8 bits per element).
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.