1 //Author: Anders Strand Vestbo
2 //Last Modified: 28.6.01
4 #include "AliL3Logging.h"
5 #include "AliL3Histogram.h"
9 ClassImp(AliL3Histogram)
11 AliL3Histogram::AliL3Histogram()
30 AliL3Histogram::AliL3Histogram(Char_t *name,Char_t *id,
31 Int_t nxbin,Double_t xmin,Double_t xmax,
32 Int_t nybin,Double_t ymin,Double_t ymax)
38 fNcells = (nxbin+2)*(nybin+2);
52 fContent = new Double_t[fNcells];
56 AliL3Histogram::~AliL3Histogram()
66 void AliL3Histogram::Reset()
69 for(Int_t i=0; i<fNcells; i++)
74 void AliL3Histogram::Fill(Double_t x,Double_t y,Int_t weight)
76 Int_t bin = FindBin(x,y);
77 AddBinContent(bin,weight);
81 Int_t AliL3Histogram::FindBin(Double_t x,Double_t y)
84 Int_t xbin = FindXbin(x);
85 Int_t ybin = FindYbin(y);
87 return GetBin(xbin,ybin);
90 Int_t AliL3Histogram::FindXbin(Double_t x)
92 if(x < fXmin || x > fXmax)
95 return 1 + (Int_t)(fNxbins*(x-fXmin)/(fXmax-fXmin));
99 Int_t AliL3Histogram::FindYbin(Double_t y)
101 if(y < fYmin || y > fYmax)
104 return 1 + (Int_t)(fNybins*(y-fYmin)/(fYmax-fYmin));
108 Int_t AliL3Histogram::GetBin(Int_t xbin,Int_t ybin)
110 if(xbin < 0 || xbin > GetLastXbin())
112 LOG(AliL3Log::kError,"AliL3Histogram::GetBin","array")<<AliL3Log::kDec<<
113 "xbin out of range "<<xbin<<ENDLOG;
116 if(ybin < 0 || ybin > GetLastYbin())
118 LOG(AliL3Log::kError,"AliL3Histogram::FindYbin","array")<<AliL3Log::kDec<<
119 "ybin out of range "<<xbin<<ENDLOG;
123 return xbin + ybin*(fNxbins+2);
126 Double_t AliL3Histogram::GetBinContent(Int_t bin)
130 LOG(AliL3Log::kError,"AliL3Histogram::GetBinContent","array")<<AliL3Log::kDec<<
131 "bin out of range "<<bin<<ENDLOG;
135 if(fContent[bin] < fThreshold)
137 return fContent[bin];
140 void AliL3Histogram::SetBinContent(Int_t xbin,Int_t ybin,Int_t value)
142 Int_t bin = GetBin(xbin,ybin);
145 SetBinContent(bin,value);
148 void AliL3Histogram::SetBinContent(Int_t bin,Int_t value)
153 LOG(AliL3Log::kError,"AliL3Histogram::SetBinContent","array")<<AliL3Log::kDec<<
154 "bin out of range "<<bin<<ENDLOG;
163 void AliL3Histogram::AddBinContent(Int_t xbin,Int_t ybin,Int_t weight)
165 Int_t bin = GetBin(xbin,ybin);
168 AddBinContent(bin,weight);
172 void AliL3Histogram::AddBinContent(Int_t bin,Int_t weight)
174 if(bin < 0 || bin > fNcells)
176 LOG(AliL3Log::kError,"AliL3Histogram::AddBinContent","array")<<AliL3Log::kDec<<
177 "bin-value out of range "<<bin<<ENDLOG;
183 fContent[bin] += weight;
186 void AliL3Histogram::Add(AliL3Histogram *h1,Double_t weight)
188 //Adding two histograms. Should be identical.
192 LOG(AliL3Log::kError,"AliL3Histogram::Add","Pointer")<<
193 "Attempting to add a non-existing histogram"<<ENDLOG;
197 if(h1->GetNbinsX()!=fNxbins || h1->GetNbinsY()!=fNybins)
199 LOG(AliL3Log::kError,"AliL3Histogram::Add","array")<<
200 "Mismatch in the number of bins "<<ENDLOG;
203 if(h1->GetFirstXbin()!=fFirstXbin || h1->GetLastXbin()!=fLastXbin ||
204 h1->GetFirstYbin()!=fFirstYbin || h1->GetLastYbin()!=fLastYbin)
206 LOG(AliL3Log::kError,"AliL3Histogram::Add","array")<<
207 "Mismatch in the bin numbering "<<ENDLOG;
211 for(Int_t bin=0; bin<fNcells; bin++)
212 fContent[bin] += h1->GetBinContent(bin);
216 Double_t AliL3Histogram::GetBinCenterX(Int_t xbin)
219 Double_t binwidth = (fXmax - fXmin) / fNxbins;
220 return fXmin + (xbin-1) * binwidth + 0.5*binwidth;
224 Double_t AliL3Histogram::GetBinCenterY(Int_t ybin)
227 Double_t binwidth = (fYmax - fYmin) / fNybins;
228 return fYmin + (ybin-1) * binwidth + 0.5*binwidth;
233 void AliL3Histogram::Draw(Char_t *option)
235 fRootHisto = new TH2F(fName,"",fNxbins,fXmin,fXmax,fNybins,fYmin,fYmax);
236 for(Int_t bin=0; bin<fNcells; bin++)
238 fRootHisto->AddBinContent(bin,GetBinContent(bin));
241 fRootHisto->Draw(option);