307d5b497eb95c0eb39ea848f8619df326d3b487
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliPIDResponse.h
1 #ifndef ALIPIDRESPONSE_H
2 #define ALIPIDRESPONSE_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 //---------------------------------------------------------------//
7 //        Base class for handling the pid response               //
8 //        functions of all detectors                             //
9 //        and give access to the nsigmas                         //
10 //                                                               //
11 //   Origin: Jens Wiechula, Uni Tuebingen, jens.wiechula@cern.ch //
12 //---------------------------------------------------------------//
13
14 #include "AliITSPIDResponse.h"
15 #include "AliTPCPIDResponse.h"
16 #include "AliTRDPIDResponse.h"
17 #include "AliTOFPIDResponse.h"
18 #include "AliEMCALPIDResponse.h"
19
20
21 #include "AliVParticle.h"
22 #include "AliVTrack.h"
23
24 #include "TNamed.h"
25
26 class TF1;
27 class TObjArray;
28
29 class AliVEvent;
30 class AliTRDPIDResponseObject;
31 class AliTOFPIDParams;
32
33 class AliPIDResponse : public TNamed {
34 public:
35   AliPIDResponse(Bool_t isMC=kFALSE);
36   virtual ~AliPIDResponse();
37
38   enum EDetector {
39     kITS=0,
40     kTPC=1,
41     kTRD=2,
42     kTOF=3,
43     kHMPID=4,
44     kEMCAL=5,
45     kPHOS=6,
46     kNdetectors=7
47   };
48   
49   enum EDetCode {
50     kDetITS = 0x1,
51     kDetTPC = 0x2,
52     kDetTRD = 0x4,
53     kDetTOF = 0x8,
54     kDetHMPID = 0x10,
55     kDetEMCAL = 0x20,
56     kDetPHOS = 0x40
57   };
58
59   enum EStartTimeType_t {kFILL_T0,kTOF_T0, kT0_T0, kBest_T0};
60
61   enum ITSPIDmethod { kITSTruncMean, kITSLikelihood };
62
63   enum EDetPidStatus {
64     kDetNoSignal=0,
65     kDetPidOk=1,
66     kDetMismatch=2
67   };
68   
69   AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
70   AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
71   AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
72   AliTRDPIDResponse &GetTRDResponse() {return fTRDResponse;}
73   AliEMCALPIDResponse &GetEMCALResponse() {return fEMCALResponse;}
74
75   Float_t NumberOfSigmas(EDetector detCode, const AliVParticle *track, AliPID::EParticleType type) const;
76   Float_t NumberOfSigmas(EDetCode  detCode, const AliVParticle *track, AliPID::EParticleType type) const;
77   
78   virtual Float_t NumberOfSigmasITS  (const AliVParticle *track, AliPID::EParticleType type) const;
79   virtual Float_t NumberOfSigmasTPC  (const AliVParticle *track, AliPID::EParticleType type) const;
80   virtual Float_t NumberOfSigmasEMCAL(const AliVParticle *track, AliPID::EParticleType type, Double_t &eop, Double_t showershape[4]) const;
81   virtual Float_t NumberOfSigmasTOF  (const AliVParticle *track, AliPID::EParticleType type) const = 0;
82   virtual Float_t NumberOfSigmasEMCAL(const AliVParticle *track, AliPID::EParticleType type) const;
83
84   virtual Bool_t IdentifiedAsElectronTRD(const AliVTrack *track, Double_t efficiencyLevel) const;
85
86   EDetPidStatus ComputePIDProbability  (EDetector detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
87   EDetPidStatus ComputePIDProbability  (EDetCode  detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
88   
89   EDetPidStatus ComputeITSProbability  (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
90   EDetPidStatus ComputeTPCProbability  (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
91   EDetPidStatus ComputeTOFProbability  (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
92   EDetPidStatus ComputeTRDProbability  (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
93   EDetPidStatus ComputeEMCALProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
94   EDetPidStatus ComputePHOSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
95   EDetPidStatus ComputeHMPIDProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
96
97   void SetTRDPIDmethod(AliTRDPIDResponse::ETRDPIDMethod method=AliTRDPIDResponse::kLQ1D);
98   
99   void SetITSPIDmethod(ITSPIDmethod pmeth) { fITSPIDmethod = pmeth; }
100   void SetTRDslicesForPID(UInt_t slice1, UInt_t slice2) {fTRDslicesForPID[0]=slice1;fTRDslicesForPID[1]=slice2;}
101   
102   void SetOADBPath(const char* path) {fOADBPath=path;}
103   const char *GetOADBPath() const {return fOADBPath.Data();}
104
105   void SetCustomTPCpidResponse(const char* tpcpid) { fCustomTPCpidResponse = tpcpid; }
106   const char* GetCustomTPCpidResponse() const { return fCustomTPCpidResponse.Data(); }
107   
108   void InitialiseEvent(AliVEvent *event, Int_t pass, Int_t run=-1);
109   void SetCurrentFile(const char* file) { fCurrentFile=file; }
110
111   // cache PID in the track
112   void FillTrackDetectorPID();
113
114   AliVEvent * GetCurrentEvent() const {return fCurrentEvent;}
115
116   // User settings for the MC period and reco pass
117   void SetMCperiod(const char *mcPeriod) {fMCperiodUser=mcPeriod;}
118   void SetRecoPass(Int_t recoPass)       {fRecoPassUser=recoPass;}
119
120   // event info
121   Float_t GetCurrentCentrality() const {return fCurrCentrality;};
122
123   // TOF setting
124   void SetTOFtail(Float_t tail=1.1){if(tail > 0) fTOFtail=tail; else printf("TOF tail should be greater than 0 (nothing done)\n");};
125   void SetTOFResponse(AliVEvent *vevent,EStartTimeType_t option);
126
127   virtual Float_t GetTPCsignalTunedOnData(const AliVTrack *t) const {return t->GetTPCsignal();};
128   Bool_t IsTunedOnData() const {return fTuneMConData;};
129   void SetTunedOnData(Bool_t flag=kTRUE,Int_t recoPass=0){fTuneMConData = flag; if(recoPass>0) fRecoPassUser = recoPass;};
130
131   AliPIDResponse(const AliPIDResponse &other);
132   AliPIDResponse& operator=(const AliPIDResponse &other);
133
134   
135 protected:
136   AliITSPIDResponse fITSResponse;    //PID response function of the ITS
137   AliTPCPIDResponse fTPCResponse;    //PID response function of the TPC
138   AliTRDPIDResponse fTRDResponse;    //PID response function of the TRD
139   AliTOFPIDResponse fTOFResponse;    //PID response function of the TOF
140   AliEMCALPIDResponse fEMCALResponse;  //PID response function of the EMCAL
141
142   Float_t           fRange;          // nSigma max in likelihood
143   ITSPIDmethod      fITSPIDmethod;   // 0 = trunc mean; 1 = likelihood
144
145 private:
146   Bool_t fIsMC;                        //  If we run on MC data
147
148   TString fOADBPath;                   // OADB path to use
149   TString fCustomTPCpidResponse;       // Custom TPC Pid Response file for debugging purposes
150   
151   TString fBeamType;                   //! beam type (PP) or (PBPB)
152   TString fLHCperiod;                  //! LHC period
153   TString fMCperiodTPC;                //! corresponding MC period to use for the TPC splines
154   TString fMCperiodUser;               //  MC prodution requested by the user
155   TString fCurrentFile;                //! name of currently processed file
156   Int_t   fRecoPass;                   //! reconstruction pass
157   Int_t   fRecoPassUser;               //  reconstruction pass explicitly set by the user
158   Int_t   fRun;                        //! current run number
159   Int_t   fOldRun;                     //! current run number
160   
161   TObjArray *fArrPidResponseMaster;    //!  TPC pid splines
162   TF1       *fResolutionCorrection;    //! TPC resolution correction
163
164   AliTRDPIDResponseObject *fTRDPIDResponseObject; //! TRD PID Response Object
165   UInt_t fTRDslicesForPID[2];           //! TRD PID slices
166
167   Float_t fTOFtail;                    //! TOF tail effect used in TOF probability
168   AliTOFPIDParams *fTOFPIDParams;      //! TOF PID Params - period depending (OADB loaded)
169
170   TObjArray *fEMCALPIDParams;             //! EMCAL PID Params
171
172   AliVEvent *fCurrentEvent;            //! event currently being processed
173
174   Float_t fCurrCentrality;             //! current centrality
175   
176   Bool_t fTuneMConData;                // switch to force the MC to be similar to data (dE/dx)
177
178   void ExecNewRun();
179   
180   //
181   //setup parametrisations
182   //
183
184   //ITS
185   void SetITSParametrisation();
186   
187   //TPC
188   void SetTPCPidResponseMaster();
189   void SetTPCParametrisation();
190   Double_t GetTPCMultiplicityBin(const AliVEvent * const event);
191
192   //TRD
193   void SetTRDPidResponseMaster();
194   void InitializeTRDResponse();
195
196   //TOF
197   void SetTOFPidResponseMaster();
198   void InitializeTOFResponse();
199
200   //EMCAL
201   void SetEMCALPidResponseMaster();
202   void InitializeEMCALResponse();
203
204   //
205   void SetRecoInfo();
206   
207   ClassDef(AliPIDResponse, 9);  //PID response handling
208 };
209
210 #endif