94 :
TH1(
name,title,nbinsx,xlow,xup),
99 Warning(
"TH3",
"nbinsy is <=0 - set to nbinsy = 1");
103 Warning(
"TH3",
"nbinsz is <=0 - set to nbinsz = 1");
108 fNcells = (nbinsx+2)*(nbinsy+2)*(nbinsz+2);
140 if (nbinsy <= 0) {
Warning(
"TH3",
"nbinsy is <=0 - set to nbinsy = 1"); nbinsy = 1; }
141 if (nbinsz <= 0) nbinsz = 1;
146 fNcells = (nbinsx+2)*(nbinsy+2)*(nbinsz+2);
178 if (nbinsy <= 0) {
Warning(
"TH3",
"nbinsy is <=0 - set to nbinsy = 1"); nbinsy = 1; }
179 if (nbinsz <= 0) nbinsz = 1;
184 fNcells = (nbinsx+2)*(nbinsy+2)*(nbinsz+2);
227 if (!nbentries)
return 0;
230 if (action == 0)
return 0;
231 nbentries = -nbentries;
246 for (
Int_t i=1;i<nbentries;i++) {
254 if (z < zmin) zmin = z;
255 if (z > zmax) zmax = z;
274 for (
Int_t i=0;i<nbentries;i++) {
275 Fill(buffer[4*i+2],buffer[4*i+3],buffer[4*i+4],buffer[4*i+1]);
302 nbentries = -nbentries;
328 Error(
"Fill",
"Invalid signature - do nothing");
343 Int_t binx, biny, binz, bin;
348 if (binx <0 || biny <0 || binz<0)
return -1;
391 Int_t binx, biny, binz, bin;
396 if (binx <0 || biny <0 || binz<0)
return -1;
436 Int_t binx, biny, binz, bin;
441 if (binx <0 || biny <0 || binz<0)
return -1;
484 Int_t binx, biny, binz, bin;
489 if (binx <0 || biny <0 || binz<0)
return -1;
532 Int_t binx, biny, binz, bin;
537 if (binx <0 || biny <0 || binz<0)
return -1;
580 Int_t binx, biny, binz, bin;
585 if (binx <0 || biny <0 || binz<0)
return -1;
628 Int_t binx, biny, binz, bin;
633 if (binx < 0 || biny < 0 || binz < 0)
682 Int_t binx, biny, binz, bin;
687 if (binx <0 || biny <0 || binz<0)
return -1;
731 Int_t binx, biny, binz, bin;
736 if (binx <0 || biny <0 || binz<0)
return -1;
793 Int_t bin, binx, biny, binz, ibin, loop;
797 if (!fobj) {
Error(
"FillRandom",
"Unknown function: %s",fname);
return; }
798 TF3 *
f1 =
dynamic_cast<TF3*
>( fobj );
799 if (!
f1) {
Error(
"FillRandom",
"Function: %s is not a TF3, is a %s",fname,fobj->
IsA()->
GetName());
return; }
809 Info(
"FillRandom",
"Using function axis and range ([%g,%g],[%g,%g],[%g,%g])",
xmin,
xmax,
ymin,
ymax,zmin,zmax);
819 Int_t nxy = nbinsx*nbinsy;
820 Int_t nbins = nbinsx*nbinsy*nbinsz;
826 for (binz=1;binz<=nbinsz;binz++) {
828 for (biny=1;biny<=nbinsy;biny++) {
830 for (binx=1;binx<=nbinsx;binx++) {
838 integral[ibin] = integral[ibin-1] + fint;
844 if (integral[nbins] == 0 ) {
846 Error(
"FillRandom",
"Integral = zero");
return;
848 for (bin=1;bin<=nbins;bin++) integral[bin] /= integral[nbins];
853 for (loop=0;loop<ntimes;loop++) {
857 biny = (ibin - nxy*binz)/nbinsx;
858 binx = 1 + ibin - nbinsx*(biny + nbinsy*binz);
888 if (!
h) {
Error(
"FillRandom",
"Null histogram");
return; }
890 Error(
"FillRandom",
"Histograms with different dimensions");
return;
893 if (
h->ComputeIntegral() == 0)
return;
898 for (loop=0;loop<ntimes;loop++) {
943 auto computeFirstAndLastBin = [](
const TAxis & outerAxis,
Int_t &firstbin,
Int_t &lastbin) {
951 if (firstbin == 0 && lastbin == 0) {
956 if (firstbin < 0) firstbin = 0;
957 if (lastbin < 0 || lastbin > nbins + 1) lastbin = nbins + 1;
958 if (lastbin < firstbin) {firstbin = 0; lastbin = nbins + 1;}
961 computeFirstAndLastBin(
fXaxis, binminx, binmaxx);
962 computeFirstAndLastBin(
fYaxis, binminy, binmaxy);
965 auto computeAxisLimits = [](
const TAxis & outerAxis,
Int_t firstbin,
Int_t lastbin,
967 Int_t firstOutBin = std::max(firstbin,1);
969 nBins = lastOutBin-firstOutBin+1;
977 Int_t firstBinXaxis = computeAxisLimits(
fXaxis, binminx, binmaxx, nbinsX, xMin, xMax);
980 Int_t firstBinYaxis = computeAxisLimits(
fYaxis, binminy, binmaxy, nbinsY, yMin, yMax);
997 std::vector<TH1*> hlist(npar+1);
1000 for (ipar=0;ipar<= npar;ipar++) {
1008 title =
"chisquare";
1010 if (xbins->fN == 0 && ybins->
fN == 0) {
1011 hlist[ipar] =
new TH2D(
name, title,
1013 nbinsY, yMin, yMax);
1014 }
else if (xbins->fN > 0 && ybins->
fN > 0 ) {
1015 hlist[ipar] =
new TH2D(
name, title,
1016 nbinsX, &xbins->fArray[firstBinXaxis],
1017 nbinsY, &ybins->
fArray[firstBinYaxis]);
1025 TH1 * hchi2 = hlist.back();
1028 TH1D *hpz =
nullptr;
1033 for (
Int_t biny=binminy; biny<=binmaxy; biny++) {
1034 for (
Int_t binx=binminx; binx<=binmaxx; binx++) {
1041 Info(
"FitSlicesZ",
"Slice (%d,%d) skipped, the number of entries is zero or smaller than the given cut value, n=%f",binx,biny,
nentries);
1047 int ibx,iby,ibz = 0;
1048 hlist[0]->GetBinXYZ(bin,ibx,iby,ibz);
1054 if (npfits > npar && npfits >= cut) {
1055 for (ipar=0;ipar<npar;ipar++) {
1063 Info(
"FitSlicesZ",
"Fitted slice (%d,%d) skipped, the number of fitted points is too small, n=%d",binx,biny,npfits);
1078 if (biny < 0) biny = 0;
1079 if (biny > ofy) biny = ofy;
1082 if (binz < 0) binz = 0;
1083 if (binz > ofz) binz = ofz;
1119 Error(
"GetBinWithContent3",
"function is only valid for 3-D histograms");
1122 if (firstx <= 0) firstx = 1;
1124 if (firsty <= 0) firsty = 1;
1126 if (firstz <= 0) firstz = 1;
1128 Int_t binminx = 0, binminy=0, binminz=0;
1130 for (
Int_t k=firstz;k<=lastz;k++) {
1131 for (
Int_t j=firsty;j<=lasty;j++) {
1132 for (
Int_t i=firstx;i<=lastx;i++) {
1134 if (diff <= 0) {binx = i; biny=j; binz=k;
return diff;}
1135 if (diff < curmax && diff <= maxdiff) {curmax = diff, binminx=i; binminy=j;binminz=k;}
1151 if (axis1 < 1 || axis2 < 1 || axis1 > 3 || axis2 > 3) {
1152 Error(
"GetCorrelationFactor",
"Wrong parameters");
1155 if (axis1 == axis2)
return 1;
1157 if (stddev1 == 0)
return 0;
1159 if (stddev2 == 0)
return 0;
1169 if (axis1 < 1 || axis2 < 1 || axis1 > 3 || axis2 > 3) {
1170 Error(
"GetCovariance",
"Wrong parameters");
1186 if (sumw == 0)
return 0;
1187 if (axis1 == 1 && axis2 == 1) {
1188 return TMath::Abs(sumwx2/sumw - sumwx*sumwx/(sumw*sumw));
1190 if (axis1 == 2 && axis2 == 2) {
1191 return TMath::Abs(sumwy2/sumw - sumwy*sumwy/(sumw*sumw));
1193 if (axis1 == 3 && axis2 == 3) {
1194 return TMath::Abs(sumwz2/sumw - sumwz*sumwz/(sumw*sumw));
1196 if ((axis1 == 1 && axis2 == 2) || (axis1 == 2 && axis2 == 1)) {
1197 return sumwxy/sumw - sumwx*sumwy/(sumw*sumw);
1199 if ((axis1 == 1 && axis2 == 3) || (axis1 == 3 && axis2 == 1)) {
1200 return sumwxz/sumw - sumwx*sumwz/(sumw*sumw);
1202 if ((axis1 == 2 && axis2 == 3) || (axis1 == 3 && axis2 == 2)) {
1203 return sumwyz/sumw - sumwy*sumwz/(sumw*sumw);
1222 Int_t nxy = nbinsx*nbinsy;
1223 Int_t nbins = nxy*nbinsz;
1232 if (integral == 0 ) {
x = 0;
y = 0; z = 0;
return;}
1239 Int_t binz = ibin/nxy;
1240 Int_t biny = (ibin - nxy*binz)/nbinsx;
1241 Int_t binx = ibin - nbinsx*(biny + nbinsy*binz);
1269 Int_t bin, binx, biny, binz;
1273 for (bin=0;bin<11;bin++) stats[bin] = 0;
1284 if (firstBinX == 1) firstBinX = 0;
1288 if (firstBinY == 1) firstBinY = 0;
1292 if (firstBinZ == 1) firstBinZ = 0;
1302 for (binz = firstBinZ; binz <= lastBinZ; binz++) {
1304 for (biny = firstBinY; biny <= lastBinY; biny++) {
1306 for (binx = firstBinX; binx <= lastBinX; binx++) {
1307 bin =
GetBin(binx,biny,binz);
1313 stats[1] += err*err;
1391 Error(
"Interpolate",
"This function must be called with 3 arguments for a TH3");
1401 Error(
"Interpolate",
"This function must be called with 3 arguments for a TH3");
1420 Int_t obx = ubx + 1;
1424 Int_t oby = uby + 1;
1428 Int_t obz = ubz + 1;
1433 if (ubx <=0 || uby <=0 || ubz <= 0 ||
1435 Error(
"Interpolate",
"Cannot interpolate outside histogram domain.");
1460 Double_t w1 = i1 * (1 - yd) + i2 * yd;
1461 Double_t w2 = j1 * (1 - yd) + j2 * yd;
1497 if (h2 == 0)
return 0;
1513 Error(
"KolmogorovTest",
"Histograms must be 3-D\n");
1519 Error(
"KolmogorovTest",
"Number of channels in X is different, %d and %d\n",ncx1,ncx2);
1523 Error(
"KolmogorovTest",
"Number of channels in Y is different, %d and %d\n",ncy1,ncy2);
1527 Error(
"KolmogorovTest",
"Number of channels in Z is different, %d and %d\n",ncz1,ncz2);
1537 if (diff1 > difprec || diff2 > difprec) {
1538 Error(
"KolmogorovTest",
"histograms with different binning along X");
1543 if (diff1 > difprec || diff2 > difprec) {
1544 Error(
"KolmogorovTest",
"histograms with different binning along Y");
1549 if (diff1 > difprec || diff2 > difprec) {
1550 Error(
"KolmogorovTest",
"histograms with different binning along Z");
1555 Int_t ibeg = 1, jbeg = 1, kbeg = 1;
1556 Int_t iend = ncx1, jend = ncy1, kend = ncz1;
1557 if (opt.
Contains(
"U")) {ibeg = 0; jbeg = 0; kbeg = 0;}
1558 if (opt.
Contains(
"O")) {iend = ncx1+1; jend = ncy1+1; kend = ncz1+1;}
1565 for (i = ibeg; i <= iend; i++) {
1566 for (j = jbeg; j <= jend; j++) {
1567 for (k = kbeg; k <= kend; k++) {
1582 Error(
"KolmogorovTest",
"Integral is zero for h1=%s\n",
h1->
GetName());
1586 Error(
"KolmogorovTest",
"Integral is zero for h2=%s\n",h2->
GetName());
1594 esum1 = sum1 * sum1 / w1;
1599 esum2 = sum2 * sum2 / w2;
1603 if (afunc2 && afunc1) {
1604 Error(
"KolmogorovTest",
"Errors are zero for both histograms\n");
1610 int order[3] = {0,1,2};
1614 binbeg[0] = ibeg; binbeg[1] = jbeg; binbeg[2] = kbeg;
1615 binend[0] = iend; binend[1] = jend; binend[2] = kend;
1624 for (i = binbeg[order[0] ]; i <= binend[order[0] ]; i++) {
1625 for ( j = binbeg[order[1] ]; j <= binend[order[1] ]; j++) {
1626 for ( k = binbeg[order[2] ]; k <= binend[order[2] ]; k++) {
1627 ibin[ order[0] ] = i;
1628 ibin[ order[1] ] = j;
1629 ibin[ order[2] ] = k;
1630 bin =
h1->
GetBin(ibin[0],ibin[1],ibin[2]);
1637 vdfmax[icomb] = dmax;
1656 if (opt.
Contains(
"N") && !(afunc1 || afunc2 ) ) {
1660 Double_t chi2 = d12*d12/(esum1+esum2);
1663 if (prb > 0 && prb2 > 0) prb = prb*prb2*(1-
TMath::Log(prb*prb2));
1669 printf(
" Kolmo Prob h1 = %s, sum1=%g\n",
h1->
GetName(),sum1);
1670 printf(
" Kolmo Prob h2 = %s, sum2=%g\n",h2->
GetName(),sum2);
1671 printf(
" Kolmo Probabil = %f, Max Dist = %g\n",prb,dfmax);
1673 printf(
" Kolmo Probabil = %f for shape alone, =%f for normalisation alone\n",prb1,prb2);
1679 if (opt.
Contains(
"M"))
return dfmax;
1812 computeErrors =
kTRUE;
1817 originalRange =
kTRUE;
1821 TH1D *
h1 =
DoProject1D(
name, title, projAxis, &out1, &out2, computeErrors, originalRange,
true,
true);
1849 bool computeErrors,
bool originalRange,
1850 bool useUF,
bool useOF)
const
1859 Int_t nx = ixmax-ixmin+1;
1865 Error(
"DoProject1D",
"Histogram with name %s must be a TH1D and is a %s",
name,h1obj->
ClassName());
1872 if ( originalRange )
1874 if (bins->
fN == 0) {
1880 if (bins->
fN == 0) {
1890 if ( originalRange )
1892 if (bins->
fN == 0) {
1898 if (bins->
fN == 0) {
1928 if (out1 ==
nullptr && out2 ==
nullptr) {
1940 R__ASSERT(out1 !=
nullptr && out2 !=
nullptr);
1942 Int_t *refX = 0, *refY = 0, *refZ = 0;
1943 Int_t ixbin, out1bin, out2bin;
1959 R__ASSERT (refX != 0 && refY != 0 && refZ != 0);
1978 for (ixbin=0;ixbin<=1+projX->
GetNbins();ixbin++) {
1985 for (out1bin = out1min; out1bin <= out1max; out1bin++) {
1986 for (out2bin = out2min; out2bin <= out2max; out2bin++) {
1992 if (computeErrors) {
2010 bool resetStats =
true;
2011 double eps = 1.E-12;
2015 bool resetEntries = resetStats;
2017 resetEntries |= !useUF || !useOF;
2024 stats[2] = stats[4];
2025 stats[3] = stats[5];
2028 stats[2] = stats[7];
2029 stats[3] = stats[8];
2058 bool computeErrors,
bool originalRange,
2059 bool useUF,
bool useOF)
const
2069 Int_t nx = ixmax-ixmin+1;
2070 Int_t ny = iymax-iymin+1;
2078 Error(
"DoProject2D",
"Histogram with name %s must be a TH2D and is a %s",
name,h2obj->
ClassName());
2086 if ( originalRange ) {
2108 if ( originalRange )
2110 if (xbins->fN == 0 && ybins->
fN == 0) {
2113 }
else if (ybins->
fN == 0) {
2115 ,projX->
GetNbins(),&xbins->fArray[ixmin-1]);
2116 }
else if (xbins->fN == 0) {
2123 if (xbins->fN == 0 && ybins->
fN == 0) {
2126 }
else if (ybins->
fN == 0) {
2128 ,nx,&xbins->fArray[ixmin-1]);
2129 }
else if (xbins->fN == 0) {
2133 h2 =
new TH2D(
name,title,ny,&ybins->
fArray[iymin-1],nx,&xbins->fArray[ixmin-1]);
2173 const TAxis* out = 0;
2182 Int_t *refX = 0, *refY = 0, *refZ = 0;
2183 Int_t ixbin, iybin, outbin;
2184 if ( projX ==
GetXaxis() && projY ==
GetYaxis() ) { refX = &ixbin; refY = &iybin; refZ = &outbin; }
2185 if ( projX ==
GetYaxis() && projY ==
GetXaxis() ) { refX = &iybin; refY = &ixbin; refZ = &outbin; }
2186 if ( projX ==
GetXaxis() && projY ==
GetZaxis() ) { refX = &ixbin; refY = &outbin; refZ = &iybin; }
2187 if ( projX ==
GetZaxis() && projY ==
GetXaxis() ) { refX = &iybin; refY = &outbin; refZ = &ixbin; }
2188 if ( projX ==
GetYaxis() && projY ==
GetZaxis() ) { refX = &outbin; refY = &ixbin; refZ = &iybin; }
2189 if ( projX ==
GetZaxis() && projY ==
GetYaxis() ) { refX = &outbin; refY = &iybin; refZ = &ixbin; }
2190 R__ASSERT (refX != 0 && refY != 0 && refZ != 0);
2199 if (outmin == 0 && outmax == 0) { outmin = 1; outmax = out->
GetNbins(); }
2204 for (ixbin=0;ixbin<=1+projX->
GetNbins();ixbin++) {
2208 for (iybin=0;iybin<=1+projY->
GetNbins();iybin++) {
2216 for (outbin = outmin; outbin <= outmax; outbin++) {
2222 if (computeErrors) {
2240 bool resetStats =
true;
2241 double eps = 1.E-12;
2245 bool resetEntries = resetStats;
2247 resetEntries |= !useUF || !useOF;
2252 for (
Int_t i = 0; i <
kNstat; ++i) { oldst[i] = 0; }
2254 std::copy(oldst,oldst+
kNstat,stats);
2258 stats[4] = oldst[7];
2259 stats[5] = oldst[8];
2260 stats[6] = oldst[9];
2263 stats[2] = oldst[4];
2264 stats[3] = oldst[5];
2266 stats[4] = oldst[2];
2267 stats[5] = oldst[3];
2270 stats[4] = oldst[7];
2271 stats[5] = oldst[8];
2272 stats[6] = oldst[10];
2276 stats[2] = oldst[7];
2277 stats[3] = oldst[8];
2279 stats[4] = oldst[2];
2280 stats[5] = oldst[3];
2281 stats[6] = oldst[9];
2284 stats[4] = oldst[4];
2285 stats[5] = oldst[5];
2286 stats[6] = oldst[10];
2301 if (!computeErrors) entries =
TMath::Floor( entries + 0.5);
2368 if (opt.
Contains(
"x")) { pcase = 1; ptype =
"x"; }
2369 if (opt.
Contains(
"y")) { pcase = 2; ptype =
"y"; }
2370 if (opt.
Contains(
"z")) { pcase = 3; ptype =
"z"; }
2371 if (opt.
Contains(
"xy")) { pcase = 4; ptype =
"xy"; }
2372 if (opt.
Contains(
"yx")) { pcase = 5; ptype =
"yx"; }
2373 if (opt.
Contains(
"xz")) { pcase = 6; ptype =
"xz"; }
2374 if (opt.
Contains(
"zx")) { pcase = 7; ptype =
"zx"; }
2375 if (opt.
Contains(
"yz")) { pcase = 8; ptype =
"yz"; }
2376 if (opt.
Contains(
"zy")) { pcase = 9; ptype =
"zy"; }
2379 Error(
"Project3D",
"No projection axis specified - return a NULL pointer");
2386 computeErrors =
kTRUE;
2403 originalRange =
kTRUE;
2414 title +=
" "; title += ptype; title +=
" projection";
2420 computeErrors, originalRange, useUF, useOF);
2426 computeErrors, originalRange, useUF, useOF);
2432 computeErrors, originalRange, useUF, useOF);
2438 computeErrors, originalRange, useUF, useOF);
2444 computeErrors, originalRange, useUF, useOF);
2450 computeErrors, originalRange, useUF, useOF);
2456 computeErrors, originalRange, useUF, useOF);
2462 computeErrors, originalRange, useUF, useOF);
2468 computeErrors, originalRange, useUF, useOF);
2499 if (useWeights && binSumw2.
fN <= 0) useWeights =
false;
2506 if (outBin <0)
return;
2508 if ( useWeights ) tmp = binSumw2.
fArray[outBin];
2509 p2->
Fill( u ,
v,
w, cont);
2519 bool originalRange,
bool useUF,
bool useOF)
const
2527 Int_t nx = ixmax-ixmin+1;
2528 Int_t ny = iymax-iymin+1;
2538 Error(
"DoProjectProfile2D",
"Histogram with name %s must be a TProfile2D and is a %s",
name,p2obj->
ClassName());
2546 if ( originalRange ) {
2567 if ( originalRange ) {
2568 if (xbins->fN == 0 && ybins->
fN == 0) {
2571 }
else if (ybins->
fN == 0) {
2573 ,projX->
GetNbins(),&xbins->fArray[ixmin-1]);
2574 }
else if (xbins->fN == 0) {
2581 if (xbins->fN == 0 && ybins->
fN == 0) {
2584 }
else if (ybins->
fN == 0) {
2586 ,nx,&xbins->fArray[ixmin-1]);
2587 }
else if (xbins->fN == 0) {
2597 const TAxis* outAxis = 0;
2612 Int_t *refX = 0, *refY = 0, *refZ = 0;
2613 Int_t ixbin, iybin, outbin;
2614 if ( projX ==
GetXaxis() && projY ==
GetYaxis() ) { refX = &ixbin; refY = &iybin; refZ = &outbin; }
2615 if ( projX ==
GetYaxis() && projY ==
GetXaxis() ) { refX = &iybin; refY = &ixbin; refZ = &outbin; }
2616 if ( projX ==
GetXaxis() && projY ==
GetZaxis() ) { refX = &ixbin; refY = &outbin; refZ = &iybin; }
2617 if ( projX ==
GetZaxis() && projY ==
GetXaxis() ) { refX = &iybin; refY = &outbin; refZ = &ixbin; }
2618 if ( projX ==
GetYaxis() && projY ==
GetZaxis() ) { refX = &outbin; refY = &ixbin; refZ = &iybin; }
2619 if ( projX ==
GetZaxis() && projY ==
GetYaxis() ) { refX = &outbin; refY = &iybin; refZ = &ixbin; }
2620 R__ASSERT (refX != 0 && refY != 0 && refZ != 0);
2630 if (useWeights && binSumw2.
fN <= 0) useWeights =
false;
2634 for (ixbin=0;ixbin<=1+projX->
GetNbins();ixbin++) {
2636 for ( iybin=0;iybin<=1+projY->
GetNbins();iybin++) {
2641 if (poutBin <0)
continue;
2643 for (outbin = outmin; outbin <= outmax; outbin++) {
2650 if (!cont)
continue;
2654 if ( useWeights ) tmp = binSumw2.
fArray[poutBin];
2664 bool resetStats =
true;
2675 if (!useWeights) entries =
TMath::Floor( entries + 0.5);
2729 if (opt.
Contains(
"xy")) { pcase = 4; ptype =
"xy"; }
2730 if (opt.
Contains(
"yx")) { pcase = 5; ptype =
"yx"; }
2731 if (opt.
Contains(
"xz")) { pcase = 6; ptype =
"xz"; }
2732 if (opt.
Contains(
"zx")) { pcase = 7; ptype =
"zx"; }
2733 if (opt.
Contains(
"yz")) { pcase = 8; ptype =
"yz"; }
2734 if (opt.
Contains(
"zy")) { pcase = 9; ptype =
"zy"; }
2737 Error(
"Project3D",
"No projection axis specified - return a NULL pointer");
2755 originalRange =
kTRUE;
2764 title +=
" profile "; title += ptype; title +=
" projection";
2826 return Rebin3D(ngroup, 1, 1, newname);
2836 return Rebin3D(1, ngroup, 1, newname);
2846 return Rebin3D(1, 1, ngroup, newname);
2877 Int_t i,j,k,xbin,ybin,zbin;
2887 if ((nxgroup <= 0) || (nxgroup > nxbins)) {
2888 Error(
"Rebin",
"Illegal value of nxgroup=%d",nxgroup);
2891 if ((nygroup <= 0) || (nygroup > nybins)) {
2892 Error(
"Rebin",
"Illegal value of nygroup=%d",nygroup);
2895 if ((nzgroup <= 0) || (nzgroup > nzbins)) {
2896 Error(
"Rebin",
"Illegal value of nzgroup=%d",nzgroup);
2900 Int_t newxbins = nxbins/nxgroup;
2901 Int_t newybins = nybins/nygroup;
2902 Int_t newzbins = nzbins/nzgroup;
2920 if (newname && strlen(newname)) {
2928 bool resetStat =
false;
2932 if (newxbins*nxgroup != nxbins) {
2936 if (newybins*nygroup != nybins) {
2940 if (newzbins*nzgroup != nzbins) {
2982 if (nxgroup != 1 || nygroup != 1 || nzgroup != 1) {
2991 hnew->
SetBins(newxbins,xbins, newybins, ybins, newzbins, zbins);
3004 for (xbin = 1; xbin <= newxbins; xbin++) {
3007 for (ybin = 1; ybin <= newybins; ybin++) {
3009 for (zbin = 1; zbin <= newzbins; zbin++) {
3012 for (i = 0; i < nxgroup; i++) {
3013 if (oldxbin+i > nxbins)
break;
3014 for (j =0; j < nygroup; j++) {
3015 if (oldybin+j > nybins)
break;
3016 for (k =0; k < nzgroup; k++) {
3017 if (oldzbin+k > nzbins)
break;
3019 bin = oldxbin + i + (oldybin + j)*(nxbins + 2) + (oldzbin + k)*(nxbins + 2)*(nybins + 2);
3020 binContent += oldBins[bin];
3021 if (oldSumw2) binSumw2 += oldSumw2[bin];
3036 for (
Int_t xover = 0; xover <= 1; xover++) {
3037 for (
Int_t yover = 0; yover <= 1; yover++) {
3038 for (
Int_t zover = 0; zover <= 1; zover++) {
3042 for (xbin = xover*oldxbin; xbin <= xover*(nxbins+1); xbin++) {
3043 for (ybin = yover*oldybin; ybin <= yover*(nybins+1); ybin++) {
3044 for (zbin = zover*oldzbin; zbin <= zover*(nzbins+1); zbin++) {
3045 bin =
GetBin(xbin,ybin,zbin);
3046 binContent += oldBins[bin];
3047 if (oldSumw2) binSumw2 += oldSumw2[bin];
3052 yover*(newybins+1), zover*(newzbins+1) );
3059 Double_t binContent0, binContent2, binContent3, binContent4;
3060 Double_t binError0, binError2, binError3, binError4;
3061 Int_t oldxbin2, oldybin2, oldzbin2;
3062 Int_t ufbin, ofbin, ofbin2, ofbin3, ofbin4;
3068 for (xbin = 1; xbin<=newxbins; xbin++) {
3070 for (zbin = 1; zbin<=newzbins; zbin++) {
3071 binContent0 = binContent2 = 0;
3072 binError0 = binError2 = 0;
3073 for (i=0; i<nxgroup; i++) {
3074 if (oldxbin2+i > nxbins)
break;
3075 for (k=0; k<nzgroup; k++) {
3076 if (oldzbin2+k > nzbins)
break;
3078 ufbin = oldxbin2 + i + (nxbins+2)*(nybins+2)*(oldzbin2+k);
3079 binContent0 += oldBins[ufbin];
3080 if (oldSumw2) binError0 += oldSumw2[ufbin];
3081 for (ybin = oldybin; ybin <= nybins + 1; ybin++) {
3083 ofbin = ufbin + ybin*(nxbins+2);
3084 binContent2 += oldBins[ofbin];
3085 if (oldSumw2) binError2 += oldSumw2[ofbin];
3095 oldzbin2 += nzgroup;
3097 oldxbin2 += nxgroup;
3104 for (ybin = 1; ybin<=newybins; ybin++) {
3106 for (zbin = 1; zbin<=newzbins; zbin++) {
3107 binContent0 = binContent2 = 0;
3108 binError0 = binError2 = 0;
3109 for (j=0; j<nygroup; j++) {
3110 if (oldybin2+j > nybins)
break;
3111 for (k=0; k<nzgroup; k++) {
3112 if (oldzbin2+k > nzbins)
break;
3114 ufbin = (oldybin2 + j)*(nxbins+2) + (nxbins+2)*(nybins+2)*(oldzbin2+k);
3115 binContent0 += oldBins[ufbin];
3116 if (oldSumw2) binError0 += oldSumw2[ufbin];
3117 for (xbin = oldxbin; xbin <= nxbins + 1; xbin++) {
3119 ofbin = ufbin + xbin;
3120 binContent2 += oldBins[ofbin];
3121 if (oldSumw2) binError2 += oldSumw2[ofbin];
3131 oldzbin2 += nzgroup;
3133 oldybin2 += nygroup;
3140 for (xbin = 1; xbin<=newxbins; xbin++) {
3142 for (ybin = 1; ybin<=newybins; ybin++) {
3143 binContent0 = binContent2 = 0;
3144 binError0 = binError2 = 0;
3145 for (i=0; i<nxgroup; i++) {
3146 if (oldxbin2+i > nxbins)
break;
3147 for (j=0; j<nygroup; j++) {
3148 if (oldybin2+j > nybins)
break;
3150 ufbin = oldxbin2 + i + (nxbins+2)*(oldybin2+j);
3151 binContent0 += oldBins[ufbin];
3152 if (oldSumw2) binError0 += oldSumw2[ufbin];
3153 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3155 ofbin = ufbin + (nxbins+2)*(nybins+2)*zbin;
3156 binContent2 += oldBins[ofbin];
3157 if (oldSumw2) binError2 += oldSumw2[ofbin];
3167 oldybin2 += nygroup;
3169 oldxbin2 += nxgroup;
3176 for (xbin = 1; xbin<=newxbins; xbin++) {
3185 for (i=0; i<nxgroup; i++) {
3186 if (oldxbin2+i > nxbins)
break;
3187 ufbin = oldxbin2 + i;
3188 binContent0 += oldBins[ufbin];
3189 if (oldSumw2) binError0 += oldSumw2[ufbin];
3190 for (ybin = oldybin; ybin <= nybins + 1; ybin++) {
3191 ofbin3 = ufbin+ybin*(nxbins+2);
3192 binContent3 += oldBins[ ofbin3 ];
3193 if (oldSumw2) binError3 += oldSumw2[ofbin3];
3194 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3196 ofbin4 = oldxbin2 + i + ybin*(nxbins+2) + (nxbins+2)*(nybins+2)*zbin;
3197 binContent4 += oldBins[ofbin4];
3198 if (oldSumw2) binError4 += oldSumw2[ofbin4];
3201 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3202 ofbin2 = ufbin+zbin*(nxbins+2)*(nybins+2);
3203 binContent2 += oldBins[ ofbin2 ];
3204 if (oldSumw2) binError2 += oldSumw2[ofbin2];
3210 hnew->
SetBinContent(xbin,newybins+1,newzbins+1,binContent4);
3217 oldxbin2 += nxgroup;
3224 for (zbin = 1; zbin<=newzbins; zbin++) {
3233 for (i=0; i<nzgroup; i++) {
3234 if (oldzbin2+i > nzbins)
break;
3235 ufbin = (oldzbin2 + i)*(nxbins+2)*(nybins+2);
3236 binContent0 += oldBins[ufbin];
3237 if (oldSumw2) binError0 += oldSumw2[ufbin];
3238 for (ybin = oldybin; ybin <= nybins + 1; ybin++) {
3239 ofbin3 = ufbin+ybin*(nxbins+2);
3240 binContent3 += oldBins[ ofbin3 ];
3241 if (oldSumw2) binError3 += oldSumw2[ofbin3];
3242 for (xbin = oldxbin; xbin <= nxbins + 1; xbin++) {
3244 ofbin4 = ufbin + xbin + ybin*(nxbins+2);
3245 binContent4 += oldBins[ofbin4];
3246 if (oldSumw2) binError4 += oldSumw2[ofbin4];
3249 for (xbin = oldxbin; xbin <= nxbins + 1; xbin++) {
3250 ofbin2 = xbin +(oldzbin2+i)*(nxbins+2)*(nybins+2);
3251 binContent2 += oldBins[ ofbin2 ];
3252 if (oldSumw2) binError2 += oldSumw2[ofbin2];
3258 hnew->
SetBinContent(newxbins+1,newybins+1,zbin,binContent4);
3265 oldzbin2 += nzgroup;
3272 for (ybin = 1; ybin<=newybins; ybin++) {
3281 for (i=0; i<nygroup; i++) {
3282 if (oldybin2+i > nybins)
break;
3283 ufbin = (oldybin2 + i)*(nxbins+2);
3284 binContent0 += oldBins[ufbin];
3285 if (oldSumw2) binError0 += oldSumw2[ufbin];
3286 for (xbin = oldxbin; xbin <= nxbins + 1; xbin++) {
3287 ofbin3 = ufbin+xbin;
3288 binContent3 += oldBins[ ofbin3 ];
3289 if (oldSumw2) binError3 += oldSumw2[ofbin3];
3290 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3292 ofbin4 = xbin + (nxbins+2)*(nybins+2)*zbin+(oldybin2+i)*(nxbins+2);
3293 binContent4 += oldBins[ofbin4];
3294 if (oldSumw2) binError4 += oldSumw2[ofbin4];
3297 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3298 ofbin2 = (oldybin2+i)*(nxbins+2)+zbin*(nxbins+2)*(nybins+2);
3299 binContent2 += oldBins[ ofbin2 ];
3300 if (oldSumw2) binError2 += oldSumw2[ofbin2];
3306 hnew->
SetBinContent(newxbins+1,ybin,newzbins+1,binContent4);
3313 oldybin2 += nygroup;
3356 if (!resetStat) hnew->
PutStats(stat);
3359 if (oldSumw2)
delete [] oldSumw2;
3390 if (bin < 0)
return;
3423 bool originalRange,
bool useUF,
bool useOF)
3425 return h.DoProject1D(
name, title, projX,
nullptr,
nullptr, computeErrors, originalRange, useUF, useOF);
3432 bool computeErrors,
bool originalRange,
bool useUF,
bool useOF)
3434 return h.DoProject2D(
name, title, projX, projY, computeErrors, originalRange, useUF, useOF);
3470 :
TH3(
name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
3486 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3500 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3513 h3c.TH3C::Copy(*
this);
3532 if (newval > -128 && newval < 128) {
fArray[bin] =
Char_t(newval);
return;}
3533 if (newval < -127)
fArray[bin] = -127;
3534 if (newval > 127)
fArray[bin] = 127;
3638 h3c.TH3C::Copy(*
this);
3736 :
TH3(
name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
3752 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3766 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3779 h3s.TH3S::Copy(*
this);
3798 if (newval > -32768 && newval < 32768) {
fArray[bin] =
Short_t(newval);
return;}
3799 if (newval < -32767)
fArray[bin] = -32767;
3800 if (newval > 32767)
fArray[bin] = 32767;
3875 h3s.TH3S::Copy(*
this);
3973 :
TH3(
name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
3989 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4003 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4016 h3i.TH3I::Copy(*
this);
4035 if (newval > -INT_MAX && newval < INT_MAX) {
fArray[bin] =
Int_t(newval);
return;}
4036 if (newval < -INT_MAX)
fArray[bin] = -INT_MAX;
4037 if (newval > INT_MAX)
fArray[bin] = INT_MAX;
4079 h3i.TH3I::Copy(*
this);
4177 :
TH3(
name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
4193 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4207 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4220 h3f.TH3F::Copy(*
this);
4295 h3f.TH3F::Copy(*
this);
4393 :
TH3(
name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
4409 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4423 :
TH3(
name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
TH3C operator/(TH3C &h1, TH3C &h2)
Operator /.
TH3C operator*(Float_t c1, TH3C &h3c)
Operator *.
TH3C operator-(TH3C &h1, TH3C &h2)
Operator -.
TH3C operator+(TH3C &h1, TH3C &h2)
Operator +.
R__EXTERN TRandom * gRandom
Array of chars or bytes (8 bits per element).
void Streamer(TBuffer &) override
Stream a TArrayC object.
void Set(Int_t n) override
Set size of this array to n chars.
Array of doubles (64 bits per element).
void Streamer(TBuffer &) override
Stream a TArrayD object.
void Set(Int_t n) override
Set size of this array to n doubles.
Array of floats (32 bits per element).
void Set(Int_t n) override
Set size of this array to n floats.
void Streamer(TBuffer &) override
Stream a TArrayF object.
Array of integers (32 bits per element).
void Set(Int_t n) override
Set size of this array to n ints.
Array of shorts (16 bits per element).
void Set(Int_t n) override
Set size of this array to n shorts.
void Streamer(TBuffer &) override
Stream a TArrayS object.
virtual void Set(Int_t n)=0
Use this attribute class when an object should have 3D capabilities.
virtual void Streamer(TBuffer &)
virtual Color_t GetTitleColor() const
virtual Color_t GetLabelColor() const
virtual Int_t GetNdivisions() const
virtual Color_t GetAxisColor() const
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title.
virtual Style_t GetTitleFont() const
virtual Float_t GetLabelOffset() const
virtual void SetAxisColor(Color_t color=1, Float_t alpha=1.)
Set color of the line axis and tick marks.
virtual void SetLabelSize(Float_t size=0.04)
Set size of axis labels.
virtual Style_t GetLabelFont() const
virtual void SetTitleFont(Style_t font=62)
Set the title font.
virtual void SetLabelOffset(Float_t offset=0.005)
Set distance between the axis and the labels.
virtual void SetLabelFont(Style_t font=62)
Set labels' font.
virtual void SetTitleSize(Float_t size=0.04)
Set size of axis title.
virtual void SetTitleColor(Color_t color=1)
Set color of axis title.
virtual Float_t GetTitleSize() const
virtual Float_t GetLabelSize() const
virtual Float_t GetTickLength() const
virtual Float_t GetTitleOffset() const
virtual void SetTickLength(Float_t length=0.03)
Set tick mark length.
virtual void SetNdivisions(Int_t n=510, Bool_t optim=kTRUE)
Set the number of divisions for this axis.
virtual void SetLabelColor(Color_t color=1, Float_t alpha=1.)
Set color of labels.
virtual Color_t GetFillColor() const
Return the fill area color.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Class to manage histogram axis.
virtual void SetBinLabel(Int_t bin, const char *label)
Set label for bin.
Bool_t IsAlphanumeric() const
const char * GetTitle() const override
Returns title of object.
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
const TArrayD * GetXbins() const
virtual Int_t FindBin(Double_t x)
Find bin number corresponding to abscissa x.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
virtual void Set(Int_t nbins, Double_t xmin, Double_t xmax)
Initialize axis with fix bins.
virtual Int_t FindFixBin(Double_t x) const
Find bin number corresponding to abscissa x.
Int_t GetLast() const
Return last bin on the axis i.e.
virtual void ImportAttributes(const TAxis *axis)
Copy axis attributes to this.
virtual void SetRange(Int_t first=0, Int_t last=0)
Set the viewing range for the axis using bin numbers.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
Int_t GetFirst() const
Return first bin on the axis i.e.
THashList * GetLabels() const
Buffer base class used for serializing objects.
virtual Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr)=0
TObject * GetParent() const
Return pointer to parent of this buffer.
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t GetVersionOwner() const =0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
virtual TH1 * GetHistogram() const
Return a pointer to the histogram used to visualise the function Note that this histogram is managed ...
virtual Double_t GetParError(Int_t ipar) const
Return value of parameter number ipar.
Double_t GetChisquare() const
virtual void SetRange(Double_t xmin, Double_t xmax)
Initialize the upper and lower bounds to draw the function.
virtual Int_t GetNpar() const
virtual Int_t GetNumberFitPoints() const
virtual Double_t * GetParameters() const
virtual void GetRange(Double_t *xmin, Double_t *xmax) const
Return range of a generic N-D function.
virtual const char * GetParName(Int_t ipar) const
virtual Double_t EvalPar(const Double_t *x, const Double_t *params=nullptr)
Evaluate function with given coordinates and parameters.
virtual void SetParameters(const Double_t *params)
virtual Double_t GetParameter(Int_t ipar) const
A 3-Dim function with parameters.
1-D histogram with a double per channel (see TH1 documentation)}
void Reset(Option_t *option="") override
Reset.
TH1 is the base class of all histogram classes in ROOT.
virtual void SetDirectory(TDirectory *dir)
By default, when a histogram is created, it is added to the list of histogram objects in the current ...
Double_t * fBuffer
[fBufferSize] entry buffer
virtual Double_t GetEffectiveEntries() const
Number of effective entries of the histogram.
virtual Bool_t Multiply(TF1 *f1, Double_t c1=1)
Performs the operation:
Int_t fNcells
Number of bins(1D), cells (2D) +U/Overflows.
void Copy(TObject &hnew) const override
Copy this histogram structure to newth1.
Double_t fTsumw
Total Sum of weights.
Double_t fTsumw2
Total Sum of squares of weights.
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...
Double_t fTsumwx2
Total Sum of weight*X*X.
virtual Double_t GetStdDev(Int_t axis=1) const
Returns the Standard Deviation (Sigma).
virtual Int_t GetNbinsY() const
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
virtual Int_t GetNbinsZ() const
virtual Int_t GetDimension() const
void Streamer(TBuffer &) override
Stream a class object.
@ kNstat
Size of statistics data (up to TProfile3D)
@ kIsNotW
Histogram is forced to be not weighted even when the histogram is filled with weighted.
virtual Bool_t CanExtendAllAxes() const
Returns true if all axes are extendable.
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
virtual Int_t GetNcells() const
virtual void PutStats(Double_t *stats)
Replace current statistics with the values in array stats.
TVirtualHistPainter * GetPainter(Option_t *option="")
Return pointer to painter.
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 GetBin(Int_t binx, Int_t biny=0, Int_t binz=0) const
Return Global bin number corresponding to binx,y,z.
virtual Int_t GetNbinsX() const
virtual Bool_t Add(TF1 *h1, Double_t c1=1, Option_t *option="")
Performs the operation: this = this + c1*f1 if errors are defined (see TH1::Sumw2),...
Int_t fBufferSize
fBuffer size
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...
Int_t fDimension
! Histogram dimension (1, 2 or 3 dim)
virtual void SetBinError(Int_t bin, Double_t error)
Set the bin Error Note that this resets the bin eror option to be of Normal Type and for the non-empt...
static Int_t fgBufferSize
! Default buffer size for automatic histograms
void Draw(Option_t *option="") override
Draw this histogram with options.
UInt_t GetAxisLabelStatus() const
Internal function used in TH1::Fill to see which axis is full alphanumeric i.e.
Double_t * fIntegral
! Integral of bins used by GetRandom
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual Double_t GetBinLowEdge(Int_t bin) const
Return bin lower edge for 1D histogram.
virtual Double_t GetEntries() const
Return the current number of entries.
void SetName(const char *name) override
Change the name of this histogram.
void Paint(Option_t *option="") override
Control routine to paint any kind of histograms.
virtual void ResetStats()
Reset the statistics including the number of entries and replace with values calculated from bin cont...
virtual void SetBuffer(Int_t buffersize, Option_t *option="")
Set the maximum number of entries to be kept in the buffer.
Double_t fEntries
Number of entries.
TAxis fZaxis
Z axis descriptor.
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...
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
TAxis fXaxis
X axis descriptor.
virtual void ExtendAxis(Double_t x, TAxis *axis)
Histogram is resized along axis such that x is in the axis range.
TArrayD fSumw2
Array of sum of squares of weights.
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
virtual Int_t GetSumw2N() 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.
Bool_t GetStatOverflowsBehaviour() const
TObject * Clone(const char *newname="") const override
Make a complete copy of the underlying object.
virtual Bool_t Divide(TF1 *f1, Double_t c1=1)
Performs the operation: this = this/(c1*f1) if errors are defined (see TH1::Sumw2),...
TAxis fYaxis
Y axis descriptor.
TVirtualHistPainter * fPainter
! Pointer to histogram painter
virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax)
Redefine x axis parameters.
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
virtual void SetEntries(Double_t n)
static Bool_t fgDefaultSumw2
! Flag to call TH1::Sumw2 automatically at histogram creation time
Double_t fTsumwx
Total Sum of weight*X.
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...
2-D histogram with a double per channel (see TH1 documentation)}
void Reset(Option_t *option="") override
Reset this histogram: contents, errors, etc.
void SetBinContent(Int_t bin, Double_t content) override
Set bin content.
void PutStats(Double_t *stats) override
Replace current statistics with the values in array stats.
3-D histogram with a byte per channel (see TH1 documentation)
void SetBinsLength(Int_t n=-1) override
Set total number of bins including under/overflow Reallocate bin contents array.
TClass * IsA() const override
void Reset(Option_t *option="") override
Reset this histogram: contents, errors, etc.
void AddBinContent(Int_t bin) override
Increment bin content by 1.
TH3C & operator=(const TH3C &h1)
Operator =.
void Streamer(TBuffer &) override
Stream an object of class TH3C.
virtual ~TH3C()
Destructor.
void Copy(TObject &hnew) const override
Copy this 3-D histogram structure to newth3.
3-D histogram with a double per channel (see TH1 documentation)}
TClass * IsA() const override
void Streamer(TBuffer &) override
Stream an object of class TH3D.
void SetBinsLength(Int_t n=-1) override
Set total number of bins including under/overflow Reallocate bin contents array.
void Copy(TObject &hnew) const override
Copy this 3-D histogram structure to newth3.
TH3D & operator=(const TH3D &h1)
Operator =.
virtual ~TH3D()
Destructor.
3-D histogram with a float per channel (see TH1 documentation)}
TH3F & operator=(const TH3F &h1)
Operator =.
void SetBinsLength(Int_t n=-1) override
Set total number of bins including under/overflow Reallocate bin contents array.
void Streamer(TBuffer &) override
Stream an object of class TH3F.
virtual ~TH3F()
Destructor.
void Copy(TObject &hnew) const override
Copy this 3-D histogram structure to newth3.
TClass * IsA() const override
3-D histogram with an int per channel (see TH1 documentation)}
TH3I & operator=(const TH3I &h1)
Operator =.
void AddBinContent(Int_t bin) override
Increment bin content by 1.
void Copy(TObject &hnew) const override
Copy this 3-D histogram structure to newth3.
void SetBinsLength(Int_t n=-1) override
Set total number of bins including under/overflow Reallocate bin contents array.
virtual ~TH3I()
Destructor.
3-D histogram with a short per channel (see TH1 documentation)
void Streamer(TBuffer &) override
Stream an object of class TH3S.
void SetBinsLength(Int_t n=-1) override
Set total number of bins including under/overflow Reallocate bin contents array.
void AddBinContent(Int_t bin) override
Increment bin content by 1.
void Copy(TObject &hnew) const override
Copy this 3-D histogram structure to newth3.
TClass * IsA() const override
virtual ~TH3S()
Destructor.
TH3S & operator=(const TH3S &h1)
Operator =.
The 3-D histogram classes derived from the 1-D histogram classes.
virtual TH3 * Rebin3D(Int_t nxgroup=2, Int_t nygroup=2, Int_t nzgroup=2, const char *newname="")
Rebin this histogram grouping nxgroup/nygroup/nzgroup bins along the xaxis/yaxis/zaxis together.
Int_t BufferEmpty(Int_t action=0) override
Fill histogram with all entries in the buffer.
Double_t fTsumwy
Total Sum of weight*Y.
Double_t fTsumwy2
Total Sum of weight*Y*Y.
virtual Double_t GetCovariance(Int_t axis1=1, Int_t axis2=2) const
Return covariance between axis1 and axis2.
void GetStats(Double_t *stats) const override
Fill the array stats from the contents of this histogram The array stats must be correctly dimensione...
void Copy(TObject &hnew) const override
Copy.
virtual TH2D * DoProject2D(const char *name, const char *title, const TAxis *projX, const TAxis *projY, bool computeErrors, bool originalRange, bool useUF, bool useOF) const
internal method performing the projection to a 2D histogram called from TH3::Project3D
Double_t fTsumwxz
Total Sum of weight*X*Z.
void FillRandom(const char *fname, Int_t ntimes=5000, TRandom *rng=nullptr) override
Fill histogram following distribution in function fname.
Double_t KolmogorovTest(const TH1 *h2, Option_t *option="") const override
Statistical test of compatibility in shape between THIS histogram and h2, using Kolmogorov test.
virtual TH1D * ProjectionY(const char *name="_py", Int_t ixmin=0, Int_t ixmax=-1, Int_t izmin=0, Int_t izmax=-1, Option_t *option="") const
Project a 3-D histogram into a 1-D histogram along Y.
Double_t Interpolate(Double_t x, Double_t y) const override
Not yet implemented.
virtual void GetRandom3(Double_t &x, Double_t &y, Double_t &, TRandom *rng=nullptr)
Return 3 random numbers along axis x , y and z distributed according to the cell-contents of this 3-d...
void Reset(Option_t *option="") override
Reset this histogram: contents, errors, etc.
virtual ~TH3()
Destructor.
Int_t Fill(Double_t) override
Invalid Fill method.
virtual TH3 * RebinY(Int_t ngroup=2, const char *newname="")
Rebin only the Y axis see Rebin3D.
virtual Double_t IntegralAndError(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Int_t binz1, Int_t binz2, Double_t &err, Option_t *option="") const
Return integral of bin contents in range [binx1,binx2],[biny1,biny2],[binz1,binz2] for a 3-D histogra...
virtual TH1D * ProjectionZ(const char *name="_pz", Int_t ixmin=0, Int_t ixmax=-1, Int_t iymin=0, Int_t iymax=-1, Option_t *option="") const
Project a 3-D histogram into a 1-D histogram along Z.
virtual TH1D * ProjectionX(const char *name="_px", Int_t iymin=0, Int_t iymax=-1, Int_t izmin=0, Int_t izmax=-1, Option_t *option="") const
Project a 3-D histogram into a 1-D histogram along X.
virtual TProfile2D * Project3DProfile(Option_t *option="xy") const
Project a 3-d histogram into a 2-d profile histograms depending on the option parameter option may co...
Double_t fTsumwz2
Total Sum of weight*Z*Z.
Double_t fTsumwxy
Total Sum of weight*X*Y.
virtual TH1 * Project3D(Option_t *option="x") const
Project a 3-d histogram into 1 or 2-d histograms depending on the option parameter,...
virtual Double_t GetBinWithContent3(Double_t c, Int_t &binx, Int_t &biny, Int_t &binz, Int_t firstx=0, Int_t lastx=0, Int_t firsty=0, Int_t lasty=0, Int_t firstz=0, Int_t lastz=0, Double_t maxdiff=0) const
Compute first cell (binx,biny,binz) in the range [firstx,lastx](firsty,lasty][firstz,...
void DoFillProfileProjection(TProfile2D *p2, const TAxis &a1, const TAxis &a2, const TAxis &a3, Int_t bin1, Int_t bin2, Int_t bin3, Int_t inBin, Bool_t useWeights) const
internal function to fill the bins of the projected profile 2D histogram called from DoProjectProfile...
virtual TH3 * RebinZ(Int_t ngroup=2, const char *newname="")
Rebin only the Z axis see Rebin3D.
void Streamer(TBuffer &) override
Stream an object of class TH3.
Double_t Integral(Option_t *option="") const override
Return integral of bin contents.
virtual Int_t BufferFill(Double_t x, Double_t y, Double_t z, Double_t w)
Accumulate arguments in buffer.
TClass * IsA() const override
virtual void SetShowProjection(const char *option="xy", Int_t nbins=1)
When the mouse is moved in a pad containing a 3-d view of this histogram a second canvas shows a proj...
TH3 * RebinX(Int_t ngroup=2, const char *newname="") override
Rebin only the X axis see Rebin3D.
virtual Double_t GetCorrelationFactor(Int_t axis1=1, Int_t axis2=2) const
Return correlation factor between axis1 and axis2.
virtual TH1D * DoProject1D(const char *name, const char *title, int imin1, int imax1, int imin2, int imax2, const TAxis *projAxis, const TAxis *axis1, const TAxis *axis2, Option_t *option) const
internal method performing the projection to 1D histogram called from TH3::Project3D
Double_t fTsumwz
Total Sum of weight*Z.
Double_t GetBinContent(Int_t binx, Int_t biny, Int_t binz) const override
void SetBinContent(Int_t bin, Double_t content) override
Set bin content.
Double_t fTsumwyz
Total Sum of weight*Y*Z.
TH3()
Default constructor.
Int_t GetBin(Int_t binx, Int_t biny, Int_t binz) const override
See comments in TH1::GetBin.
virtual void FitSlicesZ(TF1 *f1=nullptr, Int_t binminx=1, Int_t binmaxx=0, Int_t binminy=1, Int_t binmaxy=0, Int_t cut=0, Option_t *option="QNR")
Project slices along Z in case of a 3-D histogram, then fit each slice with function f1 and make a 2-...
virtual TProfile2D * DoProjectProfile2D(const char *name, const char *title, const TAxis *projX, const TAxis *projY, bool originalRange, bool useUF, bool useOF) const
internal method to project to a 2D Profile called from TH3::Project3DProfile
void PutStats(Double_t *stats) override
Replace current statistics with the values in array stats.
static THLimitsFinder * GetLimitsFinder()
Return pointer to the current finder.
virtual Int_t FindGoodLimits(TH1 *h, Double_t xmin, Double_t xmax)
Compute the best axis limits for the X axis.
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
Collectable string class.
Mother of all ROOT objects.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual TClass * IsA() const
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Profile2D histograms are used to display the mean value of Z and its error for each cell in X,...
void PutStats(Double_t *stats) override
Replace current statistics with the values in array stats.
Int_t Fill(const Double_t *v)
void Sumw2(Bool_t flag=kTRUE) override
Create/Delete structure to store sum of squares of weights per bin.
void SetBins(const Int_t *nbins, const Double_t *range)
virtual TArrayD * GetBinSumw2()
void Reset(Option_t *option="") override
Reset contents of a Profile2D histogram.
This is the base class for the ROOT Random number generators.
Double_t Rndm() override
Machine independent random number generator.
void ToLower()
Change string to lower-case.
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
void ToUpper()
Change string to upper case.
TString & Remove(Ssiz_t pos)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual void SetShowProjection(const char *option, Int_t nbins)=0
small helper class to store/restore gPad context in TPad methods
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
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...
Bool_t Permute(Int_t n, Int_t *a)
Simple recursive algorithm to find the permutations of n natural numbers, not necessarily all distinc...
Double_t QuietNaN()
Returns a quiet NaN as defined by IEEE 754.
Double_t Floor(Double_t x)
Rounds x downward, returning the largest integral value that is not greater than x.
Double_t Log(Double_t x)
Returns the natural logarithm of x.
Double_t Mean(Long64_t n, const T *a, const Double_t *w=0)
Returns the weighted mean of an array a with length n.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Double_t KolmogorovProb(Double_t z)
Calculates the Kolmogorov distribution function,.
Long64_t BinarySearch(Long64_t n, const T *array, T value)
Binary search in an array of n values to locate value.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.