]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliAODpidUtil.h
AliESDHeader: AliTriggerConfiguration and more trigger scalers added
[u/mrichter/AliRoot.git] / STEER / AliAODpidUtil.h
index bf4360836062b20e3cd2e9b9c1dd35ec57b73b3a..0ce178f7ce299c294359c254a92d9c53c128effb 100644 (file)
@@ -9,79 +9,52 @@
 //                    Combined PID class
 //                    for the AOD class
 //   Origin: Rosa Romita, GSI, r.romita@gsi.de 
+//   Modified: Jens Wiechula, Uni Tuebingen, jens.wiechula@cern.ch
 //-------------------------------------------------------
 #include <Rtypes.h>
 #include <TMatrixD.h>
 #include "AliAODTrack.h" // Needed for inline functions
 #include "AliAODPid.h" // Needed for inline functions
-#include "AliTPCPIDResponse.h"
-#include "AliITSPIDResponse.h"
-#include "AliTOFPIDResponse.h"
-#include "AliTRDPIDResponse.h"
 //#include "HMPID/AliHMPID.h"
 
+#include "AliPIDResponse.h"
+
 class AliAODEvent;
+class AliVParticle;
 
-class AliAODpidUtil {
+class AliAODpidUtil : public AliPIDResponse  {
 public:
-  AliAODpidUtil(): fRange(5.), fTPCResponse(), fITSResponse(), fTOFResponse(), fTRDResponse() {;}
+  //TODO: isMC???
+  AliAODpidUtil(Bool_t isMC = kFALSE): AliPIDResponse(isMC), fRange(5.) {;}
   virtual ~AliAODpidUtil() {;}
 
-
-  Int_t MakePID(AliAODTrack *track,Double_t *p) const;
-  void MakeTPCPID(AliAODTrack *track,Double_t *p) const;
-  void MakeITSPID(AliAODTrack *track,Double_t *p) const;
-  void MakeTOFPID(AliAODTrack *track,Double_t *p) const;
+  Int_t MakePID(const AliAODTrack *track,Double_t *p) const;
+  void MakeTPCPID(const AliAODTrack *track,Double_t *p) const;
+  void MakeITSPID(const AliAODTrack *track,Double_t *p) const;
+  void MakeTOFPID(const AliAODTrack *track,Double_t *p) const;
   //  void MakeHMPIDPID(AliESDtrack *track);
-  void MakeTRDPID(AliAODTrack *track,Double_t *p) const;
-
-  Float_t NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const;
-  Float_t NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const;
-  Float_t NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const;
-
-  AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
-  AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
-  AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
+  void MakeTRDPID(const AliAODTrack *track,Double_t *p) const;
 
+  virtual Float_t NumberOfSigmasTOF(const AliVParticle *vtrack, AliPID::EParticleType type) const;
+  
 private:
   Float_t           fRange;          // nSigma max in likelihood
-  AliTPCPIDResponse fTPCResponse;
-  AliITSPIDResponse fITSResponse;
-  AliTOFPIDResponse fTOFResponse;
-  AliTRDPIDResponse fTRDResponse;
-
-  ClassDef(AliAODpidUtil,1)  // PID calculation class
-};
-
-inline Float_t AliAODpidUtil::NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const {
   
-  Double_t mom = track->P();
-  AliAODPid *pidObj = track->GetDetPid();
-  if (pidObj)
-    mom = pidObj->GetTPCmomentum();
-  return fTPCResponse.GetNumberOfSigmas(mom,pidObj->GetTPCsignal(),0,type); 
-}
+  ClassDef(AliAODpidUtil,2)  // PID calculation class
+};
 
-inline Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const {
+inline Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliVParticle *vtrack, AliPID::EParticleType type) const {
+  AliAODTrack *track=(AliAODTrack*)vtrack;
   Double_t times[AliPID::kSPECIES];
+  Double_t sigmaTOFPid[AliPID::kSPECIES];
   AliAODPid *pidObj = track->GetDetPid();
+  if (!pidObj) return -999.;
   pidObj->GetIntegratedTimes(times);
-  return (pidObj->GetTOFsignal() - times[type])/fTOFResponse.GetExpectedSigma(track->P(),times[type],AliPID::ParticleMass(type));
+  pidObj->GetTOFpidResolution(sigmaTOFPid);
+  if (sigmaTOFPid[type]>0) return (pidObj->GetTOFsignal() - times[type])/sigmaTOFPid[type];
+  else return (pidObj->GetTOFsignal() - times[type])/fTOFResponse.GetExpectedSigma(track->P(),times[type],AliPID::ParticleMass(type));
 }
 
-inline Float_t AliAODpidUtil::NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const {
-  AliAODPid *pidObj = track->GetDetPid();
-  Float_t dEdx=pidObj->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(track->GetTPCNcls()>0) isSA=kFALSE;
-  return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);
-}
 #endif