added functions to define uniform axis binning
[u/mrichter/AliRoot.git] / CORRFW / AliCFContainer.h
1 #ifndef ALICFCONTAINER_H
2 #define ALICFCONTAINER_H
3
4 /* $Id$ */
5
6 //--------------------------------------------------------------------//
7 //                                                                    //
8 // AliCFContainer Class                                               //
9 // Class to handle input data for correction Framework                // 
10 //                                                                    //
11 //--------------------------------------------------------------------//
12
13 #include "AliCFFrame.h"
14 #include "AliCFGridSparse.h"
15
16 class TH1D;
17 class TH2D;
18 class TH3D;
19 class TCollection;
20
21 class AliCFContainer : public AliCFFrame
22 {
23  public:
24   AliCFContainer();
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;
30
31   virtual ~AliCFContainer();
32
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);}
46
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);}
49
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);}
54
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
62
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.) ;
66
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 ;
74
75
76   //basic operations
77   virtual void     Add(const AliCFContainer* aContainerToAdd, Double_t c=1.);
78   virtual Long64_t Merge(TCollection* list);
79
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;
86
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 ;
92
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];};
97   
98  private:
99   Int_t    fNStep; //number of selection steps
100   AliCFGridSparse **fGrid;//[fNStep]
101   
102   ClassDef(AliCFContainer,5);
103 };
104
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);
108   }
109 }
110
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);
114   }
115 }
116
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);
120   }
121 }
122
123 inline void AliCFContainer::SetStepTitle(Int_t istep, const Char_t* title) {
124   fGrid[istep]->SetTitle(title);
125 }
126
127 inline Int_t AliCFContainer::GetStep(const Char_t* title) const {
128   TString str(title);
129   for (Int_t iStep=0; iStep<fNStep; iStep++) {
130     if (!str.CompareTo(GetStepTitle(iStep))) return iStep;
131   }
132   AliError("Step not found");
133   return -1;
134 }
135
136 inline Int_t AliCFContainer::GetVar(const Char_t* title) const {
137   return fGrid[0]->GetVar(title);
138 }
139 #endif
140