More code clean up.
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliForwardCorrectionManager.h
1 #ifndef ALIROOT_PWG2_FORWARD_ALIFORWARDCORRECTIONMANAGER_H
2 #define ALIROOT_PWG2_FORWARD_ALIFORWARDCORRECTIONMANAGER_H
3 #include <TObject.h>
4 #include "AliFMDCorrELossFit.h"
5 #include "AliFMDCorrSecondaryMap.h"
6 #include "AliFMDCorrDoubleHit.h"
7 #include "AliFMDCorrVertexBias.h"
8 #include "AliFMDCorrMergingEfficiency.h"
9 #include <TString.h>
10 class TFile;
11
12 class AliForwardCorrectionManager : public TObject
13 {
14 public:
15   /**
16    * Enumeration of things that can be read in 
17    */
18   enum ECorrection { 
19     kSecondaryMap              = 0x01, 
20     kELossFits                 = 0x02, 
21     kVertexBias                = 0x04, 
22     kMergingEfficiency         = 0x08,
23     kDoubleHit                 = 0x10,
24     kAll                       = (kSecondaryMap| 
25                                   kELossFits|
26                                   kVertexBias|
27                                   kMergingEfficiency|
28                                   kDoubleHit)
29   };
30   /** 
31    * Access to the singleton object 
32    * 
33    * @return Reference to the singleton object 
34    */
35   static AliForwardCorrectionManager& Instance();
36   /** 
37    * Read in corrections based on the parameters given 
38    * 
39    * @param collisionSystem Collision system
40    * @param cmsNN           Center of mass energy per nuclean pair [GeV]
41    * @param field           Magnetic field setting [kG]
42    * @param what            What to read in. 
43    * @param force           Force (re-)reading of specified things
44    * 
45    * @return 
46    */
47   Bool_t Init(UShort_t collisionSystem, 
48               UShort_t cmsNN, 
49               Short_t  field, 
50               Bool_t   mc=false,
51               UInt_t   what=kAll,
52               Bool_t   force=false);
53   Bool_t Init(const char* collisionSystem, 
54               Float_t     cmsNN, 
55               Float_t     field, 
56               Bool_t      mc=false,
57               UInt_t      what=kAll,
58               Bool_t      force=false);
59   /** 
60    * Get the eta axis 
61    * 
62    * @return Eta axis or null
63    */
64   const TAxis* GetEtaAxis() const;
65   /** 
66    * Get the vertex axis 
67    * 
68    * @return The vertex axis or null
69    */
70   const TAxis* GetVertexAxis() const;
71   /** 
72    * Get the energy loss fit correction object. 
73    * 
74    * @return Get the energy loss fits corrections object or null pointer
75    */
76   AliFMDCorrELossFit* GetELossFit() const { return fELossFit; }
77   /** 
78    * Get the secondary correction map
79    * 
80    * @return Get the secondary correction map object or null
81    */
82   AliFMDCorrSecondaryMap* GetSecondaryMap() const { return fSecondaryMap; }
83   /** 
84    * Get the double hit correction object
85    * 
86    * @return Get the double hit correction object or null 
87    */
88   AliFMDCorrDoubleHit* GetDoubleHit() const { return fDoubleHit; }
89   /** 
90    * Get the vertex bias correction object
91    * 
92    * @return Get the vertex bias correction object or null 
93    */
94   AliFMDCorrVertexBias* GetVertexBias() const { return fVertexBias; }
95   AliFMDCorrMergingEfficiency* GetMergingEfficiency() const 
96   {
97     return fMergingEfficiency;
98   }
99   /** 
100    * @{ 
101    * @name Path, file, and object access utilities 
102    */
103   /** 
104    * Get the path to the specified object 
105    *
106    * @param what  Which stuff to get the path for 
107    * @param sys   Collision system
108    * @param sNN   Center of mass energy [GeV]
109    * @param field Magnetic field in the L3 magnet [kG]
110    * @param mc    Whether the correction objects should be valid for MC
111    * 
112    * @return The full path or null 
113    */
114   TString GetFileName(ECorrection what, 
115                       UShort_t    sys, 
116                       UShort_t    sNN, 
117                       Short_t     field,
118                       Bool_t      mc) const;
119   TString GetFileName(ECorrection what) const;
120   /** 
121    * Get the path to the specified object 
122    *
123    * @param what  Which stuff to get the path for 
124    * 
125    * @return The full path or null 
126    */
127   const Char_t* GetFileDir(ECorrection what) const;
128   /** 
129    * Get the path to the specified object 
130    *
131    * @param what  Which stuff to get the path for 
132    * @param sys   Collision system
133    * @param sNN   Center of mass energy [GeV]
134    * @param field Magnetic field in the L3 magnet [kG]
135    * @param mc    Whether the correction objects should be valid for MC
136    * 
137    * @return The full path or null 
138    */
139   TString GetFilePath(ECorrection what, 
140                       UShort_t    sys, 
141                       UShort_t    sNN, 
142                       Short_t     field,
143                       Bool_t      mc) const;
144   TString GetFilePath(ECorrection what) const;
145   /** 
146    * Open the file that contains the correction object specified 
147    * 
148    * @param what  Which stuff to get the path for 
149    * @param sys   Collision system
150    * @param sNN   Center of mass energy [GeV]
151    * @param field Magnetic field in the L3 magnet [kG]
152    * @param mc    Whether the correction objects should be valid for MC
153    * @param rw    Whether to open the file in read/write
154    * @param newfile Wheter to make the file if it doesn't exist
155    * 
156    * @return The file that contains the correction object or null 
157    */
158   TFile* GetFile(ECorrection what, 
159                  UShort_t    sys, 
160                  UShort_t    sNN, 
161                  Short_t     field,
162                  Bool_t      mc=false, 
163                  Bool_t      rw=false, 
164                  Bool_t      newfile=false) const;
165   TFile* GetFile(ECorrection what) const;
166   /** 
167    * Get the object name corresponding to correction type 
168    * 
169    * @param what Correction 
170    * 
171    * @return Object name or null
172    */
173   const Char_t* GetObjectName(ECorrection what) const;
174   /** 
175    * Check if the specified objet exists in the file, and return it
176    * 
177    * @param file File to query 
178    * @param what Correction type 
179    * 
180    * @return Object found, or null
181    */
182   TObject* CheckObject(TFile* file,  ECorrection what) const;
183   /** 
184    * Get the path to the specified object 
185    *
186    * @param what  Which stuff to get the path for 
187    * @param sys   Collision system
188    * @param sNN   Center of mass energy [GeV]
189    * @param field Magnetic field in the L3 magnet [kG]
190    * @param mc    Whether the correction objects should be valid for MC
191    * 
192    * @return The full path or null 
193    */
194   TObject* GetObject(ECorrection what, 
195                      UShort_t    sys, 
196                      UShort_t    sNN, 
197                      Short_t     field,
198                      Bool_t      mc) const;
199   TObject* GetObject(ECorrection what) const;
200   /* 
201    * @} 
202    */
203 private:
204   /** 
205    * Default constructor 
206    */
207   AliForwardCorrectionManager();
208   /** 
209    * Copy constructor 
210    * 
211    * @param o Object to copy from 
212    */
213   AliForwardCorrectionManager(const AliForwardCorrectionManager& o);
214   /** 
215    * Assignment operator 
216    * 
217    * @param o Object to assign from 
218    * 
219    * @return Reference to this object 
220    */
221   AliForwardCorrectionManager& operator=(const AliForwardCorrectionManager& o);
222   /** 
223    * @{ 
224    * @name Read in corrections 
225    */
226   /** 
227    * Read in the secondary map 
228    * 
229    * @param sys   Collision system
230    * @param sNN   Center of mass energy [GeV]
231    * @param field Magnetic field in the L3 magnet [kG]
232    * 
233    * @return True on success, false otherwise 
234    */
235   Bool_t ReadSecondaryMap(UShort_t sys, UShort_t sNN, Short_t field);
236   /** 
237    * Read in the double hit correction
238    * 
239    * @param sys   Collision system
240    * @param sNN   Center of mass energy [GeV]
241    * @param field Magnetic field in the L3 magnet [kG]
242    * 
243    * @return True on success, false otherwise 
244    */
245   Bool_t ReadDoubleHit(UShort_t sys, UShort_t sNN, Short_t field);
246   /** 
247    * Read in the energy loss fits 
248    * 
249    * @param sys   Collision system
250    * @param sNN   Center of mass energy [GeV]
251    * @param field Magnetic field in the L3 magnet [kG]
252    * @param mc    Whether the correction objects should be valid for MC
253    * 
254    * @return True on success, false otherwise 
255    */
256   Bool_t ReadELossFits(UShort_t sys, UShort_t sNN, Short_t field, Bool_t mc);
257   /** 
258    * Read in the event selection efficiency 
259    * 
260    * @param sys   Collision system
261    * @param sNN   Center of mass energy [GeV]
262    * @param field Magnetic field in the L3 magnet [kG]
263    * 
264    * @return True on success, false otherwise 
265    */
266   Bool_t ReadVertexBias(UShort_t sys, UShort_t sNN, Short_t field);
267   /** 
268    * Read in the merging efficiency 
269    * 
270    * @param sys   Collision system
271    * @param sNN   Center of mass energy [GeV]
272    * @param field Magnetic field in the L3 magnet [kG]
273    * 
274    * @return True on success, false otherwise 
275    */
276   Bool_t ReadMergingEfficiency(UShort_t sys, UShort_t sNN, Short_t field);
277   /* 
278    * @} 
279    */
280   
281   /** Static singleton instance */
282   static AliForwardCorrectionManager* fgInstance;
283   Bool_t    fInit;  // whether we have been initialised 
284   UShort_t  fSys;   // Collision System
285   UShort_t  fSNN;   // Collision energy per nucleon (GeV)
286   Short_t   fField; // L3 magnetic field (kG)
287   
288   /** 
289    * @{
290    * @name Paths 
291    */ 
292   TString fELossFitsPath;    // Path to energy loss fit correction 
293   TString fMergingEffPath;   // Path to sharing efficiency correction 
294   TString fSecondaryMapPath; // Path to secondary efficiency correction
295   TString fDoubleHitPath;    // Path to double hit correction
296   TString fVertexBiasPath;   // Path to event selection efficiency correction
297   /* 
298    * @}
299    */
300   /** 
301    * @{ 
302    * @name Object name 
303    */
304   static const Char_t* fgkSecondaryMapSkel;  // Name of correction object 
305   static const Char_t* fgkDoubleHitSkel;     // Name of correction object 
306   static const Char_t* fgkELossFitsSkel;     // Name of correction object 
307   static const Char_t* fgkVertexBiasSkel;    // Name of correction object 
308   static const Char_t* fgkMergingEffSkel;    // Name of correction object 
309   /* 
310    * @} 
311    */
312   /** 
313    * @{ 
314    * @name Correction objects 
315    */
316   AliFMDCorrELossFit*     fELossFit;     // Energy loss fits 
317   AliFMDCorrSecondaryMap* fSecondaryMap; // Secondary particle correction
318   AliFMDCorrDoubleHit*    fDoubleHit;    // Double hit correction (low flux)
319   AliFMDCorrVertexBias*   fVertexBias;   // Vertex bias correction
320   AliFMDCorrMergingEfficiency* fMergingEfficiency;
321   /* 
322    * @}
323    */
324
325   ClassDef(AliForwardCorrectionManager,1) // Manager of corrections 
326 };
327 //____________________________________________________________________
328 inline const TAxis* 
329 AliForwardCorrectionManager::GetEtaAxis() const
330 {
331   if (!fSecondaryMap) return 0;
332   return &(fSecondaryMap->GetEtaAxis());
333 }
334 //____________________________________________________________________
335 inline const TAxis* 
336 AliForwardCorrectionManager::GetVertexAxis() const
337 {
338   if (!fSecondaryMap) return 0;
339   return &(fSecondaryMap->GetVertexAxis());
340 }
341
342 #endif
343 // Local Variables:
344 //   mode: C++ 
345 // End: 
346