4 #include "AliESDtrack.h"
5 #include "AliAODTrack.h"
7 #include "AliPIDResponse.h"
8 #include "AliAnalysisManager.h"
9 #include "AliInputEventHandler.h"
12 #include "AliRsnValuePID.h"
14 ClassImp(AliRsnValuePID)
16 //__________________________________________________________________________________________________
17 AliRsnValuePID::AliRsnValuePID() :
19 fSpecies(AliPID::kUnknown),
28 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
30 SetTargetType(AliRsnTarget::kDaughter);
33 //__________________________________________________________________________________________________
34 AliRsnValuePID::AliRsnValuePID
35 (const char *name, EValuePID type, AliPID::EParticleType species, Int_t nbins, Double_t min, Double_t max) :
36 AliRsnValue(name, nbins, min, max),
42 // Constructor 1 (fixed bins with number of bins, or no bins)
46 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
48 SetTargetType(AliRsnTarget::kDaughter);
51 //__________________________________________________________________________________________________
52 AliRsnValuePID::AliRsnValuePID
53 (const char *name, EValuePID type, AliPID::EParticleType species, Double_t min, Double_t max, Double_t step) :
54 AliRsnValue(name, min, max, step),
60 // Constructor 2 (fixed bins with step)
64 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
66 SetTargetType(AliRsnTarget::kDaughter);
69 //__________________________________________________________________________________________________
70 AliRsnValuePID::AliRsnValuePID
71 (const char *name, EValuePID type, AliPID::EParticleType species, Int_t nbins, Double_t *array) :
72 AliRsnValue(name, nbins, array),
78 // Constructor 3 (variable bins)
82 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
84 SetTargetType(AliRsnTarget::kDaughter);
87 //__________________________________________________________________________________________________
88 AliRsnValuePID::AliRsnValuePID(const AliRsnValuePID& copy) :
90 fSpecies(copy.fSpecies),
91 fValuePID(copy.fValuePID),
99 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
102 //__________________________________________________________________________________________________
103 AliRsnValuePID& AliRsnValuePID::operator=(const AliRsnValuePID& copy)
106 // Assignment operator
109 AliRsnValue::operator=(copy);
111 fValuePID = copy.fValuePID;
112 fSpecies = copy.fSpecies;
116 for (i = 0; i < AliPID::kSPECIES; i++) fTOFtimes[i] = fTOFsigma[i] = 0.0;
121 //__________________________________________________________________________________________________
122 Bool_t AliRsnValuePID::Eval(TObject *object, Bool_t)
125 // Evaluation function
128 if (fValuePID != kITSsignal && fValuePID != kTPCsignal && !fPID) InitializePID();
130 AliError("PID not correctly initialized");
131 fComputedValue = 0.0;
134 if (!TargetOK(object)) return kFALSE;
136 AliVTrack *vtrack = fDaughter->GetRefVtrack();
140 fComputedValue = vtrack->GetITSsignal();
143 fComputedValue = fPID->NumberOfSigmasITS(vtrack, fSpecies);
146 fComputedValue = vtrack->GetTPCsignal();
149 fComputedValue = fPID->NumberOfSigmasTPC(vtrack, fSpecies);
152 if (!TOFComputations(vtrack)) return kFALSE;
153 fComputedValue = (vtrack->GetTOFsignal() - fPID->GetTOFResponse().GetStartTime(vtrack->P()));
156 if (!TOFComputations(vtrack)) return kFALSE;
157 fComputedValue = fPID->NumberOfSigmasTOF(vtrack, fSpecies);
160 if (!TOFComputations(vtrack)) return kFALSE;
161 fComputedValue = fTOFtimes[(Int_t)fSpecies];
164 if (!TOFComputations(vtrack)) return kFALSE;
165 fComputedValue = fTOFsigma[(Int_t)fSpecies];
168 AliError("Unrecognized option");
169 fComputedValue = 0.0;
174 //__________________________________________________________________________________________________
175 void AliRsnValuePID::Print(Option_t *) const
181 AliRsnValue::Print();
184 //__________________________________________________________________________________________________
185 void AliRsnValuePID::InitializePID()
188 // Initialize PID object
191 AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
192 AliInputEventHandler *inh = (AliInputEventHandler*)man->GetInputEventHandler();
194 fPID = inh->GetPIDResponse();
197 //__________________________________________________________________________________________________
198 Bool_t AliRsnValuePID::TOFComputations(AliVTrack *vtrack)
201 // Make TOF computations
204 if (vtrack->InheritsFrom(AliESDtrack::Class())) {
205 AliESDtrack *track = (AliESDtrack*)vtrack;
206 track->GetIntegratedTimes(fTOFtimes);
208 for (i = 0; i < AliPID::kSPECIES; i++) {
209 fTOFsigma[i] = fPID->GetTOFResponse().GetExpectedSigma(track->GetP(), fTOFtimes[i], AliPID::ParticleMass(i));
212 } else if (vtrack->InheritsFrom(AliAODTrack::Class())) {
213 AliAODTrack *track = (AliAODTrack*)vtrack;
214 AliAODPid *pidObj = track->GetDetPid();
215 if (!pidObj) return kFALSE;
216 pidObj->GetIntegratedTimes(fTOFtimes);
217 pidObj->GetTOFpidResolution(fTOFsigma);