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 // Modified: Jens Wiechula, Uni Tuebingen, jens.wiechula@cern.ch
13 // Modified: Pietro Antonioli, INFN BO, pietro.antonioli@bo.infn.it
14 //-------------------------------------------------------
18 #include "AliAODEvent.h" // Needed for inline functions
19 #include "AliAODTrack.h" // Needed for inline functions
20 #include "AliAODPid.h" // Needed for inline functions
21 #include "AliTOFHeader.h" //Needed for inline functions
22 //#include "HMPID/AliHMPID.h"
24 #include "AliPIDResponse.h"
29 class AliAODpidUtil : public AliPIDResponse {
32 AliAODpidUtil(Bool_t isMC = kFALSE): AliPIDResponse(isMC) {;}
33 virtual ~AliAODpidUtil() {;}
35 Int_t MakePID(const AliAODTrack *track,Double_t *p) const;
36 void MakeTPCPID(const AliAODTrack *track,Double_t *p) const;
37 void MakeITSPID(const AliAODTrack *track,Double_t *p) const;
38 void MakeTOFPID(const AliAODTrack *track,Double_t *p) const;
39 // void MakeHMPIDPID(AliESDtrack *track);
40 void MakeTRDPID(const AliAODTrack *track,Double_t *p) const;
42 virtual Float_t NumberOfSigmasTOF(const AliVParticle *vtrack, AliPID::EParticleType type) const;
44 Float_t GetTPCsignalTunedOnData(const AliVTrack *t) const;
48 ClassDef(AliAODpidUtil,3) // PID calculation class
51 inline Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliVParticle *vtrack, AliPID::EParticleType type) const {
52 AliAODTrack *track=(AliAODTrack*)vtrack;
55 AliAODPid *pidObj = track->GetDetPid();
56 if (!pidObj) return -999.;
57 Double_t tofTime=pidObj->GetTOFsignal();
58 Double_t expTime=fTOFResponse.GetExpectedSignal((AliVTrack*)vtrack,type);
59 Double_t sigmaTOFPid[AliPID::kSPECIES];
60 pidObj->GetTOFpidResolution(sigmaTOFPid);
61 AliAODEvent *event=(AliAODEvent*)track->GetAODEvent();
62 if (event) { // protection if the user didn't call GetTrack, which sets the internal pointer
63 AliTOFHeader* tofH=(AliTOFHeader*)event->GetTOFHeader();
64 if (tofH && (TMath::Abs(sigmaTOFPid[0]) <= 1.E-16) ) { // new AOD
65 sigTOF=fTOFResponse.GetExpectedSigma(track->P(),expTime,AliPID::ParticleMassZ(type)); //fTOFResponse is set in InitialiseEvent
66 tofTime -= fTOFResponse.GetStartTime(vtrack->P());
70 AliError("pointer to AliAODEvent not found, please call GetTrack to set it");
73 if (oldAod) { // old AOD
74 if (type <= AliPID::kProton) {
75 sigTOF=sigmaTOFPid[type];
76 } else return -998.; // light nuclei cannot be supported on old AOD because we don't have timeZero resolution
78 if (sigTOF>0) return (tofTime - expTime)/sigTOF;