1 #ifndef ALICFCONTAINER_H
2 #define ALICFCONTAINER_H
6 //--------------------------------------------------------------------//
8 // AliCFContainer Class //
9 // Class to handle input data for correction Framework //
11 //--------------------------------------------------------------------//
13 #include "AliCFFrame.h"
14 #include "AliCFGridSparse.h"
21 class AliCFContainer : public AliCFFrame
25 AliCFContainer(const Char_t* name,const Char_t* title);
26 AliCFContainer(const Char_t* name, const Char_t* title,const Int_t nSelStep, const Int_t nVarIn, const Int_t* nBinIn);
27 AliCFContainer(const AliCFContainer& c);
28 AliCFContainer& operator=(const AliCFContainer& corr);
29 virtual void Copy(TObject& c) const;
31 virtual ~AliCFContainer();
33 // AliCFFrame functions
34 virtual Int_t GetNVar() const {return fGrid[0]->GetNVar();}
35 virtual void PrintBinLimits() const {fGrid[0]->PrintBinLimits();}
36 virtual void PrintNBins() const {fGrid[0]->PrintNBins();}
37 virtual void SetBinLimits(Int_t ivar, Double_t min, Double_t max) ; // for uniform bin width only
38 virtual void SetBinLimits(Int_t ivar, const Double_t * array) ; // for variable or uniform bin width
39 virtual void GetBinLimits(Int_t ivar, Double_t * array) const {return fGrid[0]->GetBinLimits(ivar,array);}
40 virtual Double_t * GetBinLimits(Int_t ivar) const {return fGrid[0]->GetBinLimits(ivar);}
41 virtual Long_t GetNBinsTotal() const {return fGrid[0]->GetNBinsTotal()*fNStep;}
42 virtual Int_t GetNBins(Int_t ivar) const {return fGrid[0]->GetNBins(ivar);}
43 virtual Int_t * GetNBins() const {return fGrid[0]->GetNBins();}
44 virtual Float_t GetBinCenter(Int_t ivar,Int_t ibin) const {return fGrid[0]->GetBinCenter(ivar,ibin);}
45 virtual Float_t GetBinSize (Int_t ivar,Int_t ibin) const {return fGrid[0]->GetBinSize (ivar,ibin);}
47 //virtual void GetBinCenters(const Int_t *ibin, const Double_t *binCenter) const {return fGrid[0]->GetBinCenters(ibin,binCenter);}
48 //virtual void GetBinSizes(const Int_t *ibin, const Double_t *binSizes) const {return fGrid[0]->GetBinSizes(ibin,binSizes);}
50 //probably not needed anymore
51 //virtual Int_t GetBinIndex(const Int_t *ibin) const {return fGrid[0]->GetBinIndex(ibin);}
52 //virtual void GetBinIndex(Int_t iel, const Int_t *ibin) const {return fGrid[0]->GetBinIndex(iel,ibin);}
53 //virtual Int_t GetBinIndex(Int_t ivar, Int_t ind) const {return fGrid[0]->GetBinIndex(ivar,ind);}
55 virtual TAxis * GetAxis(Int_t ivar, Int_t istep) const {return fGrid[istep]->GetAxis(ivar);}
56 virtual void SetVarTitle (Int_t ivar, const Char_t* title) ;
57 virtual void SetStepTitle(Int_t istep, const Char_t* title) ;
58 virtual const Char_t* GetVarTitle (Int_t ivar) const {return GetAxis(ivar,0)->GetTitle();}
59 virtual const Char_t* GetStepTitle(Int_t istep) const {return fGrid[istep]->GetTitle();}
60 virtual Int_t GetStep(const Char_t* title) const ; // returns the step corresponding to the given title
61 virtual Int_t GetVar (const Char_t* title) const ; // returns the variable corresponding to the given title
63 virtual Int_t GetNStep() const {return fNStep;};
64 virtual void SetNStep(Int_t nStep) {fNStep=nStep;}
65 virtual void Fill(const Double_t *var, Int_t istep, Double_t weight=1.) ;
67 virtual Float_t GetOverFlows (Int_t var,Int_t istep,Bool_t excl=kFALSE) const;
68 virtual Float_t GetUnderFlows(Int_t var,Int_t istep,Bool_t excl=kFALSE) const ;
69 virtual Float_t GetEntries (Int_t istep) const ;
70 virtual Long_t GetEmptyBins(Int_t istep) const {return fGrid[istep]->GetEmptyBins();}
71 //virtual Int_t GetEmptyBins(Int_t istep, Double_t *varMin,Double_t *varMax) const ;
72 virtual Double_t GetIntegral (Int_t istep) const ;
73 //virtual Double_t GetIntegral (Int_t istep, Double_t *varMin,Double_t *varMax) const ;
77 virtual void Add(const AliCFContainer* aContainerToAdd, Double_t c=1.);
78 virtual Long64_t Merge(TCollection* list);
80 virtual TH1D* ShowProjection( Int_t ivar, Int_t istep) const {return Project(ivar ,istep);}
81 virtual TH2D* ShowProjection( Int_t ivar1, Int_t ivar2, Int_t istep) const {return Project(ivar1,ivar2 ,istep);}
82 virtual TH3D* ShowProjection( Int_t ivar1, Int_t ivar2,Int_t ivar3, Int_t istep) const {return Project(ivar1,ivar2,ivar3,istep);}
83 virtual TH1D* Project( Int_t ivar, Int_t istep) const;
84 virtual TH2D* Project( Int_t ivar1, Int_t ivar2, Int_t istep) const;
85 virtual TH3D* Project( Int_t ivar1, Int_t ivar2,Int_t ivar3, Int_t istep) const;
87 virtual TH1D* ShowSlice(Int_t ivar, const Double_t *varMin, const Double_t *varMax, Int_t istep, Bool_t useBins=0) const ;
88 virtual TH2D* ShowSlice(Int_t ivar1, Int_t ivar2, const Double_t *varMin, const Double_t *varMax, Int_t istep, Bool_t useBins=0) const ;
89 virtual TH3D* ShowSlice(Int_t ivar1, Int_t ivar2, Int_t ivar3, const Double_t *varMin, const Double_t *varMax, Int_t istep, Bool_t useBins=0) const ;
90 virtual AliCFContainer* MakeSlice(Int_t nVars, const Int_t* vars, const Double_t* varMin, const Double_t* varMax, Bool_t useBins=0) const ;
91 virtual AliCFContainer* MakeSlice(Int_t nVars, const Int_t* vars, const Double_t* varMin, const Double_t* varMax, Int_t nStep, const Int_t* steps, Bool_t useBins=0) const ;
93 virtual void SetRangeUser(Int_t ivar, Double_t varMin, Double_t varMax, Int_t istep) ;
94 virtual void SetRangeUser(Double_t* varMin, Double_t* varMax, Int_t istep) ;
95 virtual void SetGrid(Int_t step, AliCFGridSparse* grid) {fGrid[step]=grid;}
96 virtual AliCFGridSparse * GetGrid(Int_t istep) const {return fGrid[istep];};
99 Int_t fNStep; //number of selection steps
100 AliCFGridSparse **fGrid;//[fNStep]
102 ClassDef(AliCFContainer,5);
105 inline void AliCFContainer::SetBinLimits(Int_t ivar, const Double_t* array) {
106 for (Int_t iStep=0; iStep<GetNStep(); iStep++) {
107 fGrid[iStep]->SetBinLimits(ivar,array);
111 inline void AliCFContainer::SetBinLimits(Int_t ivar, Double_t min, Double_t max) {
112 for (Int_t iStep=0; iStep<GetNStep(); iStep++) {
113 fGrid[iStep]->SetBinLimits(ivar,min,max);
117 inline void AliCFContainer::SetVarTitle(Int_t ivar, const Char_t* title) {
118 for (Int_t iStep=0; iStep<fNStep; iStep++) {
119 GetAxis(ivar,iStep)->SetTitle(title);
123 inline void AliCFContainer::SetStepTitle(Int_t istep, const Char_t* title) {
124 fGrid[istep]->SetTitle(title);
127 inline Int_t AliCFContainer::GetStep(const Char_t* title) const {
129 for (Int_t iStep=0; iStep<fNStep; iStep++) {
130 if (!str.CompareTo(GetStepTitle(iStep))) return iStep;
132 AliError("Step not found");
136 inline Int_t AliCFContainer::GetVar(const Char_t* title) const {
137 return fGrid[0]->GetVar(title);