]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FORWARD/analysis/AliFMDAnaCalibEnergyDistribution.cxx
Added 2012 geom
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis / AliFMDAnaCalibEnergyDistribution.cxx
1 //
2 // Object to store energy distribution corrections as used in the FMD
3 // analysis.  
4 //
5 //
6 #include "AliFMDAnaCalibEnergyDistribution.h"
7 #include "TAxis.h"
8 #include <AliLog.h>
9 #include <iostream>
10 #include "TH2F.h"
11 #include <TBrowser.h>
12 #include "AliFMDAnaParameters.h"
13 ClassImp(AliFMDAnaCalibEnergyDistribution)
14 #if 0  
15 ; // This is for Emacs 
16 #endif 
17
18 //____________________________________________________________________
19 AliFMDAnaCalibEnergyDistribution::AliFMDAnaCalibEnergyDistribution() 
20 : TObject(),
21   fArray(), 
22   fEmptyArray(), 
23   fRingArray(), 
24   fIsInit(kFALSE),
25   fNetaBins(0),
26   fEtaMax(0),
27   fEtaMin(0)
28 {
29   
30   
31 }
32 //____________________________________________________________________
33 void AliFMDAnaCalibEnergyDistribution::Init() 
34 {
35   //Init object
36   if(fNetaBins == 0)
37     AliFatal("Set Eta bins before doing Init or anything else");
38   
39   fArray.SetOwner();
40   fArray.SetName("etaBins");
41   fEmptyArray.SetOwner();
42   fEmptyArray.SetName("empty");
43   fRingArray.SetName("rings");
44
45   for(Int_t i = 0; i<fNetaBins; i++) {
46     TObjArray* etaArray = new TObjArray();
47     etaArray->SetName(Form("etabin_%03d", i+1));
48     fArray.AddAtAndExpand(etaArray,i);
49     for(Int_t det = 1; det<=3;det++) {
50       TObjArray* detArray = new TObjArray();
51       detArray->SetName(Form("FMD%d", det));
52       etaArray->AddAtAndExpand(detArray,det);
53     }
54   }
55   
56
57   
58   for(Int_t det = 1; det<=3;det++) {
59     TObjArray* detArray = new TObjArray();
60     detArray->SetName(Form("FMD%d", det));
61     fEmptyArray.AddAtAndExpand(detArray,det);
62   }
63     
64   for(Int_t det = 1; det<=3;det++) {
65     TObjArray* detArray = new TObjArray();
66     detArray->SetName(Form("FMD%d", det));
67     fRingArray.AddAtAndExpand(detArray,det);
68   }
69     
70     
71   fIsInit = kTRUE;
72 }
73
74
75 //____________________________________________________________________
76 TH1F* 
77 AliFMDAnaCalibEnergyDistribution::GetEnergyDistribution(Int_t det, 
78                                                         Char_t ring, 
79                                                         Float_t eta) {
80  
81   //Get Energy dist
82   //TAxis testaxis(fNetaBins,fEtaMin,fEtaMax);
83   //  Int_t binnumber = testaxis.FindBin(eta);
84   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
85     
86   Int_t binnumber       = pars->GetEtaBin(eta);
87   
88   Int_t      ringNumber = (ring == 'I' ? 0 : 1);
89   TObjArray* etaArray   = (TObjArray*)fArray.At(binnumber); 
90   TObjArray* detArray   = (TObjArray*)etaArray->At(det); 
91   TH1F*      hEdist     = (TH1F*)detArray->At(ringNumber);    
92   
93   return hEdist;
94 }
95 //____________________________________________________________________
96 TH1F* 
97 AliFMDAnaCalibEnergyDistribution::GetEmptyEnergyDistribution(Int_t det, 
98                                                              Char_t ring) 
99 {
100   //Get e dist of empty
101   Int_t ringNumber     = (ring == 'I' ? 0 : 1);
102   
103   TObjArray* detArray  = (TObjArray*)fEmptyArray.At(det); 
104   TH1F* hEdist         = (TH1F*)detArray->At(ringNumber);    
105   
106   return hEdist;
107 }
108 //____________________________________________________________________
109 TH1F* 
110 AliFMDAnaCalibEnergyDistribution::GetRingEnergyDistribution(Int_t det, 
111                                                             Char_t ring) {
112   // Get E dist of ring
113   Int_t ringNumber     = (ring == 'I' ? 0 : 1);
114   
115   TObjArray* detArray  = (TObjArray*)fRingArray.At(det); 
116   TH1F* hEdist         = (TH1F*)detArray->At(ringNumber);    
117   
118   return hEdist;
119 }
120 //____________________________________________________________________
121 void  
122 AliFMDAnaCalibEnergyDistribution::SetEnergyDistributionUser(Int_t det, 
123                                                             Char_t ring, 
124                                                             Float_t eta, 
125                                                             TH1F* edist) 
126 {
127   //Set E dist (user)
128   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
129   Int_t binnumber = pars->GetEtaBin(eta);
130   //std::cout<<binnumber<<std::endl;
131   SetEnergyDistribution(det, ring, binnumber, edist );
132 }
133 //____________________________________________________________________
134 void 
135 AliFMDAnaCalibEnergyDistribution::SetEnergyDistribution(Int_t  det, 
136                                                         Char_t ring, 
137                                                         Int_t  etabin, 
138                                                         TH1F*  edist) 
139 {  
140   //Set E dist
141   if(!fIsInit)  Init();
142   
143   Int_t ringNumber     = (ring == 'I' ? 0 : 1);
144   TObjArray* etaArray  = (TObjArray*)fArray.At(etabin);
145   TObjArray* detArray  = (TObjArray*)etaArray->At(det);
146   
147   detArray->AddAtAndExpand(edist,ringNumber);
148 }
149
150 //____________________________________________________________________
151 void 
152 AliFMDAnaCalibEnergyDistribution::SetEmptyEnergyDistribution(Int_t  det, 
153                                                              Char_t ring, 
154                                                              TH1F*  edist) 
155 {  
156   //Set the empty dist
157   if(!fIsInit)
158     Init();
159     
160   Int_t ringNumber     = (ring == 'I' ? 0 : 1);
161   TObjArray* detArray  = (TObjArray*)fEmptyArray.At(det);
162   
163   detArray->AddAtAndExpand(edist,ringNumber);
164   
165
166 }
167 //____________________________________________________________________
168 void AliFMDAnaCalibEnergyDistribution::SetRingEnergyDistribution(Int_t  det, 
169                                                                  Char_t ring, 
170                                                                  TH1F*  edist) 
171 {
172   // Set E dist of ring
173   if(!fIsInit) Init();
174     
175   Int_t ringNumber     = (ring == 'I' ? 0 : 1);
176   TObjArray* detArray  = (TObjArray*)fRingArray.At(det);
177   
178   detArray->AddAtAndExpand(edist,ringNumber);
179 }
180 //____________________________________________________________________
181 void AliFMDAnaCalibEnergyDistribution::Browse(TBrowser* b)
182 {
183   //Browse object
184   for(Int_t i = 0; i<fNetaBins; i++) {
185     TObjArray* etaArray = static_cast<TObjArray*>(fArray.At(i));
186     etaArray->SetName(Form("etabin_%03d", i+1));
187     for(Int_t det = 1; det<=3;det++) {
188       TObjArray* detArray = static_cast<TObjArray*>(etaArray->At(det));
189       detArray->SetName(Form("FMD%d", det));
190     }
191   }
192   
193   for(Int_t det = 1; det<=3;det++) {
194     TObjArray* detArray = static_cast<TObjArray*>(fEmptyArray.At(det));
195     detArray->SetName(Form("FMD%d", det));
196   }
197     
198   for(Int_t det = 1; det<=3;det++) {
199     TObjArray* detArray = static_cast<TObjArray*>(fRingArray.At(det));
200     detArray->SetName(Form("FMD%d", det));
201   }
202
203   b->Add(&fArray,     "etabins");
204   b->Add(&fEmptyArray,"empty");
205   b->Add(&fRingArray, "rings");
206 }
207
208 //____________________________________________________________________
209 //
210 // EOF
211 //