]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliESDpid.h
Put 0.1 as minimal value of the gas gain (Raphaelle)
[u/mrichter/AliRoot.git] / STEER / AliESDpid.h
1 #ifndef ALIESDPID_H
2 #define ALIESDPID_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //-------------------------------------------------------
9 //                    Combined PID class
10 //           for the Event Summary Data class
11 //   Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch 
12 //-------------------------------------------------------
13 #include <Rtypes.h>
14 #include "AliESDtrack.h" // Needed for inline functions
15 #include "AliTPCPIDResponse.h"
16 #include "AliITSPIDResponse.h"
17 #include "AliTOFPIDResponse.h"
18 #include "AliTRDPIDResponse.h"
19 //#include "HMPID/AliHMPID.h"
20 //#include "TRD/AliTRDpidESD.h"
21
22 class AliESDEvent;
23
24 class AliESDpid {
25 public:
26   AliESDpid(): fRange(5.), fRangeTOFMismatch(5.), fITSPIDmethod(kITSTruncMean), fTPCResponse(), fITSResponse(), fTOFResponse(), fTRDResponse(){;}
27   virtual ~AliESDpid() {}
28   Int_t MakePID(AliESDEvent *event, Bool_t TPCOnly = kFALSE, Float_t timeZeroTOF=9999) const;
29   void MakeTPCPID(AliESDtrack *track) const;
30   void MakeITSPID(AliESDtrack *track) const;
31   void MakeTOFPID(AliESDtrack *track, Float_t /*timeZeroTOF*/) const;
32   Bool_t CheckTOFMatching(AliESDtrack *track) const;
33   //  void MakeHMPIDPID(AliESDtrack *track);
34   void MakeTRDPID(AliESDtrack *track) const;
35   void CombinePID(AliESDtrack *track) const;
36
37   enum ITSPIDmethod { kITSTruncMean, kITSLikelihood };
38   void SetITSPIDmethod(ITSPIDmethod pmeth) { fITSPIDmethod = pmeth; }
39
40   Float_t NumberOfSigmasTPC(const AliESDtrack *track, AliPID::EParticleType type) const;
41   Float_t NumberOfSigmasTOF(const AliESDtrack *track, AliPID::EParticleType type, const Float_t timeZeroTOF) const;
42   Float_t NumberOfSigmasITS(const AliESDtrack *track, AliPID::EParticleType type) const;
43
44   AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
45   AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
46   AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
47   AliTRDPIDResponse &GetTRDResponse() {return fTRDResponse;}
48
49   enum EStartTimeType_t {kFILL_T0,kTOF_T0, kT0_T0, kBest_T0};
50   void SetTOFResponse(AliESDEvent *event,EStartTimeType_t option);
51
52   void SetNMaxSigmaTOFTPCMismatch(Float_t range) {fRangeTOFMismatch=range;}
53   Float_t GetNMaxSigmaTOFTPCMismatch() const {return fRangeTOFMismatch;}
54
55 private:
56   Float_t           fRange;          // nSigma max in likelihood
57   Float_t           fRangeTOFMismatch; // nSigma max for TOF matching with TPC
58   ITSPIDmethod      fITSPIDmethod;   // 0 = trunc mean; 1 = likelihood 
59   AliTPCPIDResponse fTPCResponse;
60   AliITSPIDResponse fITSResponse;
61   AliTOFPIDResponse fTOFResponse;
62   // AliHMPIDPIDResponse fHMPIDResponse;
63   AliTRDPIDResponse fTRDResponse;
64
65   ClassDef(AliESDpid,5)  // PID calculation class
66 };
67
68 inline Float_t AliESDpid::NumberOfSigmasTPC(const AliESDtrack *track, AliPID::EParticleType type) const {
69   Double_t mom = track->GetP();
70   const AliExternalTrackParam *in = track->GetInnerParam();
71   if (in)
72     mom = in->GetP();
73   return fTPCResponse.GetNumberOfSigmas(mom,track->GetTPCsignal(),track->GetTPCsignalN(),type); 
74 }
75
76 inline Float_t AliESDpid::NumberOfSigmasTOF(const AliESDtrack *track, AliPID::EParticleType type, const Float_t /*timeZeroTOF*/) const {
77   Double_t times[AliPID::kSPECIES];
78   track->GetIntegratedTimes(times);
79   return (track->GetTOFsignal() - fTOFResponse.GetStartTime(track->GetP()) - times[type])/fTOFResponse.GetExpectedSigma(track->GetP(),times[type],AliPID::ParticleMass(type));
80 }
81
82 inline Float_t AliESDpid::NumberOfSigmasITS(const AliESDtrack *track, AliPID::EParticleType type) const {
83   ULong_t trStatus=track->GetStatus();
84   Float_t dEdx=track->GetITSsignal();
85   UChar_t clumap=track->GetITSClusterMap();
86   Int_t nPointsForPid=0;
87   for(Int_t i=2; i<6; i++){
88     if(clumap&(1<<i)) ++nPointsForPid;
89   }
90   Float_t mom=track->P();
91   Bool_t isSA=kTRUE;
92   if(trStatus&AliESDtrack::kTPCin) isSA=kFALSE;
93   return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);
94 }
95 #endif
96
97