ClassImp(AliITSPIDResponse)
-AliITSPIDResponse::AliITSPIDResponse():
+AliITSPIDResponse::AliITSPIDResponse(Bool_t isMC):
fRes(0.13),
fKp1(15.77),
fKp2(4.95),
fKp4(2.14),
fKp5(0.82)
{
+ if(!isMC){
+ fBBtpcits[0]=0.73;
+ fBBtpcits[1]=14.68;
+ fBBtpcits[2]=0.905;
+ fBBtpcits[3]=1.2;
+ fBBtpcits[4]=6.6;
+ fBBsa[0]=5.33458E4;
+ fBBsa[1]=16.5303;
+ fBBsa[2]=2.60065E-3;
+ fBBsa[3]=3.59533E-4;
+ fBBsa[4]=7.51168E-5;
+ fResolSA[0]=1.; // 0 cluster tracks should not be used
+ fResolSA[1]=0.25; // rough values for tracks with 1 or 2
+ fResolSA[2]=0.2; // clusters (not to be used)
+ fResolSA[3]=0.116; // value from pp 2010 run (L. Milano, 18-Jan-11)
+ fResolSA[4]=0.104; // value from pp 2010 run
+ for(Int_t i=0; i<5;i++) fResolTPCITS[i]=0.13;
+ }else{
+ fBBtpcits[0]=1.04;
+ fBBtpcits[1]=27.14;
+ fBBtpcits[2]=1.00;
+ fBBtpcits[3]=0.964;
+ fBBtpcits[4]=2.59;
+ fBBsa[0]=-2.48;
+ fBBsa[1]=23.13;
+ fBBsa[2]=1.161;
+ fBBsa[3]=0.93;
+ fBBsa[4]=-1.2973;
+ fResolSA[0]=1.; // 0 cluster tracks should not be used
+ fResolSA[1]=0.25; // rough values for tracks with 1 or 2
+ fResolSA[2]=0.2; // clusters (not to be used)
+ fResolSA[3]=0.110; // value from pp 2010 simulations (L. Milano, 18-Jan-11)
+ fResolSA[4]=0.096; // value from pp 2010 simulations
+ for(Int_t i=0; i<5;i++) fResolTPCITS[i]=0.13;
+ }
}
//_________________________________________________________________________
}
-Double_t AliITSPIDResponse::Bethe(Double_t p,Double_t mass) const {
+//_________________________________________________________________________
+Double_t AliITSPIDResponse::BetheAleph(Double_t p, Double_t mass) const {
//
// returns AliExternalTrackParam::BetheBloch normalized to
// fgMIP at the minimum
//
+
Double_t bb=
AliExternalTrackParam::BetheBlochAleph(p/mass,fKp1,fKp2,fKp3,fKp4,fKp5);
return bb;
}
-Double_t AliITSPIDResponse::GetResolution(Double_t bethe) const {
+//_________________________________________________________________________
+Double_t AliITSPIDResponse::Bethe(Double_t p, Double_t mass, Bool_t isSA) const {
+ //
+ // returns AliExternalTrackParam::BetheBloch normalized to
+ // fgMIP at the minimum
+ //
+
+ Double_t bg=p/mass;
+ Double_t beta = bg/TMath::Sqrt(1.+ bg*bg);
+ Double_t gamma=bg/beta;
+ Double_t par[5];
+ if(isSA){
+ for(Int_t ip=0; ip<5;ip++) par[ip]=fBBsa[ip];
+ }else{
+ for(Int_t ip=0; ip<5;ip++) par[ip]=fBBtpcits[ip];
+ }
+ Double_t eff=1.0;
+ if(bg<par[2])
+ eff=(bg-par[3])*(bg-par[3])+par[4];
+ else
+ eff=(par[2]-par[3])*(par[2]-par[3])+par[4];
+
+ Double_t bb=0.;
+ if(gamma>=0. && beta>0.){
+ bb=(par[1]+2.0*TMath::Log(gamma)-beta*beta)*(par[0]/(beta*beta))*eff;
+ }
+ return bb;
+}
+
+//_________________________________________________________________________
+Double_t AliITSPIDResponse::GetResolution(Double_t bethe,
+ Int_t nPtsForPid,
+ Bool_t isSA) const {
//
// Calculate expected resolution for truncated mean
//
- return fRes*bethe;
+ Float_t r;
+ if(isSA) r=fResolSA[nPtsForPid];
+ else r=fResolTPCITS[nPtsForPid];
+ return r*bethe;
}
+
+
+
+//_________________________________________________________________________
void AliITSPIDResponse::GetITSProbabilities(Float_t mom, Double_t qclu[4], Double_t condprobfun[AliPID::kSPECIES]) const {
//
// Method to calculate PID probabilities for a single track
condprobfun[AliPID::kProton] = itsProb[0];
return;
}
+
+//_________________________________________________________________________
+Int_t AliITSPIDResponse::GetParticleIdFromdEdxVsP(Float_t mom, Float_t signal, Bool_t isSA) const{
+ // method to get particle identity with simple cuts on dE/dx vs. momentum
+
+ Double_t massp=AliPID::ParticleMass(AliPID::kProton);
+ Double_t massk=AliPID::ParticleMass(AliPID::kKaon);
+ Double_t bethep=Bethe(mom,massp,isSA);
+ Double_t bethek=Bethe(mom,massk,isSA);
+ if(signal>(0.5*(bethep+bethek))) return AliPID::kProton;
+ Double_t masspi=AliPID::ParticleMass(AliPID::kPion);
+ Double_t bethepi=Bethe(mom,masspi,isSA);
+ if(signal>(0.5*(bethepi+bethek))) return AliPID::kKaon;
+ return AliPID::kPion;
+
+}