11 TH2D *
H3D::DoProject2D(const
char* name, const
char * title, TAxis* projX, TAxis* projY,
12 bool computeErrors,
bool originalRange,
13 bool useUF,
bool useOF)
const
21 Int_t
ixmin = projX->GetFirst();
23 Int_t
iymin = projY->GetFirst();
25 if (ixmin == 0 && ixmax == 0) { ixmin = 1; ixmax = projX->GetNbins(); }
26 if (iymin == 0 && iymax == 0) { iymin = 1; iymax = projY->GetNbins(); }
27 Int_t
nx = ixmax-ixmin+1;
28 Int_t
ny = iymax-iymin+1;
33 TObject *
h2obj = gROOT->FindObject(name);
34 if (h2obj && h2obj->InheritsFrom(TH1::Class())) {
35 if ( h2obj->IsA() != TH2D::Class() ) {
36 Error(
"DoProject2D",
"Histogram with name %s must be a TH2D and is a %s",name,h2obj->ClassName());
42 const TArrayD *xbins = projX->GetXbins();
43 const TArrayD *ybins = projY->GetXbins();
44 if ( originalRange ) {
45 h2->SetBins(projY->GetNbins(),projY->GetXmin(),projY->GetXmax()
46 ,projX->GetNbins(),projX->GetXmin(),projX->GetXmax());
49 h2->GetXaxis()->Set(projY->GetNbins(),&ybins->fArray[iymin-1]);
51 h2->GetYaxis()->Set(projX->GetNbins(),&xbins->fArray[ixmin-1]);
53 h2->SetBins(ny,projY->GetBinLowEdge(iymin),projY->GetBinUpEdge(iymax)
54 ,
nx,projX->GetBinLowEdge(ixmin),projX->GetBinUpEdge(ixmax));
56 h2->GetXaxis()->Set(ny,&ybins->fArray[iymin-1]);
58 h2->GetYaxis()->Set(nx,&xbins->fArray[ixmin-1]);
64 const TArrayD *xbins = projX->GetXbins();
65 const TArrayD *ybins = projY->GetXbins();
68 if (xbins->fN == 0 && ybins->fN == 0) {
69 h2 =
new TH2D(name,title,projY->GetNbins(),projY->GetXmin(),projY->GetXmax()
70 ,projX->GetNbins(),projX->GetXmin(),projX->GetXmax());
71 }
else if (ybins->fN == 0) {
72 h2 =
new TH2D(name,title,projY->GetNbins(),projY->GetXmin(),projY->GetXmax()
73 ,projX->GetNbins(),&xbins->fArray[ixmin-1]);
74 }
else if (xbins->fN == 0) {
75 h2 =
new TH2D(name,title,projY->GetNbins(),&ybins->fArray[iymin-1]
76 ,projX->GetNbins(),projX->GetXmin(),projX->GetXmax());
78 h2 =
new TH2D(name,title,projY->GetNbins(),&ybins->fArray[iymin-1],projX->GetNbins(),&xbins->fArray[ixmin-1]);
81 if (xbins->fN == 0 && ybins->fN == 0) {
82 h2 =
new TH2D(name,title,ny,projY->GetBinLowEdge(iymin),projY->GetBinUpEdge(iymax)
83 ,
nx,projX->GetBinLowEdge(ixmin),projX->GetBinUpEdge(ixmax));
84 }
else if (ybins->fN == 0) {
85 h2 =
new TH2D(name,title,ny,projY->GetBinLowEdge(iymin),projY->GetBinUpEdge(iymax)
86 ,
nx,&xbins->fArray[ixmin-1]);
87 }
else if (xbins->fN == 0) {
88 h2 =
new TH2D(name,title,ny,&ybins->fArray[iymin-1]
89 ,nx,projX->GetBinLowEdge(ixmin),projX->GetBinUpEdge(ixmax));
91 h2 =
new TH2D(name,title,ny,&ybins->fArray[iymin-1],nx,&xbins->fArray[ixmin-1]);
96 h2->SetLineColor(this->GetLineColor());
97 h2->SetFillColor(this->GetFillColor());
98 h2->SetMarkerColor(this->GetMarkerColor());
99 h2->SetMarkerStyle(this->GetMarkerStyle());
102 if ( computeErrors) h2->Sumw2();
106 if ( projX != GetXaxis() && projY != GetXaxis() ) {
108 }
else if ( projX != GetYaxis() && projY != GetYaxis() ) {
131 if (outmin == 0 && outmax == 0) { outmin = 1; outmax = out->GetNbins(); }
133 if (useUF && !out->TestBit(TAxis::kAxisRange) ) outmin -= 1;
134 if (useOF && !out->TestBit(TAxis::kAxisRange) ) outmax += 1;
136 for (ixbin=0;ixbin<=1+projX->GetNbins();ixbin++){
137 if ( projX->TestBit(TAxis::kAxisRange) && ( ixbin < ixmin || ixbin >
ixmax ))
continue;
138 Int_t ix = h2->GetYaxis()->FindBin( projX->GetBinCenter(ixbin) );
140 for (iybin=0;iybin<=1+projY->GetNbins();iybin++){
141 if ( projY->TestBit(TAxis::kAxisRange) && ( iybin < iymin || iybin >
iymax ))
continue;
142 Int_t iy = h2->GetXaxis()->FindBin( projY->GetBinCenter(iybin) );
148 for (outbin = outmin; outbin <=
outmax; outbin++){
150 Int_t bin = GetBin(*refX,*
refY,*
refZ);
153 cont += GetBinContent(bin);
155 Double_t exyz = GetBinError(bin);
162 h2->SetBinContent(iy , ix, cont);
163 if (computeErrors) h2->SetBinError(iy, ix, TMath::Sqrt(err2) );
174 if (IsA() == TH3F::Class() ) eps = 1.E-6;
175 if (fTsumw != 0 && TMath::Abs( fTsumw - totcont) < TMath::Abs(fTsumw) * eps) resetStats =
false;
179 resetEntries |= !useUF || !useOF;
182 Double_t stats[kNstat];
183 Double_t oldst[kNstat];
184 for (Int_t i = 0; i < kNstat; ++i) { oldst[i] = 0; }
186 std::copy(oldst,oldst+kNstat,stats);
189 if ( projY == GetXaxis() && projX == GetZaxis() ) {
194 if ( projY == GetYaxis() ) {
197 if ( projX == GetXaxis() ) {
201 if ( projX == GetZaxis() ) {
204 stats[6] = oldst[10];
207 else if ( projY == GetZaxis() ) {
210 if ( projX == GetXaxis() ) {
215 if ( projX == GetYaxis() ) {
218 stats[6] = oldst[10];
232 Double_t entries = h2->GetEffectiveEntries();
233 if (!computeErrors) entries = TMath::Floor( entries + 0.5);
234 h2->SetEntries( entries );
237 h2->SetEntries( fEntries );
255 printf(
"TH1.Print Name = %s, Entries= %d, Total sum= %g\n",GetName(),Int_t(fEntries),GetSumOfWeights());
257 TString opt = option;
260 if (opt.Contains(
"all")) all = 0;
261 else if (opt.Contains(
"range")) all = 1;
262 else if (opt.Contains(
"base")) all = 2;
265 Int_t bin, binx, biny, binz;
266 Int_t firstx=0,lastx=0,firsty=0,lasty=0,firstz=0,lastz=0;
268 lastx = fXaxis.GetNbins()+1;
269 if (fDimension > 1) lasty = fYaxis.GetNbins()+1;
270 if (fDimension > 2) lastz = fZaxis.GetNbins()+1;
272 firstx = fXaxis.GetFirst(); lastx = fXaxis.GetLast();
273 if (fDimension > 1) {firsty = fYaxis.GetFirst(); lasty = fYaxis.GetLast();}
274 if (fDimension > 2) {firstz = fZaxis.GetFirst(); lastz = fZaxis.GetLast();}
278 printf(
" Title = %s\n", GetTitle());
279 printf(
" NbinsX= %d, xmin= %g, xmax=%g", fXaxis.GetNbins(), fXaxis.GetXmin(), fXaxis.GetXmax());
280 if( fDimension > 1) printf(
", NbinsY= %d, ymin= %g, ymax=%g", fYaxis.GetNbins(), fYaxis.GetXmin(), fYaxis.GetXmax());
281 if( fDimension > 2) printf(
", NbinsZ= %d, zmin= %g, zmax=%g", fZaxis.GetNbins(), fZaxis.GetXmin(), fZaxis.GetXmax());
288 if (fDimension == 1) {
289 for (binx=firstx;binx<=lastx;binx++) {
290 x = fXaxis.GetBinCenter(binx);
291 w = GetBinContent(binx);
292 e = GetBinError(binx);
293 if(fSumw2.fN) printf(
" fSumw[%d]=%g, x=%g, error=%g\n",binx,w,x,e);
294 else printf(
" fSumw[%d]=%g, x=%g\n",binx,w,x);
297 if (fDimension == 2) {
298 for (biny=firsty;biny<=lasty;biny++) {
299 y = fYaxis.GetBinCenter(biny);
300 for (binx=firstx;binx<=lastx;binx++) {
301 bin = GetBin(binx,biny,0);
302 x = fXaxis.GetBinCenter(binx);
303 w = GetBinContent(bin);
304 e = GetBinError(bin);
305 if (!w & !e)
continue;
306 if(fSumw2.fN) printf(
" fSumw[%d][%d]=%g, x=%g, y=%g, error=%g\n",binx,biny,w,x,y,e);
307 else printf(
" fSumw[%d][%d]=%g, x=%g, y=%g\n",binx,biny,w,x,y);
311 if (fDimension == 3) {
312 for (binz=firstz;binz<=lastz;binz++) {
313 z = fZaxis.GetBinCenter(binz);
314 for (biny=firsty;biny<=lasty;biny++) {
315 y = fYaxis.GetBinCenter(biny);
316 for (binx=firstx;binx<=lastx;binx++) {
317 bin = GetBin(binx,biny,binz);
318 x = fXaxis.GetBinCenter(binx);
319 w = GetBinContent(bin);
320 e = GetBinError(bin);
321 if (!w & !e)
continue;
322 if(fSumw2.fN) printf(
" fSumw[%d][%d][%d]=%g, x=%g, y=%g, z=%g, error=%g\n",binx,biny,binz,w,x,y,z,e);
323 else printf(
" fSumw[%d][%d][%d]=%g, x=%g, y=%g, z=%g\n",binx,biny,binz,w,x,y,z);
ClassImp(AgUStep) extern"C"
R__ASSERT(refX!=0 &&refY!=0 &&refZ!=0)
void Print(Option_t *option) const
ClassImp(H3D) TH2D *H3D Int_t ixmin