]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFpidESD.cxx
Macro to Create pulser run data from an LDC
[u/mrichter/AliRoot.git] / TOF / AliTOFpidESD.cxx
index 48265fec50160957b887c238714308d55dd57d2b..6bb14e0b81fe8331c808f92ab0dd35c169b36a10 100644 (file)
 #include "AliLog.h"
 
 #include "AliESDtrack.h"
-#include "AliESD.h"
+#include "AliESDEvent.h"
 
 #include "AliTOFpidESD.h"
 
 ClassImp(AliTOFpidESD)
 
 //_________________________________________________________________________
-  AliTOFpidESD::AliTOFpidESD(): 
-  fN(-1),
-  fEventN(-1),
+AliTOFpidESD::AliTOFpidESD(): 
   fSigma(0),
-  fRange(0)
+  fRange(0),
+  fPmax(0)         // zero at 0.5 GeV/c for pp
 {
 }
 //_________________________________________________________________________
 AliTOFpidESD::AliTOFpidESD(Double_t *param):
-  fN(0),
-  fEventN(0),
-  fSigma(0),
-  fRange(0)
- {
+  fSigma(param[0]),
+  fRange(param[1]),
+  fPmax(0)          // zero at 0.5 GeV/c for pp
+{
   //
   //  The main constructor
   //
-  fSigma=param[0];
-  fRange=param[1];
+  //
+
+  //fPmax=TMath::Exp(-0.5*3*3)/fSigma; // ~3 sigma at 0.5 GeV/c for PbPb 
+}
+
+Double_t 
+AliTOFpidESD::GetMismatchProbability(Double_t p, Double_t mass) const {
+  //
+  // Returns the probability of mismatching 
+  // assuming 1/(p*beta)^2 scaling
+  //
+  const Double_t km=0.5;                   // "reference" momentum (GeV/c)
+
+  Double_t ref2=km*km*km*km/(km*km + mass*mass);// "reference" (p*beta)^2
+  Double_t p2beta2=p*p*p*p/(p*p + mass*mass);
 
+  return fPmax*ref2/p2beta2;
 }
 
 //_________________________________________________________________________
-Int_t AliTOFpidESD::MakePID(AliESD *event, Double_t timeZero)
+Int_t AliTOFpidESD::MakePID(AliESDEvent *event, Double_t timeZero)
 {
   //
   //  This function calculates the "detector response" PID probabilities
@@ -62,6 +74,7 @@ Int_t AliTOFpidESD::MakePID(AliESD *event, Double_t timeZero)
 
   AliDebug(1,Form("TOF PID Parameters: Sigma (ps)= %f, Range= %f",fSigma,fRange));
   AliDebug(1,"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
+
   Int_t ntrk=event->GetNumberOfTracks();
   AliESDtrack **tracks=new AliESDtrack*[ntrk];
 
@@ -79,6 +92,7 @@ Int_t AliTOFpidESD::MakePID(AliESD *event, Double_t timeZero)
     Double_t time[10]; t->GetIntegratedTimes(time);
     Double_t p[10];
     Double_t mom=t->GetP();
+    Bool_t mismatch=kTRUE, heavy=kTRUE;
     for (Int_t j=0; j<AliPID::kSPECIES; j++) {
       Double_t mass=AliPID::ParticleMass(j);
       Double_t dpp=0.01;      //mean relative pt resolution;
@@ -87,11 +101,25 @@ Int_t AliTOFpidESD::MakePID(AliESD *event, Double_t timeZero)
       sigma=TMath::Sqrt(sigma*sigma + fSigma*fSigma);
       if (TMath::Abs(tof-time[j]) > fRange*sigma) {
        p[j]=TMath::Exp(-0.5*fRange*fRange)/sigma;
-        continue;
-      }
-      p[j]=TMath::Exp(-0.5*(tof-time[j])*(tof-time[j])/(sigma*sigma))/sigma;
+      } else 
+        p[j]=TMath::Exp(-0.5*(tof-time[j])*(tof-time[j])/(sigma*sigma))/sigma;
+
+      // Check the mismatching
+      Double_t pm=GetMismatchProbability(mom,mass);
+      if (p[j]>pm) mismatch=kFALSE;
+
+      // Check for particles heavier than (AliPID::kSPECIES - 1)
+      if (tof < (time[j] + fRange*sigma)) heavy=kFALSE;
+
     }
+
+    if (mismatch)
+       for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1/AliPID::kSPECIES;
+
     t->SetTOFpid(p);
+
+    if (heavy) t->ResetStatus(AliESDtrack::kTOFpid);    
+
   }
 
   delete[] tracks;
@@ -100,7 +128,7 @@ Int_t AliTOFpidESD::MakePID(AliESD *event, Double_t timeZero)
 }
 
 //_________________________________________________________________________
-Int_t AliTOFpidESD::MakePID(AliESD *event)
+Int_t AliTOFpidESD::MakePID(AliESDEvent *event)
 {
   //
   //  This function calculates the "detector response" PID probabilities
@@ -123,6 +151,7 @@ Int_t AliTOFpidESD::MakePID(AliESD *event)
     Double_t time[10]; t->GetIntegratedTimes(time);
     Double_t p[10];
     Double_t mom=t->GetP();
+    Bool_t mismatch=kTRUE, heavy=kTRUE;
     for (Int_t j=0; j<AliPID::kSPECIES; j++) {
       Double_t mass=AliPID::ParticleMass(j);
       Double_t dpp=0.01;      //mean relative pt resolution;
@@ -131,11 +160,25 @@ Int_t AliTOFpidESD::MakePID(AliESD *event)
       sigma=TMath::Sqrt(sigma*sigma + fSigma*fSigma);
       if (TMath::Abs(tof-time[j]) > fRange*sigma) {
        p[j]=TMath::Exp(-0.5*fRange*fRange)/sigma;
-        continue;
-      }
-      p[j]=TMath::Exp(-0.5*(tof-time[j])*(tof-time[j])/(sigma*sigma))/sigma;
+      } else
+        p[j]=TMath::Exp(-0.5*(tof-time[j])*(tof-time[j])/(sigma*sigma))/sigma;
+
+      // Check the mismatching
+      Double_t pm=GetMismatchProbability(mom,mass);
+      if (p[j]>pm) mismatch=kFALSE;
+
+      // Check for particles heavier than (AliPID::kSPECIES - 1)
+      if (tof < (time[j] + fRange*sigma)) heavy=kFALSE;
+
     }
+
+    if (mismatch)
+       for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1/AliPID::kSPECIES;
+
     t->SetTOFpid(p);
+
+    if (heavy) t->ResetStatus(AliESDtrack::kTOFpid);    
+
   }
 
   delete[] tracks;