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()
29 AliL3Histogram::AliL3Histogram(Char_t *name,Char_t *id,Int_t nxbin,Double_t xmin,Double_t xmax,Int_t nybin,Double_t ymin,Double_t ymax)
35 fNcells = (nxbin+2)*(nybin+2);
48 fContent = new Double_t[fNcells];
52 AliL3Histogram::~AliL3Histogram()
62 void AliL3Histogram::Reset()
65 for(Int_t i=0; i<fNcells; i++)
70 void AliL3Histogram::Fill(Double_t x,Double_t y,Int_t weight)
72 Int_t bin = FindBin(x,y);
73 AddBinContent(bin,weight);
77 Int_t AliL3Histogram::FindBin(Double_t x,Double_t y)
80 Int_t xbin = FindXbin(x);
81 Int_t ybin = FindYbin(y);
83 return GetBin(xbin,ybin);
86 Int_t AliL3Histogram::FindXbin(Double_t x)
88 if(x < fXmin || x > fXmax)
91 return 1 + (Int_t)(fNxbins*(x-fXmin)/(fXmax-fXmin));
95 Int_t AliL3Histogram::FindYbin(Double_t y)
97 if(y < fYmin || y > fYmax)
100 return 1 + (Int_t)(fNybins*(y-fYmin)/(fYmax-fYmin));
104 Int_t AliL3Histogram::GetBin(Int_t xbin,Int_t ybin)
106 if(xbin < 0 || xbin > GetLastXbin())
108 LOG(AliL3Log::kError,"AliL3Histogram::GetBin","array")<<AliL3Log::kDec<<
109 "xbin out of range "<<xbin<<ENDLOG;
112 if(ybin < 0 || ybin > GetLastYbin())
114 LOG(AliL3Log::kError,"AliL3Histogram::FindYbin","array")<<AliL3Log::kDec<<
115 "ybin out of range "<<xbin<<ENDLOG;
119 return xbin + ybin*(fNxbins+2);
122 Double_t AliL3Histogram::GetBinContent(Int_t bin)
126 LOG(AliL3Log::kError,"AliL3Histogram::GetBinContent","array")<<AliL3Log::kDec<<
127 "bin out of range "<<bin<<ENDLOG;
131 return fContent[bin];
134 void AliL3Histogram::SetBinContent(Int_t xbin,Int_t ybin,Int_t value)
136 Int_t bin = GetBin(xbin,ybin);
139 SetBinContent(bin,value);
142 void AliL3Histogram::SetBinContent(Int_t bin,Int_t value)
147 LOG(AliL3Log::kError,"AliL3Histogram::SetBinContent","array")<<AliL3Log::kDec<<
148 "bin out of range "<<bin<<ENDLOG;
157 void AliL3Histogram::AddBinContent(Int_t xbin,Int_t ybin,Int_t weight)
159 Int_t bin = GetBin(xbin,ybin);
162 AddBinContent(bin,weight);
166 void AliL3Histogram::AddBinContent(Int_t bin,Int_t weight)
168 if(bin < 0 || bin > fNcells)
170 LOG(AliL3Log::kError,"AliL3Histogram::AddBinContent","array")<<AliL3Log::kDec<<
171 "bin-value out of range "<<bin<<ENDLOG;
177 fContent[bin] += weight;
180 Double_t AliL3Histogram::GetBinCenterX(Int_t xbin)
183 Double_t binwidth = (fXmax - fXmin) / fNxbins;
184 return fXmin + (xbin-1) * binwidth + 0.5*binwidth;
188 Double_t AliL3Histogram::GetBinCenterY(Int_t ybin)
191 Double_t binwidth = (fYmax - fYmin) / fNybins;
192 return fYmin + (ybin-1) * binwidth + 0.5*binwidth;
197 void AliL3Histogram::Draw(Char_t *option)
199 fRootHisto = new TH2F(fName,"",fNxbins,fXmin,fXmax,fNybins,fYmin,fYmax);
200 for(Int_t bin=0; bin<fNcells; bin++)
202 fRootHisto->AddBinContent(bin,fContent[bin]);
204 //printf("ncells %d %d\n",(hist->GetNbinsX()+2)*(hist->GetNbinsY()+2),fNcells);
206 fRootHisto->Draw(option);