]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliITSPIDResponse.cxx
Updated values of sigmas for truncated mean approach (L. Milano). Updated responses...
[u/mrichter/AliRoot.git] / STEER / AliITSPIDResponse.cxx
index 9f05c0b8059c3af7d7cb15fb7cae935e5fa30519..33cc4ebca016fa15d03a408b4fdc07ede8fa15ac 100644 (file)
@@ -28,7 +28,7 @@
 
 ClassImp(AliITSPIDResponse)
 
-AliITSPIDResponse::AliITSPIDResponse(): 
+AliITSPIDResponse::AliITSPIDResponse(Bool_t isMC): 
   fRes(0.13),
   fKp1(15.77),
   fKp2(4.95),
@@ -36,6 +36,41 @@ AliITSPIDResponse::AliITSPIDResponse():
   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;
+  }
 }
 
 //_________________________________________________________________________
@@ -53,23 +88,64 @@ AliITSPIDResponse::AliITSPIDResponse(Double_t *param):
 }
 
 
-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
@@ -115,3 +191,19 @@ void AliITSPIDResponse::GetITSProbabilities(Float_t mom, Double_t qclu[4], Doubl
   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;
+    
+}