* 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() {
+AliITSpidESD1::AliITSpidESD1(): AliITSpidESD(),
+fMIP(0),
+fRes(0),
+fRange(0)
+{
//Default constructor
- fMIP=0;
- fRes=0;
- fRange=0;
}
//_________________________________________________________________________
-AliITSpidESD1::AliITSpidESD1(Double_t *param): AliITSpidESD()
+AliITSpidESD1::AliITSpidESD1(Double_t *param): AliITSpidESD(),
+fMIP(param[0]),
+fRes(param[1]),
+fRange(param[2])
{
//
// The main constructor
//
- fMIP=param[0];
- fRes=param[1];
- fRange=param[2];
}
//_________________________________________________________________________
-Int_t AliITSpidESD1::MakePID(AliESD *event)
+Int_t AliITSpidESD1::MakePID(AliESDEvent *event)
{
//
// This function calculates the "detector response" PID probabilities
if ((t->GetStatus()&AliESDtrack::kITSout)==0) continue;
Double_t mom=t->GetP();
Double_t dedx=t->GetITSsignal()/fMIP;
- Int_t ns=AliPID::kSPECIES;
Double_t p[10];
- for (Int_t j=0; j<ns; j++) {
- Double_t mass=AliPID::ParticleMass(j);
- Double_t bethe=AliITSpidESD::Bethe(mom/mass);
+ 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;
}