1 #ifndef ALIAODPIDUTIL_H
2 #define ALIAODPIDUTIL_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 /* $Id: AliAODpidUtil.h 38493 2010-01-26 16:33:03Z hristov $ */
8 //-------------------------------------------------------
11 // Origin: Rosa Romita, GSI, r.romita@gsi.de
12 //-------------------------------------------------------
15 #include "AliAODTrack.h" // Needed for inline functions
16 #include "AliAODPid.h" // Needed for inline functions
17 #include "AliTPCPIDResponse.h"
18 #include "AliITSPIDResponse.h"
19 #include "AliTOFPIDResponse.h"
20 #include "AliTRDPIDResponse.h"
21 //#include "HMPID/AliHMPID.h"
27 AliAODpidUtil(Bool_t isMC = kFALSE): fRange(5.), fTPCResponse(), fITSResponse(isMC), fTOFResponse(), fTRDResponse(), fIsMC(isMC) {;}
28 virtual ~AliAODpidUtil() {;}
31 Int_t MakePID(AliAODTrack *track,Double_t *p) const;
32 void MakeTPCPID(AliAODTrack *track,Double_t *p) const;
33 void MakeITSPID(AliAODTrack *track,Double_t *p) const;
34 void MakeTOFPID(AliAODTrack *track,Double_t *p) const;
35 // void MakeHMPIDPID(AliESDtrack *track);
36 void MakeTRDPID(AliAODTrack *track,Double_t *p) const;
38 Float_t NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const;
39 Float_t NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const;
40 Float_t NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const;
42 AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
43 AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
44 AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
46 Bool_t IsMC() {return fIsMC;}
50 Float_t fRange; // nSigma max in likelihood
51 AliTPCPIDResponse fTPCResponse;
52 AliITSPIDResponse fITSResponse;
53 AliTOFPIDResponse fTOFResponse;
54 AliTRDPIDResponse fTRDResponse;
57 ClassDef(AliAODpidUtil,1) // PID calculation class
60 inline Float_t AliAODpidUtil::NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const {
62 UShort_t nTPCClus=track->GetTPCNcls();
63 Double_t mom = track->P();
64 AliAODPid *pidObj = track->GetDetPid();
66 mom = pidObj->GetTPCmomentum();
67 return fTPCResponse.GetNumberOfSigmas(mom,pidObj->GetTPCsignal(),nTPCClus,type);
70 inline Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const {
71 Double_t times[AliPID::kSPECIES];
72 AliAODPid *pidObj = track->GetDetPid();
73 pidObj->GetIntegratedTimes(times);
74 return (pidObj->GetTOFsignal() - times[type])/fTOFResponse.GetExpectedSigma(track->P(),times[type],AliPID::ParticleMass(type));
77 inline Float_t AliAODpidUtil::NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const {
78 AliAODPid *pidObj = track->GetDetPid();
79 Float_t dEdx=pidObj->GetITSsignal();
80 UChar_t clumap=track->GetITSClusterMap();
81 Int_t nPointsForPid=0;
82 for(Int_t i=2; i<6; i++){
83 if(clumap&(1<<i)) ++nPointsForPid;
85 Float_t mom=track->P();
87 if(track->GetTPCNcls()>0) isSA=kFALSE;
88 return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);