Added handling of background correction and event selection correction with different...
[u/mrichter/AliRoot.git] / FMD / analysis / AliFMDAnaParameters.h
1 #ifndef ALIFMDANAPARAMETERS_H
2 #define ALIFMDANAPARAMETERS_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
4  * reserved. 
5  *
6  * Latest changes by Hans Hjersing Dalsgaard, NBI, hans.dalsgaard@cern.ch
7  *
8  * See cxx source for full Copyright notice                               
9  */
10 //
11 //The design of this class is based on the AliFMDParameters class. Its purpose
12 //is to hold parameters for the analysis such as background correction and 
13 //fit functions.
14 //
15 //Author: Hans Hjersing Dalsgaard, NBI, hans.dalsgaard@cern.ch
16 //
17 //____________________________________________________________________
18
19 #ifndef ROOT_TNamed
20 # include <TNamed.h>
21 #endif
22 #ifndef ROOT_TArrayI
23 # include <TArrayI.h>
24 #endif
25 #ifndef ALIFMDUSHORTMAP_H
26 # include <AliFMDUShortMap.h>
27 #endif
28 #ifndef ALIFMDBOOLMAP_H
29 # include <AliFMDBoolMap.h>
30 #endif
31 #include "AliCDBEntry.h"
32
33 #include "TFile.h"
34 #include "TObjArray.h"
35 #include "TH2F.h"
36 #include "TAxis.h"
37 #include "TH1F.h"
38 #include "AliFMDAnaCalibBackgroundCorrection.h"
39 #include "AliFMDAnaCalibEnergyDistribution.h"
40 #include "AliFMDAnaCalibEventSelectionEfficiency.h"
41 #include <TVector2.h>
42 #include <TString.h>
43 //#include "AliPWG0Helper.h"
44 class AliESDEvent;
45
46 /**
47  * @ingroup FMD_ana
48  */
49 class AliFMDAnaParameters : public TNamed
50 {
51 public:
52   /** Enumeration of things to initialize */ 
53   enum What { 
54     /** Pulser gain */ 
55     kBackgroundCorrection         = 0x1, // Background Correction 
56     kEnergyDistributions          = 0x2, // Energy Distributions
57     kEventSelectionEfficiency     = 0x4  // Event Selection Efficiency
58   };
59   
60   enum Trigger { kMB1 = 0, kMB2, kSPDFASTOR };
61   
62   enum Energy { k900 , k10000, k14000 };
63   
64   /** Singleton access
65       @return  single to */
66   static AliFMDAnaParameters* Instance();
67   
68   void Init(Bool_t forceReInit=kTRUE, UInt_t what=kBackgroundCorrection|kEnergyDistributions|kEventSelectionEfficiency);
69   Float_t GetVtxCutZ();
70   Int_t GetNvtxBins();
71   Int_t GetNetaBins();
72   Float_t GetEtaMin();  
73   Float_t GetEtaMax();
74   Float_t GetMPV(Int_t det, Char_t ring, Float_t eta);
75   Float_t GetSigma(Int_t det, Char_t ring, Float_t eta);
76   Float_t Get2MIPWeight(Int_t det, Char_t ring, Float_t eta);
77   Float_t Get3MIPWeight(Int_t det, Char_t ring, Float_t eta);
78   //static const char* GetBackgroundPath() { return fgkBackgroundCorrection;}
79   // static const char* GetEdistPath()      { return fgkEnergyDists;}
80   static const char* GetBackgroundID() { return fgkBackgroundID;}
81   static const char* GetEdistID()      { return fgkEnergyDistributionID;}
82   static const char* GetEventSelectionEffID()      { return fgkEventSelectionEffID;}
83   TH2F* GetBackgroundCorrection(Int_t det, Char_t ring, Int_t vtxbin);
84   TH1F* GetDoubleHitCorrection(Int_t det, Char_t ring);
85   
86   Float_t GetEventSelectionEfficiency(Int_t vtxbin);
87   Float_t GetPhiFromSector(UShort_t det, Char_t ring, UShort_t sec) const;
88   Float_t GetEtaFromStrip(UShort_t det, Char_t ring, UShort_t sec, UShort_t strip, Float_t zvtx) const;
89   Float_t  GetStripLength(Char_t ring, UShort_t strip)  ;
90   Float_t  GetBaseStripLength(Char_t ring, UShort_t strip)  ;
91   Float_t  GetMaxR(Char_t ring) const;
92   Float_t  GetMinR(Char_t ring) const;
93   void     SetBackgroundPath(const Char_t* bgpath) {fBackgroundPath.Form(bgpath);}
94   void     SetEnergyPath(const Char_t* epath) {fEnergyPath.Form(epath);}
95   void     SetEventSelectionPath(const Char_t* evpath) {fEventSelectionEffPath.Form(evpath);}
96   void     SetProcessPrimary(Bool_t prim=kTRUE) {fProcessPrimary = prim;}
97   void     SetProcessHits(Bool_t hits=kTRUE) {fProcessHits = hits;}
98   Bool_t   GetProcessPrimary() {return fProcessPrimary;}
99   Bool_t   GetProcessHits() {return fProcessHits;}
100   void     GetVertex(AliESDEvent* esd, Double_t* vertexXYZ);
101   void     SetTriggerDefinition(Trigger trigger) {fTrigger = trigger;}
102   Trigger  GetTriggerDefinition() {return fTrigger;}
103   Bool_t   IsEventTriggered(AliESDEvent* esd);
104   void     SetEnergy(Energy energy) {fEnergy = energy;}
105   char*    GetPath(const char* species);
106 protected:
107   
108   AliFMDAnaParameters();
109   
110   AliFMDAnaParameters(const AliFMDAnaParameters& o) 
111     : TNamed(o),
112       fIsInit(o.fIsInit),
113       fBackground(o.fBackground),
114       fEnergyDistribution(o.fEnergyDistribution),
115       fEventSelectionEfficiency(o.fEventSelectionEfficiency),
116       fCorner1(o.fCorner1),
117       fCorner2(o.fCorner2),
118       fEnergyPath(o.fEnergyPath),
119       fBackgroundPath(o.fBackgroundPath),
120       fEventSelectionEffPath(o.fEventSelectionEffPath),
121       fProcessPrimary(o.fProcessPrimary),
122       fProcessHits(o.fProcessHits),
123       fTrigger(o.fTrigger),
124       fEnergy(o.fEnergy)
125   {}
126   AliFMDAnaParameters& operator=(const AliFMDAnaParameters&) { return *this; }
127   virtual ~AliFMDAnaParameters() {}
128   
129   static AliFMDAnaParameters* fgInstance;   // Static singleton instance
130   
131   //  AliCDBEntry* GetEntry(const char* path, Bool_t fatal=kTRUE) const ;
132   void InitBackground();
133   void InitEnergyDists();
134   void InitEventSelectionEff();
135   
136   TH1F* GetEnergyDistribution(Int_t det, Char_t ring, Float_t eta);
137   TObjArray* GetBackgroundArray();
138   
139   TAxis* GetRefAxis();
140   void SetCorners(Char_t ring) ;
141   
142   Bool_t fIsInit;
143   //TObjArray*  fBackgroundArray;
144   // TObjArray*  fEdistArray;
145   AliFMDAnaCalibBackgroundCorrection*         fBackground;
146   AliFMDAnaCalibEnergyDistribution*           fEnergyDistribution;
147   AliFMDAnaCalibEventSelectionEfficiency*     fEventSelectionEfficiency;
148   
149   //static const char* fgkBackgroundCorrection;
150   //static const char* fgkEnergyDists;
151   static const char* fgkBackgroundID;
152   static const char* fgkEnergyDistributionID ;
153   static const char* fgkEventSelectionEffID ;
154   
155   TVector2 fCorner1;
156   TVector2 fCorner2;
157   TString  fEnergyPath;
158   TString  fBackgroundPath;
159   TString  fEventSelectionEffPath;
160   Bool_t   fProcessPrimary;
161   Bool_t   fProcessHits; 
162   Trigger  fTrigger;
163   Energy   fEnergy;
164   
165   ClassDef(AliFMDAnaParameters,0) // Manager of parameters
166 };
167
168 #endif
169 //____________________________________________________________________
170 //
171 // Local Variables:
172 //   mode: C++
173 // End:
174 //
175 // EOF
176 //
177