8bc947ded98ff31f8eeb989e8fe310fc5f9840c2
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / 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 "TH3F.h"
39 #include "AliFMDAnaCalibBackgroundCorrection.h"
40 #include "AliFMDAnaCalibEnergyDistribution.h"
41 #include "AliFMDAnaCalibEventSelectionEfficiency.h"
42 #include "AliFMDAnaCalibSharingEfficiency.h"
43 #include "AliPhysicsSelection.h"
44 #include <TVector2.h>
45 #include <TString.h>
46 //#include "AliPWG0Helper.h"
47 #include "AliESDEvent.h"
48 //class AliESDEvent;
49
50 /**
51  * @ingroup FMD_ana
52  */
53 class AliFMDAnaParameters : public TNamed
54 {
55 public:
56   /** Enumeration of things to initialize */ 
57   enum What { 
58     /** Pulser gain */ 
59     kBackgroundCorrection         = 0x1, // Background Correction 
60     kEnergyDistributions          = 0x2, // Energy Distributions
61     kEventSelectionEfficiency     = 0x4, // Event Selection Efficiency
62     kSharingEfficiency            = 0x8  // Sharing algorithm efficiency
63   };
64   
65   enum Trigger { kMB1 = 0, kMB2, kSPDFASTOR, kNOCTP, kEMPTY , kNSD};
66   
67   enum Energy { k900 , k10000, k14000 , k7000, k2400, k5500};
68   
69   enum MagField {k0G, k5G};
70   
71   enum Species {kPP, kPbPb};
72
73   /** DO NOT USE THIS - ONLY FOR IO */
74   AliFMDAnaParameters();
75   
76   /** Singleton access
77       @return  single to */
78   static AliFMDAnaParameters* Instance();
79   
80   void Init(Bool_t forceReInit=kTRUE, UInt_t what=kBackgroundCorrection|kEnergyDistributions|kEventSelectionEfficiency|kSharingEfficiency);
81   Float_t GetVtxCutZ();
82   Int_t GetNvtxBins();
83   Int_t GetNetaBins();
84   Float_t GetEtaMin();  
85   Float_t GetEtaMax();
86   Int_t GetEtaBin(Float_t eta);
87   Float_t GetMPV(Int_t det, Char_t ring, Float_t eta);
88   Float_t GetConstant(Int_t det, Char_t ring, Float_t eta);
89   Float_t GetSigma(Int_t det, Char_t ring, Float_t eta);
90   Float_t Get2MIPWeight(Int_t det, Char_t ring, Float_t eta);
91   Float_t Get3MIPWeight(Int_t det, Char_t ring, Float_t eta);
92   //static const char* GetBackgroundPath() { return fgkBackgroundCorrection;}
93   // static const char* GetEdistPath()      { return fgkEnergyDists;}
94   static const char* GetBackgroundID() { return fgkBackgroundID;}
95   static const char* GetEdistID()      { return fgkEnergyDistributionID;}
96   static const char* GetEventSelectionEffID()      { return fgkEventSelectionEffID;}
97   static const char* GetSharingEffID()      { return fgkSharingEffID;}
98   TH2F* GetBackgroundCorrection(Int_t det, Char_t ring, Int_t vtxbin);
99   TH1F* GetDoubleHitCorrection(Int_t det, Char_t ring);
100   TH1F* GetSPDDeadCorrection(Int_t vtxbin);
101   
102   TH1F* GetSharingEfficiency(Int_t det, Char_t ring, Int_t vtxbin);
103   TH1F* GetSharingEfficiencyTrVtx(Int_t det, Char_t ring, Int_t vtxbin);
104   Float_t  GetEventSelectionEfficiency(Int_t vtxbin);
105   TH2F*    GetEventSelectionEfficiency(Char_t* trig, Int_t vtxbin, Char_t ring);
106   Float_t  GetPhiFromSector(UShort_t det, Char_t ring, UShort_t sec) const;
107   Float_t  GetEtaFromStrip(UShort_t det, Char_t ring, UShort_t sec, UShort_t strip, Float_t zvtx) const;
108   Float_t  GetStripLength(Char_t ring, UShort_t strip)  ;
109   Float_t  GetBaseStripLength(Char_t ring, UShort_t strip)  ;
110   Float_t  GetMaxR(Char_t ring) const;
111   Float_t  GetMinR(Char_t ring) const;
112   void     SetBackgroundPath(const Char_t* bgpath) {fBackgroundPath = bgpath;}
113   void     SetEnergyPath(const Char_t* epath) {fEnergyPath = epath;}
114   void     SetEventSelectionPath(const Char_t* evpath) {fEventSelectionEffPath = evpath;}
115   void     SetSharingEfficiencyPath(const Char_t* sharpath) {fSharingEffPath = sharpath;}
116   void     SetProcessPrimary(Bool_t prim=kTRUE) {fProcessPrimary = prim;}
117   void     SetProcessHits(Bool_t hits=kTRUE) {fProcessHits = hits;}
118   Bool_t   GetProcessPrimary() const {return fProcessPrimary;} 
119   Bool_t   GetProcessHits() const {return fProcessHits;}
120   Bool_t   GetVertex(const AliESDEvent* esd, Double_t* vertexXYZ);
121   void     SetTriggerDefinition(Trigger trigger) {fTrigger = trigger;}
122   Trigger  GetTriggerDefinition() const {return fTrigger;}
123   //Bool_t   IsEventTriggered(const AliESDEvent *esd) ;
124   Bool_t   IsEventTriggered(Trigger trigger) ;
125   void     SetTriggerStatus(const AliESDEvent *esd) ;
126   void     SetEnergy(Energy energy) {fEnergy = energy;}
127   Energy   GetEnergy() {return fEnergy;}
128   void     SetMagField(MagField magfield) {fMagField = magfield;}
129   char*    GetPath(const char* species);
130   void     SetCollisionSystem(Species collsystem) {fSpecies = collsystem;}
131   Species  GetCollisionSystem() const {return fSpecies;}
132   void     PrintStatus() const;
133   void     Print(Option_t* /* option */) const { PrintStatus(); }
134   TString  GetDndetaAnalysisName() const {return "PWG2forwardDnDeta";}
135   TH1F*    GetEnergyDistribution(Int_t det, Char_t ring, Float_t eta);
136   TH1F*    GetEmptyEnergyDistribution(Int_t det, Char_t ring);
137   TH1F*    GetRingEnergyDistribution(Int_t det, Char_t ring);
138   AliPhysicsSelection* GetPhysicsSelection() const {return fPhysicsSelection;}
139   Bool_t   IsRealData() const {return fRealData; }
140   void     SetRealData(Bool_t realdata) {fRealData = realdata;}
141   Float_t  GetLowSPDLimit() const {return fSPDlowLimit;}
142   Float_t  GetHighSPDLimit() const {return fSPDhighLimit;}
143   void     SetLowSPDLimit(Float_t cut) {fSPDlowLimit = cut;}
144   void     SetHighSPDLimit(Float_t cut) {fSPDhighLimit = cut;}
145   void     SetCentralTriggerSelection(Bool_t selection) {fCentralSelection = selection;}
146   Bool_t   SharingEffPresent() {return fSharingObjectPresent;}
147   Int_t    GetFirstEtaBinToInclude(Int_t vtxbin, Int_t det, Char_t ring) ;
148   Int_t    GetLastEtaBinToInclude(Int_t vtxbin, Int_t det, Char_t ring) ;
149   void     SetUseInternalNSDTrigger(Bool_t internalNSD) {fUseBuiltInNSD = internalNSD;}
150
151   void     SetNumberOfEtaBinsToCut(Int_t nbins) {fNumberOfEtaBinsToCut = nbins;}
152   Int_t    GetNumberOfEtaBinsToCut() const {return fNumberOfEtaBinsToCut;}
153   Float_t  GetVtxSelectionEffFromMC() ;
154   
155 protected:
156   
157   AliFMDAnaParameters(const AliFMDAnaParameters& o) 
158     : TNamed(o),
159       fIsInit(o.fIsInit),
160       fBackground(o.fBackground),
161       fEnergyDistribution(o.fEnergyDistribution),
162       fEventSelectionEfficiency(o.fEventSelectionEfficiency),
163       fSharingEfficiency(o.fSharingEfficiency),
164       fCorner1(o.fCorner1),
165       fCorner2(o.fCorner2),
166       fEnergyPath(o.fEnergyPath),
167       fBackgroundPath(o.fBackgroundPath),
168       fEventSelectionEffPath(o.fEventSelectionEffPath),
169       fSharingEffPath(o.fSharingEffPath),
170       fProcessPrimary(o.fProcessPrimary),
171       fProcessHits(o.fProcessHits),
172       fTrigger(o.fTrigger),
173       fEnergy(o.fEnergy),
174       fMagField(o.fMagField),
175       fSpecies(o.fSpecies),
176       fPhysicsSelection(o.fPhysicsSelection), 
177       fRealData(o.fRealData),
178       fSPDlowLimit(o.fSPDlowLimit),
179       fSPDhighLimit(o.fSPDhighLimit),   
180       fCentralSelection(o.fCentralSelection),
181       fSharingObjectPresent(o.fSharingObjectPresent),
182       fNumberOfEtaBinsToCut(o.fNumberOfEtaBinsToCut),
183       fEtaLowBinLimits(o.fEtaLowBinLimits),
184       fEtaHighBinLimits(o.fEtaHighBinLimits),
185       fTriggerInel(o.fTriggerInel),
186       fTriggerNSD(o.fTriggerNSD),
187       fTriggerEmpty(o.fTriggerEmpty)
188   {}
189   AliFMDAnaParameters& operator=(const AliFMDAnaParameters&) { return *this; }
190   virtual ~AliFMDAnaParameters() {}
191   
192   static AliFMDAnaParameters* fgInstance;   // Static singleton instance
193   
194   //  AliCDBEntry* GetEntry(const char* path, Bool_t fatal=kTRUE) const ;
195   void InitBackground();
196   void InitEnergyDists();
197   void InitEventSelectionEff();
198   void InitSharingEff();
199   
200   void     FindEtaLimits();
201   Int_t    GetFirstEtaBinFromMap(Int_t vtxbin, Int_t det, Char_t ring) ;
202   Int_t    GetLastEtaBinFromMap(Int_t vtxbin, Int_t det, Char_t ring) ;
203
204   TObjArray* GetBackgroundArray();
205   
206   TAxis* GetRefAxis();
207   void SetCorners(Char_t ring) ;
208   
209   Bool_t fIsInit;                      //Have we been init ?
210   //TObjArray*  fBackgroundArray;
211   // TObjArray*  fEdistArray;
212   AliFMDAnaCalibBackgroundCorrection*         fBackground;  //BG correction object 
213   AliFMDAnaCalibEnergyDistribution*           fEnergyDistribution; //Energy dist object
214   AliFMDAnaCalibEventSelectionEfficiency*     fEventSelectionEfficiency; //Event selection correction object
215   AliFMDAnaCalibSharingEfficiency*            fSharingEfficiency; //Sharing efficiency correction object
216   //static const char* fgkBackgroundCorrection;
217   //static const char* fgkEnergyDists;
218   static const char* fgkBackgroundID;           // BG cor ID
219   static const char* fgkEnergyDistributionID ;  // Energy dist ID
220   static const char* fgkEventSelectionEffID ;   // Event selection ID
221   static const char* fgkSharingEffID ;          // Sharing efficiency ID  
222   
223   TVector2 fCorner1;                  //First corner of hybrid
224   TVector2 fCorner2;                  //Second corner of hybrid
225   TString  fEnergyPath;               //Path of energy calib
226   TString  fBackgroundPath;           //Path of BG correction
227   TString  fEventSelectionEffPath;    //Path of event selection eff
228   TString  fSharingEffPath;           //Path of sharing eff
229   Bool_t   fProcessPrimary;           //Do we process primary ?
230   Bool_t   fProcessHits;              //Do we process hits ?
231   Trigger  fTrigger;                  //Which trigger are we using ?
232   Energy   fEnergy;                   // CM energy
233   MagField fMagField;                 //Magnetic field
234   Species  fSpecies;                  //PbPb or pp ?
235   AliPhysicsSelection* fPhysicsSelection;  //Physics selection
236   Bool_t   fRealData;                 // real or simulated
237   Float_t  fSPDlowLimit ;             // low limit of SPD tracklets
238   Float_t  fSPDhighLimit ;             // high limit of SPD tracklets
239   Bool_t   fCentralSelection;         //if event selection is done centrally
240   Bool_t   fSharingObjectPresent ;    //Do we have a sharing object ? 
241   Int_t    fNumberOfEtaBinsToCut;     //Number of eta bins to remove from edge effects
242   TH3F     fEtaLowBinLimits;          //Histogram of low eta bin limits
243   TH3F     fEtaHighBinLimits;         //Histogram of high eta bin limits
244   Bool_t   fTriggerInel;              //If the selected INEL trigger fired
245   Bool_t   fTriggerNSD;               //If the NSD trigger fired
246   Bool_t   fTriggerEmpty;             //Event should be empty (empty bunches)
247   Bool_t   fUseBuiltInNSD;            //Should we use the internal NSD trigger by A. Hansen
248   
249   ClassDef(AliFMDAnaParameters,1) // Manager of parameters
250 };
251
252 #endif
253 //____________________________________________________________________
254 //
255 // Local Variables:
256 //   mode: C++
257 // End:
258 //
259 // EOF
260 //
261