3 // Author: Anders Vestbo <mailto:vestbo@fi.uib.no>
4 //*-- Copyright © ALICE HLT Group
6 #include "AliL3StandardIncludes.h"
7 #include "AliL3Logging.h"
8 #include "AliL3Histogram.h"
14 //_____________________________________________________________
19 ClassImp(AliL3Histogram)
21 AliL3Histogram::AliL3Histogram()
44 AliL3Histogram::AliL3Histogram(Char_t *name,Char_t *id,
45 Int_t nxbin,Double_t xmin,Double_t xmax,
46 Int_t nybin,Double_t ymin,Double_t ymax)
52 fNcells = (nxbin+2)*(nybin+2);
57 fBinwidthX = (fXmax - fXmin) / fNxbins;
58 fBinwidthY = (fYmax - fYmin) / fNybins;
70 fContent = new Int_t[fNcells];
74 AliL3Histogram::~AliL3Histogram()
85 void AliL3Histogram::Reset()
88 for(Int_t i=0; i<fNcells; i++) fContent[i] = 0;
93 void AliL3Histogram::Fill(Double_t x,Double_t y,Int_t weight)
95 Int_t bin = FindBin(x,y);
99 AddBinContent(bin,weight);
102 Int_t AliL3Histogram::FindBin(Double_t x,Double_t y)
104 Int_t xbin = FindXbin(x);
105 Int_t ybin = FindYbin(y);
109 return GetBin(xbin,ybin);
112 Int_t AliL3Histogram::FindXbin(Double_t x)
114 if(x < fXmin || x > fXmax)
117 return 1 + (Int_t)(fNxbins*(x-fXmin)/(fXmax-fXmin));
120 Int_t AliL3Histogram::FindYbin(Double_t y)
122 if(y < fYmin || y > fYmax)
125 return 1 + (Int_t)(fNybins*(y-fYmin)/(fYmax-fYmin));
128 Int_t AliL3Histogram::GetBin(Int_t xbin,Int_t ybin)
130 if(xbin < fFirstXbin || xbin > fLastXbin)
132 if(ybin < fFirstYbin || ybin > fLastYbin)
135 return xbin + ybin*(fNxbins+2);
138 Int_t AliL3Histogram::GetBinContent(Int_t bin)
142 LOG(AliL3Log::kError,"AliL3Histogram::GetBinContent","array")<<AliL3Log::kDec<<
143 "bin out of range "<<bin<<ENDLOG;
147 if(fContent[bin] < fThreshold)
149 return fContent[bin];
152 void AliL3Histogram::SetBinContent(Int_t xbin,Int_t ybin,Int_t value)
154 Int_t bin = GetBin(xbin,ybin);
157 SetBinContent(bin,value);
160 void AliL3Histogram::SetBinContent(Int_t bin,Int_t value)
165 LOG(AliL3Log::kError,"AliL3Histogram::SetBinContent","array")<<AliL3Log::kDec<<
166 "bin out of range "<<bin<<ENDLOG;
175 void AliL3Histogram::AddBinContent(Int_t xbin,Int_t ybin,Int_t weight)
177 Int_t bin = GetBin(xbin,ybin);
180 AddBinContent(bin,weight);
183 void AliL3Histogram::AddBinContent(Int_t bin,Int_t weight)
185 if(bin < 0 || bin > fNcells)
187 LOG(AliL3Log::kError,"AliL3Histogram::AddBinContent","array")<<AliL3Log::kDec<<
188 "bin-value out of range "<<bin<<ENDLOG;
194 fContent[bin] += weight;
197 void AliL3Histogram::Add(AliL3Histogram *h1,Double_t weight)
199 //Adding two histograms. Should be identical.
203 LOG(AliL3Log::kError,"AliL3Histogram::Add","Pointer")<<
204 "Attempting to add a non-existing histogram"<<ENDLOG;
208 if(h1->GetNbinsX()!=fNxbins || h1->GetNbinsY()!=fNybins)
210 LOG(AliL3Log::kError,"AliL3Histogram::Add","array")<<
211 "Mismatch in the number of bins "<<ENDLOG;
214 if(h1->GetFirstXbin()!=fFirstXbin || h1->GetLastXbin()!=fLastXbin ||
215 h1->GetFirstYbin()!=fFirstYbin || h1->GetLastYbin()!=fLastYbin)
217 LOG(AliL3Log::kError,"AliL3Histogram::Add","array")<<
218 "Mismatch in the bin numbering "<<ENDLOG;
222 for(Int_t bin=0; bin<fNcells; bin++)
223 fContent[bin] += h1->GetBinContent(bin);
225 fEntries += h1->GetNEntries();
228 Double_t AliL3Histogram::GetBinCenterX(Int_t xbin)
230 if(xbin < fFirstXbin || xbin > fLastXbin)
232 LOG(AliL3Log::kError,"AliL3Histogram::GetBinCenterX","xbin")
233 <<"Bin-value out of range "<<xbin<<ENDLOG;
236 // return fXmin + (xbin-1) * fBinwidthX + 0.5*fBinwidthX;
237 return fXmin + (xbin-0.5) * fBinwidthX;
240 Double_t AliL3Histogram::GetBinCenterY(Int_t ybin)
242 if(ybin < fFirstYbin || ybin > fLastYbin)
244 LOG(AliL3Log::kError,"AliL3Histogram::GetBinCenterY","ybin")
245 <<"Bin-value out of range "<<ybin<<ENDLOG;
248 // return fYmin + (ybin-1) * fBinwidthY + 0.5*fBinwidthY;
249 return fYmin + (ybin-0.5) * fBinwidthY;
252 void AliL3Histogram::Draw(Char_t *option)
258 for(Int_t xbin=GetFirstXbin(); xbin<=GetLastXbin(); xbin++)
260 for(Int_t ybin=GetFirstYbin(); ybin<=GetLastYbin(); ybin++)
262 Int_t bin = GetBin(xbin,ybin);
263 fRootHisto->Fill(GetBinCenterX(xbin),GetBinCenterY(ybin),GetBinContent(bin));
267 //fRootHisto->SetStats(kFALSE);
268 fRootHisto->Draw(option);
271 cerr<<"AliL3Histogram::Draw : You need to compile with ROOT in order to draw histogram"<<endl;
275 void AliL3Histogram::CreateRootHisto()
278 fRootHisto = new TH2F(fName,"",fNxbins,fXmin,fXmax,fNybins,fYmin,fYmax);
281 cerr<<"AliL3Histogram::CreateRootHisto : You need to compile with ROOT in order to create ROOT histogram"<<endl;