]>
Commit | Line | Data |
---|---|---|
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,const Int_t nSelStep, const Int_t nVarIn, const Int_t* nBinIn); | |
26 | AliCFContainer(const AliCFContainer& c); | |
27 | AliCFContainer& operator=(const AliCFContainer& corr); | |
28 | virtual void Copy(TObject& c) const; | |
29 | ||
30 | virtual ~AliCFContainer(); | |
31 | ||
32 | // AliCFFrame functions | |
33 | virtual Int_t GetNVar() const {return fGrid[0]->GetNVar();} | |
34 | virtual void PrintBinLimits() const {fGrid[0]->PrintBinLimits();} | |
35 | virtual void PrintNBins() const {fGrid[0]->PrintNBins();} | |
36 | virtual void SetBinLimits(Int_t ivar, Double_t min, Double_t max) ; // for uniform bin width only | |
37 | virtual void SetBinLimits(Int_t ivar, const Double_t * array) ; // for variable or uniform bin width | |
38 | virtual void SetBinLabel (Int_t ivar,Int_t ibin, const Char_t* label);// set a label to bin ibin on axis ivar | |
39 | virtual void SetBinContent(Int_t* bin, Int_t step, Double_t value); | |
40 | virtual void SetBinError (Int_t* bin, Int_t step, Double_t value); | |
41 | virtual void GetBinLimits(Int_t ivar, Double_t * array) const {return fGrid[0]->GetBinLimits(ivar,array);} | |
42 | virtual Double_t * GetBinLimits(Int_t ivar) const {return fGrid[0]->GetBinLimits(ivar);} | |
43 | virtual Long_t GetNBinsTotal() const {return fGrid[0]->GetNBinsTotal()*fNStep;} | |
44 | virtual Int_t GetNBins(Int_t ivar) const {return fGrid[0]->GetNBins(ivar);} | |
45 | virtual Int_t * GetNBins() const {return fGrid[0]->GetNBins();} | |
46 | virtual Float_t GetBinCenter(Int_t ivar,Int_t ibin) const {return fGrid[0]->GetBinCenter(ivar,ibin);} | |
47 | virtual Float_t GetBinSize (Int_t ivar,Int_t ibin) const {return fGrid[0]->GetBinSize (ivar,ibin);} | |
48 | virtual Float_t GetBinContent(const Int_t* coordinates, Int_t step) const {return fGrid[step]->GetGrid()->GetBinContent(coordinates);} | |
49 | virtual Float_t GetBinError (const Int_t* coordinates, Int_t step) const {return fGrid[step]->GetGrid()->GetBinError (coordinates);} | |
50 | virtual const Char_t* GetBinLabel (Int_t ivar,Int_t ibin) const {return GetAxis(ivar,0)->GetBinLabel(ibin);} | |
51 | ||
52 | virtual void Print(const Option_t*) const ; | |
53 | ||
54 | virtual TAxis * GetAxis(Int_t ivar, Int_t istep) const {return fGrid[istep]->GetAxis(ivar);} | |
55 | virtual void SetVarTitle (Int_t ivar, const Char_t* title) ; | |
56 | virtual void SetStepTitle(Int_t istep, const Char_t* title) ; | |
57 | virtual const Char_t* GetVarTitle (Int_t ivar) const {return GetAxis(ivar,0)->GetTitle();} | |
58 | virtual const Char_t* GetStepTitle(Int_t istep) const {return fGrid[istep]->GetTitle();} | |
59 | virtual Int_t GetStep(const Char_t* title) const ; // returns the step corresponding to the given title | |
60 | virtual Int_t GetVar (const Char_t* title) const ; // returns the variable corresponding to the given title | |
61 | ||
62 | virtual Int_t GetNStep() const {return fNStep;}; | |
63 | virtual void SetNStep(Int_t nStep) {fNStep=nStep;} | |
64 | virtual void Fill(const Double_t *var, Int_t istep, Double_t weight=1.) ; | |
65 | ||
66 | virtual Float_t GetOverFlows (Int_t var,Int_t istep,Bool_t excl=kFALSE) const; | |
67 | virtual Float_t GetUnderFlows(Int_t var,Int_t istep,Bool_t excl=kFALSE) const ; | |
68 | virtual Float_t GetEntries (Int_t istep) const ; | |
69 | virtual Long_t GetEmptyBins(Int_t istep) const {return fGrid[istep]->GetEmptyBins();} | |
70 | virtual Double_t GetIntegral (Int_t istep) const ; | |
71 | ||
72 | //basic operations | |
73 | virtual void Add(const AliCFContainer* aContainerToAdd, Double_t c=1.); | |
74 | virtual Long64_t Merge(TCollection* list); | |
75 | ||
76 | virtual TH1* Project (Int_t istep, Int_t ivar1, Int_t ivar2=-1 ,Int_t ivar3=-1) const; | |
77 | virtual AliCFContainer* MakeSlice(Int_t nVars, const Int_t* vars, const Double_t* varMin=0x0, const Double_t* varMax=0x0, Bool_t useBins=0) const ; | |
78 | virtual AliCFContainer* MakeSlice(Int_t nStep, const Int_t* steps, | |
79 | Int_t nVars, const Int_t* vars, const Double_t* varMin=0x0, const Double_t* varMax=0x0, | |
80 | Bool_t useBins=0) const ; | |
81 | virtual void Smooth(Int_t istep) {GetGrid(istep)->Smooth();} | |
82 | ||
83 | virtual void SetRangeUser(Int_t ivar, Double_t varMin, Double_t varMax, Bool_t useBins=kFALSE) const ; | |
84 | virtual void SetRangeUser(const Double_t* varMin, const Double_t* varMax, Bool_t useBins=kFALSE) const ; | |
85 | ||
86 | virtual void SetGrid(Int_t step, AliCFGridSparse* grid) {if (fGrid[step]) delete fGrid[step]; fGrid[step]=grid;} | |
87 | virtual AliCFGridSparse * GetGrid(Int_t istep) const {return fGrid[istep];}; | |
88 | ||
89 | virtual void Scale(Double_t factor) const; | |
90 | ||
91 | /**** TO BE REMOVED SOON ******/ | |
92 | virtual TH1D* ShowProjection( Int_t ivar, Int_t istep) const {return (TH1D*)Project(istep,ivar);} | |
93 | virtual TH2D* ShowProjection( Int_t ivar1, Int_t ivar2, Int_t istep) const {return (TH2D*)Project(istep,ivar1,ivar2);} | |
94 | virtual TH3D* ShowProjection( Int_t ivar1, Int_t ivar2,Int_t ivar3, Int_t istep) const {return (TH3D*)Project(istep,ivar1,ivar2,ivar3);} | |
95 | ||
96 | private: | |
97 | Int_t fNStep; //number of selection steps | |
98 | AliCFGridSparse **fGrid;//[fNStep] | |
99 | ||
100 | ClassDef(AliCFContainer,5); | |
101 | }; | |
102 | ||
103 | inline void AliCFContainer::SetBinLimits(Int_t ivar, const Double_t* array) { | |
104 | for (Int_t iStep=0; iStep<GetNStep(); iStep++) { | |
105 | fGrid[iStep]->SetBinLimits(ivar,array); | |
106 | } | |
107 | } | |
108 | ||
109 | inline void AliCFContainer::SetBinLimits(Int_t ivar, Double_t min, Double_t max) { | |
110 | for (Int_t iStep=0; iStep<GetNStep(); iStep++) { | |
111 | fGrid[iStep]->SetBinLimits(ivar,min,max); | |
112 | } | |
113 | } | |
114 | ||
115 | inline void AliCFContainer::SetVarTitle(Int_t ivar, const Char_t* title) { | |
116 | for (Int_t iStep=0; iStep<fNStep; iStep++) { | |
117 | GetAxis(ivar,iStep)->SetTitle(title); | |
118 | } | |
119 | } | |
120 | ||
121 | inline void AliCFContainer::SetStepTitle(Int_t istep, const Char_t* title) { | |
122 | fGrid[istep]->SetTitle(title); | |
123 | } | |
124 | ||
125 | inline Int_t AliCFContainer::GetStep(const Char_t* title) const { | |
126 | TString str(title); | |
127 | for (Int_t iStep=0; iStep<fNStep; iStep++) { | |
128 | if (!str.CompareTo(GetStepTitle(iStep))) return iStep; | |
129 | } | |
130 | AliError("Step not found"); | |
131 | return -1; | |
132 | } | |
133 | ||
134 | inline Int_t AliCFContainer::GetVar(const Char_t* title) const { | |
135 | return fGrid[0]->GetVar(title); | |
136 | } | |
137 | ||
138 | inline void AliCFContainer::SetBinLabel(Int_t iVar, Int_t iBin, const Char_t* label) { | |
139 | for (Int_t iStep=0; iStep<GetNStep(); iStep++) GetAxis(iVar,iStep)->SetBinLabel(iBin,label); | |
140 | } | |
141 | ||
142 | inline void AliCFContainer::Scale(Double_t factor) const { | |
143 | Double_t fact[2] = {factor,0} ; | |
144 | for (Int_t iStep=0; iStep<fNStep; iStep++) fGrid[iStep]->Scale(fact); | |
145 | } | |
146 | ||
147 | inline void AliCFContainer::SetBinContent(Int_t* bin, Int_t step, Double_t value) { | |
148 | // sets the content 'value' to the current container, at step 'step' | |
149 | // 'bin' is the array of the bin coordinates | |
150 | GetGrid(step)->GetGrid()->SetBinContent(bin,value); | |
151 | } | |
152 | ||
153 | inline void AliCFContainer::SetBinError(Int_t* bin, Int_t step, Double_t value) { | |
154 | // sets the error 'value' to the current container, at step 'step' | |
155 | // 'bin' is the array of the bin coordinates | |
156 | GetGrid(step)->GetGrid()->SetBinError(bin,value); | |
157 | } | |
158 | ||
159 | #endif | |
160 |