]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliAODpidUtil.h
Increasing the class version number.
[u/mrichter/AliRoot.git] / STEER / AliAODpidUtil.h
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                               */
5
6 /* $Id: AliAODpidUtil.h 38493 2010-01-26 16:33:03Z hristov $ */
7
8 //-------------------------------------------------------
9 //                    Combined PID class
10 //                    for the AOD class
11 //   Origin: Rosa Romita, GSI, r.romita@gsi.de 
12 //-------------------------------------------------------
13 #include <Rtypes.h>
14 #include <TMatrixD.h>
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"
22
23 class AliAODEvent;
24
25 class AliAODpidUtil {
26 public:
27
28   AliAODpidUtil(Bool_t isMC = kFALSE): fRange(5.), fTPCResponse(), fITSResponse(isMC), fTOFResponse(), fTRDResponse() {;}
29   virtual ~AliAODpidUtil() {;}
30
31
32   Int_t MakePID(AliAODTrack *track,Double_t *p) const;
33   void MakeTPCPID(AliAODTrack *track,Double_t *p) const;
34   void MakeITSPID(AliAODTrack *track,Double_t *p) const;
35   void MakeTOFPID(AliAODTrack *track,Double_t *p) const;
36   //  void MakeHMPIDPID(AliESDtrack *track);
37   void MakeTRDPID(AliAODTrack *track,Double_t *p) const;
38
39   Float_t NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const;
40   Float_t NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const;
41   Float_t NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const;
42
43   AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
44   AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
45   AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
46
47 private:
48   Float_t           fRange;          // nSigma max in likelihood
49   AliTPCPIDResponse fTPCResponse;
50   AliITSPIDResponse fITSResponse;
51   AliTOFPIDResponse fTOFResponse;
52   AliTRDPIDResponse fTRDResponse;
53   
54   ClassDef(AliAODpidUtil,1)  // PID calculation class
55 };
56
57 inline Float_t AliAODpidUtil::NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const {
58   
59   Double_t mom = track->P();
60   AliAODPid *pidObj = track->GetDetPid();
61   UShort_t nTPCClus=pidObj->GetTPCsignalN();
62   if (pidObj)
63     mom = pidObj->GetTPCmomentum();
64   return fTPCResponse.GetNumberOfSigmas(mom,pidObj->GetTPCsignal(),nTPCClus,type); 
65 }
66
67 inline Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const {
68   Double_t times[AliPID::kSPECIES];
69   Double_t sigmaTOFPid[AliPID::kSPECIES];
70   AliAODPid *pidObj = track->GetDetPid();
71   pidObj->GetIntegratedTimes(times);
72   pidObj->GetTOFpidResolution(sigmaTOFPid);
73   if (sigmaTOFPid[type]>0) return (pidObj->GetTOFsignal() - times[type])/sigmaTOFPid[type];
74   else return (pidObj->GetTOFsignal() - times[type])/fTOFResponse.GetExpectedSigma(track->P(),times[type],AliPID::ParticleMass(type));
75 }
76
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;
84   }
85   Float_t mom=track->P();
86   Bool_t isSA=kTRUE;  
87   if(track->GetTPCNcls()>0) isSA=kFALSE;
88   return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);
89 }
90 #endif
91
92