]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/PartCorrBase/AliCaloPID.h
Centrality update (Alberica)
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliCaloPID.h
1 #ifndef ALICALOPID_H
2 #define ALICALOPID_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5 /* $Id:  $ */
6
7 //_________________________________________________________________________
8 // Class for PID selection with calorimeters
9 // The Output of the 2 main methods GetPdg is a PDG number identifying the cluster, 
10 // being kPhoton, kElectron, kPi0 ... as defined in the header file
11 //   - GetPdg(const TString calo, const Double_t * pid, const Float_t energy)
12 //      Reads the PID weights array of the ESDs and depending on its magnitude identifies the particle
13 //   - GetPdg(const TString calo,const TLorentzVector mom, const AliVCluster * cluster)
14 //      Recalcultes PID, the bayesian or any new one to be implemented in the future
15 //      Right now only the possibility to recalculate EMCAL with bayesian and simple PID.
16 //      In order to recalculate Bayesian, it is necessary to load the EMCALUtils library
17 //      and do SwitchOnBayesianRecalculation().
18 //      To change the PID parameters from Low to High like the ones by default, use the constructor 
19 //      AliCaloPID(flux)
20 //      where flux is AliCaloPID::kLow or AliCaloPID::kHigh
21 //      If it is necessary to change the parameters use the constructor 
22 //      AliCaloPID(AliEMCALPIDUtils *utils) and set the parameters before.
23 //   - SetPIDBits: Simple PID, depending on the thresholds fLOCut fTOFCut and even the
24 //     result of the PID bayesian a different PID bit is set. 
25 //
26 //  All these methods can be called in the analysis you are interested.
27 //
28 //*-- Author: Gustavo Conesa (INFN-LNF)
29
30 // --- ROOT system ---
31 #include <TObject.h> 
32 class TString ;
33 class TLorentzVector ;
34 #include <TFormula.h>
35 class TList;
36 class TH2F ;
37
38 //--- AliRoot system ---
39 class AliVCluster;
40 class AliAODPWG4Particle;
41 #include "AliEMCALPIDUtils.h"
42 class AliCalorimeterUtils;
43
44 class AliCaloPID : public TObject {
45         
46  public: 
47   
48   AliCaloPID() ; // ctor
49   AliCaloPID(const Int_t particleFlux) ; // ctor, to be used when recalculating bayesian PID
50   AliCaloPID(const TNamed * emcalpid) ; // ctor, to be used when recalculating bayesian PID and need different parameters
51   virtual ~AliCaloPID() ;//virtual dtor
52   
53 private:
54   AliCaloPID & operator = (const AliCaloPID & g) ;//cpy assignment
55   AliCaloPID(const AliCaloPID & g) ; // cpy ctor
56
57 public:
58         
59   enum PidType {
60     kPhoton         = 22,
61     kPi0            = 111,
62     kEta            = 221, 
63     kElectron       = 11, 
64     kEleCon         =-11, 
65     kNeutralHadron  = 2112, 
66     kChargedHadron  = 211, 
67     kNeutralUnknown = 130, 
68     kChargedUnknown = 321
69   };
70   
71   enum TagType {kPi0Decay, kEtaDecay, kOtherDecay, kConversion, kNoTag = -1};
72   
73   TList *   GetCreateOutputObjects();
74
75   void      InitParameters();
76
77   Bool_t    IsPHOSPhoton(const Double_t l0, const Double_t l1) ;
78   
79   Int_t     GetIdentifiedParticleType(const TString calo, const Double_t * pid,     const Float_t energy) ;
80   
81   Int_t     GetIdentifiedParticleType(const TString calo, const TLorentzVector mom, const AliVCluster * cluster) ;
82   
83   TString   GetPIDParametersList();
84   
85   void      SetPIDBits(const TString calo,  const AliVCluster * cluster, AliAODPWG4Particle *aodph, const AliCalorimeterUtils* cu);
86   
87   void      Print(const Option_t * opt)const;
88   
89   AliEMCALPIDUtils * GetEMCALPIDUtils() {if(!fEMCALPIDUtils) fEMCALPIDUtils = new AliEMCALPIDUtils; return fEMCALPIDUtils ; }
90   
91   //Weight getters
92   Float_t   GetEMCALPhotonWeight()       const { return fEMCALPhotonWeight  ; }
93   Float_t   GetEMCALPi0Weight()          const { return fEMCALPi0Weight     ; }
94   Float_t   GetEMCALElectronWeight()     const { return fEMCALElectronWeight; }
95   Float_t   GetEMCALChargeWeight()       const { return fEMCALChargeWeight  ; }
96   Float_t   GetEMCALNeutralWeight()      const { return fEMCALNeutralWeight ; }
97   Float_t   GetPHOSPhotonWeight()        const { return fPHOSPhotonWeight   ; }
98   Float_t   GetPHOSPi0Weight()           const { return fPHOSPi0Weight      ; }
99   Float_t   GetPHOSElectronWeight()      const { return fPHOSElectronWeight ; }
100   Float_t   GetPHOSChargeWeight()        const { return fPHOSChargeWeight   ; }
101   Float_t   GetPHOSNeutralWeight()       const { return fPHOSNeutralWeight  ; }
102   
103   Bool_t    IsPHOSPIDWeightFormulaOn()   const { return fPHOSWeightFormula  ; } 
104
105   TFormula  * GetPHOSPhotonWeightFormula()      { 
106     if(!fPHOSPhotonWeightFormula) 
107       fPHOSPhotonWeightFormula = new TFormula("phos_photon_weight",
108                                               fPHOSPhotonWeightFormulaExpression);
109     return fPHOSPhotonWeightFormula                                         ; } 
110   
111   TFormula  * GetPHOSPi0WeightFormula()         { 
112     if(!fPHOSPi0WeightFormula) 
113       fPHOSPi0WeightFormula = new TFormula("phos_pi0_weight",
114                                            fPHOSPi0WeightFormulaExpression);
115     return fPHOSPi0WeightFormula                                            ; } 
116   
117   TString   GetPHOSPhotonWeightFormulaExpression() const { return fPHOSPhotonWeightFormulaExpression ; } 
118   TString   GetPHOSPi0WeightFormulaExpression()    const { return fPHOSPi0WeightFormulaExpression    ; } 
119   
120   //Weight setters
121   void SetEMCALPhotonWeight  (Float_t  w)      { fEMCALPhotonWeight   = w ; }
122   void SetEMCALPi0Weight     (Float_t  w)      { fEMCALPi0Weight      = w ; }
123   void SetEMCALElectronWeight(Float_t  w)      { fEMCALElectronWeight = w ; }
124   void SetEMCALChargeWeight  (Float_t  w)      { fEMCALChargeWeight   = w ; }
125   void SetEMCALNeutralWeight (Float_t  w)      { fEMCALNeutralWeight  = w ; }
126   void SetPHOSPhotonWeight   (Float_t  w)      { fPHOSPhotonWeight    = w ; }
127   void SetPHOSPi0Weight      (Float_t  w)      { fPHOSPi0Weight       = w ; }
128   void SetPHOSElectronWeight (Float_t  w)      { fPHOSElectronWeight  = w ; }
129   void SetPHOSChargeWeight   (Float_t  w)      { fPHOSChargeWeight    = w ; }
130   void SetPHOSNeutralWeight  (Float_t  w)      { fPHOSNeutralWeight   = w ; }
131   
132   void UsePHOSPIDWeightFormula   (Bool_t ok )           { fPHOSWeightFormula                 = ok ; } 
133   void SetPHOSPhotonWeightFormulaExpression(TString ph) { fPHOSPhotonWeightFormulaExpression = ph ; } 
134   void SetPHOSPi0WeightFormulaExpression   (TString pi) { fPHOSPi0WeightFormulaExpression    = pi ; }
135   
136   //PID bits setters and getters
137   
138   void    SetLambda0CutMax(Float_t lcut )      { fL0CutMax = lcut ; }
139   Float_t GetLambda0CutMax()             const { return fL0CutMax ; }   
140   
141   void    SetLambda0CutMin(Float_t lcut )      { fL0CutMin = lcut ; }
142   Float_t GetLambda0CutMin()             const { return fL0CutMin ; }   
143     
144   
145   void    SetTOFCut(Float_t tcut )             { fTOFCut = tcut   ; }
146   Float_t GetTOFCut()                    const { return fTOFCut   ; }   
147   
148   void    SetRCutPHOS(Float_t rcut )           { fRcutPHOS = rcut ; }
149   Float_t GetRCutPHOS()                  const { return fRcutPHOS ; }   
150   
151   void    SetDebug(Int_t deb)                  { fDebug=deb       ; }
152   Int_t   GetDebug()                     const { return fDebug    ; }   
153
154   //Bayesian recalculation (EMCAL)
155   void    SwitchOnBayesianRecalculation()      { fRecalculateBayesian = kTRUE ; }
156   void    SwitchOffBayesianRecalculation()     { fRecalculateBayesian = kFALSE; }
157   enum    eventType{kLow,kHigh};
158   void    SetLowParticleFlux()                 { fParticleFlux        = kLow  ; }
159   void    SetHighParticleFlux()                { fParticleFlux        = kHigh ; }
160
161   
162   // Track matching 
163   
164   Bool_t  IsTrackMatched(const AliVCluster * cluster, const AliCalorimeterUtils* cu) const ;  
165
166   //    Track matching histogrammes setters and getters
167   
168   virtual void SetHistoERangeAndNBins(Float_t min, Float_t max, Int_t n) {
169     fHistoNEBins = n ; fHistoEMax = max ; fHistoEMin = min ;
170   }
171   
172   virtual void SetHistoDEtaRangeAndNBins(Float_t min, Float_t max, Int_t n) {
173     fHistoNDEtaBins = n ; fHistoDEtaMax = max ; fHistoDEtaMin = min ;
174   }
175
176   virtual void SetHistoDPhiRangeAndNBins(Float_t min, Float_t max, Int_t n) {
177     fHistoNDPhiBins = n ; fHistoDPhiMax = max ; fHistoDPhiMin = min ;
178   }
179      
180   
181 private:
182   
183   Float_t   fEMCALPhotonWeight;   // Bayesian PID weight for photons in EMCAL 
184   Float_t   fEMCALPi0Weight;      // Bayesian PID weight for pi0 in EMCAL 
185   Float_t   fEMCALElectronWeight; // Bayesian PID weight for electrons in EMCAL 
186   Float_t   fEMCALChargeWeight;   // Bayesian PID weight for charged hadrons in EMCAL 
187   Float_t   fEMCALNeutralWeight;  // Bayesian PID weight for neutral hadrons in EMCAL 
188   Float_t   fPHOSPhotonWeight;    // Bayesian PID weight for photons in PHOS 
189   Float_t   fPHOSPi0Weight;       // Bayesian PID weight for pi0 in PHOS 
190   Float_t   fPHOSElectronWeight;  // Bayesian PID weight for electrons in PHOS 
191   Float_t   fPHOSChargeWeight;    // Bayesian PID weight for charged hadrons in PHOS 
192   Float_t   fPHOSNeutralWeight;   // Bayesian PID weight for neutral hadrons in PHOS 
193   
194   Bool_t    fPHOSWeightFormula ;                // Use parametrized weight threshold, function of energy
195   TFormula *fPHOSPhotonWeightFormula ;          // Formula for photon weight
196   TFormula *fPHOSPi0WeightFormula ;             // Formula for pi0 weight
197   TString   fPHOSPhotonWeightFormulaExpression; // Photon weight formula in string
198   TString   fPHOSPi0WeightFormulaExpression;    // Pi0 weight formula in string
199
200   Float_t   fL0CutMax;                          // Max Cut on shower shape lambda0, used in PID evaluation, used only for EMCAL now
201   Float_t   fL0CutMin;                          // Min Cut on shower shape lambda0, used in PID evaluation, used only for EMCAL now
202   Float_t   fTOFCut;                            // Cut on TOF, used in PID evaluation
203   Float_t   fRcutPHOS;                          // Track-Cluster distance cut for track matching in PHOS  
204
205   Int_t     fDebug;                             // Debug level
206         
207   //Bayesian
208   Bool_t    fRecalculateBayesian;     // Recalculate PID bayesian or use simple PID?
209   Int_t     fParticleFlux;            // Particle flux for setting PID parameters
210   AliEMCALPIDUtils * fEMCALPIDUtils;  // Pointer to EMCALPID to redo the PID Bayesian calculation
211         
212
213   // Track matching control histograms
214   Int_t     fHistoNEBins ;            // Number of bins in cluster E axis
215   Float_t   fHistoEMax ;              // Maximum value of cluster E histogram range
216   Float_t   fHistoEMin ;              // Minimum value of cluster E histogram range
217   Int_t     fHistoNDEtaBins ;         // Number of bins in dEta (cluster-track) axis
218   Float_t   fHistoDEtaMax ;           // Maximum value of dEta (cluster-track) histogram range
219   Float_t   fHistoDEtaMin ;           // Minimum value of dEta (cluster-track) histogram range          
220   Int_t     fHistoNDPhiBins ;         // Number of bins in dPhi axis
221   Float_t   fHistoDPhiMax ;           // Maximum value of dPhi (cluster-track) histogram range
222   Float_t   fHistoDPhiMin ;           // Minimum value of dPhi (cluster-track) histogram range
223   
224   TH2F    * fhTrackMatchedDEta     ;  //! Eta distance between track and cluster vs cluster E
225   TH2F    * fhTrackMatchedDPhi     ;  //! Phi distance between track and cluster vs cluster E
226   TH2F    * fhTrackMatchedDEtaDPhi ;  //! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV
227   
228   ClassDef(AliCaloPID,9)
229 } ;
230
231
232 #endif //ALICALOPID_H
233
234
235