]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/STEERBase/AliPIDResponse.h
The ReportTrips method now builds an object that can be viewed in mchview (when launc...
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliPIDResponse.h
CommitLineData
29bf19f2 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"
e96b9916 18#include "AliEMCALPIDResponse.h"
29bf19f2 19
b79db598 20
29bf19f2 21#include "AliVParticle.h"
22#include "AliVTrack.h"
23
24#include "TNamed.h"
25
4ec8e76d 26class TF1;
00a38d07 27class TObjArray;
28
29class AliVEvent;
30class AliTRDPIDResponseObject;
31class AliTOFPIDParams;
1c9d11be 32class AliOADBContainer;
29bf19f2 33
34class AliPIDResponse : public TNamed {
35public:
4ec8e76d 36 AliPIDResponse(Bool_t isMC=kFALSE);
37 virtual ~AliPIDResponse();
29bf19f2 38
00a38d07 39 enum EDetector {
40 kITS=0,
41 kTPC=1,
42 kTRD=2,
43 kTOF=3,
44 kHMPID=4,
45 kEMCAL=5,
46 kPHOS=6,
47 kNdetectors=7
48 };
49
fd21ec8d 50 enum EDetCode {
51 kDetITS = 0x1,
52 kDetTPC = 0x2,
53 kDetTRD = 0x4,
54 kDetTOF = 0x8,
55 kDetHMPID = 0x10,
56 kDetEMCAL = 0x20,
57 kDetPHOS = 0x40
58 };
59
29bf19f2 60 enum EStartTimeType_t {kFILL_T0,kTOF_T0, kT0_T0, kBest_T0};
fd21ec8d 61
62 enum ITSPIDmethod { kITSTruncMean, kITSLikelihood };
63
64 enum EDetPidStatus {
65 kDetNoSignal=0,
66 kDetPidOk=1,
67 kDetMismatch=2
68 };
1c9d11be 69
29bf19f2 70 AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
71 AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
72 AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
73 AliTRDPIDResponse &GetTRDResponse() {return fTRDResponse;}
e96b9916 74 AliEMCALPIDResponse &GetEMCALResponse() {return fEMCALResponse;}
1c9d11be 75
76 //buffered PID calculation
00a38d07 77 Float_t NumberOfSigmas(EDetector detCode, const AliVParticle *track, AliPID::EParticleType type) const;
78 Float_t NumberOfSigmas(EDetCode detCode, const AliVParticle *track, AliPID::EParticleType type) const;
29bf19f2 79
00a38d07 80 virtual Float_t NumberOfSigmasITS (const AliVParticle *track, AliPID::EParticleType type) const;
81 virtual Float_t NumberOfSigmasTPC (const AliVParticle *track, AliPID::EParticleType type) const;
644666df 82 virtual Float_t NumberOfSigmasTPC (const AliVParticle *track, AliPID::EParticleType type, AliTPCPIDResponse::ETPCdEdxSource dedxSource);
00a38d07 83 virtual Float_t NumberOfSigmasEMCAL(const AliVParticle *track, AliPID::EParticleType type, Double_t &eop, Double_t showershape[4]) const;
1c9d11be 84 virtual Float_t NumberOfSigmasTOF (const AliVParticle *track, AliPID::EParticleType type) const;
00a38d07 85 virtual Float_t NumberOfSigmasEMCAL(const AliVParticle *track, AliPID::EParticleType type) const;
86
1c9d11be 87 Bool_t IdentifiedAsElectronTRD(const AliVTrack *track, Double_t efficiencyLevel,Double_t centrality=-1,AliTRDPIDResponse::ETRDPIDMethod PIDmethod=AliTRDPIDResponse::kLQ1D) const;
29bf19f2 88
00a38d07 89 EDetPidStatus ComputePIDProbability (EDetector detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
90 EDetPidStatus ComputePIDProbability (EDetCode detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
fd21ec8d 91
1c9d11be 92 virtual EDetPidStatus ComputeITSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
93 virtual EDetPidStatus ComputeTPCProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
94 virtual EDetPidStatus ComputeTOFProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
95 virtual EDetPidStatus ComputeTRDProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[],AliTRDPIDResponse::ETRDPIDMethod PIDmethod=AliTRDPIDResponse::kLQ1D) const;
96 virtual EDetPidStatus ComputeEMCALProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
97 virtual EDetPidStatus ComputePHOSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
98 virtual EDetPidStatus ComputeHMPIDProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
fd21ec8d 99
fd21ec8d 100 void SetITSPIDmethod(ITSPIDmethod pmeth) { fITSPIDmethod = pmeth; }
ea235c90 101
4ec8e76d 102 void SetOADBPath(const char* path) {fOADBPath=path;}
80f28562 103 const char *GetOADBPath() const {return fOADBPath.Data();}
00a38d07 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);
ea235c90 109 void SetCurrentFile(const char* file) { fCurrentFile=file; }
4ec8e76d 110
00a38d07 111 // cache PID in the track
1c9d11be 112 void SetCachePID(Bool_t cache) { fCachePID=cache; }
113 Bool_t GetCachePID() const { return fCachePID; }
114 void FillTrackDetectorPID(const AliVTrack *track, EDetector detector) const;
00a38d07 115 void FillTrackDetectorPID();
116
e96b9916 117 AliVEvent * GetCurrentEvent() const {return fCurrentEvent;}
118
fd21ec8d 119 // User settings for the MC period and reco pass
120 void SetMCperiod(const char *mcPeriod) {fMCperiodUser=mcPeriod;}
121 void SetRecoPass(Int_t recoPass) {fRecoPassUser=recoPass;}
80f28562 122
123 // event info
124 Float_t GetCurrentCentrality() const {return fCurrCentrality;};
125
0b39f221 126 // TOF setting
127 void SetTOFtail(Float_t tail=1.1){if(tail > 0) fTOFtail=tail; else printf("TOF tail should be greater than 0 (nothing done)\n");};
5f8db5fe 128 void SetTOFResponse(AliVEvent *vevent,EStartTimeType_t option);
0b39f221 129
539a5a59 130 virtual Float_t GetTPCsignalTunedOnData(const AliVTrack *t) const {return t->GetTPCsignal();};
131 Bool_t IsTunedOnData() const {return fTuneMConData;};
132 void SetTunedOnData(Bool_t flag=kTRUE,Int_t recoPass=0){fTuneMConData = flag; if(recoPass>0) fRecoPassUser = recoPass;};
133
4ec8e76d 134 AliPIDResponse(const AliPIDResponse &other);
135 AliPIDResponse& operator=(const AliPIDResponse &other);
80f28562 136
29bf19f2 137
138protected:
139 AliITSPIDResponse fITSResponse; //PID response function of the ITS
140 AliTPCPIDResponse fTPCResponse; //PID response function of the TPC
141 AliTRDPIDResponse fTRDResponse; //PID response function of the TRD
142 AliTOFPIDResponse fTOFResponse; //PID response function of the TOF
e96b9916 143 AliEMCALPIDResponse fEMCALResponse; //PID response function of the EMCAL
4ec8e76d 144
fd21ec8d 145 Float_t fRange; // nSigma max in likelihood
146 ITSPIDmethod fITSPIDmethod; // 0 = trunc mean; 1 = likelihood
147
1c9d11be 148 //unbuffered PID calculation
149 virtual Float_t GetNumberOfSigmasTOF (const AliVParticle */*track*/, AliPID::EParticleType /*type*/) const {return 0;}
150 EDetPidStatus GetComputeTRDProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[],AliTRDPIDResponse::ETRDPIDMethod PIDmethod=AliTRDPIDResponse::kLQ1D) const;
151
4ec8e76d 152private:
153 Bool_t fIsMC; // If we run on MC data
1c9d11be 154 Bool_t fCachePID;
4ec8e76d 155
156 TString fOADBPath; // OADB path to use
00a38d07 157 TString fCustomTPCpidResponse; // Custom TPC Pid Response file for debugging purposes
4ec8e76d 158
159 TString fBeamType; //! beam type (PP) or (PBPB)
160 TString fLHCperiod; //! LHC period
161 TString fMCperiodTPC; //! corresponding MC period to use for the TPC splines
fd21ec8d 162 TString fMCperiodUser; // MC prodution requested by the user
ea235c90 163 TString fCurrentFile; //! name of currently processed file
4ec8e76d 164 Int_t fRecoPass; //! reconstruction pass
fd21ec8d 165 Int_t fRecoPassUser; // reconstruction pass explicitly set by the user
4ec8e76d 166 Int_t fRun; //! current run number
167 Int_t fOldRun; //! current run number
78cbd205 168 Float_t fResT0A; //! T0A resolution in current run
169 Float_t fResT0C; //! T0C resolution in current run
170 Float_t fResT0AC; //! T0A.and.T0C resolution in current run
fd21ec8d 171
4ec8e76d 172 TObjArray *fArrPidResponseMaster; //! TPC pid splines
173 TF1 *fResolutionCorrection; //! TPC resolution correction
644666df 174 AliOADBContainer* fOADBvoltageMaps; //! container with the voltage maps
1c9d11be 175
db0e2c5f 176 AliTRDPIDResponseObject *fTRDPIDResponseObject; //! TRD PID Response Object
ea235c90 177
0b39f221 178 Float_t fTOFtail; //! TOF tail effect used in TOF probability
b79db598 179 AliTOFPIDParams *fTOFPIDParams; //! TOF PID Params - period depending (OADB loaded)
e96b9916 180
b2138b40 181 TObjArray *fEMCALPIDParams; //! EMCAL PID Params
182
e96b9916 183 AliVEvent *fCurrentEvent; //! event currently being processed
80f28562 184
185 Float_t fCurrCentrality; //! current centrality
4ec8e76d 186
539a5a59 187 Bool_t fTuneMConData; // switch to force the MC to be similar to data (dE/dx)
188
4ec8e76d 189 void ExecNewRun();
190
191 //
192 //setup parametrisations
193 //
194
195 //ITS
196 void SetITSParametrisation();
197
198 //TPC
199 void SetTPCPidResponseMaster();
200 void SetTPCParametrisation();
201 Double_t GetTPCMultiplicityBin(const AliVEvent * const event);
202
ea235c90 203 //TRD
204 void SetTRDPidResponseMaster();
205 void InitializeTRDResponse();
bd58d4b9 206 void SetTRDSlices(UInt_t TRDslicesForPID[2],AliTRDPIDResponse::ETRDPIDMethod method) const;
ea235c90 207
4ec8e76d 208 //TOF
b79db598 209 void SetTOFPidResponseMaster();
210 void InitializeTOFResponse();
b2138b40 211
212 //EMCAL
213 void SetEMCALPidResponseMaster();
214 void InitializeEMCALResponse();
215
4ec8e76d 216 //
217 void SetRecoInfo();
1c9d11be 218
219 //unbuffered PID calculation
220 Float_t GetNumberOfSigmas(EDetector detCode, const AliVParticle *track, AliPID::EParticleType type) const;
221 Float_t GetNumberOfSigmasITS (const AliVParticle *track, AliPID::EParticleType type) const;
222 Float_t GetNumberOfSigmasTPC (const AliVParticle *track, AliPID::EParticleType type) const;
223 Float_t GetNumberOfSigmasEMCAL(const AliVParticle *track, AliPID::EParticleType type, Double_t &eop, Double_t showershape[4]) const;
224 Float_t GetNumberOfSigmasEMCAL(const AliVParticle *track, AliPID::EParticleType type) const;
225
226 EDetPidStatus GetComputePIDProbability (EDetector detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
227 EDetPidStatus GetComputeITSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
228 EDetPidStatus GetComputeTPCProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
229 EDetPidStatus GetComputeTOFProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
230 EDetPidStatus GetComputeEMCALProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
231 EDetPidStatus GetComputePHOSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
232 EDetPidStatus GetComputeHMPIDProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
29bf19f2 233
78cbd205 234 ClassDef(AliPIDResponse, 10); //PID response handling
29bf19f2 235};
236
29bf19f2 237#endif