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