simplified efficiency projection
[u/mrichter/AliRoot.git] / CORRFW / AliCFGrid.h
1 #ifndef ALICFGRID_H
2 #define ALICFGRID_H
3
4 //--------------------------------------------------------------------//
5 //                                                                    //
6 // AliCFGrid.cxx Class                                                //
7 // Class to handle N-dim maps for the correction Framework            // 
8 // The class uses a une-dimensional array of floats to store the grid //     
9 //                                                                    //
10 //--------------------------------------------------------------------//
11
12 #include "AliCFVGrid.h"
13 #include "AliLog.h"
14
15 class TH1D;
16 class TH2D;
17 class TH3D;
18
19 class AliCFGrid : public AliCFVGrid
20 {
21  public:
22   AliCFGrid();
23   AliCFGrid(const Char_t* name,const Char_t* title);
24   AliCFGrid(const Char_t* name, const Char_t* title, const Int_t nVarIn, const Int_t* nBinIn, const Double_t  *binLimitsIn=0);
25   AliCFGrid(const AliCFGrid & c);
26   
27   virtual ~AliCFGrid();
28   AliCFGrid& operator=(const AliCFGrid& corr);
29
30   virtual void  Fill(Double_t *var, Double_t weight=1.);
31
32   virtual Float_t GetOverFlows(Int_t var) const;
33   virtual Float_t GetUnderFlows(Int_t var)const ;
34   virtual Float_t GetEntries()const ;
35
36   virtual Float_t GetElement(Int_t iel)const; 
37   virtual Float_t GetElement(Int_t *bin)const; 
38   virtual Float_t GetElement(Double_t *var)const; 
39   virtual Float_t GetElementError(Int_t iel)const; 
40   virtual Float_t GetElementError(Int_t *bin)const; 
41   virtual Float_t GetElementError(Double_t *var)const; 
42   virtual void SetElement(Int_t iel, Float_t val); 
43   virtual void SetElement(Int_t *bin, Float_t val); 
44   virtual void SetElement(Double_t *var, Float_t val); 
45   virtual void SetElementError(Int_t iel, Float_t val); 
46   virtual void SetElementError(Int_t *bin, Float_t val); 
47   virtual void SetElementError(Double_t *var, Float_t val); 
48
49   virtual TH1D*      Project( Int_t ivar) const;
50   virtual TH2D*      Project( Int_t ivar1, Int_t ivar2) const;
51   virtual TH3D*      Project( Int_t ivar1, Int_t ivar2,Int_t ivar3) const;
52   virtual AliCFGrid* Project( Int_t /*nVars*/, Int_t* /*vars*/, Double_t* /*varMin*/, Double_t* /*varMax*/) const
53   {AliWarning("not implemented"); return 0x0;}
54   virtual TH1D* Slice( Int_t ivar, Double_t *varMin, Double_t *varMax) const;
55   virtual TH2D* Slice( Int_t /*ivar1*/, Int_t /*ivar2*/, Double_t */*varMin*/, Double_t */*varMax*/) const 
56   {AliWarning("not implemented"); return 0x0;}
57   virtual TH3D* Slice( Int_t /*ivar1*/, Int_t /*ivar2*/, Int_t /*ivar3*/, Double_t */*varMin*/, Double_t */*varMax*/) const 
58   {AliWarning("not implemented"); return 0x0;}
59
60   virtual void UseAxisRange(Bool_t /*b*/) const {AliWarning("Not implemented because this class is obsolete");}
61
62   //basic operations
63
64   virtual void SumW2();
65   virtual void Copy(TObject& c) const;
66   virtual void Add(AliCFVGrid* aGrid, Double_t c=1.);
67   virtual void Add(AliCFVGrid* aGrid1 ,AliCFVGrid* aGrid2, Double_t c1=1.,Double_t c2=1.);
68   virtual void Multiply(AliCFVGrid* aGrid, Double_t c=1.);
69   virtual void Multiply(AliCFVGrid* aGrid1,AliCFVGrid* aGrid2, Double_t c1=1.,Double_t c2=1.);
70   virtual void Divide(AliCFVGrid* aGrid, Double_t c=1.);
71   virtual void Divide(AliCFVGrid* aGrid1, AliCFVGrid* aGrid2, Double_t c1=1., Double_t c2=1.,Option_t *option=0);
72
73   void Rebin(const Int_t* group);
74
75   
76  protected:
77
78   Float_t  fNentriesTot;//Total number of entries 
79   Float_t  *fNunfl;//[fNVar] underflows in each dimension
80   Float_t  *fNovfl;//[fNVar] overflows in each dimension
81   Float_t  *fData;//[fNDim] The data Container
82   Float_t  *fErr2;//[fNDim] The squared weights Container (only with SumW2)
83
84   
85   ClassDef(AliCFGrid,4);
86 };
87     
88 #endif
89