]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/FORWARD/analysis2/AliForwardCorrectionManager.cxx
Various updates, and prep for Train base class
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / AliForwardCorrectionManager.cxx
1 //
2 // Manager (singleton) of corrections 
3 // 
4 #include "AliForwardCorrectionManager.h"
5 #include "AliFMDCorrSecondaryMap.h"
6 #include "AliFMDCorrDoubleHit.h"
7 #include "AliFMDCorrELossFit.h"
8 #include "AliFMDCorrVertexBias.h"
9 #include "AliFMDCorrMergingEfficiency.h"
10 #include "AliFMDCorrAcceptance.h"
11 #include "AliFMDCorrNoiseGain.h"
12 #include "AliForwardUtil.h"
13 #include "AliOADBForward.h"
14 #include <TString.h>
15 #include <AliLog.h>
16 #include <TFile.h>
17 #include <TSystem.h>
18 #include <TBrowser.h>
19 #include <TROOT.h>
20 #include <TClass.h>
21 #include <iostream>
22 #include <iomanip>
23     
24 //____________________________________________________________________
25 AliForwardCorrectionManager* AliForwardCorrectionManager::fgInstance= 0;
26 const char* AliForwardCorrectionManager::fgkSecondaryMapSkel = "secondary";
27 const char* AliForwardCorrectionManager::fgkDoubleHitSkel    = "doublehit";
28 const char* AliForwardCorrectionManager::fgkELossFitsSkel    = "elossfits";
29 const char* AliForwardCorrectionManager::fgkVertexBiasSkel   = "vertexbias";
30 const char* AliForwardCorrectionManager::fgkMergingEffSkel   = "merging";
31 const char* AliForwardCorrectionManager::fgkAcceptanceSkel   = "acceptance";
32 const char* AliForwardCorrectionManager::fgkNoiseGainSkel    = "noisegain";
33
34 #define PREFIX  "$(ALICE_ROOT)/OADB/PWGLF/FORWARD/CORRECTIONS/data/"
35 #define DB_NAME "fmd_corrections.root"
36
37 //____________________________________________________________________
38 AliForwardCorrectionManager& AliForwardCorrectionManager::Instance()
39 {
40   // 
41   // Access to the singleton object 
42   // 
43   // Return:
44   //    Reference to the singleton object 
45   //
46   if (!fgInstance) fgInstance= new AliForwardCorrectionManager(false);
47   return *fgInstance;
48 }
49
50 //____________________________________________________________________
51 AliForwardCorrectionManager::AliForwardCorrectionManager()
52 {
53   // 
54   // Default constructor 
55   //
56 }
57 //____________________________________________________________________
58 AliForwardCorrectionManager::AliForwardCorrectionManager(Bool_t d)
59   : AliCorrectionManagerBase(d)
60 {
61   // 
62   // Non-default constructor
63   // 
64   // Parameters:
65   //    Not used
66   //
67   RegisterCorrection(kIdSecondaryMap, fgkSecondaryMapSkel, 
68                      PREFIX DB_NAME, AliFMDCorrSecondaryMap::Class(), 
69                      kStandard|kSatellite);
70   RegisterCorrection(kIdELossFits, fgkELossFitsSkel, 
71                      PREFIX DB_NAME, AliFMDCorrELossFit::Class(), kFull);
72   RegisterCorrection(kIdVertexBias, fgkVertexBiasSkel, 
73                      PREFIX DB_NAME, AliFMDCorrVertexBias::Class(), 
74                      kStandard|kSatellite);
75   RegisterCorrection(kIdMergingEfficiency, fgkMergingEffSkel, 
76                      PREFIX DB_NAME, AliFMDCorrMergingEfficiency::Class(), 
77                      kStandard|kSatellite);
78   RegisterCorrection(kIdDoubleHit, fgkDoubleHitSkel, 
79                      PREFIX DB_NAME, AliFMDCorrDoubleHit::Class(),
80                      kStandard|kMC);
81   RegisterCorrection(kIdAcceptance, fgkAcceptanceSkel, 
82                      PREFIX DB_NAME, AliFMDCorrAcceptance::Class(),
83                      kRun|kSys|kSNN|kSatellite);
84   RegisterCorrection(kIdNoiseGain, fgkNoiseGainSkel,
85                      PREFIX DB_NAME, AliFMDCorrNoiseGain::Class(), kRun);
86 }
87 //____________________________________________________________________
88 Bool_t
89 AliForwardCorrectionManager::Init(ULong_t     runNo, 
90                                   const char* sys, 
91                                   Float_t     sNN, 
92                                   Float_t     field,
93                                   Bool_t      mc,
94                                   Bool_t      sat,
95                                   UInt_t      what,
96                                   Bool_t      force)
97 {
98   // 
99   // Read in correction based on passed parameters
100   // 
101   // Parameters:
102   //    collisionSystem Collision system string 
103   //    cmsNN           Center of mass energy per nucleon pair [GeV]
104   //    field           Magnetic field [kG]
105   //    mc              Monte-carlo switch
106   //    what            What to read in 
107   //    force           Force (re-)reading of specified things
108   // 
109   // Return:
110   //    true on success
111   //
112   UShort_t col = AliForwardUtil::ParseCollisionSystem(sys);
113   // AliInfo(Form("Initialising with cms='%s', sNN=%fGeV field=%fkG", 
114   //           cms, sNN, field));
115   return Init(runNo, col, 
116               AliForwardUtil::ParseCenterOfMassEnergy(col, sNN),
117               AliForwardUtil::ParseMagneticField(field), 
118               mc, sat, what, force);
119 }
120
121 //____________________________________________________________________
122 Bool_t
123 AliForwardCorrectionManager::Init(ULong_t  runNo, 
124                                   UShort_t sys, 
125                                   UShort_t sNN, 
126                                   Short_t  field,
127                                   Bool_t   mc,
128                                   Bool_t   sat,
129                                   UInt_t   what,
130                                   Bool_t   force)
131 {
132   // 
133   // Read in corrections based on the parameters given 
134   // 
135   // Parameters:
136   //    collisionSystem Collision system
137   //    cmsNN           Center of mass energy per nuclean pair [GeV]
138   //    field           Magnetic field setting [kG]
139   //    mc              Monte-carlo switch
140   //    what            What to read in. 
141   //    force           Force (re-)reading of specified things
142   // 
143   // Return:
144   //    
145   //
146   EnableCorrection(kIdSecondaryMap,     what & kSecondaryMap);
147   EnableCorrection(kIdDoubleHit,        what & kDoubleHit);
148   EnableCorrection(kIdELossFits,        what & kELossFits);
149   EnableCorrection(kIdAcceptance,       what & kAcceptance);
150   EnableCorrection(kIdVertexBias,       what & kVertexBias);
151   EnableCorrection(kIdMergingEfficiency,what & kMergingEfficiency);
152   EnableCorrection(kIdNoiseGain,        what & kNoiseGain);
153   
154   return InitCorrections(runNo, sys, sNN, field, mc, sat, force);
155 }
156
157 //____________________________________________________________________
158 UInt_t
159 AliForwardCorrectionManager::ParseFields(const TString& fields)
160 {
161   UInt_t      ret    = 0;
162   TObjArray*  tokens = fields.Tokenize(" \t,|+:;-&");
163   TIter       next(tokens);
164   TObjString* ostr = 0;
165   while ((ostr = static_cast<TObjString*>(next()))) {
166     const TString& str = ostr->String();
167     
168     if (str.Contains("all", TString::kIgnoreCase)) 
169       ret |= kAll;
170     else if (str.Contains("default", TString::kIgnoreCase)) 
171       ret |= kDefault;
172     else if (str.Contains(fgkSecondaryMapSkel, TString::kIgnoreCase))
173       ret |= kSecondaryMap;
174     else if (str.Contains(fgkDoubleHitSkel, TString::kIgnoreCase))
175       ret |= kDoubleHit;
176     else if (str.Contains(fgkELossFitsSkel, TString::kIgnoreCase))
177       ret |= kELossFits;
178     else if (str.Contains(fgkVertexBiasSkel, TString::kIgnoreCase))
179       ret |= kVertexBias;
180     else if (str.Contains(fgkMergingEffSkel, TString::kIgnoreCase))
181       ret |= kMergingEfficiency;
182     else if (str.Contains(fgkAcceptanceSkel, TString::kIgnoreCase))
183       ret |= kAcceptance;
184     else if (str.Contains(fgkNoiseGainSkel, TString::kIgnoreCase))
185       ret |= kNoiseGain;
186     else 
187       AliWarningClassF("Unknown correction: %s", str.Data());
188   }
189   delete tokens;
190   return ret;
191 }
192
193
194 //____________________________________________________________________
195 Bool_t
196 AliForwardCorrectionManager::Append(const TString& addition, 
197                                     const TString& destination) const
198 {
199   TString dest(destination);
200   if (dest.IsNull()) 
201     dest = PREFIX DB_NAME;
202   return AliCorrectionManagerBase::Append(addition, dest);
203 }
204
205
206 //____________________________________________________________________
207 const AliFMDCorrELossFit*
208 AliForwardCorrectionManager::GetELossFit() const 
209 {
210   /** 
211    * Get the energy loss fit correction object. 
212    * 
213    * @return Get the energy loss fits corrections object or null pointer
214    */
215   return static_cast<const AliFMDCorrELossFit*>(Get(kIdELossFits)); 
216 }
217 //____________________________________________________________________
218 const AliFMDCorrSecondaryMap*
219 AliForwardCorrectionManager::GetSecondaryMap() const 
220 {
221   /** 
222    * Get the secondary correction map
223    * 
224    * @return Get the secondary correction map object or null
225    */
226   return static_cast<const AliFMDCorrSecondaryMap*>(Get(kIdSecondaryMap)); 
227 }
228 //____________________________________________________________________
229 const AliFMDCorrDoubleHit*
230 AliForwardCorrectionManager::GetDoubleHit() const 
231 {
232   /** 
233    * Get the double hit correction object
234    * 
235    * @return Get the double hit correction object or null 
236    */
237   return static_cast<const AliFMDCorrDoubleHit*>(Get(kIdDoubleHit)); 
238 }
239 //____________________________________________________________________
240 const AliFMDCorrVertexBias*
241 AliForwardCorrectionManager::GetVertexBias() const 
242 {
243   /** 
244    * Get the vertex bias correction object
245    * 
246    * @return Get the vertex bias correction object or null 
247    */
248   return static_cast<const AliFMDCorrVertexBias*>(Get(kIdVertexBias)); 
249 }
250 //____________________________________________________________________
251 const AliFMDCorrMergingEfficiency*
252 AliForwardCorrectionManager::GetMergingEfficiency() const 
253 {
254   /** 
255    * Get the merging efficiency 
256    * 
257    * 
258    * @return Get the vertex efficiency correction 
259    */
260   return 
261     static_cast<const AliFMDCorrMergingEfficiency*>(Get(kIdMergingEfficiency)); 
262 }
263 //____________________________________________________________________
264 const AliFMDCorrAcceptance*
265 AliForwardCorrectionManager::GetAcceptance() const 
266 {
267   /** 
268    * Get the acceptance correction due to dead channels 
269    * 
270    * 
271    * @return Acceptance correction due to dead channels 
272    */
273   return static_cast<const AliFMDCorrAcceptance*>(Get(kIdAcceptance)); 
274 }
275 //____________________________________________________________________
276 const AliFMDCorrNoiseGain*
277 AliForwardCorrectionManager::GetNoiseGain() const 
278 {
279   /** 
280    * Get the noisegain calibration
281    * 
282    * @return NoiseGain calibration
283    */
284   return static_cast<const AliFMDCorrNoiseGain*>(Get(kIdNoiseGain)); 
285 }
286
287 //____________________________________________________________________
288 const TAxis* 
289 AliForwardCorrectionManager::GetEtaAxis() const
290 {
291   const AliFMDCorrSecondaryMap* map = GetSecondaryMap();
292   if (!map) return 0;
293   return &(map->GetEtaAxis());
294 }
295 //____________________________________________________________________
296 const TAxis* 
297 AliForwardCorrectionManager::GetVertexAxis() const
298 {
299   const AliFMDCorrSecondaryMap* map = GetSecondaryMap();
300   if (!map) return 0;
301   return &(map->GetVertexAxis());
302 }
303
304
305 #ifndef DOXY_INPUT
306 //______________________________________________________________________________
307 void AliForwardCorrectionManager::Streamer(TBuffer &R__b)
308 {
309   //
310   // Stream an object of class AliForwardCorrectionManager.
311   //
312   if (R__b.IsReading()) {
313      R__b.ReadClassBuffer(AliForwardCorrectionManager::Class(),this);
314      if (fgInstance) {
315        AliWarning(Form("Singleton instance already set (%p) when reading "
316                        "singleton object (%p).  Read object will be new "
317                        "singleton object", fgInstance, this));
318        // delete fgInstance;
319      }
320      fgInstance = this;
321      // fgInstance->fCorrections.ls();
322   } else {
323     R__b.WriteClassBuffer(AliForwardCorrectionManager::Class(),this);
324   }
325 }
326 #endif
327
328 //____________________________________________________________________
329 //
330 // EOF
331 //