loader->AdoptITSpid(new AliITSpidESD2((AliITStrackerMI*)tracker,loader));
}
else{
- Double_t parITS[] = {76., 0.15, 10.}; //PH positions of the MIP peak
+ Double_t parITS[] = {0.15, 10.}; //PH positions of the MIP peak
loader->AdoptITSpid(new AliITSpidESD1(parITS));
}
return tracker;
//Default constructor
}
-Double_t AliITSpidESD::Bethe(Double_t bg) {
- //
- // This is the Bethe-Bloch function normalised to 1 at the minimum
- //
- Double_t bg2=bg*bg;
- Double_t bethe;
- /*if (bg<3.5)
- bethe=(1.+ bg2)/bg2*(log(5940*bg2) - bg2/(1.+ bg2));
- else*/ // not 100% clear why...
- bethe=(1.+ bg2)/bg2*(TMath::Log(3.5*5940*bg) - bg2/(1.+ bg2));
- return bethe/11.091;
-}
+Double_t AliITSpidESD::Bethe(Double_t p,Double_t mass) {
+
+ Double_t mom=p*1000;//MeV
+ Double_t Mass=mass*1000;//Mev
+ Float_t dens =2.33; //g cm-3
+ Double_t K=0.307075;//MeVcm^2/g
+ Double_t ZovA=0.49848;
+ Double_t me=0.511;//MeV/c^2
+ Double_t I=173./1000000.;//MeV
+ Double_t En=TMath::Sqrt(mom*mom+Mass*Mass);//MeV
+ Double_t gamma=En/Mass;
+ Double_t beta=mom/En;
+ Double_t Tmax=2*me*beta*beta*gamma*gamma/(1+2*gamma*me/Mass+(me/Mass)*(me/Mass));
+ Double_t deltaover2=28.816*1e-6*TMath::Sqrt(dens*ZovA)+TMath::Log(beta*gamma)-0.5;
+ return K*ZovA*1/(beta*beta)*(0.5*TMath::Log(2*me*beta*beta*gamma*gamma*Tmax/(I*I))-beta*beta-deltaover2)*2.33*1000*0.03-37;
+
+
+}
AliITSpidESD();
virtual ~AliITSpidESD() {}
virtual Int_t MakePID(AliESD *event) =0;
- static Double_t Bethe(Double_t bg);
+ static Double_t Bethe(Double_t p,Double_t mass);
private:
ClassDef(AliITSpidESD,1) // ITS PID class
};
ClassImp(AliITSpidESD1)
AliITSpidESD1::AliITSpidESD1(): AliITSpidESD(),
-fMIP(0),
fRes(0),
fRange(0)
{
}
//_________________________________________________________________________
AliITSpidESD1::AliITSpidESD1(Double_t *param): AliITSpidESD(),
-fMIP(param[0]),
-fRes(param[1]),
-fRange(param[2])
+fRes(param[0]),
+fRange(param[1])
{
//
// The main constructor
if ((t->GetStatus()&AliESDtrack::kITSin )==0)
if ((t->GetStatus()&AliESDtrack::kITSout)==0) continue;
Double_t mom=t->GetP();
- Double_t dedx=t->GetITSsignal()/fMIP;
+ Double_t dedx=t->GetITSsignal();
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);
+ 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;
virtual Int_t MakePID(AliESD *event);
private:
- Double_t fMIP; // dEdx for MIP
Double_t fRes; // relative dEdx resolution
Double_t fRange; // one particle type PID range (in sigmas)
- ClassDef(AliITSpidESD1,1) // ITS PID class
+ ClassDef(AliITSpidESD1,2) // ITS PID class
};
#endif