]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliESDpid.h
Coverity
[u/mrichter/AliRoot.git] / STEER / AliESDpid.h
index 375bb24051bcb6ffcfef2ae226ca238d99b6b195..c8e9c4a21fe63159aff388488b465dc1672f5a42 100644 (file)
 //   Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch 
 //-------------------------------------------------------
 #include <Rtypes.h>
+#include "AliESDtrack.h" // Needed for inline functions
+#include "AliTPCPIDResponse.h"
+#include "AliITSPIDResponse.h"
+#include "AliTOFPIDResponse.h"
+#include "AliTRDPIDResponse.h"
+//#include "HMPID/AliHMPID.h"
+//#include "TRD/AliTRDpidESD.h"
 
 class AliESDEvent;
 
 class AliESDpid {
 public:
-  AliESDpid(){}
+  AliESDpid(): fRange(5.), fRangeTOFMismatch(5.), fITSPIDmethod(kITSTruncMean), fTPCResponse(), fITSResponse(), fTOFResponse(), fTRDResponse(){;}
   virtual ~AliESDpid() {}
-  static Int_t MakePID(AliESDEvent *event);
+  Int_t MakePID(AliESDEvent *event, Bool_t TPCOnly = kFALSE, Float_t timeZeroTOF=9999) const;
+  void MakeTPCPID(AliESDtrack *track) const;
+  void MakeITSPID(AliESDtrack *track) const;
+  void MakeTOFPID(AliESDtrack *track, Float_t /*timeZeroTOF*/) const;
+  Bool_t CheckTOFMatching(AliESDtrack *track) const;
+  //  void MakeHMPIDPID(AliESDtrack *track);
+  void MakeTRDPID(AliESDtrack *track) const;
+  void CombinePID(AliESDtrack *track) const;
+
+  enum ITSPIDmethod { kITSTruncMean, kITSLikelihood };
+  void SetITSPIDmethod(ITSPIDmethod pmeth) { fITSPIDmethod = pmeth; }
+
+  Float_t NumberOfSigmasTPC(const AliESDtrack *track, AliPID::EParticleType type) const;
+  Float_t NumberOfSigmasTOF(const AliESDtrack *track, AliPID::EParticleType type, const Float_t timeZeroTOF) const;
+  Float_t NumberOfSigmasITS(const AliESDtrack *track, AliPID::EParticleType type) const;
+
+  AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
+  AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
+  AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
+  AliTRDPIDResponse &GetTRDResponse() {return fTRDResponse;}
+
+  enum EStartTimeType_t {kFILL_T0,kTOF_T0, kT0_T0, kBest_T0};
+  void SetTOFResponse(AliESDEvent *event,EStartTimeType_t option);
+
+  void SetNMaxSigmaTOFTPCMismatch(Float_t range) {fRangeTOFMismatch=range;}
+  Float_t GetNMaxSigmaTOFTPCMismatch() const {return fRangeTOFMismatch;}
+
 private:
-  ClassDef(AliESDpid,2)   // TPC PID class
+  Float_t           fRange;          // nSigma max in likelihood
+  Float_t           fRangeTOFMismatch; // nSigma max for TOF matching with TPC
+  ITSPIDmethod      fITSPIDmethod;   // 0 = trunc mean; 1 = likelihood 
+  AliTPCPIDResponse fTPCResponse;
+  AliITSPIDResponse fITSResponse;
+  AliTOFPIDResponse fTOFResponse;
+  // AliHMPIDPIDResponse fHMPIDResponse;
+  AliTRDPIDResponse fTRDResponse;
+
+  ClassDef(AliESDpid,5)  // PID calculation class
 };
 
+inline Float_t AliESDpid::NumberOfSigmasTPC(const AliESDtrack *track, AliPID::EParticleType type) const {
+  Double_t mom = track->GetP();
+  const AliExternalTrackParam *in = track->GetInnerParam();
+  if (in)
+    mom = in->GetP();
+  return fTPCResponse.GetNumberOfSigmas(mom,track->GetTPCsignal(),track->GetTPCsignalN(),type); 
+}
+
+inline Float_t AliESDpid::NumberOfSigmasTOF(const AliESDtrack *track, AliPID::EParticleType type, const Float_t /*timeZeroTOF*/) const {
+  Double_t times[AliPID::kSPECIES];
+  track->GetIntegratedTimes(times);
+  return (track->GetTOFsignal() - fTOFResponse.GetStartTime(track->GetP()) - times[type])/fTOFResponse.GetExpectedSigma(track->GetP(),times[type],AliPID::ParticleMass(type));
+}
+
+inline Float_t AliESDpid::NumberOfSigmasITS(const AliESDtrack *track, AliPID::EParticleType type) const {
+  ULong_t trStatus=track->GetStatus();
+  Float_t dEdx=track->GetITSsignal();
+  UChar_t clumap=track->GetITSClusterMap();
+  Int_t nPointsForPid=0;
+  for(Int_t i=2; i<6; i++){
+    if(clumap&(1<<i)) ++nPointsForPid;
+  }
+  Float_t mom=track->P();
+  Bool_t isSA=kTRUE;
+  if(trStatus&AliESDtrack::kTPCin) isSA=kFALSE;
+  return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);
+}
 #endif