544 class DifferentDimension:
public std::exception {};
545 class DifferentNumberOfBins:
public std::exception {};
546 class DifferentAxisLimits:
public std::exception {};
547 class DifferentBinLimits:
public std::exception {};
548 class DifferentLabels:
public std::exception {};
559 fFunctions =
new TList;
565 fTsumw = fTsumw2=fTsumwx=fTsumwx2=0;
570 fBinStatErrOpt = kNormal;
572 fYaxis.SetName(
"yaxis");
573 fZaxis.SetName(
"zaxis");
574 fXaxis.SetParent(
this);
575 fYaxis.SetParent(
this);
576 fZaxis.SetParent(
this);
645 if (nbins <= 0) {
Warning(
"TH1",
"nbins is <=0 - set to nbins = 1"); nbins = 1; }
666 if (nbins <= 0) {
Warning(
"TH1",
"nbins is <=0 - set to nbins = 1"); nbins = 1; }
689 if (nbins <= 0) {
Warning(
"TH1",
"nbins is <=0 - set to nbins = 1"); nbins = 1; }
735 fTsumw = fTsumw2=fTsumwx=fTsumwx2=0;
783 Error(
"Add",
"Attempt to add a non-existing function");
803 for (
Int_t i = 0; i < 10; ++i) s1[i] = 0;
809 Int_t bin, binx, biny, binz;
814 for (binz = 0; binz < ncellsz; ++binz) {
816 for (biny = 0; biny < ncellsy; ++biny) {
818 for (binx = 0; binx < ncellsx; ++binx) {
822 bin = binx + ncellsx * (biny + ncellsy * binz);
869 Error(
"Add",
"Attempt to add a non-existing histogram");
880 }
catch(DifferentNumberOfBins&) {
882 Info(
"Add",
"Attempt to add histograms with different number of bins - trying to use TH1::Merge");
884 Error(
"Add",
"Attempt to add histograms with different number of bins : nbins h1 = %d , nbins h2 = %d",
GetNbinsX(), h1->
GetNbinsX());
887 }
catch(DifferentAxisLimits&) {
889 Info(
"Add",
"Attempt to add histograms with different axis limits - trying to use TH1::Merge");
891 Warning(
"Add",
"Attempt to add histograms with different axis limits");
892 }
catch(DifferentBinLimits&) {
894 Info(
"Add",
"Attempt to add histograms with different bin limits - trying to use TH1::Merge");
896 Warning(
"Add",
"Attempt to add histograms with different bin limits");
897 }
catch(DifferentLabels&) {
900 Info(
"Add",
"Attempt to add histograms with different labels - trying to use TH1::Merge");
902 Info(
"Warning",
"Attempt to add histograms with different labels");
907 l.
Add(const_cast<TH1*>(h1));
908 auto iret =
Merge(&l);
920 Bool_t resetStats = (c1 < 0);
942 Double_t y1 = h1->RetrieveBinContent(bin);
943 Double_t y2 = this->RetrieveBinContent(bin);
950 if (e1sq) w1 = 1. / e1sq;
955 double sf = (s2[0] != 0) ? s2[1]/s2[0] : 1;
959 if (e2sq) w2 = 1. / e2sq;
964 double sf = (s1[0] != 0) ? s1[1]/s1[0] : 1;
969 double y = (w1*y1 + w2*y2)/(w1 + w2);
972 double err2 = 1./(w1 + w2);
973 if (err2 < 1.
E-200) err2 = 0;
977 AddBinContent(bin, c1 * factor * h1->RetrieveBinContent(bin));
989 if (i == 1) s1[i] += c1*c1*s2[i];
990 else s1[i] += c1*s2[i];
1030 Error(
"Add",
"Attempt to add a non-existing histogram");
1038 if (h1 == h2 && c2 < 0) {c2 = 0; normWidth =
kTRUE;}
1047 }
catch(DifferentNumberOfBins&) {
1049 Info(
"Add",
"Attempt to add histograms with different number of bins - trying to use TH1::Merge");
1051 Error(
"Add",
"Attempt to add histograms with different number of bins : nbins h1 = %d , nbins h2 = %d",
GetNbinsX(), h1->
GetNbinsX());
1054 }
catch(DifferentAxisLimits&) {
1056 Info(
"Add",
"Attempt to add histograms with different axis limits - trying to use TH1::Merge");
1058 Warning(
"Add",
"Attempt to add histograms with different axis limits");
1059 }
catch(DifferentBinLimits&) {
1061 Info(
"Add",
"Attempt to add histograms with different bin limits - trying to use TH1::Merge");
1063 Warning(
"Add",
"Attempt to add histograms with different bin limits");
1064 }
catch(DifferentLabels&) {
1067 Info(
"Add",
"Attempt to add histograms with different labels - trying to use TH1::Merge");
1069 Info(
"Warning",
"Attempt to add histograms with different labels");
1075 l.
Add(const_cast<TH1*>(h1));
1076 l.
Add(const_cast<TH1*>(h2));
1078 auto iret =
Merge(&l);
1098 Bool_t resetStats = (c1*c2 < 0) || normWidth;
1105 if (i == 1) s3[i] = c1*c1*s1[i] + c2*c2*s2[i];
1107 else s3[i] = c1*s1[i] + c2*s2[i];
1123 Int_t bin, binx, biny, binz;
1124 for (binz = 0; binz < nbinsz; ++binz) {
1126 for (biny = 0; biny < nbinsy; ++biny) {
1128 for (binx = 0; binx < nbinsx; ++binx) {
1130 bin =
GetBin(binx, biny, binz);
1143 Double_t y1 = h1->RetrieveBinContent(i);
1144 Double_t y2 = h2->RetrieveBinContent(i);
1151 if (e1sq) w1 = 1./ e1sq;
1155 double sf = (s1[0] != 0) ? s1[1]/s1[0] : 1;
1159 if (e2sq) w2 = 1./ e2sq;
1163 double sf = (s2[0] != 0) ? s2[1]/s2[0] : 1;
1168 double y = (w1*y1 + w2*y2)/(w1 + w2);
1171 double err2 = 1./(w1 + w2);
1172 if (err2 < 1.
E-200) err2 = 0;
1180 UpdateBinContent(i, c1 * h1->RetrieveBinContent(i) + c2 * h2->RetrieveBinContent(i));
1259 if (nbentries == 0) {
1269 if (nbentries < 0 && action == 0)
return 0;
1272 if (nbentries < 0) {
1273 nbentries = -nbentries;
1285 for (
Int_t i=1;i<nbentries;i++) {
1287 if (x < xmin) xmin =
x;
1288 if (x > xmax) xmax =
x;
1306 DoFillN(nbentries,&buffer[2],&buffer[1],2);
1319 if (nbentries == (
Int_t)fEntries)
1340 if (nbentries < 0) {
1343 nbentries = -nbentries;
1375 if ( h2Array->
fN != fN ) {
1376 throw DifferentBinLimits();
1380 for (
int i = 0; i < fN; ++i ) {
1382 throw DifferentBinLimits();
1404 throw DifferentLabels();
1409 throw DifferentLabels();
1412 for (
int i = 1; i <= a1->
GetNbins(); ++i) {
1415 if (label1 != label2) {
1416 throw DifferentLabels();
1433 throw DifferentAxisLimits();
1447 ::Info(
"CheckEqualAxes",
"Axes have different number of bins : nbin1 = %d nbin2 = %d",a1->
GetNbins(),a2->
GetNbins() );
1452 }
catch (DifferentAxisLimits&) {
1453 ::Info(
"CheckEqualAxes",
"Axes have different limits");
1458 }
catch (DifferentBinLimits&) {
1459 ::Info(
"CheckEqualAxes",
"Axes have different bin limits");
1466 }
catch (DifferentLabels&) {
1467 ::Info(
"CheckEqualAxes",
"Axes have different labels");
1483 Int_t nbins1 = lastBin1-firstBin1 + 1;
1491 if (firstBin2 < lastBin2) {
1493 nbins2 = lastBin1-firstBin1 + 1;
1498 if (nbins1 != nbins2 ) {
1499 ::Info(
"CheckConsistentSubAxes",
"Axes have different number of bins");
1505 ::Info(
"CheckConsistentSubAxes",
"Axes have different limits");
1518 if (h1 == h2)
return true;
1521 throw DifferentDimension();
1533 (dim > 1 && nbinsy != h2->
GetNbinsY()) ||
1534 (dim > 2 && nbinsz != h2->
GetNbinsZ()) ) {
1535 throw DifferentNumberOfBins();
1852 Int_t ndf = 0, igood = 0;
1860 printf(
"Chi2 = %f, Prob = %g, NDF = %d, igood = %d\n", chi2,prob,ndf,igood);
1863 if (ndf == 0)
return 0;
1911 Int_t i_start, i_end;
1912 Int_t j_start, j_end;
1913 Int_t k_start, k_end;
1942 Error(
"Chi2TestX",
"Histograms have different dimensions.");
1947 if (nbinx1 != nbinx2) {
1948 Error(
"Chi2TestX",
"different number of x channels");
1950 if (nbiny1 != nbiny2) {
1951 Error(
"Chi2TestX",
"different number of y channels");
1953 if (nbinz1 != nbinz2) {
1954 Error(
"Chi2TestX",
"different number of z channels");
1958 i_start = j_start = k_start = 1;
1989 ndf = (i_end - i_start + 1) * (j_end - j_start + 1) * (k_end - k_start + 1) - 1;
1996 if (scaledHistogram && !comparisonUU) {
1997 Info(
"Chi2TestX",
"NORM option should be used together with UU option. It is ignored");
2004 Double_t effEntries1 = (s[1] ? s[0] * s[0] / s[1] : 0.0);
2008 Double_t effEntries2 = (s[1] ? s[0] * s[0] / s[1] : 0.0);
2010 if (!comparisonUU && !comparisonUW && !comparisonWW ) {
2012 if (
TMath::Abs(sumBinContent1 - effEntries1) < 1) {
2013 if (
TMath::Abs(sumBinContent2 - effEntries2) < 1) comparisonUU =
true;
2014 else comparisonUW =
true;
2016 else comparisonWW =
true;
2020 if (
TMath::Abs(sumBinContent1 - effEntries1) >= 1) {
2021 Warning(
"Chi2TestX",
"First histogram is not unweighted and option UW has been requested");
2024 if ( (!scaledHistogram && comparisonUU) ) {
2025 if ( (
TMath::Abs(sumBinContent1 - effEntries1) >= 1) || (
TMath::Abs(sumBinContent2 - effEntries2) >= 1) ) {
2026 Warning(
"Chi2TestX",
"Both histograms are not unweighted and option UU has been requested");
2032 if (comparisonUU && scaledHistogram) {
2033 for (
Int_t i = i_start; i <= i_end; ++i) {
2034 for (
Int_t j = j_start; j <= j_end; ++j) {
2035 for (
Int_t k = k_start; k <= k_end; ++k) {
2039 Double_t cnt1 = RetrieveBinContent(bin);
2040 Double_t cnt2 = h2->RetrieveBinContent(bin);
2044 if (e1sq > 0.0) cnt1 =
TMath::Floor(cnt1 * cnt1 / e1sq + 0.5);
2047 if (e2sq > 0.0) cnt2 =
TMath::Floor(cnt2 * cnt2 / e2sq + 0.5);
2058 if (sumw1 <= 0.0 || sumw2 <= 0.0) {
2059 Error(
"Chi2TestX",
"Cannot use option NORM when one histogram has all zero errors");
2064 for (
Int_t i = i_start; i <= i_end; ++i) {
2065 for (
Int_t j = j_start; j <= j_end; ++j) {
2066 for (
Int_t k = k_start; k <= k_end; ++k) {
2070 sum1 += RetrieveBinContent(bin);
2071 sum2 += h2->RetrieveBinContent(bin);
2080 if (sum1 == 0.0 || sum2 == 0.0) {
2081 Error(
"Chi2TestX",
"one histogram is empty");
2085 if ( comparisonWW && ( sumw1 <= 0.0 && sumw2 <= 0.0 ) ){
2086 Error(
"Chi2TestX",
"Hist1 and Hist2 have both all zero errors\n");
2096 for (
Int_t i = i_start; i <= i_end; ++i) {
2097 for (
Int_t j = j_start; j <= j_end; ++j) {
2098 for (
Int_t k = k_start; k <= k_end; ++k) {
2102 Double_t cnt1 = RetrieveBinContent(bin);
2103 Double_t cnt2 = h2->RetrieveBinContent(bin);
2105 if (scaledHistogram) {
2110 if (e1sq > 0) cnt1 =
TMath::Floor(cnt1 * cnt1 / e1sq + 0.5);
2113 if (e2sq > 0) cnt2 =
TMath::Floor(cnt2 * cnt2 / e2sq + 0.5);
2117 if (
Int_t(cnt1) == 0 &&
Int_t(cnt2) == 0) --ndf;
2121 Double_t nexp1 = cntsum * sum1 / sum;
2124 if (res) res[i - i_start] = (cnt1 - nexp1) /
TMath::Sqrt(nexp1);
2130 Double_t correc = (1. - sum1 / sum) * (1. - cntsum / sum);
2133 Double_t delta = sum2 * cnt1 - sum1 * cnt2;
2134 chi2 += delta * delta / cntsum;
2139 chi2 /= sum1 * sum2;
2144 Info(
"Chi2TestX",
"There is a bin in h1 with less than 1 event.\n");
2148 Info(
"Chi2TestX",
"There is a bin in h2 with less than 1 event.\n");
2159 if ( comparisonUW ) {
2160 for (
Int_t i = i_start; i <= i_end; ++i) {
2161 for (
Int_t j = j_start; j <= j_end; ++j) {
2162 for (
Int_t k = k_start; k <= k_end; ++k) {
2166 Double_t cnt1 = RetrieveBinContent(bin);
2167 Double_t cnt2 = h2->RetrieveBinContent(bin);
2171 if (cnt1 * cnt1 == 0 && cnt2 * cnt2 == 0) {
2177 if (cnt2 * cnt2 == 0 && e2sq == 0) {
2181 e2sq = sumw2 / sum2;
2186 Error(
"Chi2TestX",
"Hist2 has in bin (%d,%d,%d) zero content and zero errors\n", i, j, k);
2192 if (e2sq > 0 && cnt2 * cnt2 / e2sq < 10) n++;
2194 Double_t var1 = sum2 * cnt2 - sum1 * e2sq;
2195 Double_t var2 = var1 * var1 + 4. * sum2 * sum2 * cnt1 * e2sq;
2200 while (var1 * var1 + cnt1 == 0 || var1 + var2 == 0) {
2203 var1 = sum2 * cnt2 - sum1 * e2sq;
2204 var2 = var1 * var1 + 4. * sum2 * sum2 * cnt1 * e2sq;
2208 while (var1 + var2 == 0) {
2211 var1 = sum2 * cnt2 - sum1 * e2sq;
2212 var2 = var1 * var1 + 4. * sum2 * sum2 * cnt1 * e2sq;
2213 while (var1 * var1 + cnt1 == 0 || var1 + var2 == 0) {
2216 var1 = sum2 * cnt2 - sum1 * e2sq;
2217 var2 = var1 * var1 + 4. * sum2 * sum2 * cnt1 * e2sq;
2222 Double_t probb = (var1 + var2) / (2. * sum2 * sum2);
2230 chi2 += delta1 * delta1 / nexp1;
2233 chi2 += delta2 * delta2 / e2sq;
2238 Double_t temp1 = sum2 * e2sq / var2;
2239 Double_t temp2 = 1.0 + (sum1 * e2sq - sum2 * cnt2) / var2;
2240 temp2 = temp1 * temp1 * sum1 * probb * (1.0 - probb) + temp2 * temp2 * e2sq / 4.0;
2253 Info(
"Chi2TestX",
"There is a bin in h1 with less than 1 event.\n");
2257 Info(
"Chi2TestX",
"There is a bin in h2 with less than 10 effective events.\n");
2267 for (
Int_t i = i_start; i <= i_end; ++i) {
2268 for (
Int_t j = j_start; j <= j_end; ++j) {
2269 for (
Int_t k = k_start; k <= k_end; ++k) {
2272 Double_t cnt1 = RetrieveBinContent(bin);
2273 Double_t cnt2 = h2->RetrieveBinContent(bin);
2279 if (cnt1 * cnt1 == 0 && cnt2 * cnt2 == 0) {
2284 if (e1sq == 0 && e2sq == 0) {
2286 Error(
"Chi2TestX",
"h1 and h2 both have bin %d,%d,%d with all zero errors\n", i,j,k);
2291 Double_t delta = sum2 * cnt1 - sum1 * cnt2;
2292 chi2 += delta * delta /
sigma;
2295 Double_t temp = cnt1 * sum1 * e2sq + cnt2 * sum2 * e1sq;
2308 res[i - i_start] =
z;
2311 if (e1sq > 0 && cnt1 * cnt1 / e1sq < 10) m++;
2312 if (e2sq > 0 && cnt2 * cnt2 / e2sq < 10) n++;
2318 Info(
"Chi2TestX",
"There is a bin in h1 with less than 10 effective events.\n");
2322 Info(
"Chi2TestX",
"There is a bin in h2 with less than 10 effective events.\n");
2338 Error(
"Chisquare",
"Function pointer is Null - return -1");
2388 for (
Int_t binz=1; binz <= nbinsz; ++binz) {
2389 for (
Int_t biny=1; biny <= nbinsy; ++biny) {
2390 for (
Int_t binx=1; binx <= nbinsx; ++binx) {
2393 if (onlyPositive && y < 0) {
2394 Error(
"ComputeIntegral",
"Bin content is negative - return a NaN value");
2405 Error(
"ComputeIntegral",
"Integral = zero");
return 0;
2450 hintegrated->
Reset();
2453 for (
Int_t binz = 1; binz <= nbinsz; ++binz) {
2454 for (
Int_t biny = 1; biny <= nbinsy; ++biny) {
2455 for (
Int_t binx = 1; binx <= nbinsx; ++binx) {
2456 const Int_t bin = hintegrated->
GetBin(binx, biny, binz);
2464 for (
Int_t binz = nbinsz; binz >= 1; --binz) {
2465 for (
Int_t biny = nbinsy; biny >= 1; --biny) {
2466 for (
Int_t binx = nbinsx; binx >= 1; --binx) {
2467 const Int_t bin = hintegrated->
GetBin(binx, biny, binz);
2493 ((
TH1&)obj).fDirectory->Remove(&obj);
2494 ((
TH1&)obj).fDirectory = 0;
2508 delete [] ((
TH1&)obj).fBuffer;
2509 ((
TH1&)obj).fBuffer = 0;
2515 ((
TH1&)obj).fBuffer = buf;
2520 if (a) a->
Set(fNcells);
2521 for (
Int_t i = 0; i <
fNcells; i++) ((
TH1&)obj).UpdateBinContent(i, RetrieveBinContent(i));
2541 ((
TH1&)obj).fXaxis.SetParent(&obj);
2542 ((
TH1&)obj).fYaxis.SetParent(&obj);
2543 ((
TH1&)obj).fZaxis.SetParent(&obj);
2555 ((
TH1&)
obj).fDirectory = 0;
2574 if(newname && strlen(newname) ) {
2632 Error(
"Add",
"Attempt to divide by a non-existing function");
2650 Int_t bin, binx, biny, binz;
2655 for (binz = 0; binz < nz; ++binz) {
2657 for (biny = 0; biny <
ny; ++biny) {
2659 for (binx = 0; binx <
nx; ++binx) {
2663 bin = binx + nx * (biny + ny * binz);
2666 if (cu) w = RetrieveBinContent(bin) / cu;
2701 Error(
"Divide",
"Input histogram passed does not exist (NULL).");
2710 }
catch(DifferentNumberOfBins&) {
2711 Error(
"Divide",
"Cannot divide histograms with different number of bins");
2713 }
catch(DifferentAxisLimits&) {
2714 Warning(
"Divide",
"Dividing histograms with different axis limits");
2715 }
catch(DifferentBinLimits&) {
2716 Warning(
"Divide",
"Dividing histograms with different bin limits");
2717 }
catch(DifferentLabels&) {
2718 Warning(
"Divide",
"Dividing histograms with different labels");
2726 Double_t c0 = RetrieveBinContent(i);
2774 Error(
"Divide",
"At least one of the input histograms passed does not exist (NULL).");
2784 }
catch(DifferentNumberOfBins&) {
2785 Error(
"Divide",
"Cannot divide histograms with different number of bins");
2787 }
catch(DifferentAxisLimits&) {
2788 Warning(
"Divide",
"Dividing histograms with different axis limits");
2789 }
catch(DifferentBinLimits&) {
2790 Warning(
"Divide",
"Dividing histograms with different bin limits");
2791 }
catch(DifferentLabels&) {
2792 Warning(
"Divide",
"Dividing histograms with different labels");
2797 Error(
"Divide",
"Coefficient of dividing histogram cannot be zero");
2809 Double_t b1 = h1->RetrieveBinContent(i);
2810 Double_t b2 = h2->RetrieveBinContent(i);
2834 fSumw2.
fArray[i] = c1sq * c2sq * (e1sq * b2sq + e2sq * b1sq) / (c2sq * c2sq * b2sq * b2sq);
2888 if (index>indb && index<indk) index = -1;
2894 if (!
gPad->IsEditable())
gROOT->MakeDefCanvas();
2896 if (
gPad->GetX1() == 0 &&
gPad->GetX2() == 1 &&
2897 gPad->GetY1() == 0 &&
gPad->GetY2() == 1 &&
2898 gPad->GetListOfPrimitives()->GetSize()==0) opt2.
Remove(index,4);
2906 if (index>=0) opt2.
Remove(index,4);
2957 Error(
"DrawNormalized",
"Sum of weights is null. Cannot normalize histogram: %s",
GetName());
2969 if (opt.
IsNull() || opt ==
"SAME") opt +=
"HIST";
3006 Int_t range, stat, add;
3026 for (
Int_t binz = 1; binz <= nbinsz; ++binz) {
3028 for (
Int_t biny = 1; biny <= nbinsy; ++biny) {
3030 for (
Int_t binx = 1; binx <= nbinsx; ++binx) {
3033 if (range && !f1->
IsInside(x))
continue;
3132 for (
Int_t binx = 1; binx<=ndim[0]; binx++) {
3133 for (
Int_t biny=1; biny<=ndim[1]; biny++) {
3134 for (
Int_t binz=1; binz<=ndim[2]; binz++) {
3165 if (bin <0)
return -1;
3199 if (bin <0)
return -1;
3233 if (bin <0)
return -1;
3270 for (i=0;i<ntimes;i+=stride) {
3277 DoFillN((ntimes-i)/stride,&x[i],&w[i],stride);
3281 DoFillN(ntimes, x, w, stride);
3296 for (i=0;i<ntimes;i+=stride) {
3298 if (bin <0)
continue;
3303 if (bin == 0 || bin > nbins) {
3310 fTsumwx2 += z*x[i]*x[i];
3331 Int_t bin, binx, ibin, loop;
3335 if (!f1) {
Error(
"FillRandom",
"Unknown function: %s",fname);
return; }
3345 Info(
"FillRandom",
"Using function axis and range [%g,%g]",xmin, xmax);
3351 Int_t nbinsx = last-first+1;
3355 for (binx=1;binx<=nbinsx;binx++) {
3357 integral[binx] = integral[binx-1] + fint;
3361 if (integral[nbinsx] == 0 ) {
3363 Error(
"FillRandom",
"Integral = zero");
return;
3365 for (bin=1;bin<=nbinsx;bin++) integral[bin] /= integral[nbinsx];
3368 for (loop=0;loop<ntimes;loop++) {
3374 +xAxis->
GetBinWidth(ibin+first)*(r1-integral[ibin])/(integral[ibin+1] - integral[ibin]);
3398 if (!h) {
Error(
"FillRandom",
"Null histogram");
return; }
3400 Error(
"FillRandom",
"Histograms with different dimensions");
return;
3408 if (ntimes > 10*nbins) {
3412 if (sumw == 0)
return;
3414 for (
Int_t bin=first;bin<=last;bin++) {
3415 Double_t mean = h->RetrieveBinContent(bin)*ntimes/sumw;
3426 if (sumgen < ntimes) {
3428 for (i =
Int_t(sumgen+0.5); i < ntimes; ++i)
3434 else if (sumgen > ntimes) {
3436 i =
Int_t(sumgen+0.5);
3437 while( i > ntimes) {
3452 catch(std::exception&) {}
3459 for (loop=0;loop<ntimes;loop++) {
3486 return binx + nx*biny;
3494 return binx + nx*(biny +ny*binz);
3520 return binx + nx*biny;
3528 return binx + nx*(biny +ny*binz);
3543 Warning(
"FindFirstBinAbove",
"Invalid axis number : %d, axis x assumed\n",axis);
3548 if (RetrieveBinContent(bin) > threshold)
return bin;
3563 Warning(
"FindLastBinAbove",
"Invalid axis number : %d, axis x assumed\n",axis);
3567 for (
Int_t bin=nbins;bin>=1;bin--) {
3568 if (RetrieveBinContent(bin) > threshold)
return bin;
3609 linear= (
char*)strstr(fname,
"++");
3616 f1=
new TF1(fname, fname, xxmin, xxmax);
3617 return Fit(f1,option,goption,xxmin,xxmax);
3620 f2=
new TF2(fname, fname);
3621 return Fit(f2,option,goption,xxmin,xxmax);
3624 f3=
new TF3(fname, fname);
3625 return Fit(f3,option,goption,xxmin,xxmax);
3630 f1 = (
TF1*)
gROOT->GetFunction(fname);
3631 if (!f1) {
Printf(
"Unknown function: %s",fname);
return -1; }
3632 return Fit(f1,option,goption,xxmin,xxmax);
3914 gROOT->MakeDefCanvas();
3917 Error(
"FitPanel",
"Unable to create a default canvas");
3924 if (handler && handler->
LoadPlugin() != -1) {
3926 Error(
"FitPanel",
"Unable to create the FitPanel");
3929 Error(
"FitPanel",
"Unable to find the FitPanel plug-in");
3971 asym->SetTitle(title);
3981 top->
Add(h1,h2,1,-c2);
3982 bottom->
Add(h1,h2,1,c2);
3983 asym->Divide(top,bottom);
3987 Int_t zmax = asym->GetNbinsZ();
3997 for(
Int_t k=1; k<= zmax; k++){
4001 Double_t a = h1->RetrieveBinContent(bin);
4002 Double_t b = h2->RetrieveBinContent(bin);
4003 Double_t bot = bottom->RetrieveBinContent(bin);
4013 Double_t error = 2*
TMath::Sqrt(a*a*c2*c2*dbsq + c2*c2*b*b*dasq+a*a*b*b*dc2*dc2)/(bot*bot);
4014 asym->SetBinError(i,j,k,error);
4076 return (s[1] ? s[0]*s[0]/s[1] :
TMath::Abs(s[0]) );
4087 return ((
TH1*)
this)->GetPainter()->GetObjectInfo(px,py);
4184 Error(
"GetQuantiles",
"Only available for 1-d histograms");
4194 Int_t nq = nprobSum;
4199 for (i=1;i<nq;i++) {
4204 for (i = 0; i < nq; i++) {
4206 while (ibin < nbins-1 &&
fIntegral[ibin+1] == prob[i]) {
4207 if (
fIntegral[ibin+2] == prob[i]) ibin++;
4212 if (dint > 0) q[i] +=
GetBinWidth(ibin+1)*(prob[i]-fIntegral[ibin])/dint;
4215 if (!probSum)
delete [] prob;
4235 Double_t allcha, sumx, sumx2,
x, val, stddev, mean;
4246 allcha = sumx = sumx2 = 0;
4247 for (bin=hxfirst;bin<=hxlast;bin++) {
4250 if (val > valmax) valmax = val;
4255 if (allcha == 0)
return;
4257 stddev = sumx2/allcha - mean*mean;
4260 if (stddev == 0) stddev = binwidx*(hxlast-hxfirst+1)/4;
4267 Double_t constant = 0.5*(valmax+binwidx*allcha/(sqrtpi*stddev));
4275 if ((mean < xmin || mean > xmax) && stddev > (xmax-xmin)) {
4276 mean = 0.5*(xmax+
xmin);
4277 stddev = 0.5*(xmax-
xmin);
4297 Int_t nchanx = hxlast - hxfirst + 1;
4319 Int_t nchanx = hxlast - hxfirst + 1;
4322 if (nchanx <=1 || npar == 1) {
4346 const Int_t idim = 20;
4357 if (m > idim || m > n)
return;
4360 for (l = 2; l <=
m; ++
l) {
4362 b[m + l*20 - 21] = zero;
4369 for (k = hxfirst; k <= hxlast; ++k) {
4374 for (l = 2; l <=
m; ++
l) {
4377 da[l-1] += power*yk;
4379 for (l = 2; l <=
m; ++
l) {
4381 b[m + l*20 - 21] += power;
4384 for (i = 3; i <=
m; ++i) {
4385 for (k = i; k <=
m; ++k) {
4386 b[k - 1 + (i-1)*20 - 21] = b[k + (i-2)*20 - 21];
4391 for (i=0; i<
m; ++i) a[i] = da[i];
4412 xbar = ybar = x2bar = xybar = 0;
4417 for (i = hxfirst; i <= hxlast; ++i) {
4421 if (yk <= 0) yk = 1e-9;
4430 det = fn*x2bar - xbar*xbar;
4438 a0 = (x2bar*ybar - xbar*xybar) / det;
4439 a1 = (fn*xybar - xbar*ybar) / det;
4451 Int_t a_dim1, a_offset, b_dim1, b_offset;
4453 Int_t im1, jp1, nm1, nmi;
4459 b_offset = b_dim1 + 1;
4462 a_offset = a_dim1 + 1;
4465 if (idim < n)
return;
4468 for (j = 1; j <=
n; ++j) {
4469 if (a[j + j*a_dim1] <= 0) { ifail = -1;
return; }
4470 a[j + j*a_dim1] = one / a[j + j*a_dim1];
4471 if (j == n)
continue;
4473 for (l = jp1; l <=
n; ++
l) {
4474 a[j + l*a_dim1] = a[j + j*a_dim1] * a[l + j*a_dim1];
4475 s1 = -a[l + (j+1)*a_dim1];
4476 for (i = 1; i <= j; ++i) { s1 = a[l + i*a_dim1] * a[i + (j+1)*a_dim1] + s1; }
4477 a[l + (j+1)*a_dim1] = -s1;
4482 for (l = 1; l <= k; ++
l) {
4483 b[l*b_dim1 + 1] = a[a_dim1 + 1]*b[l*b_dim1 + 1];
4486 for (l = 1; l <= k; ++
l) {
4487 for (i = 2; i <=
n; ++i) {
4489 s21 = -b[i + l*b_dim1];
4490 for (j = 1; j <= im1; ++j) {
4491 s21 = a[i + j*a_dim1]*b[j + l*b_dim1] + s21;
4493 b[i + l*b_dim1] = -a[i + i*a_dim1]*s21;
4496 for (i = 1; i <= nm1; ++i) {
4498 s22 = -b[nmi + l*b_dim1];
4499 for (j = 1; j <= i; ++j) {
4501 s22 = a[nmi + nmjp1*a_dim1]*b[nmjp1 + l*b_dim1] + s22;
4503 b[nmi + l*b_dim1] = -s22;
4537 if (binx < 0) binx = 0;
4538 if (binx > ofx) binx = ofx;
4554 binx = binglobal%
nx;
4560 binx = binglobal%
nx;
4561 biny = ((binglobal-binx)/nx)%
ny;
4566 binx = binglobal%
nx;
4567 biny = ((binglobal-binx)/nx)%
ny;
4568 binz = ((binglobal-binx)/nx -biny)/
ny;
4585 Error(
"GetRandom",
"Function only valid for 1-d histograms");
4592 if (
fIntegral[nbinsx+1] != fEntries) integral = ((
TH1*)
this)->ComputeIntegral(
true);
4595 integral = ((
TH1*)
this)->ComputeIntegral(
true);
4597 if (integral == 0)
return 0;
4631 if (bin < 0) bin = 0;
4632 if (bin >= fNcells) bin = fNcells-1;
4634 return RetrieveBinContent(bin);
4656 Error(
"GetBinWithContent",
"function is only valid for 1-D histograms");
4662 if (firstx <= 0) firstx = 1;
4666 for (
Int_t i=firstx;i<=lastx;i++) {
4668 if (diff <= 0) {binx = i;
return diff;}
4669 if (diff < curmax && diff <= maxdiff) {curmax = diff, binminx=i;}
4689 return RetrieveBinContent(1);
4694 y0 = RetrieveBinContent(xbin-1);
4696 y1 = RetrieveBinContent(xbin);
4699 y0 = RetrieveBinContent(xbin);
4701 y1 = RetrieveBinContent(xbin+1);
4704 return y0 + (x-x0)*((y1-y0)/(x1-x0));
4714 Error(
"Interpolate",
"This function must be called with 1 argument for a TH1");
4724 Error(
"Interpolate",
"This function must be called with 1 argument for a TH1");
4734 Int_t binx, biny, binz;
4756 Int_t binx, biny, binz;
4762 return (binx <= 0 || biny <= 0);
4764 return (binx <= 0 || biny <= 0 || binz <= 0);
4783 Error(
"LabelsDeflate",
"Invalid axis option %s",ax);
4794 while ((obj =
next())) {
4795 Int_t ibin = obj->GetUniqueID();
4796 if (ibin > nbins) nbins = ibin;
4798 if (nbins < 1) nbins = 1;
4807 if (xmax <= xmin) xmax = xmin +
nbins;
4809 axis->
Set(nbins,xmin,xmax);
4822 Int_t bin,binx,biny,binz;
4823 for (bin=0; bin < hold->
fNcells; ++bin) {
4826 Double_t cu = hold->RetrieveBinContent(bin);
4832 fEntries = oldEntries;
4859 xmax = xmin + 2*(xmax-
xmin);
4862 axis->
Set(2*nbins,xmin,xmax);
4872 Int_t bin,ibin,binx,biny,binz;
4873 for (ibin =0; ibin <
fNcells; ibin++) {
4875 bin = hold->
GetBin(binx,biny,binz);
4884 fEntries = oldEntries;
4910 Warning(
"LabelsOption",
"Cannot sort. No labels");
4943 if (sort < 0)
return;
4945 Error(
"LabelsOption",
"Sorting by value not implemented for 3-D histograms");
4951 std::vector<Int_t>
a(n+2);
4954 std::vector<Double_t> cont;
4955 std::vector<Double_t>
errors;
4957 TIter nextold(labels);
4959 while ((obj=nextold())) {
4968 for (i=1;i<=
n;i++) {
4970 if (!errors.empty()) errors[i-1] =
GetBinError(i);
4974 for (i=1;i<=
n;i++) {
4976 if (!errors.empty())
SetBinError(i,errors[a[i-1]]);
4978 for (i=1;i<=
n;i++) {
4979 obj = labold->
At(a[i-1]);
4984 std::vector<Double_t> pcont(n+2);
4987 cont.resize( (nx+2)*(ny+2));
4988 if (
fSumw2.
fN) errors.resize( (nx+2)*(ny+2));
4989 for (i=1;i<=
nx;i++) {
4990 for (j=1;j<=
ny;j++) {
4992 if (!errors.empty()) errors[i+nx*j] =
GetBinError(i,j);
4995 pcont[k-1] += cont[i+nx*j];
5001 obj = labold->
At(a[i]);
5006 for (i=1;i<=
n;i++) {
5007 for (j=1;j<=
ny;j++) {
5009 if (!errors.empty())
SetBinError(i,j,errors[a[i-1]+1+nx*j]);
5015 for (i=1;i<=
nx;i++) {
5016 for (j=1;j<=
n;j++) {
5018 if (!errors.empty())
SetBinError(i,j,errors[i+nx*(a[j-1]+1)]);
5027 const UInt_t kUsed = 1<<18;
5031 for (i=1;i<=
n;i++) {
5032 const char *label =
"zzzzzzzzzzzz";
5033 for (j=1;j<=
n;j++) {
5034 obj = labold->
At(j-1);
5036 if (obj->
TestBit(kUsed))
continue;
5038 if (strcmp(label,obj->
GetName()) < 0)
continue;
5049 for (i=1;i<=
n;i++) {
5050 obj = labels->
At(i-1);
5058 for (i=1;i<=
n;i++) {
5060 if (!errors.empty()) errors[i] =
GetBinError(a[i]);
5062 for (i=1;i<=
n;i++) {
5070 if (
fSumw2.
fN) errors.resize(nx*ny);
5071 for (i=0;i<
nx;i++) {
5072 for (j=0;j<
ny;j++) {
5074 if (!errors.empty()) errors[i+nx*j] =
GetBinError(i,j);
5078 for (i=1;i<=
n;i++) {
5079 for (j=0;j<
ny;j++) {
5081 if (!errors.empty())
SetBinError(i,j,errors[a[i]+nx*j]);
5085 for (i=0;i<
nx;i++) {
5086 for (j=1;j<=
n;j++) {
5088 if (!errors.empty())
SetBinError(i,j,errors[i+nx*a[j]]);
5096 cont.resize(nx*ny*nz);
5097 if (
fSumw2.
fN) errors.resize(nx*ny*nz);
5098 for (i=0;i<
nx;i++) {
5099 for (j=0;j<
ny;j++) {
5100 for (k=0;k<nz;k++) {
5102 if (!errors.empty()) errors[i+nx*(j+ny*k)] =
GetBinError(i,j,k);
5108 for (i=1;i<=
n;i++) {
5109 for (j=0;j<
ny;j++) {
5110 for (k=0;k<nz;k++) {
5112 if (!errors.empty())
SetBinError(i,j,k,errors[a[i]+nx*(j+ny*k)]);
5119 for (i=0;i<
nx;i++) {
5120 for (j=1;j<=
n;j++) {
5121 for (k=0;k<nz;k++) {
5123 if (!errors.empty())
SetBinError(i,j,k,errors[i+nx*(a[j]+ny*k)]);
5130 for (i=0;i<
nx;i++) {
5131 for (j=0;j<
ny;j++) {
5132 for (k=1;k<=
n;k++) {
5134 if (!errors.empty())
SetBinError(i,j,k,errors[i+nx*(j+ny*a[k])]);
5167 bool isEquidistant =
true;
5169 for (
int i = 1; i < axis.
GetNbins(); ++i) {
5172 isEquidistant &= match;
5176 return isEquidistant;
5204 if (width1 == 0 || width2 == 0)
5235 delta = (xmax - destAxis.
GetXmax())/width1;
5240 delta = (xmax - anAxis.
GetXmax())/width2;
5245 delta = (xmax - destAxis.
GetXmax())/width1;
5250 printf(
"TH1::RecomputeAxisLimits - Impossible\n");
5332 allHaveLimits = allHaveLimits && hasLimits;
5340 if (firstHistWithLimits ) {
5346 firstHistWithLimits =
kFALSE;
5352 if (!initialLimitsFound) {
5353 initialLimitsFound =
kTRUE;
5365 Error(
"Merge",
"Cannot merge histograms - limits are inconsistent:\n "
5366 "first: (%d, %f, %f), second: (%d, %f, %f)",
5375 if (allHaveLabels) {
5377 Bool_t haveOneLabel = (hlabels != 0);
5379 if (foundLabelHist && allHaveLabels && !haveOneLabel) {
5380 Warning(
"Merge",
"Not all histograms have labels. I will ignore labels,"
5381 " falling back to bin numbering mode.");
5384 allHaveLabels &= (haveOneLabel);
5386 if (haveOneLabel) foundLabelHist =
kTRUE;
5399 Int_t non_zero_bins = 0;
5407 if (non_zero_bins > hlabels->
GetEntries() ) {
5408 Warning(
"Merge",
"Histogram %s contains non-empty bins without labels - falling back to bin numbering mode",h->
GetName() );
5420 }
while ( ( h = dynamic_cast<TH1*> (
next() ) ) !=
NULL );
5422 if (!h && (*next) ) {
5423 Error(
"Merge",
"Attempt to merge object of class: %s to a %s",
5424 (*next)->ClassName(),this->
ClassName());
5435 if (!allSameLimits) {
5452 if (initialLimitsFound && (!allSameLimits || !allHaveLimits )) {
5462 if (!allHaveLimits && !allHaveLabels) {
5466 if ( (hist->GetXaxis()->GetXmin() >= hist->GetXaxis()->GetXmax() ) && hist->fBuffer ) {
5469 for (
Int_t i = 0; i < nbentries; i++)
5470 Fill(hist->fBuffer[2*i + 2], hist->fBuffer[2*i + 1]);
5477 if (!initialLimitsFound ) {
5499 for (
Int_t i=0;i<
kNstat;i++) {totstats[i] = stats[i] = 0;}
5512 Double_t histEntries = hist->GetEntries();
5513 if (hist->fTsumw == 0 && histEntries == 0)
continue;
5517 if (allHaveLabels || (hist->GetXaxis()->GetXmin() < hist->GetXaxis()->GetXmax()) ) {
5519 hist->GetStats(stats);
5521 totstats[i] += stats[i];
5522 nentries += histEntries;
5524 Int_t nx = hist->GetXaxis()->GetNbins();
5526 for (
Int_t binx = 0; binx <= nx + 1; binx++) {
5528 Double_t cu = hist->RetrieveBinContent(binx);
5531 if (
fSumw2.
fN) e1sq= hist->GetBinErrorSqUnchecked(binx);
5536 if (!allHaveLabels) {
5538 if (!allSameLimits) {
5539 if ( binx==0 || binx== nx+1) {
5540 Error(
"Merge",
"Cannot merge histograms - the histograms have"
5541 " different limits and undeflows/overflows are present."
5542 " The initial histogram is now broken!");
5557 const char* label=hist->GetXaxis()->GetBinLabel(binx);
5561 Error(
"Merge",
"Histogram %s with labels has NULL label pointer for bin %d",
5562 hist->GetName(),binx );
5566 if (label[0] == 0 && (binx == 0 || binx ==(nx+1)) ) {
5576 Warning(
"Merge",
"Histogram %s has labels but CanExtendAllAxes() is false - label %s is lost",
GetName(), label);
5585 Fatal(
"Merge",
"Fatal error merging histogram %s - bin number is %d and array size is %d",
GetName(), ix,fNcells);
5622 Error(
"Add",
"Attempt to multiply by a non-existing function");
5644 for (
Int_t binz = 0; binz < nz; ++binz) {
5646 for (
Int_t biny = 0; biny <
ny; ++biny) {
5648 for (
Int_t binx = 0; binx <
nx; ++binx) {
5652 Int_t bin = binx + nx * (biny + ny *binz);
5685 Error(
"Multiply",
"Attempt to multiply by a non-existing histogram");
5694 }
catch(DifferentNumberOfBins&) {
5695 Error(
"Multiply",
"Attempt to multiply histograms with different number of bins");
5697 }
catch(DifferentAxisLimits&) {
5698 Warning(
"Multiply",
"Attempt to multiply histograms with different axis limits");
5699 }
catch(DifferentBinLimits&) {
5700 Warning(
"Multiply",
"Attempt to multiply histograms with different bin limits");
5701 }
catch(DifferentLabels&) {
5702 Warning(
"Multiply",
"Attempt to multiply histograms with different labels");
5714 Double_t c0 = RetrieveBinContent(i);
5748 Error(
"Multiply",
"Attempt to multiply by a non-existing histogram");
5758 }
catch(DifferentNumberOfBins&) {
5759 Error(
"Multiply",
"Attempt to multiply histograms with different number of bins");
5761 }
catch(DifferentAxisLimits&) {
5762 Warning(
"Multiply",
"Attempt to multiply histograms with different axis limits");
5763 }
catch(DifferentBinLimits&) {
5764 Warning(
"Multiply",
"Attempt to multiply histograms with different bin limits");
5765 }
catch(DifferentLabels&) {
5766 Warning(
"Multiply",
"Attempt to multiply histograms with different labels");
5779 Double_t b1 = h1->RetrieveBinContent(i);
5780 Double_t b2 = h2->RetrieveBinContent(i);
5863 if ((ngroup <= 0) || (ngroup > nbins)) {
5864 Error(
"Rebin",
"Illegal value of ngroup=%d",ngroup);
5869 Error(
"Rebin",
"Operation valid on 1-D histograms only");
5872 if (!newname && xbins) {
5873 Error(
"Rebin",
"if xbins is specified, newname must be given");
5877 Int_t newbins = nbins/ngroup;
5879 Int_t nbg = nbins/ngroup;
5880 if (nbg*ngroup != nbins) {
5881 Warning(
"Rebin",
"ngroup=%d is not an exact divider of nbins=%d.",ngroup,nbins);
5897 for (bin=0;bin<nbins+2;bin++) oldBins[bin] = RetrieveBinContent(bin);
5901 for (bin=0;bin<nbins+2;bin++) oldErrors[bin] =
GetBinError(bin);
5906 Warning(
"Rebin",
"underflow entries will not be used when rebinning");
5907 if (xbins[newbins] >
fXaxis.
GetXmax() && oldBins[nbins+1] != 0 )
5908 Warning(
"Rebin",
"overflow entries will not be used when rebinning");
5914 if ((newname && strlen(newname) > 0) || xbins) {
5924 bool resetStat =
false;
5926 if(!xbins && (newbins*ngroup != nbins)) {
5951 hnew->
SetBins(newbins,xmin,xmax);
5974 Int_t oldbin = startbin;
5976 for (bin = 1;bin<=newbins;bin++) {
5979 Int_t imax = ngroup;
5981 for (i=0;i<ngroup;i++) {
5982 if( (oldbin+i > nbins) ||
5987 binContent += oldBins[oldbin+i];
5988 if (oldErrors) binError += oldErrors[oldbin+i]*oldErrors[oldbin+i];
5998 for (i = 0; i < startbin; ++i) {
5999 binContent += oldBins[i];
6000 if (oldErrors) binError += oldErrors[i]*oldErrors[i];
6007 for (i = oldbin; i <= nbins+1; ++i) {
6008 binContent += oldBins[i];
6009 if (oldErrors) binError += oldErrors[i]*oldErrors[i];
6018 if (!resetStat) hnew->
PutStats(stat);
6020 if (oldErrors)
delete [] oldErrors;
6040 if (xmin >= xmax)
return kFALSE;
6046 while (point < xmin) {
6049 xmin = xmin - range;
6058 while (point >= xmax) {
6061 xmax = xmax + range;
6119 Int_t ix,iy,iz,ibin,binx,biny,binz,bin;
6121 for (binz=1;binz<=nbinsz;binz++) {
6124 for (biny=1;biny<=nbinsy;biny++) {
6127 for (binx=1;binx<=nbinsx;binx++) {
6130 bin = hold->
GetBin(binx,biny,binz);
6177 if (opt.
Contains(
"width"))
Add(
this,
this, c1, -1);
6187 if (ncontours == 0)
return;
6189 for (
Int_t i = 0; i < ncontours; ++i) levels[i] *= c1;
6230 return oldExtendBitMask;
6279 str1 = str1(isc+1, lns);
6280 isc = str1.
Index(
";");
6283 str2.ReplaceAll(
"#semicolon",10,
";",1);
6286 str1 = str1(isc+1, lns);
6287 isc = str1.
Index(
";");
6290 str2.ReplaceAll(
"#semicolon",10,
";",1);
6293 str1 = str1(isc+1, lns);
6320 ::Error(
"SmoothArray",
"Need at least 3 points for smoothing: n = %d",nn);
6327 std::vector<double> yy(nn);
6328 std::vector<double> zz(nn);
6329 std::vector<double> rr(nn);
6331 for (
Int_t pass=0;pass<ntimes;pass++) {
6333 std::copy(xx, xx+nn, zz.begin() );
6337 for (
int noent = 0; noent < 2; ++noent) {
6340 for (
int kk = 0; kk < 3; kk++) {
6341 std::copy(zz.begin(), zz.end(), yy.begin());
6342 int medianType = (kk != 1) ? 3 : 5;
6343 int ifirst = (kk != 1 ) ? 1 : 2;
6344 int ilast = (kk != 1 ) ? nn-1 : nn -2;
6348 for ( ii = ifirst; ii < ilast; ii++) {
6349 assert(ii - ifirst >= 0);
6350 for (
int jj = 0; jj < medianType; jj++) {
6351 hh[jj] = yy[ii - ifirst + jj ];
6360 hh[2] = 3*zz[1] - 2*zz[2];
6365 hh[2] = 3*zz[nn - 2] - 2*zz[nn - 3];
6371 for (ii = 0; ii < 3; ii++) {
6376 for (ii = 0; ii < 3; ii++) {
6377 hh[
ii] = yy[nn - 3 +
ii];
6384 std::copy ( zz.begin(), zz.end(), yy.begin() );
6387 for (ii = 2; ii < (nn - 2); ii++) {
6388 if (zz[ii - 1] != zz[ii])
continue;
6389 if (zz[ii] != zz[ii + 1])
continue;
6390 hh[0] = zz[ii - 2] - zz[
ii];
6391 hh[1] = zz[ii + 2] - zz[
ii];
6392 if (hh[0] * hh[1] <= 0)
continue;
6395 yy[
ii] = -0.5*zz[ii - 2*jk] + zz[
ii]/0.75 + zz[ii + 2*jk] /6.;
6396 yy[ii + jk] = 0.5*(zz[ii + 2*jk] - zz[ii - 2*jk]) + zz[ii];
6401 for (ii = 1; ii < nn - 1; ii++) {
6402 zz[
ii] = 0.25*yy[ii - 1] + 0.5*yy[
ii] + 0.25*yy[ii + 1];
6405 zz[nn - 1] = yy[nn - 1];
6410 std::copy(zz.begin(), zz.end(), rr.begin());
6413 for (ii = 0; ii < nn; ii++) {
6414 zz[
ii] = xx[
ii] - zz[
ii];
6422 for (ii = 0; ii < nn; ii++) {
6423 if (xmin < 0) xx[
ii] = rr[
ii] + zz[
ii];
6442 Error(
"Smooth",
"Smooth only supported for 1-d histograms");
6447 Error(
"Smooth",
"Smooth only supported for histograms with >= 3 bins. Nbins = %d",nbins);
6461 nbins = lastbin - firstbin + 1;
6465 for (i=0;i<
nbins;i++) {
6466 xx[i] = RetrieveBinContent(i+firstbin);
6471 for (i=0;i<
nbins;i++) {
6495 void TH1::Streamer(
TBuffer &b)
6511 while ((obj=
next())) {
6517 TNamed::Streamer(b);
6518 TAttLine::Streamer(b);
6519 TAttFill::Streamer(b);
6520 TAttMarker::Streamer(b);
6538 b >> maximum; fMaximum = maximum;
6539 b >> minimum; fMinimum = minimum;
6580 else if (opt.
Contains(
"range")) all = 1;
6581 else if (opt.
Contains(
"base")) all = 2;
6584 Int_t bin, binx, biny, binz;
6585 Int_t firstx=0,lastx=0,firsty=0,lasty=0,firstz=0,lastz=0;
6608 for (binx=firstx;binx<=lastx;binx++) {
6610 w = RetrieveBinContent(binx);
6612 if(
fSumw2.
fN)
printf(
" fSumw[%d]=%g, x=%g, error=%g\n",binx,w,x,e);
6613 else printf(
" fSumw[%d]=%g, x=%g\n",binx,w,x);
6617 for (biny=firsty;biny<=lasty;biny++) {
6619 for (binx=firstx;binx<=lastx;binx++) {
6622 w = RetrieveBinContent(bin);
6624 if(
fSumw2.
fN)
printf(
" fSumw[%d][%d]=%g, x=%g, y=%g, error=%g\n",binx,biny,w,x,y,e);
6625 else printf(
" fSumw[%d][%d]=%g, x=%g, y=%g\n",binx,biny,w,x,y);
6630 for (binz=firstz;binz<=lastz;binz++) {
6632 for (biny=firsty;biny<=lasty;biny++) {
6634 for (binx=firstx;binx<=lastx;binx++) {
6635 bin =
GetBin(binx,biny,binz);
6637 w = RetrieveBinContent(bin);
6639 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);
6640 else printf(
" fSumw[%d][%d][%d]=%g, x=%g, y=%g, z=%g\n",binx,biny,binz,w,x,y,z);
6700 if (opt ==
"ICES")
return;
6731 static Int_t nxaxis = 0;
6732 static Int_t nyaxis = 0;
6733 static Int_t nzaxis = 0;
6734 TString sxaxis=
"xAxis",syaxis=
"yAxis",szaxis=
"zAxis";
6745 if (i != 0) out <<
", ";
6748 out <<
"}; " << std::endl;
6761 if (i != 0) out <<
", ";
6764 out <<
"}; " << std::endl;
6777 if (i != 0) out <<
", ";
6780 out <<
"}; " << std::endl;
6784 out <<
" "<<std::endl;
6794 static Int_t hcounter = 0;
6801 histName += hcounter;
6804 const char *hname = histName.
Data();
6805 if (!strlen(hname)) hname =
"unnamed";
6810 out << hname <<
" = new " <<
ClassName() <<
"(" << quote
6811 << hname << quote <<
"," << quote<< t.
Data() << quote
6814 out <<
", "<<sxaxis;
6821 out <<
", "<<syaxis;
6829 out <<
", "<<szaxis;
6834 out <<
");" << std::endl;
6838 for (bin=0;bin<
fNcells;bin++) {
6839 Double_t bc = RetrieveBinContent(bin);
6841 out<<
" "<<hname<<
"->SetBinContent("<<bin<<
","<<bc<<
");"<<std::endl;
6847 for (bin=0;bin<
fNcells;bin++) {
6850 out<<
" "<<hname<<
"->SetBinError("<<bin<<
","<<be<<
");"<<std::endl;
6867 out<<
" "<<hname<<
"->SetBarOffset("<<
GetBarOffset()<<
");"<<std::endl;
6870 out<<
" "<<hname<<
"->SetBarWidth("<<
GetBarWidth()<<
");"<<std::endl;
6872 if (fMinimum != -1111) {
6873 out<<
" "<<hname<<
"->SetMinimum("<<fMinimum<<
");"<<std::endl;
6875 if (fMaximum != -1111) {
6876 out<<
" "<<hname<<
"->SetMaximum("<<fMaximum<<
");"<<std::endl;
6878 if (fNormFactor != 0) {
6879 out<<
" "<<hname<<
"->SetNormFactor("<<fNormFactor<<
");"<<std::endl;
6881 if (fEntries != 0) {
6882 out<<
" "<<hname<<
"->SetEntries("<<fEntries<<
");"<<std::endl;
6885 out<<
" "<<hname<<
"->SetDirectory(0);"<<std::endl;
6888 out<<
" "<<hname<<
"->SetStats(0);"<<std::endl;
6891 out<<
" "<<hname<<
"->SetOption("<<quote<<
fOption.
Data()<<quote<<
");"<<std::endl;
6896 if (ncontours > 0) {
6897 out<<
" "<<hname<<
"->SetContour("<<ncontours<<
");"<<std::endl;
6899 for (
Int_t bin=0;bin<ncontours;bin++) {
6900 if (
gPad->GetLogz()) {
6905 out<<
" "<<hname<<
"->SetContourLevel("<<bin<<
","<<zlevel<<
");"<<std::endl;
6912 static Int_t funcNumber = 0;
6917 out<<
" "<<hname<<
"->GetListOfFunctions()->Add("
6918 <<
Form(
"%s%d",obj->
GetName(),funcNumber)<<
");"<<std::endl;
6920 out<<
" "<<hname<<
"->GetListOfFunctions()->Add(ptstats);"<<std::endl;
6921 out<<
" ptstats->SetParent("<<hname<<
");"<<std::endl;
6923 out<<
" "<<hname<<
"->GetListOfFunctions()->Add("
6925 <<
","<<quote<<lnk->
GetOption()<<quote<<
");"<<std::endl;
6940 out<<
" "<<hname<<
"->Draw("
6941 <<quote<<option<<quote<<
");"<<std::endl;
6985 while ((obj =
next())) {
7015 if (axis<1 || (axis>3 && axis<11) || axis>13)
return 0;
7019 if (stats[0] == 0)
return 0;
7021 Int_t ax[3] = {2,4,7};
7022 return stats[ax[axis-1]]/stats[0];
7027 return ( neff > 0 ? stddev/
TMath::Sqrt(neff) : 0. );
7068 if (axis<1 || (axis>3 && axis<11) || axis>13)
return 0;
7073 if (stats[0] == 0)
return 0;
7074 Int_t ax[3] = {2,4,7};
7075 Int_t axm = ax[axis%10 - 1];
7076 x = stats[axm]/stats[0];
7077 stddev2 =
TMath::Abs(stats[axm+1]/stats[0] -x*x);
7084 return ( neff > 0 ?
TMath::Sqrt(stddev2/(2*neff) ) : 0. );
7120 if (axis > 0 && axis <= 3){
7124 Double_t stddev3 = stddev*stddev*stddev;
7135 if (firstBinX == 1) firstBinX = 0;
7139 if (firstBinY == 1) firstBinY = 0;
7143 if (firstBinZ == 1) firstBinZ = 0;
7151 for (
Int_t binx = firstBinX; binx <= lastBinX; binx++) {
7152 for (
Int_t biny = firstBinY; biny <= lastBinY; biny++) {
7153 for (
Int_t binz = firstBinZ; binz <= lastBinZ; binz++) {
7159 sum+=w*(x-mean)*(x-mean)*(x-mean);
7166 else if (axis > 10 && axis <= 13) {
7173 Error(
"GetSkewness",
"illegal value of parameter");
7189 if (axis > 0 && axis <= 3){
7193 Double_t stddev4 = stddev*stddev*stddev*stddev;
7204 if (firstBinX == 1) firstBinX = 0;
7208 if (firstBinY == 1) firstBinY = 0;
7212 if (firstBinZ == 1) firstBinZ = 0;
7220 for (
Int_t binx = firstBinX; binx <= lastBinX; binx++) {
7221 for (
Int_t biny = firstBinY; biny <= lastBinY; biny++) {
7222 for (
Int_t binz = firstBinZ; binz <= lastBinZ; binz++) {
7228 sum+=w*(x-mean)*(x-mean)*(x-mean)*(x-mean);
7235 }
else if (axis > 10 && axis <= 13) {
7239 return ( neff > 0 ?
TMath::Sqrt(24./neff ) : 0. );
7242 Error(
"GetKurtosis",
"illegal value of parameter");
7286 for (bin=0;bin<4;bin++) stats[bin] = 0;
7292 if (firstBinX == 1) firstBinX = 0;
7295 for (binx = firstBinX; binx <= lastBinX; binx++) {
7299 w = RetrieveBinContent(binx);
7302 stats[1] += err*err;
7327 fTsumwx2 = stats[3];
7346 if (
fSumw2.
fN > 0 && fTsumw > 0 && stats[1] > 0 ) fEntries = stats[0]*stats[0]/ stats[1];
7357 Int_t bin,binx,biny,binz;
7362 bin =
GetBin(binx,biny,binz);
7363 sum += RetrieveBinContent(bin);
7392 return DoIntegral(binx1,binx2,0,-1,0,-1,err,option);
7420 if (binx1 < 0) binx1 = 0;
7421 if (binx2 >= nx || binx2 < binx1) binx2 = nx - 1;
7425 if (biny1 < 0) biny1 = 0;
7426 if (biny2 >= ny || biny2 < biny1) biny2 = ny - 1;
7428 biny1 = 0; biny2 = 0;
7433 if (binz1 < 0) binz1 = 0;
7434 if (binz2 >= nz || binz2 < binz1) binz2 = nz - 1;
7436 binz1 = 0; binz2 = 0;
7449 for (
Int_t binx = binx1; binx <= binx2; ++binx) {
7451 for (
Int_t biny = biny1; biny <= biny2; ++biny) {
7453 for (
Int_t binz = binz1; binz <= binz2; ++binz) {
7459 integral += RetrieveBinContent(bin) * dv;
7461 integral += RetrieveBinContent(bin);
7504 printf(
" AndersonDarlingTest Prob = %g, AD TestStatistic = %g\n",pvalue,advalue);
7506 if (opt.
Contains(
"T") )
return advalue;
7517 Error(
"AndersonDarlingTest",
"Histograms must be 1-D");
7616 if (h2 == 0)
return 0;
7624 Error(
"KolmogorovTest",
"Histograms must be 1-D\n");
7630 Error(
"KolmogorovTest",
"Number of channels is different, %d and %d\n",ncx1,ncx2);
7641 if (diff1 > difprec || diff2 > difprec) {
7642 Error(
"KolmogorovTest",
"histograms with different binning");
7655 if (opt.
Contains(
"O")) ilast = ncx1 +1;
7656 for (bin = ifirst; bin <= ilast; bin++) {
7657 sum1 += h1->RetrieveBinContent(bin);
7658 sum2 += h2->RetrieveBinContent(bin);
7665 Error(
"KolmogorovTest",
"Histogram1 %s integral is zero\n",h1->
GetName());
7669 Error(
"KolmogorovTest",
"Histogram2 %s integral is zero\n",h2->
GetName());
7678 esum1 = sum1 * sum1 / w1;
7683 esum2 = sum2 * sum2 / w2;
7687 if (afunc2 && afunc1) {
7688 Error(
"KolmogorovTest",
"Errors are zero for both histograms\n");
7697 Double_t dfmax =0, rsum1 = 0, rsum2 = 0;
7699 for (bin=ifirst;bin<=ilast;bin++) {
7700 rsum1 += s1*h1->RetrieveBinContent(bin);
7701 rsum2 += s2*h2->RetrieveBinContent(bin);
7721 if (opt.
Contains(
"N") && !(afunc1 || afunc2 ) ) {
7725 Double_t chi2 = d12*d12/(esum1+esum2);
7728 if (prob > 0 && prb2 > 0) prob *= prb2*(1-
TMath::Log(prob*prb2));
7732 const Int_t nEXPT = 1000;
7733 if (opt.
Contains(
"X") && !(afunc1 || afunc2 ) ) {
7738 for (
Int_t i=0; i < nEXPT; i++) {
7742 if (dSEXPT>dfmax) prb3 += 1.0;
7750 printf(
" Kolmo Prob h1 = %s, sum bin content =%g effective entries =%g\n",h1->
GetName(),sum1,esum1);
7751 printf(
" Kolmo Prob h2 = %s, sum bin content =%g effective entries =%g\n",h2->
GetName(),sum2,esum2);
7752 printf(
" Kolmo Prob = %g, Max Dist = %g\n",prob,dfmax);
7754 printf(
" Kolmo Prob = %f for shape alone, =%f for normalisation alone\n",prb1,prb2);
7756 printf(
" Kolmo Prob = %f with %d pseudo-experiments\n",prb3,nEXPT);
7762 if(opt.
Contains(
"M"))
return dfmax;
7763 else if(opt.
Contains(
"X"))
return prb3;
7819 if (level <0 || level >=
fContour.
fN)
return 0;
7826 if (zlevel <= 0)
return 0;
7843 if (buffersize <= 0) {
7847 if (buffersize < 100) buffersize = 100;
7875 for (level=0; level<nlevels; level++)
fContour.
fArray[level] = levels[level];
7880 if ((zmin == zmax) && (zmin != 0)) {
7886 if (zmax <= 0)
return;
7887 if (zmin <= 0) zmin = 0.001*zmax;
7890 dz = (zmax-zmin)/
Double_t(nlevels);
7892 for (level=0; level<nlevels; level++) {
7904 if (level < 0 || level >=
fContour.
fN)
return;
7922 if (fMaximum != -1111)
return fMaximum;
7927 Int_t bin, binx, biny, binz;
7935 for (binz=zfirst;binz<=zlast;binz++) {
7936 for (biny=yfirst;biny<=ylast;biny++) {
7937 for (binx=xfirst;binx<=xlast;binx++) {
7938 bin =
GetBin(binx,biny,binz);
7939 value = RetrieveBinContent(bin);
7940 if (value > maximum && value < maxval) maximum =
value;
7953 Int_t locmax, locmay, locmaz;
7966 Int_t bin, binx, biny, binz;
7975 locm = locmax = locmay = locmaz = 0;
7976 for (binz=zfirst;binz<=zlast;binz++) {
7977 for (biny=yfirst;biny<=ylast;biny++) {
7978 for (binx=xfirst;binx<=xlast;binx++) {
7979 bin =
GetBin(binx,biny,binz);
7980 value = RetrieveBinContent(bin);
7981 if (value > maximum) {
8007 if (fMinimum != -1111)
return fMinimum;
8012 Int_t bin, binx, biny, binz;
8020 for (binz=zfirst;binz<=zlast;binz++) {
8021 for (biny=yfirst;biny<=ylast;biny++) {
8022 for (binx=xfirst;binx<=xlast;binx++) {
8023 bin =
GetBin(binx,biny,binz);
8024 value = RetrieveBinContent(bin);
8025 if (value < minimum && value > minval) minimum =
value;
8038 Int_t locmix, locmiy, locmiz;
8051 Int_t bin, binx, biny, binz;
8060 locm = locmix = locmiy = locmiz = 0;
8061 for (binz=zfirst;binz<=zlast;binz++) {
8062 for (biny=yfirst;biny<=ylast;biny++) {
8063 for (binx=xfirst;binx<=xlast;binx++) {
8064 bin =
GetBin(binx,biny,binz);
8065 value = RetrieveBinContent(bin);
8066 if (value < minimum) {
8092 Error(
"SetBins",
"Operation only valid for 1-d histograms");
8120 Error(
"SetBins",
"Operation only valid for 1-d histograms");
8147 Error(
"SetBins",
"Operation only valid for 2-D histograms");
8155 fNcells = (nx+2)*(ny+2);
8176 Error(
"SetBins",
"Operation only valid for 2-D histograms");
8184 fNcells = (nx+2)*(ny+2);
8204 Error(
"SetBins",
"Operation only valid for 3-D histograms");
8213 fNcells = (nx+2)*(ny+2)*(nz+2);
8235 Error(
"SetBins",
"Operation only valid for 3-D histograms");
8244 fNcells = (nx+2)*(ny+2)*(nz+2);
8359 Warning(
"Sumw2",
"Sum of squares of weights structure already created");
8396 if (bin < 0) bin = 0;
8397 if (bin >= fNcells) bin = fNcells-1;
8414 if (bin < 0) bin = 0;
8415 if (bin >= fNcells) bin = fNcells-1;
8424 Warning(
"GetBinErrorLow",
"Histogram has negative bin content-force usage to normal errors");
8429 if (n == 0)
return 0;
8443 if (bin < 0) bin = 0;
8444 if (bin >= fNcells) bin = fNcells-1;
8453 Warning(
"GetBinErrorUp",
"Histogram has negative bin content-force usage to normal errors");
8472 Error(
"GetBinCenter",
"Invalid method for a %d-d histogram - return a NaN",
fDimension);
8483 Error(
"GetBinLowEdge",
"Invalid method for a %d-d histogram - return a NaN",
fDimension);
8494 Error(
"GetBinWidth",
"Invalid method for a %d-d histogram - return a NaN",
fDimension);
8521 Error(
"GetLowEdge",
"Invalid method for a %d-d histogram ",
fDimension);
8530 if (bin < 0 || bin>=
fSumw2.
fN)
return;
8546 if (bin < 0)
return;
8547 if (bin >= fNcells-1) {
8614 return (
TH1*)
gROOT->ProcessLineFast(
Form(
"TSpectrum::StaticBackground((TH1*)0x%lx,%d,\"%s\")",
8615 (
ULong_t)
this, niter, option));
8629 return (
Int_t)
gROOT->ProcessLineFast(
Form(
"TSpectrum::StaticSearch((TH1*)0x%lx,%g,\"%s\",%g)",
8630 (
ULong_t)
this, sigma, option, threshold));
8648 if (!fft || !fft->
GetN() ) {
8649 ::Error(
"TransformHisto",
"Invalid FFT transform class");
8654 ::Error(
"TransformHisto",
"Only 1d and 2D transform are supported");
8668 hout =
new TH1D(name, name,n[0], 0, n[0]);
8670 hout =
new TH2D(name, name, n[0], 0, n[0], n[1], 0, n[1]);
8678 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8679 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8680 ind[0] = binx-1; ind[1] = biny-1;
8686 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8687 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8688 ind[0] = binx-1; ind[1] = biny-1;
8697 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8698 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8699 ind[0] = binx-1; ind[1] = biny-1;
8705 ::Error(
"TransformHisto",
"No complex numbers in the output");
8712 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8713 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8714 ind[0] = binx-1; ind[1] = biny-1;
8720 for (binx = 1; binx<=hout->
GetNbinsX(); binx++) {
8721 for (biny=1; biny<=hout->
GetNbinsY(); biny++) {
8722 ind[0] = binx-1; ind[1] = biny-1;
8731 for (binx = 1; binx<=hout->
GetNbinsX(); binx++){
8732 for (biny=1; biny<=hout->
GetNbinsY(); biny++){
8733 ind[0] = binx-1; ind[1] = biny-1;
8754 printf(
"Pure real output, no phase");
8787 std::ostringstream strm;
8808 if (fgDefaultSumw2) Sumw2();
8817 :
TH1(name,title,nbins,xlow,xup)
8822 if (xlow >= xup) SetBuffer(fgBufferSize);
8823 if (fgDefaultSumw2) Sumw2();
8836 if (fgDefaultSumw2) Sumw2();
8849 if (fgDefaultSumw2) Sumw2();
8885 if (newval > -128 && newval < 128) {
fArray[bin] =
Char_t(newval);
return;}
8886 if (newval < -127)
fArray[bin] = -127;
8887 if (newval > 127)
fArray[bin] = 127;
8927 if (
this != &h1) ((
TH1C&)h1).
Copy(*
this);
9009 if (fgDefaultSumw2) Sumw2();
9018 :
TH1(name,title,nbins,xlow,xup)
9023 if (xlow >= xup) SetBuffer(fgBufferSize);
9024 if (fgDefaultSumw2) Sumw2();
9037 if (fgDefaultSumw2) Sumw2();
9050 if (fgDefaultSumw2) Sumw2();
9086 if (newval > -32768 && newval < 32768) {
fArray[bin] =
Short_t(newval);
return;}
9087 if (newval < -32767)
fArray[bin] = -32767;
9088 if (newval > 32767)
fArray[bin] = 32767;
9128 if (
this != &h1) ((
TH1S&)h1).
Copy(*
this);
9208 if (fgDefaultSumw2) Sumw2();
9217 :
TH1(name,title,nbins,xlow,xup)
9222 if (xlow >= xup) SetBuffer(fgBufferSize);
9223 if (fgDefaultSumw2) Sumw2();
9236 if (fgDefaultSumw2) Sumw2();
9249 if (fgDefaultSumw2) Sumw2();
9285 if (newval > -2147483647 && newval < 2147483647) {
fArray[bin] =
Int_t(newval);
return;}
9286 if (newval < -2147483647)
fArray[bin] = -2147483647;
9287 if (newval > 2147483647)
fArray[bin] = 2147483647;
9327 if (
this != &h1) ((
TH1I&)h1).
Copy(*
this);
9408 if (fgDefaultSumw2) Sumw2();
9417 :
TH1(name,title,nbins,xlow,xup)
9422 if (xlow >= xup) SetBuffer(fgBufferSize);
9423 if (fgDefaultSumw2) Sumw2();
9436 if (fgDefaultSumw2) Sumw2();
9449 if (fgDefaultSumw2) Sumw2();
9458 :
TH1(
"TVectorF",
"",v.GetNrows(),0,v.GetNrows())
9463 for (
Int_t i=0;i<fNcells-2;i++) {
9464 SetBinContent(i+1,
v(i+ivlow));
9467 if (fgDefaultSumw2) Sumw2();
9524 if (
this != &h1) ((
TH1F&)h1).
Copy(*
this);
9605 if (fgDefaultSumw2) Sumw2();
9614 :
TH1(name,title,nbins,xlow,xup)
9619 if (xlow >= xup) SetBuffer(fgBufferSize);
9620 if (fgDefaultSumw2) Sumw2();
9633 if (fgDefaultSumw2) Sumw2();
9646 if (fgDefaultSumw2) Sumw2();
9655 :
TH1(
"TVectorD",
"",v.GetNrows(),0,v.GetNrows())
9660 for (
Int_t i=0;i<fNcells-2;i++) {
9661 SetBinContent(i+1,
v(i+ivlow));
9664 if (fgDefaultSumw2) Sumw2();
9721 if (
this != &h1) ((
TH1D&)h1).
Copy(*
this);
9794 if(hid >= 0) hname.
Form(
"h%d",hid);
9795 else hname.
Form(
"h_%d",hid);
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)
Browe 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 void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title Offset is a correction factor with respect to the "s...
virtual Int_t GetEntries() const
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
virtual Style_t GetFillStyle() const
virtual void SetNameTitle(const char *name, const char *title)
Change the name and title of this histogram.
virtual void SetLineWidth(Width_t lwidth)
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.
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 Color_t GetAxisColor() const
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)
virtual void SaveAttributes(std::ostream &out, const char *name, const char *subname)
Save axis attributes as C++ statement(s) on output stream out.
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 Color_t GetLabelColor() const
virtual void GetLowEdge(Double_t *edge) const
Return an array with the lod edge of all bins.
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.
Bool_t IsBinOverflow(Int_t bin) const
virtual void SetMaximum(Double_t maximum=-1111)
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.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
static Bool_t fgDefaultSumw2
flag to use under/overflows in statistics
ClassImp(TSeqCollection) Int_t TSeqCollection TIter next(this)
Return index of object in collection.
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 if painter does not exist, it is created
virtual void FitPanel()
Display a panel with all histogram fit options.
virtual Double_t Rndm(Int_t i=0)
Machine independent random number generator.
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, Begin_Html.
virtual Double_t Chi2Test(const TH1 *h2, Option_t *option="UU", Double_t *res=0) const
chi^{2} test for comparing weighted and unweighted histograms
virtual void Set(Int_t n)=0
virtual void ResetAttAxis(Option_t *option="")
Reset axis attributes.
virtual void SetError(const Double_t *error)
Replace bin errors by values in array error.
Bool_t IsBinUnderflow(Int_t bin) const
TString & ReplaceAll(const TString &s1, const TString &s2)
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
virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax)
Redefine x axis parameters.
virtual void SetName(const char *name)
Change (i.e.
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 add histograms to the directory
static Bool_t SameLimitsAndNBins(const TAxis &axis1, const TAxis &axis2)
Same limits and bins.
virtual ~TH1F()
Destructor.
virtual void SetLabelColor(Color_t color=1, Float_t alpha=1.)
Set color of labels.
void Build()
Creates histogram basic data structure.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
virtual void SetNdivisions(Int_t n=510, Bool_t optim=kTRUE)
Set the number of divisions for this axis.
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.
virtual void AddFirst(TObject *obj)
Add object at the beginning of the list.
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 if a first and last bin is passed the axis ...
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...
void Copy(TArrayS &array) const
static Bool_t AddDirectoryStatus()
static function: cannot be inlined on Windows/NT
1-D histogram with a float per channel (see TH1 documentation)}
virtual TObject * GetUserFunc() const
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.
virtual void SetTitleFont(Style_t font=62)
Set the title font.
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.
ROOT::NewFunc_t GetNew() const
Return the wrapper around new ThisClass().
void SetBarOffset(Float_t baroff=0.5)
R__EXTERN TVirtualMutex * gROOTMutex
virtual Color_t GetTitleColor() const
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
virtual void SetFillStyle(Style_t fstyle)
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.
virtual Double_t GetStdDevError(Int_t axis=1) const
Return error of standard deviation estimation for Normal distribution.
virtual Style_t GetTitleFont() const
virtual void UseCurrentStyle()
Set current style settings in this object This function is called when either TCanvas::UseCurrentStyl...
virtual Int_t GetNbinsX() const
const TKDTreeBinning * bins
static Bool_t AlmostInteger(Double_t a, Double_t epsilon=0.00000001)
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.
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.
virtual Float_t GetTitleSize() const
virtual void GetCenter(Double_t *center) const
Fill array with center of bins for 1D histogram Better to use h1.GetXaxis().GetCenter(center) ...
virtual void SetLabelOffset(Float_t offset=0.005)
Set distance between the axis and the labels The distance is expressed in per cent of the pad width...
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)
virtual TH1 * GetHistogram() const
Return a pointer to the histogram used to vusualize 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
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.
virtual void SetBarWidth(Float_t width=0.5)
virtual void SetLabelFont(Style_t font=62)
Set labels' font.
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
virtual void SetPoint(Int_t ipoint, Double_t re, Double_t im=0)=0
static void SetDefaultSumw2(Bool_t sumw2=kTRUE)
static function.
virtual Double_t GetBinWidth(Int_t bin) const
return bin width for 1D historam Better to use h1.GetXaxis().GetBinWidth(bin)
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
For axis = 1, 2 or 3 returns skewness of the histogram along x, y or z axis.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
TH1C operator/(const TH1C &h1, const TH1C &h2)
Operator /.
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 the limits are defined by first bin and last bin N...
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)
flag to call TH1::Sumw2 automatically at histogram creation time
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 historam Better to use h1.GetXaxis().GetBinLowEdge(bin) ...
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
UChar_t mod R__LOCKGUARD2(gSrvAuthenticateMutex)
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...
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
virtual void Copy(TObject &named) const
Copy this to obj.
TLine l1(2.5, 4.5, 15.5, 4.5)
virtual TObject * FindObject(const char *name) const
search object named name in the list of functions
Double_t Log10(Double_t x)
virtual void AddAll(const TCollection *col)
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)
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
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.
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.
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...
virtual void LabelsInflate(Option_t *axis="X")
Double the number of bins for axis.
void AndersonDarling2SamplesTest(Double_t &pvalue, Double_t &testStat) const
virtual Float_t GetTitleOffset() const
virtual void SetTimeDisplay(Int_t value)
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, neff = (Sum of weights )^2 / (Sum of weight^2 ) In case...
static Bool_t fgAddDirectory
default buffer size for automatic histograms
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 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.
std::string printValue(const TDatime &val)
Print a TDatime at the prompt.
void Copy(TArrayF &array) const
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
virtual void SetLineColor(Color_t lcolor)
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 historam Better to use h1.GetXaxis().GetBinCenter(bin)
virtual Size_t GetMarkerSize() const
void Clear(Option_t *option="")
Remove all objects from the list.
virtual void SetParLimits(Int_t ipar, Double_t parmin, Double_t parmax)
Set limits for parameter ipar.
Color_t GetHistFillColor() const
ClassImp(TH1) TH1
Histogram default constructor.
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
TH1 * R__H(Int_t hid)
return pointer to histogram with name hid if id >=0 h_id if id <0
TPaveLabel title(3, 27.1, 15, 28.7,"ROOT Environment and Tools")
virtual void SetFillColor(Color_t fcolor)
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.
void SetCanExtend(Bool_t canExtend)
1-D histogram with a int per channel (see TH1 documentation)}
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 By default the integral is compu...
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
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
TH1C operator-(const TH1C &h1, const TH1C &h2)
Operator -.
virtual TH1 * Rebin(Int_t ngroup=2, const char *newname="", const Double_t *xbins=0)
Rebin this histogram.
void Copy(TArrayI &array) const
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
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)
virtual Double_t GetKurtosis(Int_t axis=1) const
For axis =1, 2 or 3 returns kurtosis of the histogram along x, y or z axis.
double Chisquare(const TH1 &h1, TF1 &f1, bool useRange)
compute the chi2 value for an histogram given a function (see TH1::Chisquare for the documentation) ...
Class describing the binned data sets : vectors of x coordinates, y values and optionally error on y ...
Double_t * fIntegral
Histogram dimension (1, 2 or 3 dim)
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.
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.
R__EXTERN TRandom * gRandom
virtual Color_t GetLineColor() const
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 SetAxisColor(Color_t color=1, Float_t alpha=1.)
Set color of the line axis and tick marks.
virtual void Rebuild(Option_t *option="")
Using the current bin info, recompute the arrays for contents and errors.
virtual void SetLabelSize(Float_t size=0.04)
Set size of axis labels The size is expressed in per cent of the pad width.
virtual void SetMarkerSize(Size_t msize=1)
virtual void SetTitleColor(Color_t color=1)
Set color of axis title.
virtual void SetTitleSize(Float_t size=0.04)
Set size of axis title The size is expressed in per cent of the pad width.
virtual void RecursiveRemove(TObject *obj)
Recursively remove object from the list of functions.
EBinErrorOpt fBinStatErrOpt
pointer to histogram painter
virtual Int_t GetXlast() const
const Double_t * GetArray() const
virtual void Copy(TObject &hnew) const
Copy this to newth1.
TVirtualFFT is an interface class for Fast Fourier Transforms.
virtual Int_t FindBin(Double_t x)
Find bin number corresponding to abscissa x.
virtual void SetName(const char *name)
Change the name of this histogram.
void Copy(TArrayC &array) const
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
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.
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)
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
virtual Style_t GetLabelFont() const
double func(double *x, double *p)
virtual Int_t GetNdivisions() const
TH1I & operator=(const TH1I &h1)
Operator =.
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)
virtual void SetLineStyle(Style_t lstyle)
Array of doubles (64 bits per element).
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 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...
TH1C operator+(const TH1C &h1, const TH1C &h2)
Operator +.
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.
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 Float_t GetLabelSize() const
virtual Int_t GetNbinsY() const
TH1S & operator=(const TH1S &h1)
Operator =.
virtual Double_t GetBinErrorSqUnchecked(Int_t bin) const
THashList * GetLabels() const
virtual Color_t GetMarkerColor() const
virtual void DirectoryAutoAdd(TDirectory *)
Perform the automatic addition of the histogram to the given directory.
TVirtualHistPainter * fPainter
Integral of bins used by GetRandom.
static TVirtualHistPainter * HistPainter(TH1 *obj)
virtual void GetCenter(Double_t *center) const
Return an array with the center of all bins.
static Bool_t RejectedPoint()
See TF1::RejectPoint above.
virtual void DrawPanel()
Display a panel with all histogram drawing options.
virtual Int_t FindFixBin(Double_t x) const
Find bin number corresponding to abscissa x.
virtual void Add(TObject *obj)
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
1-D histogram with a bype 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.
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
Pointer to directory holding this histogram.
virtual void SetTickLength(Float_t length=0.03)
Set tick mark length The length is expressed in per cent of the pad width.
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)
std::vector< double > errors
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 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
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
static Bool_t AlmostEqual(Double_t a, Double_t b, Double_t epsilon=0.00000001)
virtual Double_t EvalPar(const Double_t *x, const Double_t *params=0)
Evaluate function with given coordinates and parameters.
virtual Float_t GetTickLength() const
virtual void SetTitle(const char *title="")
Change (i.e. set) the title of the TNamed.
void SetHistLineColor(Color_t color=1)
virtual Float_t GetBarWidth() const
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.
double norm(double *x, double *p)
TH1C operator*(Double_t c1, const TH1C &h1)
Operator *.
virtual ClassDef(TH1, 7) protected 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 use GetContour to return the array of all contour levels...
virtual Double_t GetContourLevelPad(Int_t level) const
Return the value of contour number "level" in Pad coordinates ie: if the Pad is in log scale along Z ...
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 In case...
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
T MinElement(Long64_t n, const T *a)
virtual Float_t GetLabelOffset() const
2-D histogram with a double per channel (see TH1 documentation)}
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.