3 //--------------------------------------------------------------------//
5 // AliCFContainer Class //
6 // Class to accumulate data on an N-dimensional grids, at different //
7 // selection stages. To be used as an input to get corrections for //
8 // Reconstruction & Trigger efficiency //
10 // -- Author : S.Arcelli //
11 //--------------------------------------------------------------------//
15 #include "AliCFGrid.h"
16 #include "AliCFContainer.h"
18 //____________________________________________________________________
19 ClassImp(AliCFContainer)
21 //____________________________________________________________________
22 AliCFContainer::AliCFContainer() :
28 // default constructor
31 //____________________________________________________________________
32 AliCFContainer::AliCFContainer(const Char_t* name, const Char_t* title) :
33 AliCFFrame(name,title),
37 // default constructor
40 //____________________________________________________________________
41 AliCFContainer::AliCFContainer(const Char_t* name, const Char_t* title,const Int_t nSelSteps, const Int_t nVarIn, const Int_t * nBinIn, const Float_t *binLimitsIn) :
42 AliCFFrame(name,title,nVarIn,nBinIn,binLimitsIn),
50 // The selection steps
54 fGrid = new AliCFGrid*[fNStep]; //the grids at the various selection steps
56 for(Int_t istep=0;istep<fNStep;istep++){
57 sprintf(gname,"%s%s%i",GetName(),"_SelStep", istep);
58 fGrid[istep] = new AliCFGrid(gname,title,nVarIn,nBinIn,binLimitsIn);
61 //____________________________________________________________________
62 AliCFContainer::AliCFContainer(const AliCFContainer& c) :
70 ((AliCFContainer &)c).Copy(*this);
72 //____________________________________________________________________
73 AliCFContainer::~AliCFContainer()
78 if(fGrid)delete [] fGrid;
81 //____________________________________________________________________
82 AliCFContainer &AliCFContainer::operator=(const AliCFContainer &c)
88 ((AliCFContainer &) c).Copy(*this);
91 //____________________________________________________________________
92 void AliCFContainer::SetBinLimits(Int_t varindex, Float_t *array)
95 // setting the arrays containing the bin limits
97 Int_t nbins=fNVarBins[varindex]+1;
98 for(Int_t i=0;i<nbins;i++){
99 fVarBinLimits[fOffset[varindex]+i] =array[i];
101 for(Int_t istep=0;istep<fNStep;istep++){
102 fGrid[istep]->SetBinLimits(varindex,array);
105 //____________________________________________________________________
106 void AliCFContainer::Copy(TObject& c) const
111 AliCFContainer& target = (AliCFContainer &) c;
112 target.fNStep=fNStep;
115 target.fNVarBinLimits=fNVarBinLimits;
117 target.fNVarBins = fNVarBins;
119 target.fVarBinLimits = fVarBinLimits;
121 target.fGrid = fGrid;
122 for(Int_t istep=0;istep<fNStep;istep++){
123 for(Int_t iel=0;iel<fNDim;iel++){
124 target.fGrid[istep]->SetElement(iel,fGrid[istep]->GetElement(iel));
128 //____________________________________________________________________
129 void AliCFContainer::Fill(Float_t *var, Int_t istep, Float_t weight)
132 // Fills the grid at selection step istep for a set of values of the
133 // input variables, with a given weight (by default w=1)
135 fGrid[istep]->Fill(var,weight);
137 //___________________________________________________________________
138 TH1F *AliCFContainer::ShowProjection(Int_t ivar, Int_t istep) const
141 // returns 1-D projection along variable ivar at selection step istep
143 return fGrid[istep]->Project(ivar);
145 //___________________________________________________________________
146 TH2F *AliCFContainer::ShowProjection(Int_t ivar1, Int_t ivar2, Int_t istep) const
149 // returns 2-D projection along variables ivar1,ivar2 at selection step istep
151 return fGrid[istep]->Project(ivar1,ivar2);
153 //___________________________________________________________________
154 TH3F *AliCFContainer::ShowProjection(Int_t ivar1, Int_t ivar2, Int_t ivar3, Int_t istep) const
157 // returns 3-D projection along variables ivar1,ivar2,ivar3
158 // at selection step istep
160 return fGrid[istep]->Project(ivar1,ivar2,ivar3);
162 //___________________________________________________________________
163 TH1F *AliCFContainer::ShowSlice(Int_t ivar, Float_t *varMin, Float_t* varMax, Int_t istep) const
166 // Make a slice along variable ivar at selection level istep in range [varMin,varMax]
168 return (TH1F*)fGrid[istep]->Slice(ivar,varMin,varMax);
170 //____________________________________________________________________
171 Long64_t AliCFContainer::Merge(TCollection* list)
173 // Merge a list of AliCorrection objects with this (needed for
175 // Returns the number of merged objects (including this).
183 TIterator* iter = list->MakeIterator();
187 while ((obj = iter->Next())) {
188 AliCFContainer* entry = dynamic_cast<AliCFContainer*> (obj);
198 //____________________________________________________________________
199 void AliCFContainer::Add(AliCFContainer* aContainerToAdd, Float_t c)
202 //add the content of container aContainerToAdd to the current one
205 if(aContainerToAdd->GetNStep()!=fNStep)AliError("Different number of steps, cannot add the containers");
206 if(aContainerToAdd->GetNVar()!=fNVar)AliError("Different number of variables, cannot add the containers");
207 if(aContainerToAdd->GetNDim()!=fNDim)AliError("Different number of dimensions, cannot add the containers!");
209 for(Int_t istep=0;istep<fNStep;istep++){
210 fGrid[istep]->Add(aContainerToAdd->GetGrid(istep),c);
213 //____________________________________________________________________
214 Float_t AliCFContainer::GetOverFlows( Int_t ivar, Int_t istep) const {
216 // Get overflows in variable var at selection level istep
218 return fGrid[istep]->GetOverFlows(ivar);
220 //____________________________________________________________________
221 Float_t AliCFContainer::GetOverFlows( Int_t istep) const {
223 // Get overflows in variable var at selection level istep
225 return fGrid[istep]->GetOverFlows();
227 //____________________________________________________________________
228 Float_t AliCFContainer::GetUnderFlows( Int_t ivar, Int_t istep) const {
230 // Get overflows in variable var at selection level istep
232 return fGrid[istep]->GetUnderFlows(ivar);
234 //____________________________________________________________________
235 Float_t AliCFContainer::GetUnderFlows( Int_t istep) const {
237 // Get overflows in variable var at selection level istep
239 return fGrid[istep]->GetUnderFlows();
241 //____________________________________________________________________
242 Float_t AliCFContainer::GetEntries( Int_t istep) const {
244 // Get overflows in variable var at selection level istep
246 return fGrid[istep]->GetEntries();
248 //____________________________________________________________________
249 Int_t AliCFContainer::GetEmptyBins( Int_t istep) const {
251 // Get overflows in variable var at selection level istep
253 return fGrid[istep]->GetEmptyBins();
255 //____________________________________________________________________
256 Int_t AliCFContainer::GetEmptyBins( Int_t istep, Float_t *varMin, Float_t* varMax) const {
258 // Get overflows in variable var at selection level istep
260 return fGrid[istep]->GetEmptyBins(varMin,varMax);
262 //_____________________________________________________________________
263 Float_t AliCFContainer::GetIntegral( Int_t istep) const
266 // Get Integral at selection level istep
268 return fGrid[istep]->GetIntegral();
270 //_____________________________________________________________________
271 Float_t AliCFContainer::GetIntegral( Int_t istep, Float_t *varMin, Float_t* varMax ) const
274 // Get Integral at selection level istep
276 return fGrid[istep]->GetIntegral(varMin,varMax);