3 // Implementation of values related to PID
4 // which can be used to monitor or check cuts
5 // based on tolerance ranges between detector signals
6 // and expected responses for particle species
11 #include "AliVTrack.h"
12 #include "AliESDtrack.h"
13 #include "AliAODTrack.h"
15 #include "AliPIDResponse.h"
16 #include "AliAnalysisManager.h"
17 #include "AliInputEventHandler.h"
20 #include "AliRsnValuePID.h"
22 ClassImp(AliRsnValuePID)
24 //__________________________________________________________________________________________________
25 AliRsnValuePID::AliRsnValuePID() :
27 fSpecies(AliPID::kUnknown),
36 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
38 SetTargetType(AliRsnTarget::kDaughter);
41 //__________________________________________________________________________________________________
42 AliRsnValuePID::AliRsnValuePID
43 (const char *name, EValuePID type, AliPID::EParticleType species, Int_t nbins, Double_t min, Double_t max) :
44 AliRsnValue(name, nbins, min, max),
50 // Constructor 1 (fixed bins with number of bins, or no bins)
54 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
56 SetTargetType(AliRsnTarget::kDaughter);
59 //__________________________________________________________________________________________________
60 AliRsnValuePID::AliRsnValuePID
61 (const char *name, EValuePID type, AliPID::EParticleType species, Double_t min, Double_t max, Double_t step) :
62 AliRsnValue(name, min, max, step),
68 // Constructor 2 (fixed bins with step)
72 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
74 SetTargetType(AliRsnTarget::kDaughter);
77 //__________________________________________________________________________________________________
78 AliRsnValuePID::AliRsnValuePID
79 (const char *name, EValuePID type, AliPID::EParticleType species, Int_t nbins, Double_t *array) :
80 AliRsnValue(name, nbins, array),
86 // Constructor 3 (variable bins)
90 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
92 SetTargetType(AliRsnTarget::kDaughter);
95 //__________________________________________________________________________________________________
96 AliRsnValuePID::AliRsnValuePID(const AliRsnValuePID ©) :
98 fSpecies(copy.fSpecies),
99 fValuePID(copy.fValuePID),
107 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
110 //__________________________________________________________________________________________________
111 AliRsnValuePID &AliRsnValuePID::operator=(const AliRsnValuePID ©)
114 // Assignment operator
117 AliRsnValue::operator=(copy);
120 fValuePID = copy.fValuePID;
121 fSpecies = copy.fSpecies;
125 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
130 //__________________________________________________________________________________________________
131 Bool_t AliRsnValuePID::Eval(TObject *object, Bool_t)
134 // Evaluation function
137 if (fValuePID != kITSsignal && fValuePID != kTPCsignal && !fPID) InitializePID();
139 AliError("PID not correctly initialized");
140 fComputedValue = 0.0;
143 if (!TargetOK(object)) return kFALSE;
145 AliVTrack *vtrack = fDaughter->GetRefVtrack();
149 fComputedValue = vtrack->GetITSsignal();
152 fComputedValue = fPID->NumberOfSigmasITS(vtrack, fSpecies);
155 fComputedValue = vtrack->GetTPCsignal();
158 fComputedValue = fPID->NumberOfSigmasTPC(vtrack, fSpecies);
161 if (!TOFComputations(vtrack)) return kFALSE;
162 fComputedValue = (vtrack->GetTOFsignal() - fPID->GetTOFResponse().GetStartTime(vtrack->P()));
165 if (!TOFComputations(vtrack)) return kFALSE;
166 fComputedValue = fPID->NumberOfSigmasTOF(vtrack, fSpecies);
169 if (!TOFComputations(vtrack)) return kFALSE;
170 fComputedValue = fTOFtimes[(Int_t)fSpecies];
173 if (!TOFComputations(vtrack)) return kFALSE;
174 fComputedValue = fTOFsigma[(Int_t)fSpecies];
177 AliError("Unrecognized option");
178 fComputedValue = 0.0;
183 //__________________________________________________________________________________________________
184 void AliRsnValuePID::Print(Option_t *) const
190 AliRsnValue::Print();
193 //__________________________________________________________________________________________________
194 void AliRsnValuePID::InitializePID()
197 // Initialize PID object
200 AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
201 AliInputEventHandler *inh = (AliInputEventHandler *)man->GetInputEventHandler();
203 fPID = inh->GetPIDResponse();
206 //__________________________________________________________________________________________________
207 Bool_t AliRsnValuePID::TOFComputations(AliVTrack *vtrack)
210 // Make TOF computations
213 if (vtrack->InheritsFrom(AliESDtrack::Class())) {
214 AliESDtrack *track = (AliESDtrack *)vtrack;
215 track->GetIntegratedTimes(fTOFtimes);
217 for (i = 0; i < AliPID::kSPECIES; i++) {
218 fTOFsigma[i] = fPID->GetTOFResponse().GetExpectedSigma(track->GetP(), fTOFtimes[i], AliPID::ParticleMass(i));
221 } else if (vtrack->InheritsFrom(AliAODTrack::Class())) {
222 AliAODTrack *track = (AliAODTrack *)vtrack;
223 AliAODPid *pidObj = track->GetDetPid();
224 if (!pidObj) return kFALSE;
225 pidObj->GetIntegratedTimes(fTOFtimes);
226 pidObj->GetTOFpidResolution(fTOFsigma);