* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id$ */
+
//-----------------------------------------------------------------
// ITS PID method # 1
// Implementation of the ITS PID class
//-----------------------------------------------------------------
#include "AliITSpidESD.h"
#include "AliITSpidESD1.h"
-#include "AliESD.h"
+#include "AliESDEvent.h"
#include "AliESDtrack.h"
ClassImp(AliITSpidESD1)
AliITSpidESD1::AliITSpidESD1(): AliITSpidESD(),
+fMIP(0),
fRes(0),
fRange(0)
{
}
//_________________________________________________________________________
AliITSpidESD1::AliITSpidESD1(Double_t *param): AliITSpidESD(),
-fRes(param[0]),
-fRange(param[1])
+fMIP(param[0]),
+fRes(param[1]),
+fRange(param[2])
{
//
// The main constructor
//_________________________________________________________________________
-Int_t AliITSpidESD1::MakePID(AliESD *event)
+Int_t AliITSpidESD1::MakePID(AliESDEvent *event)
{
//
// This function calculates the "detector response" PID probabilities
if ((t->GetStatus()&AliESDtrack::kITSin )==0)
if ((t->GetStatus()&AliESDtrack::kITSout)==0) continue;
Double_t mom=t->GetP();
- Double_t dedx=t->GetITSsignal();
- Int_t ns=AliPID::kSPECIES;
+ Double_t dedx=t->GetITSsignal()/fMIP;
Double_t p[10];
- for (Int_t j=0; j<ns; j++) {
+ Bool_t mismatch=kTRUE, heavy=kTRUE;
+ for (Int_t j=0; j<AliPID::kSPECIES; j++) {
Double_t mass=AliPID::ParticleMass(j);//GeV/c^2
Double_t bethe=AliITSpidESD::Bethe(mom,mass);
Double_t sigma=fRes*bethe;
if (TMath::Abs(dedx-bethe) > fRange*sigma) {
p[j]=TMath::Exp(-0.5*fRange*fRange)/sigma;
- continue;
+ } else {
+ p[j]=TMath::Exp(-0.5*(dedx-bethe)*(dedx-bethe)/(sigma*sigma))/sigma;
+ mismatch=kFALSE;
}
- p[j]=TMath::Exp(-0.5*(dedx-bethe)*(dedx-bethe)/(sigma*sigma))/sigma;
+
+ // Check for particles heavier than (AliPID::kSPECIES - 1)
+ if (dedx < (bethe + fRange*sigma)) heavy=kFALSE;
+
}
+
+ if (mismatch)
+ for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1/AliPID::kSPECIES;
+
t->SetITSpid(p);
+
+ if (heavy) t->ResetStatus(AliESDtrack::kITSpid);
+
}
return 0;
}