66 fTsumwy = fTsumwy2 = fTsumwxy = 0;
67 fTsumwz = fTsumwz2 = fTsumwxz = fTsumwyz = 0;
77 :
TH1(name,title,nbinsx,xlow,xup),
81 if (nbinsy <= 0) {
Warning(
"TH3",
"nbinsy is <=0 - set to nbinsy = 1"); nbinsy = 1; }
82 if (nbinsz <= 0) nbinsz = 1;
85 fNcells = (nbinsx+2)*(nbinsy+2)*(nbinsz+2);
97 :
TH1(name,title,nbinsx,xbins),
101 if (nbinsy <= 0) {
Warning(
"TH3",
"nbinsy is <=0 - set to nbinsy = 1"); nbinsy = 1; }
102 if (nbinsz <= 0) nbinsz = 1;
107 fNcells = (nbinsx+2)*(nbinsy+2)*(nbinsz+2);
119 :
TH1(name,title,nbinsx,xbins),
123 if (nbinsy <= 0) {
Warning(
"TH3",
"nbinsy is <=0 - set to nbinsy = 1"); nbinsy = 1; }
124 if (nbinsz <= 0) nbinsz = 1;
129 fNcells = (nbinsx+2)*(nbinsy+2)*(nbinsz+2);
141 ((
TH3&)h).Copy(*
this);
182 if (!nbentries)
return 0;
185 if (action == 0)
return 0;
186 nbentries = -nbentries;
201 for (
Int_t i=1;i<nbentries;i++) {
203 if (x < xmin) xmin =
x;
204 if (x > xmax) xmax =
x;
206 if (y < ymin) ymin =
y;
207 if (y > ymax) ymax =
y;
209 if (z < zmin) zmin =
z;
210 if (z > zmax) zmax =
z;
229 for (
Int_t i=0;i<nbentries;i++) {
230 Fill(buffer[4*i+2],buffer[4*i+3],buffer[4*i+4],buffer[4*i+1]);
256 nbentries = -nbentries;
266 return Fill(x,y,z,w);
282 Error(
"Fill",
"Invalid signature - do nothing");
297 Int_t binx, biny, binz, bin;
302 if (binx <0 || biny <0 || binz<0)
return -1;
345 Int_t binx, biny, binz, bin;
350 if (binx <0 || biny <0 || binz<0)
return -1;
390 Int_t binx, biny, binz, bin;
395 if (binx <0 || biny <0 || binz<0)
return -1;
433 Int_t binx, biny, binz, bin;
438 if (binx <0 || biny <0 || binz<0)
return -1;
477 Int_t binx, biny, binz, bin;
482 if (binx <0 || biny <0 || binz<0)
return -1;
521 Int_t binx, biny, binz, bin;
526 if (binx <0 || biny <0 || binz<0)
return -1;
565 Int_t binx, biny, binz, bin;
570 if (binx <0 || biny <0 || binz<0)
return -1;
610 Int_t binx, biny, binz, bin;
615 if (binx <0 || biny <0 || binz<0)
return -1;
660 Int_t bin, binx, biny, binz, ibin, loop;
664 if (!f1) {
Error(
"FillRandom",
"Unknown function: %s",fname);
return; }
670 Int_t nxy = nbinsx*nbinsy;
676 for (binz=1;binz<=nbinsz;binz++) {
678 for (biny=1;biny<=nbinsy;biny++) {
680 for (binx=1;binx<=nbinsx;binx++) {
683 integral[ibin] = integral[ibin-1] + f1->
Eval(xv[0],xv[1],xv[2]);
689 if (integral[nbins] == 0 ) {
691 Error(
"FillRandom",
"Integral = zero");
return;
693 for (bin=1;bin<=
nbins;bin++) integral[bin] /= integral[nbins];
698 for (loop=0;loop<ntimes;loop++) {
702 biny = (ibin - nxy*binz)/nbinsx;
703 binx = 1 + ibin - nbinsx*(biny + nbinsy*binz);
729 if (!h) {
Error(
"FillRandom",
"Null histogram");
return; }
731 Error(
"FillRandom",
"Histograms with different dimensions");
return;
739 for (loop=0;loop<ntimes;loop++) {
752 if (axis < 1 || axis > 3) {
753 Warning(
"FindFirstBinAbove",
"Invalid axis number : %d, axis x assumed\n",axis);
759 Int_t binx, biny, binz;
761 for (binx=1;binx<=nbinsx;binx++) {
762 for (biny=1;biny<=nbinsy;biny++) {
763 for (binz=1;binz<=nbinsz;binz++) {
768 }
else if (axis == 2) {
769 for (biny=1;biny<=nbinsy;biny++) {
770 for (binx=1;binx<=nbinsx;binx++) {
771 for (binz=1;binz<=nbinsz;binz++) {
777 for (binz=1;binz<=nbinsz;binz++) {
778 for (binx=1;binx<=nbinsx;binx++) {
779 for (biny=1;biny<=nbinsy;biny++) {
795 if (axis < 1 || axis > 3) {
796 Warning(
"FindLastBinAbove",
"Invalid axis number : %d, axis x assumed\n",axis);
802 Int_t binx, biny, binz;
804 for (binx=nbinsx;binx>=1;binx--) {
805 for (biny=1;biny<=nbinsy;biny++) {
806 for (binz=1;binz<=nbinsz;binz++) {
811 }
else if (axis == 2) {
812 for (biny=nbinsy;biny>=1;biny--) {
813 for (binx=1;binx<=nbinsx;binx++) {
814 for (binz=1;binz<=nbinsz;binz++) {
820 for (binz=nbinsz;binz>=1;binz--) {
821 for (binx=1;binx<=nbinsx;binx++) {
822 for (biny=1;biny<=nbinsy;biny++) {
869 if (binminx < 1) binminx = 1;
870 if (binmaxx > nbinsx) binmaxx = nbinsx;
871 if (binmaxx < binminx) {binminx = 1; binmaxx = nbinsx;}
872 if (binminy < 1) binminy = 1;
873 if (binmaxy > nbinsy) binmaxy = nbinsy;
874 if (binmaxy < binminy) {binminy = 1; binmaxy = nbinsy;}
878 f1 = (
TF1*)
gROOT->GetFunction(
"gaus");
882 const char *fname = f1->
GetName();
889 char name[80], title[80];
893 for (ipar=0;ipar<npar;ipar++) {
896 if (xbins->
fN == 0) {
897 hlist[ipar] =
new TH2D(name, title,
901 hlist[ipar] =
new TH2D(name, title,
914 Int_t bin,binx,biny,binz;
915 for (biny=binminy;biny<=binmaxy;biny++) {
917 for (binx=binminx;binx<=binmaxx;binx++) {
921 for (binz=1;binz<=nbinsz;binz++) {
922 bin =
GetBin(binx,biny,binz);
924 if (w == 0)
continue;
929 if (nfill < cut)
continue;
931 hpz->Fit(fname,option);
933 if (npfits > npar && npfits >= cut) {
934 for (ipar=0;ipar<npar;ipar++) {
953 if (biny < 0) biny = 0;
954 if (biny > ofy) biny = ofy;
957 if (binz < 0) binz = 0;
958 if (binz > ofz) binz = ofz;
994 Error(
"GetBinWithContent3",
"function is only valid for 3-D histograms");
997 if (firstx <= 0) firstx = 1;
999 if (firsty <= 0) firsty = 1;
1001 if (firstz <= 0) firstz = 1;
1003 Int_t binminx = 0, binminy=0, binminz=0;
1005 for (
Int_t k=firstz;k<=lastz;k++) {
1006 for (
Int_t j=firsty;j<=lasty;j++) {
1007 for (
Int_t i=firstx;i<=lastx;i++) {
1009 if (diff <= 0) {binx = i; biny=j; binz=k;
return diff;}
1010 if (diff < curmax && diff <= maxdiff) {curmax = diff, binminx=i; binminy=j;binminz=k;}
1026 if (axis1 < 1 || axis2 < 1 || axis1 > 3 || axis2 > 3) {
1027 Error(
"GetCorrelationFactor",
"Wrong parameters");
1030 if (axis1 == axis2)
return 1;
1032 if (stddev1 == 0)
return 0;
1034 if (stddev2 == 0)
return 0;
1044 if (axis1 < 1 || axis2 < 1 || axis1 > 3 || axis2 > 3) {
1045 Error(
"GetCovariance",
"Wrong parameters");
1062 if (sumw == 0)
return 0;
1063 if (axis1 == 1 && axis2 == 1) {
1064 return TMath::Abs(sumwx2/sumw - sumwx*sumwx/sumw2);
1066 if (axis1 == 2 && axis2 == 2) {
1067 return TMath::Abs(sumwy2/sumw - sumwy*sumwy/sumw2);
1069 if (axis1 == 3 && axis2 == 3) {
1070 return TMath::Abs(sumwz2/sumw - sumwz*sumwz/sumw2);
1072 if ((axis1 == 1 && axis2 == 2) || (axis1 == 2 && axis2 == 1)) {
1073 return sumwxy/sumw - sumwx/sumw*sumwy/sumw;
1075 if ((axis1 == 1 && axis2 == 3) || (axis1 == 3 && axis2 == 1)) {
1076 return sumwxz/sumw - sumwx/sumw*sumwz/sumw;
1078 if ((axis1 == 2 && axis2 == 3) || (axis1 == 3 && axis2 == 2)) {
1079 return sumwyz/sumw - sumwy/sumw*sumwz/sumw;
1094 Int_t nxy = nbinsx*nbinsy;
1104 if (integral == 0 ) { x = 0; y = 0; z = 0;
return;}
1110 Int_t binz = ibin/nxy;
1111 Int_t biny = (ibin - nxy*binz)/nbinsx;
1112 Int_t binx = ibin - nbinsx*(biny + nbinsy*binz);
1140 Int_t bin, binx, biny, binz;
1144 for (bin=0;bin<9;bin++) stats[bin] = 0;
1155 if (firstBinX == 1) firstBinX = 0;
1159 if (firstBinY == 1) firstBinY = 0;
1163 if (firstBinZ == 1) firstBinZ = 0;
1167 for (binz = firstBinZ; binz <= lastBinZ; binz++) {
1169 for (biny = firstBinY; biny <= lastBinY; biny++) {
1171 for (binx = firstBinX; binx <= lastBinX; binx++) {
1172 bin =
GetBin(binx,biny,binz);
1178 stats[1] += err*err;
1232 return DoIntegral(binx1,binx2,biny1,biny2,binz1,binz2,err,option);
1248 return DoIntegral(binx1,binx2,biny1,biny2,binz1,binz2,error,option,
kTRUE);
1257 Error(
"Interpolate",
"This function must be called with 3 arguments for a TH3");
1267 Error(
"Interpolate",
"This function must be called with 3 arguments for a TH3");
1286 Int_t obx = ubx + 1;
1290 Int_t oby = uby + 1;
1294 Int_t obz = ubz + 1;
1299 if (ubx <=0 || uby <=0 || ubz <= 0 ||
1301 Error(
"Interpolate",
"Cannot interpolate outside histogram domain.");
1320 Double_t i1 = v[0] * (1 - zd) + v[1] * zd;
1321 Double_t i2 = v[2] * (1 - zd) + v[3] * zd;
1322 Double_t j1 = v[4] * (1 - zd) + v[5] * zd;
1323 Double_t j2 = v[6] * (1 - zd) + v[7] * zd;
1326 Double_t w1 = i1 * (1 - yd) + i2 * yd;
1327 Double_t w2 = j1 * (1 - yd) + j2 * yd;
1363 if (h2 == 0)
return 0;
1379 Error(
"KolmogorovTest",
"Histograms must be 3-D\n");
1385 Error(
"KolmogorovTest",
"Number of channels in X is different, %d and %d\n",ncx1,ncx2);
1389 Error(
"KolmogorovTest",
"Number of channels in Y is different, %d and %d\n",ncy1,ncy2);
1393 Error(
"KolmogorovTest",
"Number of channels in Z is different, %d and %d\n",ncz1,ncz2);
1403 if (diff1 > difprec || diff2 > difprec) {
1404 Error(
"KolmogorovTest",
"histograms with different binning along X");
1409 if (diff1 > difprec || diff2 > difprec) {
1410 Error(
"KolmogorovTest",
"histograms with different binning along Y");
1415 if (diff1 > difprec || diff2 > difprec) {
1416 Error(
"KolmogorovTest",
"histograms with different binning along Z");
1421 Int_t ibeg = 1, jbeg = 1, kbeg = 1;
1422 Int_t iend = ncx1, jend = ncy1, kend = ncz1;
1423 if (opt.
Contains(
"U")) {ibeg = 0; jbeg = 0; kbeg = 0;}
1424 if (opt.
Contains(
"O")) {iend = ncx1+1; jend = ncy1+1; kend = ncz1+1;}
1431 for (i = ibeg; i <= iend; i++) {
1432 for (j = jbeg; j <= jend; j++) {
1433 for (k = kbeg; k <= kend; k++) {
1448 Error(
"KolmogorovTest",
"Integral is zero for h1=%s\n",h1->
GetName());
1452 Error(
"KolmogorovTest",
"Integral is zero for h2=%s\n",h2->
GetName());
1460 esum1 = sum1 * sum1 / w1;
1465 esum2 = sum2 * sum2 / w2;
1469 if (afunc2 && afunc1) {
1470 Error(
"KolmogorovTest",
"Errors are zero for both histograms\n");
1476 int order[3] = {0,1,2};
1480 binbeg[0] = ibeg; binbeg[1] = jbeg; binbeg[2] = kbeg;
1481 binend[0] = iend; binend[1] = jend; binend[2] = kend;
1490 for (i = binbeg[order[0] ]; i <= binend[order[0] ]; i++) {
1491 for ( j = binbeg[order[1] ]; j <= binend[order[1] ]; j++) {
1492 for ( k = binbeg[order[2] ]; k <= binend[order[2] ]; k++) {
1493 ibin[ order[0] ] = i;
1494 ibin[ order[1] ] = j;
1495 ibin[ order[2] ] = k;
1496 bin = h1->
GetBin(ibin[0],ibin[1],ibin[2]);
1503 vdfmax[icomb] = dmax;
1522 if (opt.
Contains(
"N") && !(afunc1 || afunc2 ) ) {
1526 Double_t chi2 = d12*d12/(esum1+esum2);
1529 if (prb > 0 && prb2 > 0) prb = prb*prb2*(1-
TMath::Log(prb*prb2));
1535 printf(
" Kolmo Prob h1 = %s, sum1=%g\n",h1->
GetName(),sum1);
1536 printf(
" Kolmo Prob h2 = %s, sum2=%g\n",h2->
GetName(),sum2);
1537 printf(
" Kolmo Probabil = %f, Max Dist = %g\n",prb,dfmax);
1539 printf(
" Kolmo Probabil = %f for shape alone, =%f for normalisation alone\n",prb1,prb2);
1545 if (opt.
Contains(
"M"))
return dfmax;
1663 const_cast<TAxis*
>(axis1)->SetRange(imin1,imax1);
1664 const_cast<TAxis*
>(axis2)->SetRange(imin2,imax2);
1668 computeErrors =
kTRUE;
1673 originalRange =
kTRUE;
1677 TH1D *
h1 =
DoProject1D(name, title, projAxis, computeErrors, originalRange,
true,
true);
1689 if (!
gPad || !
gPad->FindObject(h1)) {
1694 if (padsav) padsav->
cd();
1701 bool computeErrors,
bool originalRange,
1702 bool useUF,
bool useOF)
const 1721 Error(
"DoProject1D",
"Histogram with name %s must be a TH1D and is a %s",name,h1obj->
ClassName());
1728 if ( originalRange )
1730 if (bins->
fN == 0) {
1736 if (bins->
fN == 0) {
1746 if ( originalRange )
1748 if (bins->
fN == 0) {
1754 if (bins->
fN == 0) {
1757 h1 =
new TH1D(name,title,nx,&bins->
fArray[ixmin-1]);
1780 if ( computeErrors ) h1->
Sumw2();
1783 const TAxis* out1 = 0;
1784 const TAxis* out2 = 0;
1788 }
else if ( projX ==
GetYaxis() ) {
1796 Int_t *refX = 0, *refY = 0, *refZ = 0;
1797 Int_t ixbin, out1bin, out2bin;
1798 if ( projX ==
GetXaxis() ) { refX = &ixbin; refY = &out1bin; refZ = &out2bin; }
1799 if ( projX ==
GetYaxis() ) { refX = &out2bin; refY = &ixbin; refZ = &out1bin; }
1800 if ( projX ==
GetZaxis() ) { refX = &out2bin; refY = &out1bin; refZ = &ixbin; }
1801 R__ASSERT (refX != 0 && refY != 0 && refZ != 0);
1820 for (ixbin=0;ixbin<=1+projX->
GetNbins();ixbin++) {
1827 for (out1bin = out1min; out1bin <= out1max; out1bin++) {
1828 for (out2bin = out2min; out2bin <= out2max; out2bin++) {
1834 if (computeErrors) {
1852 bool resetStats =
true;
1853 double eps = 1.E-12;
1857 bool resetEntries = resetStats;
1859 resetEntries |= !useUF || !useOF;
1866 stats[2] = stats[4];
1867 stats[3] = stats[5];
1870 stats[2] = stats[7];
1871 stats[3] = stats[8];
1900 bool computeErrors,
bool originalRange,
1901 bool useUF,
bool useOF)
const 1920 Error(
"DoProject2D",
"Histogram with name %s must be a TH2D and is a %s",name,h2obj->
ClassName());
1928 if ( originalRange ) {
1950 if ( originalRange )
1952 if (xbins->
fN == 0 && ybins->
fN == 0) {
1955 }
else if (ybins->
fN == 0) {
1958 }
else if (xbins->
fN == 0) {
1965 if (xbins->
fN == 0 && ybins->
fN == 0) {
1968 }
else if (ybins->
fN == 0) {
1971 }
else if (xbins->
fN == 0) {
1972 h2 =
new TH2D(name,title,ny,&ybins->
fArray[iymin-1]
1975 h2 =
new TH2D(name,title,ny,&ybins->
fArray[iymin-1],nx,&xbins->
fArray[ixmin-1]);
2012 if ( computeErrors) h2->
Sumw2();
2015 const TAxis* out = 0;
2024 Int_t *refX = 0, *refY = 0, *refZ = 0;
2025 Int_t ixbin, iybin, outbin;
2026 if ( projX ==
GetXaxis() && projY ==
GetYaxis() ) { refX = &ixbin; refY = &iybin; refZ = &outbin; }
2027 if ( projX ==
GetYaxis() && projY ==
GetXaxis() ) { refX = &iybin; refY = &ixbin; refZ = &outbin; }
2028 if ( projX ==
GetXaxis() && projY ==
GetZaxis() ) { refX = &ixbin; refY = &outbin; refZ = &iybin; }
2029 if ( projX ==
GetZaxis() && projY ==
GetXaxis() ) { refX = &iybin; refY = &outbin; refZ = &ixbin; }
2030 if ( projX ==
GetYaxis() && projY ==
GetZaxis() ) { refX = &outbin; refY = &ixbin; refZ = &iybin; }
2031 if ( projX ==
GetZaxis() && projY ==
GetYaxis() ) { refX = &outbin; refY = &iybin; refZ = &ixbin; }
2032 R__ASSERT (refX != 0 && refY != 0 && refZ != 0);
2041 if (outmin == 0 && outmax == 0) { outmin = 1; outmax = out->
GetNbins(); }
2046 for (ixbin=0;ixbin<=1+projX->
GetNbins();ixbin++) {
2050 for (iybin=0;iybin<=1+projY->
GetNbins();iybin++) {
2058 for (outbin = outmin; outbin <= outmax; outbin++) {
2064 if (computeErrors) {
2082 bool resetStats =
true;
2083 double eps = 1.E-12;
2087 bool resetEntries = resetStats;
2089 resetEntries |= !useUF || !useOF;
2094 for (
Int_t i = 0; i <
kNstat; ++i) { oldst[i] = 0; }
2096 std::copy(oldst,oldst+kNstat,stats);
2100 stats[4] = oldst[7];
2101 stats[5] = oldst[8];
2102 stats[6] = oldst[9];
2105 stats[2] = oldst[4];
2106 stats[3] = oldst[5];
2108 stats[4] = oldst[2];
2109 stats[5] = oldst[3];
2112 stats[4] = oldst[7];
2113 stats[5] = oldst[8];
2114 stats[6] = oldst[10];
2118 stats[2] = oldst[7];
2119 stats[3] = oldst[8];
2121 stats[4] = oldst[2];
2122 stats[5] = oldst[3];
2123 stats[6] = oldst[9];
2126 stats[4] = oldst[4];
2127 stats[5] = oldst[5];
2128 stats[6] = oldst[10];
2143 if (!computeErrors) entries =
TMath::Floor( entries + 0.5);
2206 if (opt.
Contains(
"x")) { pcase = 1; ptype =
"x"; }
2207 if (opt.
Contains(
"y")) { pcase = 2; ptype =
"y"; }
2208 if (opt.
Contains(
"z")) { pcase = 3; ptype =
"z"; }
2209 if (opt.
Contains(
"xy")) { pcase = 4; ptype =
"xy"; }
2210 if (opt.
Contains(
"yx")) { pcase = 5; ptype =
"yx"; }
2211 if (opt.
Contains(
"xz")) { pcase = 6; ptype =
"xz"; }
2212 if (opt.
Contains(
"zx")) { pcase = 7; ptype =
"zx"; }
2213 if (opt.
Contains(
"yz")) { pcase = 8; ptype =
"yz"; }
2214 if (opt.
Contains(
"zy")) { pcase = 9; ptype =
"zy"; }
2217 Error(
"Project3D",
"No projection axis specified - return a NULL pointer");
2224 computeErrors =
kTRUE;
2241 originalRange =
kTRUE;
2251 name +=
"_"; name += opt;
2252 title +=
" "; title += ptype; title +=
" projection";
2258 computeErrors, originalRange, useUF, useOF);
2264 computeErrors, originalRange, useUF, useOF);
2270 computeErrors, originalRange, useUF, useOF);
2276 computeErrors, originalRange, useUF, useOF);
2282 computeErrors, originalRange, useUF, useOF);
2288 computeErrors, originalRange, useUF, useOF);
2294 computeErrors, originalRange, useUF, useOF);
2300 computeErrors, originalRange, useUF, useOF);
2306 computeErrors, originalRange, useUF, useOF);
2317 if (!
gPad || !
gPad->FindObject(h)) {
2322 if (padsav) padsav->
cd();
2340 if (useWeights && binSumw2.
fN <= 0) useWeights =
false;
2347 if (outBin <0)
return;
2349 if ( useWeights ) tmp = binSumw2.
fArray[outBin];
2350 p2->
Fill( u , v, w, cont);
2360 bool originalRange,
bool useUF,
bool useOF)
const 2379 Error(
"DoProjectProfile2D",
"Histogram with name %s must be a TProfile2D and is a %s",name,p2obj->
ClassName());
2387 if ( originalRange ) {
2408 if ( originalRange ) {
2409 if (xbins->
fN == 0 && ybins->
fN == 0) {
2412 }
else if (ybins->
fN == 0) {
2415 }
else if (xbins->
fN == 0) {
2422 if (xbins->
fN == 0 && ybins->
fN == 0) {
2425 }
else if (ybins->
fN == 0) {
2428 }
else if (xbins->
fN == 0) {
2438 const TAxis* outAxis = 0;
2449 if (useWeights ) p2->
Sumw2();
2452 Int_t *refX = 0, *refY = 0, *refZ = 0;
2453 Int_t ixbin, iybin, outbin;
2454 if ( projX ==
GetXaxis() && projY ==
GetYaxis() ) { refX = &ixbin; refY = &iybin; refZ = &outbin; }
2455 if ( projX ==
GetYaxis() && projY ==
GetXaxis() ) { refX = &iybin; refY = &ixbin; refZ = &outbin; }
2456 if ( projX ==
GetXaxis() && projY ==
GetZaxis() ) { refX = &ixbin; refY = &outbin; refZ = &iybin; }
2457 if ( projX ==
GetZaxis() && projY ==
GetXaxis() ) { refX = &iybin; refY = &outbin; refZ = &ixbin; }
2458 if ( projX ==
GetYaxis() && projY ==
GetZaxis() ) { refX = &outbin; refY = &ixbin; refZ = &iybin; }
2459 if ( projX ==
GetZaxis() && projY ==
GetYaxis() ) { refX = &outbin; refY = &iybin; refZ = &ixbin; }
2460 R__ASSERT (refX != 0 && refY != 0 && refZ != 0);
2470 if (useWeights && binSumw2.
fN <= 0) useWeights =
false;
2474 for (ixbin=0;ixbin<=1+projX->
GetNbins();ixbin++) {
2476 for ( iybin=0;iybin<=1+projY->
GetNbins();iybin++) {
2481 if (poutBin <0)
continue;
2483 for (outbin = outmin; outbin <= outmax; outbin++) {
2490 if (!cont)
continue;
2494 if ( useWeights ) tmp = binSumw2.
fArray[poutBin];
2504 bool resetStats =
true;
2515 if (!useWeights) entries =
TMath::Floor( entries + 0.5);
2569 if (opt.
Contains(
"xy")) { pcase = 4; ptype =
"xy"; }
2570 if (opt.
Contains(
"yx")) { pcase = 5; ptype =
"yx"; }
2571 if (opt.
Contains(
"xz")) { pcase = 6; ptype =
"xz"; }
2572 if (opt.
Contains(
"zx")) { pcase = 7; ptype =
"zx"; }
2573 if (opt.
Contains(
"yz")) { pcase = 8; ptype =
"yz"; }
2574 if (opt.
Contains(
"zy")) { pcase = 9; ptype =
"zy"; }
2577 Error(
"Project3D",
"No projection axis specified - return a NULL pointer");
2595 originalRange =
kTRUE;
2603 name +=
"_p"; name += opt;
2604 title +=
" profile "; title += ptype; title +=
" projection";
2666 return Rebin3D(ngroup, 1, 1, newname);
2676 return Rebin3D(1, ngroup, 1, newname);
2686 return Rebin3D(1, 1, ngroup, newname);
2717 Int_t i,j,k,xbin,ybin,zbin;
2727 if ((nxgroup <= 0) || (nxgroup > nxbins)) {
2728 Error(
"Rebin",
"Illegal value of nxgroup=%d",nxgroup);
2731 if ((nygroup <= 0) || (nygroup > nybins)) {
2732 Error(
"Rebin",
"Illegal value of nygroup=%d",nygroup);
2735 if ((nzgroup <= 0) || (nzgroup > nzbins)) {
2736 Error(
"Rebin",
"Illegal value of nzgroup=%d",nzgroup);
2740 Int_t newxbins = nxbins/nxgroup;
2741 Int_t newybins = nybins/nygroup;
2742 Int_t newzbins = nzbins/nzgroup;
2760 if (newname && strlen(newname)) {
2768 bool resetStat =
false;
2772 if (newxbins*nxgroup != nxbins) {
2776 if (newybins*nygroup != nybins) {
2780 if (newzbins*nzgroup != nzbins) {
2822 if (nxgroup != 1 || nygroup != 1 || nzgroup != 1) {
2831 hnew->
SetBins(newxbins,xbins, newybins, ybins, newzbins, zbins);
2836 hnew->
SetBins(newxbins, xmin, xmax, newybins, ymin, ymax, newzbins, zmin, zmax);
2844 for (xbin = 1; xbin <= newxbins; xbin++) {
2847 for (ybin = 1; ybin <= newybins; ybin++) {
2849 for (zbin = 1; zbin <= newzbins; zbin++) {
2852 for (i = 0; i < nxgroup; i++) {
2853 if (oldxbin+i > nxbins)
break;
2854 for (j =0; j < nygroup; j++) {
2855 if (oldybin+j > nybins)
break;
2856 for (k =0; k < nzgroup; k++) {
2857 if (oldzbin+k > nzbins)
break;
2859 bin = oldxbin + i + (oldybin + j)*(nxbins + 2) + (oldzbin + k)*(nxbins + 2)*(nybins + 2);
2860 binContent += oldBins[bin];
2861 if (oldSumw2) binSumw2 += oldSumw2[bin];
2876 for (
Int_t xover = 0; xover <= 1; xover++) {
2877 for (
Int_t yover = 0; yover <= 1; yover++) {
2878 for (
Int_t zover = 0; zover <= 1; zover++) {
2882 for (xbin = xover*oldxbin; xbin <= xover*(nxbins+1); xbin++) {
2883 for (ybin = yover*oldybin; ybin <= yover*(nybins+1); ybin++) {
2884 for (zbin = zover*oldzbin; zbin <= zover*(nzbins+1); zbin++) {
2885 bin =
GetBin(xbin,ybin,zbin);
2886 binContent += oldBins[bin];
2887 if (oldSumw2) binSumw2 += oldSumw2[bin];
2892 yover*(newybins+1), zover*(newzbins+1) );
2899 Double_t binContent0, binContent2, binContent3, binContent4;
2900 Double_t binError0, binError2, binError3, binError4;
2901 Int_t oldxbin2, oldybin2, oldzbin2;
2902 Int_t ufbin, ofbin, ofbin2, ofbin3, ofbin4;
2908 for (xbin = 1; xbin<=newxbins; xbin++) {
2910 for (zbin = 1; zbin<=newzbins; zbin++) {
2911 binContent0 = binContent2 = 0;
2912 binError0 = binError2 = 0;
2913 for (i=0; i<nxgroup; i++) {
2914 if (oldxbin2+i > nxbins)
break;
2915 for (k=0; k<nzgroup; k++) {
2916 if (oldzbin2+k > nzbins)
break;
2918 ufbin = oldxbin2 + i + (nxbins+2)*(nybins+2)*(oldzbin2+k);
2919 binContent0 += oldBins[ufbin];
2920 if (oldSumw2) binError0 += oldSumw2[ufbin];
2921 for (ybin = oldybin; ybin <= nybins + 1; ybin++) {
2923 ofbin = ufbin + ybin*(nxbins+2);
2924 binContent2 += oldBins[ofbin];
2925 if (oldSumw2) binError2 += oldSumw2[ofbin];
2935 oldzbin2 += nzgroup;
2937 oldxbin2 += nxgroup;
2944 for (ybin = 1; ybin<=newybins; ybin++) {
2946 for (zbin = 1; zbin<=newzbins; zbin++) {
2947 binContent0 = binContent2 = 0;
2948 binError0 = binError2 = 0;
2949 for (j=0; j<nygroup; j++) {
2950 if (oldybin2+j > nybins)
break;
2951 for (k=0; k<nzgroup; k++) {
2952 if (oldzbin2+k > nzbins)
break;
2954 ufbin = (oldybin2 + j)*(nxbins+2) + (nxbins+2)*(nybins+2)*(oldzbin2+k);
2955 binContent0 += oldBins[ufbin];
2956 if (oldSumw2) binError0 += oldSumw2[ufbin];
2957 for (xbin = oldxbin; xbin <= nxbins + 1; xbin++) {
2959 ofbin = ufbin + xbin;
2960 binContent2 += oldBins[ofbin];
2961 if (oldSumw2) binError2 += oldSumw2[ofbin];
2971 oldzbin2 += nzgroup;
2973 oldybin2 += nygroup;
2980 for (xbin = 1; xbin<=newxbins; xbin++) {
2982 for (ybin = 1; ybin<=newybins; ybin++) {
2983 binContent0 = binContent2 = 0;
2984 binError0 = binError2 = 0;
2985 for (i=0; i<nxgroup; i++) {
2986 if (oldxbin2+i > nxbins)
break;
2987 for (j=0; j<nygroup; j++) {
2988 if (oldybin2+j > nybins)
break;
2990 ufbin = oldxbin2 + i + (nxbins+2)*(oldybin2+j);
2991 binContent0 += oldBins[ufbin];
2992 if (oldSumw2) binError0 += oldSumw2[ufbin];
2993 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
2995 ofbin = ufbin + (nxbins+2)*(nybins+2)*zbin;
2996 binContent2 += oldBins[ofbin];
2997 if (oldSumw2) binError2 += oldSumw2[ofbin];
3007 oldybin2 += nygroup;
3009 oldxbin2 += nxgroup;
3016 for (xbin = 1; xbin<=newxbins; xbin++) {
3025 for (i=0; i<nxgroup; i++) {
3026 if (oldxbin2+i > nxbins)
break;
3027 ufbin = oldxbin2 + i;
3028 binContent0 += oldBins[ufbin];
3029 if (oldSumw2) binError0 += oldSumw2[ufbin];
3030 for (ybin = oldybin; ybin <= nybins + 1; ybin++) {
3031 ofbin3 = ufbin+ybin*(nxbins+2);
3032 binContent3 += oldBins[ ofbin3 ];
3033 if (oldSumw2) binError3 += oldSumw2[ofbin3];
3034 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3036 ofbin4 = oldxbin2 + i + ybin*(nxbins+2) + (nxbins+2)*(nybins+2)*zbin;
3037 binContent4 += oldBins[ofbin4];
3038 if (oldSumw2) binError4 += oldSumw2[ofbin4];
3041 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3042 ofbin2 = ufbin+zbin*(nxbins+2)*(nybins+2);
3043 binContent2 += oldBins[ ofbin2 ];
3044 if (oldSumw2) binError2 += oldSumw2[ofbin2];
3050 hnew->
SetBinContent(xbin,newybins+1,newzbins+1,binContent4);
3057 oldxbin2 += nxgroup;
3064 for (zbin = 1; zbin<=newzbins; zbin++) {
3073 for (i=0; i<nzgroup; i++) {
3074 if (oldzbin2+i > nzbins)
break;
3075 ufbin = (oldzbin2 + i)*(nxbins+2)*(nybins+2);
3076 binContent0 += oldBins[ufbin];
3077 if (oldSumw2) binError0 += oldSumw2[ufbin];
3078 for (ybin = oldybin; ybin <= nybins + 1; ybin++) {
3079 ofbin3 = ufbin+ybin*(nxbins+2);
3080 binContent3 += oldBins[ ofbin3 ];
3081 if (oldSumw2) binError3 += oldSumw2[ofbin3];
3082 for (xbin = oldxbin; xbin <= nxbins + 1; xbin++) {
3084 ofbin4 = ufbin + xbin + ybin*(nxbins+2);
3085 binContent4 += oldBins[ofbin4];
3086 if (oldSumw2) binError4 += oldSumw2[ofbin4];
3089 for (xbin = oldxbin; xbin <= nxbins + 1; xbin++) {
3090 ofbin2 = xbin +(oldzbin2+i)*(nxbins+2)*(nybins+2);
3091 binContent2 += oldBins[ ofbin2 ];
3092 if (oldSumw2) binError2 += oldSumw2[ofbin2];
3098 hnew->
SetBinContent(newxbins+1,newybins+1,zbin,binContent4);
3105 oldzbin2 += nzgroup;
3112 for (ybin = 1; ybin<=newybins; ybin++) {
3121 for (i=0; i<nygroup; i++) {
3122 if (oldybin2+i > nybins)
break;
3123 ufbin = (oldybin2 + i)*(nxbins+2);
3124 binContent0 += oldBins[ufbin];
3125 if (oldSumw2) binError0 += oldSumw2[ufbin];
3126 for (xbin = oldxbin; xbin <= nxbins + 1; xbin++) {
3127 ofbin3 = ufbin+xbin;
3128 binContent3 += oldBins[ ofbin3 ];
3129 if (oldSumw2) binError3 += oldSumw2[ofbin3];
3130 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3132 ofbin4 = xbin + (nxbins+2)*(nybins+2)*zbin+(oldybin2+i)*(nxbins+2);
3133 binContent4 += oldBins[ofbin4];
3134 if (oldSumw2) binError4 += oldSumw2[ofbin4];
3137 for (zbin = oldzbin; zbin <= nzbins + 1; zbin++) {
3138 ofbin2 = (oldybin2+i)*(nxbins+2)+zbin*(nxbins+2)*(nybins+2);
3139 binContent2 += oldBins[ ofbin2 ];
3140 if (oldSumw2) binError2 += oldSumw2[ofbin2];
3146 hnew->
SetBinContent(newxbins+1,ybin,newzbins+1,binContent4);
3153 oldybin2 += nygroup;
3196 if (!resetStat) hnew->
PutStats(stat);
3199 if (oldSumw2)
delete [] oldSumw2;
3230 if (bin < 0)
return;
3239 void TH3::Streamer(
TBuffer &R__b)
3249 TH1::Streamer(R__b);
3250 TAtt3D::Streamer(R__b);
3292 :
TH3(name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
3307 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3320 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3351 if (newval > -128 && newval < 128) {
fArray[bin] =
Char_t(newval);
return;}
3352 if (newval < -127)
fArray[bin] = -127;
3353 if (newval > 127)
fArray[bin] = 127;
3421 void TH3C::Streamer(
TBuffer &R__b)
3434 TH1::Streamer(R__b);
3435 TArrayC::Streamer(R__b);
3437 TAtt3D::Streamer(R__b);
3439 TH3::Streamer(R__b);
3440 TArrayC::Streamer(R__b);
3456 if (
this != &h1) ((
TH3C&)h1).
Copy(*
this);
3553 :
TH3(name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
3568 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3581 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3612 if (newval > -32768 && newval < 32768) {
fArray[bin] =
Short_t(newval);
return;}
3613 if (newval < -32767)
fArray[bin] = -32767;
3614 if (newval > 32767)
fArray[bin] = 32767;
3653 void TH3S::Streamer(
TBuffer &R__b)
3666 TH1::Streamer(R__b);
3667 TArrayS::Streamer(R__b);
3669 TAtt3D::Streamer(R__b);
3671 TH3::Streamer(R__b);
3672 TArrayS::Streamer(R__b);
3688 if (
this != &h1) ((
TH3S&)h1).
Copy(*
this);
3785 :
TH3(name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
3800 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3813 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
3844 if (newval > -2147483647 && newval < 2147483647) {
fArray[bin] =
Int_t(newval);
return;}
3845 if (newval < -2147483647)
fArray[bin] = -2147483647;
3846 if (newval > 2147483647)
fArray[bin] = 2147483647;
3887 if (
this != &h1) ((
TH3I&)h1).
Copy(*
this);
3984 :
TH3(name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
3999 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4012 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4063 void TH3F::Streamer(
TBuffer &R__b)
4076 TH1::Streamer(R__b);
4077 TArrayF::Streamer(R__b);
4079 TAtt3D::Streamer(R__b);
4081 TH3::Streamer(R__b);
4082 TArrayF::Streamer(R__b);
4098 if (
this != &h1) ((
TH3F&)h1).
Copy(*
this);
4195 :
TH3(name,title,nbinsx,xlow,xup,nbinsy,ylow,yup,nbinsz,zlow,zup)
4210 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4223 :
TH3(name,title,nbinsx,xbins,nbinsy,ybins,nbinsz,zbins)
4274 void TH3D::Streamer(
TBuffer &R__b)
4287 TH1::Streamer(R__b);
4288 TArrayD::Streamer(R__b);
4290 TAtt3D::Streamer(R__b);
4292 TH3::Streamer(R__b);
4293 TArrayD::Streamer(R__b);
4309 if (
this != &h1) ((
TH3D&)h1).
Copy(*
this);
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 const char * GetName() const
Returns name of object.
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 Float_t GetTickLength() const
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
virtual Double_t GetEffectiveEntries() const
Number of effective entries of the histogram.
virtual void Paint(Option_t *option="")
Control routine to paint any kind of histograms.
TH3()
Default constructor.
virtual void SetParameters(const Double_t *params)
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
friend TH3D operator*(Float_t c1, TH3D &h1)
Operator *.
Double_t Floor(Double_t x)
void Set(Int_t n)
Set size of this array to n chars.
Int_t GetFirst() const
Return first bin on the axis i.e.
virtual void Copy(TObject &hnew) const
Copy this 3-D histogram structure to newth3.
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
void Copy(TArrayI &array) const
virtual void Copy(TObject &hnew) const
Copy this 3-D histogram structure to newth3.
virtual TH1 * Project3D(Option_t *option="x") const
Project a 3-d histogram into 1 or 2-d histograms depending on the option parameter, which may contain a combination of the characters x,y,z,e.
virtual TH3 * RebinX(Int_t ngroup=2, const char *newname="")
Rebin only the X axis see Rebin3D.
virtual void Sumw2(Bool_t flag=kTRUE)
Create/Delete structure to store sum of squares of weights per bin.
virtual void PutStats(Double_t *stats)
Replace current statistics with the values in array stats.
friend TH3F operator+(TH3F &h1, TH3F &h2)
Operator +.
static Bool_t fgDefaultSumw2
!flag to call TH1::Sumw2 automatically at histogram creation time
TVirtualHistPainter * GetPainter(Option_t *option="")
Return pointer to painter.
Collectable string class.
virtual void FillRandom(const char *fname, Int_t ntimes=5000)
Fill histogram following distribution in function fname.
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
friend TH3F operator/(TH3F &h1, TH3F &h2)
Operator /.
virtual Float_t GetLabelOffset() const
tomato 3-D histogram with a float per channel (see TH1 documentation)}
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
friend TH3I operator+(TH3I &h1, TH3I &h2)
Operator +.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
Double_t KolmogorovProb(Double_t z)
Calculates the Kolmogorov distribution function,.
TObject * GetParent() const
Return pointer to parent of this buffer.
TAxis fYaxis
Y axis descriptor.
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content.
virtual void PutStats(Double_t *stats)
Replace current statistics with the values in array stats.
Bool_t TestBit(UInt_t f) const
virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax)
Redefine x axis parameters.
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...
virtual Color_t GetAxisColor() const
static Bool_t fgStatOverflows
!flag to use under/overflows in statistics
virtual void SetLabelColor(Color_t color=1, Float_t alpha=1.)
Set color of labels.
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 Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
virtual void SetNdivisions(Int_t n=510, Bool_t optim=kTRUE)
Set the number of divisions for this axis.
virtual void SetRange(Double_t xmin, Double_t xmax)
Initialize the upper and lower bounds to draw the function.
virtual Int_t GetBin(Int_t binx, Int_t biny, Int_t binz) const
See comments in TH1::GetBin.
Use this attribute class when an object should have 3D capabilities.
void ToUpper()
Change string to upper case.
TH3S & operator=(const TH3S &h1)
Operator =.
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...
friend TH3D operator-(TH3D &h1, TH3D &h2)
Operator -.
Buffer base class used for serializing objects.
friend TH3C operator+(TH3C &h1, TH3C &h2)
Operator +.
virtual Int_t GetNbinsZ() const
static THLimitsFinder * GetLimitsFinder()
Return pointer to the current finder.
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual ~TH3D()
Destructor.
Array of floats (32 bits per element).
virtual void SetTitleFont(Style_t font=62)
Set the title font.
void ToLower()
Change string to lower-case.
friend TH3F operator*(Float_t c1, TH3F &h1)
Operator *.
Histogram is forced to be not weighted even when the histogram is filled with weighted different than...
virtual Double_t GetParError(Int_t ipar) const
Return value of parameter number ipar.
TArrayD fSumw2
Array of sum of squares of weights.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
friend TH3I operator/(TH3I &h1, TH3I &h2)
Operator /.
void Copy(TArrayC &array) const
virtual Float_t GetLabelSize() const
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...
virtual Int_t FindGoodLimits(TH1 *h, Double_t xmin, Double_t xmax)
compute the best axis limits for the X axis.
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 ...
TAxis fZaxis
Z axis descriptor.
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...
friend TH3F operator-(TH3F &h1, TH3F &h2)
Operator -.
virtual Double_t GetCovariance(Int_t axis1=1, Int_t axis2=2) const
Return covariance between axis1 and axis2.
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 TVirtualPad * cd(Int_t subpadnumber=0)=0
virtual Int_t BufferFill(Double_t x, Double_t y, Double_t z, Double_t w)
accumulate arguments in buffer.
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...
Array of integers (32 bits per element).
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void SetBuffer(Int_t buffersize, Option_t *option="")
Set the maximum number of entries to be kept in the buffer.
Double_t fTsumwx2
Total Sum of weight*X*X.
virtual Bool_t CanExtendAllAxes() const
Returns true if all axes are extendable.
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
virtual Double_t Integral(Option_t *option="") const
Return integral of bin contents.
virtual void SetLabelFont(Style_t font=62)
Set labels' font.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual Style_t GetTitleFont() const
virtual Int_t GetDimension() const
Int_t Fill(const Double_t *v)
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 ...
virtual const char * ClassName() const
Returns name of class to which the object belongs.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
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...
friend TH3D operator+(TH3D &h1, TH3D &h2)
Operator +.
virtual Int_t GetVersionOwner() const =0
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.
virtual TH3 * RebinY(Int_t ngroup=2, const char *newname="")
Rebin only the Y axis see Rebin3D.
virtual Double_t GetCorrelationFactor(Int_t axis1=1, Int_t axis2=2) const
Return correlation factor between axis1 and axis2.
friend TH3C operator*(Float_t c1, TH3C &h1)
Operator *.
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
THashList * GetLabels() const
static double p2(double t, double a, double b, double c)
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Ssiz_t First(char c) const
Find first occurrence of a character c.
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
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...
TVirtualPad is an abstract base class for the Pad and Canvas classes.
void Set(Int_t n)
Set size of this array to n ints.
virtual void Reset(Option_t *option="")
Reset.
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 Color_t GetLabelColor() const
virtual void GetStats(Double_t *stats) const
Fill the array stats from the contents of this histogram The array stats must be correctly dimensionn...
The 3-D histogram classes derived from the 1-D histogram classes.
Double_t fTsumwx
Total Sum of weight*X.
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
tomato 3-D histogram with an int per channel (see TH1 documentation)}
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 Int_t GetNdivisions() const
virtual ~TH3I()
Destructor.
virtual ~TH3S()
Destructor.
void Set(Int_t n)
Set size of this array to n shorts.
virtual Double_t Rndm()
Machine independent random number generator.
virtual void ImportAttributes(const TAxis *axis)
Copy axis attributes to this.
virtual const char * GetParName(Int_t ipar) const
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 void ExtendAxis(Double_t x, TAxis *axis)
Histogram is resized along axis such that x is in the axis range.
tomato 3-D histogram with a short per channel (see TH1 documentation)
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
TH3C & operator=(const TH3C &h1)
Operator =.
friend TH3S operator-(TH3S &h1, TH3S &h2)
Operator -.
void Copy(TArrayF &array) const
Int_t GetLast() const
Return last bin on the axis i.e.
const char * GetTitle() const
Returns title of object.
Class to manage histogram axis.
friend TH3S operator+(TH3S &h1, TH3S &h2)
Operator +.
virtual void Draw(Option_t *option="")
Draw this histogram with options.
tomato 3-D histogram with a double per channel (see TH1 documentation)}
Array of shorts (16 bits per element).
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual Int_t GetNumberFitPoints() const
virtual void FitSlicesZ(TF1 *f1=0, 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-...
unsigned int r1[N_CITIES]
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
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...
Bool_t Permute(Int_t n, Int_t *a)
Simple recursive algorithm to find the permutations of n natural numbers, not necessarily all distinc...
static Int_t fgBufferSize
!default buffer size for automatic histograms
Double_t Mean(Long64_t n, const T *a, const Double_t *w=0)
virtual void PutStats(Double_t *stats)
Replace current statistics with the values in array stats.
Double_t fEntries
Number of entries.
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 methdod performing the projection to 1D histogram called from TH3::Project3D ...
virtual Float_t GetTitleOffset() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Copy(TObject &hnew) const
Copy this histogram structure to newth1.
virtual void PutStats(Double_t *stats)
Replace current statistics with the values in array stats.
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...
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Int_t Fill(Double_t)
Invalid Fill method.
virtual void Copy(TObject &hnew) const
Copy.
virtual Color_t GetTitleColor() const
Double_t * fIntegral
!Integral of bins used by GetRandom
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.
R__EXTERN TRandom * gRandom
tomato 1-D histogram with a double per channel (see TH1 documentation)}
friend TH3I operator-(TH3I &h1, TH3I &h2)
Operator _.
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 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 The size is expressed in per cent of the pad width.
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 Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
virtual Double_t RetrieveBinContent(Int_t bin) const
Raw retrieval of bin content on internal data structure see convention for numbering bins in TH1::Get...
virtual Color_t GetLineColor() const
Return the line color.
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.
friend TH3S operator/(TH3S &h1, TH3S &h2)
Operator /.
TString & Remove(Ssiz_t pos)
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Int_t GetSumw2N() const
Double_t GetChisquare() const
Double_t fTsumw2
Total 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.
virtual void Copy(TObject &hnew) const
Copy this 3-D histogram structure to newth3.
virtual void Reset(Option_t *option="")
Reset contents of a Profile2D histogram.
friend TH3D operator/(TH3D &h1, TH3D &h2)
Operator /.
virtual Int_t BufferEmpty(Int_t action=0)
Fill histogram with all entries in the buffer.
TH3D & operator=(const TH3D &h1)
Operator =.
Double_t fTsumw
Total Sum of weights.
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
virtual void SetShowProjection(const char *option, Int_t nbins)=0
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...
friend TH3C operator-(TH3C &h1, TH3C &h2)
Operator -.
virtual Color_t GetFillColor() const
Return the fill area color.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
tomato 3-D histogram with a byte per channel (see TH1 documentation)
THist< 2, double, THistStatContent, THistStatUncertainty > TH2D
virtual void SetBinLabel(Int_t bin, const char *label)
Set label for bin.
virtual Float_t GetTitleSize() const
Profile2D histograms are used to display the mean value of Z and its RMS for each cell in X...
Array of doubles (64 bits per element).
friend TH3I operator*(Float_t c1, TH3I &h1)
Operator *.
virtual void Copy(TObject &hnew) const
Copy this 3-D histogram structure to newth3.
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
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.
Mother of all ROOT objects.
you should not use this method at all Int_t Int_t z
virtual Int_t GetNpar() const
friend TH3C operator/(TH3C &h1, TH3C &h2)
Operator /.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
TVirtualHistPainter * fPainter
!pointer to histogram painter
virtual void Copy(TObject &hnew) const
Copy this 3-D histogram structure to newth3.
virtual ~TH3C()
Destructor.
virtual TH3 * RebinZ(Int_t ngroup=2, const char *newname="")
Rebin only the Z axis see Rebin3D.
virtual void GetRandom3(Double_t &x, Double_t &y, Double_t &z)
Return 3 random numbers along axis x , y and z distributed according the cellcontents of a 3-dim hist...
Int_t fBufferSize
fBuffer size
virtual Double_t GetParameter(Int_t ipar) 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...
Short_t Max(Short_t a, Short_t b)
virtual void SetBinsLength(Int_t=-1)
virtual ~TH3F()
Destructor.
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
TObject * Clone(const char *newname=0) const
Make a complete copy of the underlying object.
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,lastz] for which diff = abs(cell_content-c) <= maxdiff In case several cells in the specified range with diff=0 are found the first cell found is returned in binx,biny,binz.
Int_t fDimension
!Histogram dimension (1, 2 or 3 dim)
THist< 1, double, THistStatContent, THistStatUncertainty > TH1D
virtual void SetTickLength(Float_t length=0.03)
Set tick mark length The length is expressed in per cent of the pad width.
virtual Double_t * GetParameters() const
void Set(Int_t n)
Set size of this array to n floats.
virtual void SetEntries(Double_t n)
virtual void SetBinsLength(Int_t n=-1)
Set total number of bins including under/overflow Reallocate bin contents array.
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
TAxis fXaxis
X axis descriptor.
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual Int_t GetNbinsX() const
Double_t Sqrt(Double_t x)
virtual ~TH3()
Destructor.
TH3F & operator=(const TH3F &h1)
Operator =.
friend TH3S operator*(Float_t c1, TH3S &h1)
Operator *.
virtual void Set(Int_t nbins, Double_t xmin, Double_t xmax)
Initialize axis with fix bins.
virtual Double_t Interpolate(Double_t x)
Not yet implemented.
Int_t Fill(Double_t)
Invalid Fill method.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
void SetBins(const Int_t *nbins, const Double_t *range)
Double_t * fBuffer
[fBufferSize] entry buffer
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 GetStdDev(Int_t axis=1) const
Returns the Standard Deviation (Sigma).
void Set(Int_t n)
Set size of this array to n doubles.
void Copy(TArrayD &array) const
Long64_t BinarySearch(Long64_t n, const T *array, T value)
const TArrayD * GetXbins() const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual Style_t GetLabelFont() const
void Copy(TArrayS &array) const
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual const char * GetTitle() const
Returns title of object.
virtual Int_t GetNbinsY() const
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
Int_t fNcells
number of bins(1D), cells (2D) +U/Overflows
tomato 2-D histogram with a double per channel (see TH1 documentation)}
const char * Data() const
Array of chars or bytes (8 bits per element).
virtual TArrayD * GetBinSumw2()
TH3I & operator=(const TH3I &h1)
Operator =.