]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliAODpidUtil.cxx
Updated TOF reconstruction parameters: added a flag to select the event_time to be...
[u/mrichter/AliRoot.git] / STEER / AliAODpidUtil.cxx
index 8e8b837b404190e86ddadb52f904de293a0024f3..56cade7b1a767b25486e9299e6a69197e00f061b 100644 (file)
@@ -65,7 +65,7 @@ ClassImp(AliAODpidUtil)
   return 0;
 }
 //_________________________________________________________________________
-void AliAODpidUtil::MakeTPCPID(AliAODTrack *track,Double_t *p) const
+void AliAODpidUtil::MakeTPCPID(const AliAODTrack *track,Double_t *p) const
 {
   //
   //  TPC pid using bethe-bloch and gaussian response
@@ -73,12 +73,16 @@ void AliAODpidUtil::MakeTPCPID(AliAODTrack *track,Double_t *p) const
 
   if ((track->GetStatus()&AliESDtrack::kTPCin )==0) return;
 
-  Double_t mom = track->P();
   AliAODPid *pidObj = track->GetDetPid();
-  if (pidObj) mom = pidObj->GetTPCmomentum();
-  UShort_t nTPCClus=pidObj->GetTPCsignalN();
-   
-  Double_t dedx=pidObj->GetTPCsignal(); 
+  Double_t mom      = track->P();
+  Double_t dedx     = 0.;  
+  UShort_t nTPCClus = 0;
+  if (pidObj) {
+      nTPCClus = pidObj->GetTPCsignalN();
+      dedx     = pidObj->GetTPCsignal();
+      mom      = pidObj->GetTPCmomentum();
+  }
+  
   Bool_t mismatch=kTRUE;
 
   for (Int_t j=0; j<AliPID::kSPECIES; j++) {
@@ -95,13 +99,13 @@ void AliAODpidUtil::MakeTPCPID(AliAODTrack *track,Double_t *p) const
   }
 
   if (mismatch)
-    for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1/AliPID::kSPECIES;
+    for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1./AliPID::kSPECIES;
 
 
   return;
 }
 //_________________________________________________________________________
-void AliAODpidUtil::MakeITSPID(AliAODTrack *track,Double_t *p) const
+void AliAODpidUtil::MakeITSPID(const AliAODTrack *track,Double_t *p) const
 {
   //
   // ITS PID
@@ -123,7 +127,11 @@ void AliAODpidUtil::MakeITSPID(AliAODTrack *track,Double_t *p) const
   Double_t mom=track->P();  
   AliAODPid *pidObj = track->GetDetPid();
 
-  Double_t dedx = pidObj->GetITSsignal();
+  Double_t dedx = 0.;
+  if (pidObj) {
+      dedx = pidObj->GetITSsignal();
+  }
+  
   Bool_t mismatch = kTRUE;
   Bool_t isSA = kTRUE;
   if(track->GetStatus() & AliESDtrack::kTPCin){
@@ -153,7 +161,7 @@ void AliAODpidUtil::MakeITSPID(AliAODTrack *track,Double_t *p) const
 
 }
 //_________________________________________________________________________
-void AliAODpidUtil::MakeTOFPID(AliAODTrack *track, Double_t *p) const
+void AliAODpidUtil::MakeTOFPID(const AliAODTrack *track, Double_t *p) const
 {
   //
   //   TOF PID using gaussian response
@@ -208,12 +216,12 @@ void AliAODpidUtil::MakeTOFPID(AliAODTrack *track, Double_t *p) const
   }
 
   if (mismatch)
-    for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1/AliPID::kSPECIES;
+    for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1./AliPID::kSPECIES;
 
   return;
 }
 //_________________________________________________________________________
-void AliAODpidUtil::MakeTRDPID(AliAODTrack *track,Double_t *p) const
+void AliAODpidUtil::MakeTRDPID(const AliAODTrack *track,Double_t *p) const
 {
   
   // Method to recalculate the TRD PID probabilities
@@ -232,3 +240,65 @@ void AliAODpidUtil::MakeTRDPID(AliAODTrack *track,Double_t *p) const
   fTRDResponse.GetResponse(pidObj->GetTRDnSlices(),dedx,mom,p,norm);
   return;
 }
+
+//_________________________________________________________________________
+Float_t AliAODpidUtil::NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const {
+  
+  Double_t mom = 0.0;
+  AliAODPid *pidObj = 0x0;
+  if (track) {
+    mom = track->P();
+    pidObj = track->GetDetPid();
+  }
+  UShort_t nTPCClus=0;
+  Double_t tpcSignal=0.0;
+  if (pidObj) {
+    nTPCClus=pidObj->GetTPCsignalN();
+    mom = pidObj->GetTPCmomentum();
+    tpcSignal = pidObj->GetTPCsignal();
+  }
+  return fTPCResponse.GetNumberOfSigmas(mom,tpcSignal,nTPCClus,type); 
+}
+
+//_________________________________________________________________________
+Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const {
+  Double_t times[AliPID::kSPECIES]={0.};
+  Double_t sigmaTOFPid[AliPID::kSPECIES]={0.};
+  AliAODPid *pidObj = 0x0;
+  Double_t mom = 0.0;
+  if (track) {
+    pidObj = track->GetDetPid();
+    mom = track->P();
+  }
+  Double_t tofSignal = 0.0;
+  if (pidObj) {
+    pidObj->GetIntegratedTimes(times);
+    pidObj->GetTOFpidResolution(sigmaTOFPid);
+    tofSignal = pidObj->GetTOFsignal();
+  }
+  if (sigmaTOFPid[type]>0) return (tofSignal - times[type])/sigmaTOFPid[type];
+  else return (tofSignal - times[type])/fTOFResponse.GetExpectedSigma(mom,times[type],AliPID::ParticleMass(type));
+}
+
+//_________________________________________________________________________
+Float_t AliAODpidUtil::NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const {
+  AliAODPid *pidObj = 0x0;
+  UChar_t clumap=0;
+  Float_t mom=0.0;
+  UShort_t nTPCClus=0;
+  if (track) {
+    pidObj = track->GetDetPid();
+    clumap=track->GetITSClusterMap();
+    mom=track->P();
+    nTPCClus=track->GetTPCNcls();
+  }
+  Int_t nPointsForPid=0;
+  for(Int_t i=2; i<6; i++){
+    if(clumap&(1<<i)) ++nPointsForPid;
+  }
+  Float_t dEdx=0.0;
+  if (pidObj) dEdx=pidObj->GetITSsignal();
+  Bool_t isSA=kTRUE;  
+  if(nTPCClus>0) isSA=kFALSE;
+  return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);
+}