]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Update of the ITS PID response (F.Prino, M.Chojnacki, E.Biolcati)
authorbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 7 Jul 2010 14:29:50 +0000 (14:29 +0000)
committerbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 7 Jul 2010 14:29:50 +0000 (14:29 +0000)
STEER/AliAODpidUtil.cxx
STEER/AliAODpidUtil.h
STEER/AliESDpid.cxx
STEER/AliESDpid.h
STEER/AliITSPIDResponse.cxx
STEER/AliITSPIDResponse.h

index 500cca45ead38f74423cb7d169cc538bcf0d9f35..62cfe6952caa5bb05b76dcde75598a59fc843e40 100644 (file)
@@ -115,17 +115,26 @@ void AliAODpidUtil::MakeITSPID(AliAODTrack *track,Double_t *p) const
   for(Int_t i=2; i<6; i++){
    if(clumap&(1<<i)) ++nPointsForPid;
   }
-  if(nPointsForPid<3) return;// track not to be used for PID purposes
-
+  if(nPointsForPid<3) { // track not to be used for combined PID purposes
+    for (Int_t j=0; j<AliPID::kSPECIES; j++) 
+      p[j] = 1./AliPID::kSPECIES;
+    return;
+  }
   Double_t mom=track->P();  
   AliAODPid *pidObj = track->GetDetPid();
 
-  Double_t dedx=pidObj->GetITSsignal();
-  Bool_t mismatch=kTRUE;
+  Double_t dedx = pidObj->GetITSsignal();
+  Bool_t mismatch = kTRUE;
+  Bool_t isSA = kTRUE;
+  if(track->GetStatus() & AliESDtrack::kTPCin){
+    isSA = kFALSE;
+    if (pidObj)
+      mom = pidObj->GetTPCmomentum();
+  }
   for (Int_t j=0; j<AliPID::kSPECIES; j++) {
-    Double_t mass=AliPID::ParticleMass(j);//GeV/c^2
-    Double_t bethe=fITSResponse.Bethe(mom,mass);
-    Double_t sigma=fITSResponse.GetResolution(bethe);
+    Double_t mass = AliPID::ParticleMass(j);//GeV/c^2
+    Double_t bethe = fITSResponse.Bethe(mom,mass);
+    Double_t sigma = fITSResponse.GetResolution(bethe,nPointsForPid,isSA);
     if (TMath::Abs(dedx-bethe) > fRange*sigma) {
       p[j]=TMath::Exp(-0.5*fRange*fRange)/sigma;
     } else {
index 3b3befc471a840a2256ee6be1979f65768c24fd7..975a86947c1070a5318aab4081a2ea13f85fae41 100644 (file)
@@ -71,7 +71,19 @@ inline Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliAODTrack *track, AliPID
 
 inline Float_t AliAODpidUtil::NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const {
   AliAODPid *pidObj = track->GetDetPid();
-  return fITSResponse.GetNumberOfSigmas(track->P(),pidObj->GetITSsignal(),type); 
+  Float_t dEdx=pidObj->GetITSsignal();
+  UChar_t clumap=track->GetITSClusterMap();
+  Int_t nPointsForPid=0;
+  for(Int_t i=2; i<6; i++){
+    if(clumap&(1<<i)) ++nPointsForPid;
+  }
+  if(track->GetTPCNcls()>0){
+    Float_t mom=pidObj->GetTPCmomentum();
+    return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,kFALSE);
+  }else{
+    Float_t mom=track->P();
+    return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,kTRUE);
+  }
 }
 #endif
 
index 280f11a5a8176ea3a7482417acdd7a1fdc3e4492..f357c9316aaf95eece940cde96fe1492d9f0a02e 100644 (file)
@@ -118,12 +118,32 @@ void AliESDpid::MakeITSPID(AliESDtrack *track) const
   Double_t mom=track->GetP();  
   if (fITSPIDmethod == kITSTruncMean) {
     Double_t dedx=track->GetITSsignal();
+    Bool_t isSA=kTRUE;
+    Double_t momITS=mom;
+    ULong_t trStatus=track->GetStatus();
+    if(trStatus&AliESDtrack::kTPCin){
+      isSA=kFALSE;
+      const AliExternalTrackParam *in = track->GetInnerParam();
+      momITS=in->P();
+    }
+    UChar_t clumap=track->GetITSClusterMap();
+    Int_t nPointsForPid=0;
+    for(Int_t i=2; i<6; i++){
+      if(clumap&(1<<i)) ++nPointsForPid;
+    }
+
+    if(nPointsForPid<3) { // track not to be used for combined PID purposes
+      track->ResetStatus(AliESDtrack::kITSpid);
+      return;
+    }
+
     Double_t p[10];
+
     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=fITSResponse.Bethe(mom,mass);
-      Double_t sigma=fITSResponse.GetResolution(bethe);
+      Double_t bethe=fITSResponse.Bethe(momITS,mass);
+      Double_t sigma=fITSResponse.GetResolution(bethe,nPointsForPid,isSA);
       if (TMath::Abs(dedx-bethe) > fRange*sigma) {
        p[j]=TMath::Exp(-0.5*fRange*fRange)/sigma;
       } else {
index cc56d730d14f5e4c479bc84b448ab2de60d01830..7b8d585f4c32700103766a94ea3b799edd08dc01 100644 (file)
@@ -73,7 +73,21 @@ inline Float_t AliESDpid::NumberOfSigmasTOF(const AliESDtrack *track, AliPID::EP
 }
 
 inline Float_t AliESDpid::NumberOfSigmasITS(const AliESDtrack *track, AliPID::EParticleType type) const {
-  return fITSResponse.GetNumberOfSigmas(track->GetP(),track->GetITSsignal(),type); 
+  ULong_t trStatus=track->GetStatus();
+  Float_t dEdx=track->GetITSsignal();
+  UChar_t clumap=track->GetITSClusterMap();
+  Int_t nPointsForPid=0;
+  for(Int_t i=2; i<6; i++){
+    if(clumap&(1<<i)) ++nPointsForPid;
+  }
+  if(trStatus&AliESDtrack::kTPCin){
+    const AliExternalTrackParam *in = track->GetInnerParam();
+    Float_t mom=in->P();
+    return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,kFALSE);
+  }else{
+    Float_t mom=track->P();
+    return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,kTRUE);
+  }
 }
 #endif
 
index 9f05c0b8059c3af7d7cb15fb7cae935e5fa30519..b7be17dac52b95cd3963a3df6fe875f265d35db2 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,33 @@ 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;  
+    for(Int_t i=0; i<5;i++) fResolSA[i]=0.15;
+    for(Int_t i=0; i<5;i++) fResolTPCITS[i]=0.13;
+  }else{
+    fBBtpcits[0]=0.73;
+    fBBtpcits[1]=14.68;
+    fBBtpcits[2]=0.905;
+    fBBtpcits[3]=0.2;
+    fBBtpcits[4]=6.6;
+    fBBsa[0]=139.1;
+    fBBsa[1]=23.36;
+    fBBsa[2]=0.06052;
+    fBBsa[3]=0.2043;
+    fBBsa[4]=-0.0004999;
+    for(Int_t i=0; i<5;i++) fResolSA[i]=0.15;
+    for(Int_t i=0; i<5;i++) fResolTPCITS[i]=0.13;
+  }
 }
 
 //_________________________________________________________________________
@@ -53,23 +80,60 @@ 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 +179,4 @@ void AliITSPIDResponse::GetITSProbabilities(Float_t mom, Double_t qclu[4], Doubl
   condprobfun[AliPID::kProton] = itsProb[0];
   return;
 }
+
index b46918a7040b57befee7dead6a75740c979c2d4f..ec941a5cfb13522fe205bd9acee7744248760259 100644 (file)
 //-------------------------------------------------------
 //#include <Rtypes.h>
 #include <TObject.h>
-
 #include "AliPID.h"
 
 class AliITSPIDResponse : public TObject {
 
 public:
-  AliITSPIDResponse();
+  AliITSPIDResponse(Bool_t isMC=kFALSE);
   AliITSPIDResponse(Double_t *param);
  ~AliITSPIDResponse() {}
-  Double_t Bethe(Double_t p,Double_t mass) const;
-  Double_t GetResolution(Double_t bethe) const;
-  void GetITSProbabilities(Float_t mom, Double_t qclu[4], Double_t condprobfun[AliPID::kSPECIES]) const;
-  Float_t GetNumberOfSigmas(Float_t mom, Float_t signal, AliPID::EParticleType type) const {
-  Float_t bethe = Bethe(mom,AliPID::ParticleMass(type));
-  return (signal - bethe)/GetResolution(bethe);
-}
+ Double_t BetheAleph(Double_t p,Double_t mass) const;
+ Double_t Bethe(Double_t p, Double_t mass, Bool_t iSA=kFALSE) const;
+ Double_t GetResolution(Double_t bethe, Int_t nPtsForPid=4, Bool_t isSA=kFALSE) const;
+ void GetITSProbabilities(Float_t mom, Double_t qclu[4], Double_t condprobfun[AliPID::kSPECIES]) const;
+ Float_t GetNumberOfSigmas(Float_t mom, Float_t signal, AliPID::EParticleType type, Int_t nPtsForPid=4, Bool_t isSA=kFALSE) const {
+   Float_t bethe = Bethe(mom,AliPID::ParticleMass(type),isSA);
+   return (signal - bethe)/GetResolution(bethe,nPtsForPid,isSA);
+ }
 
 private:
 
+
   // Data members for truncated mean method
-  Float_t fRes;             // relative dEdx resolution
+  Float_t  fRes;             // relative dEdx resolution
   Double_t fKp1;             // ALEPH BB param 1
   Double_t fKp2;             // ALEPH BB param 2
   Double_t fKp3;             // ALEPH BB param 3
   Double_t fKp4;             // ALEPH BB param 4
-  Double_t fKp5;             // ALEPH BB param 5
+  Double_t fKp5;             // ALEPH BB param 
+  Double_t  fBBsa[5];         // parameters of BB for SA tracks
+  Double_t  fBBtpcits[5];     // parameters of BB for TPC+ITS tracks
+  Float_t  fResolSA[5];      // resolutions vs. n. of SDD/SSD points
+  Float_t  fResolTPCITS[5];  // resolutions vs. n. of SDD/SSD points
 
-  ClassDef(AliITSPIDResponse,1)   // ITS PID class
+  ClassDef(AliITSPIDResponse,2)   // ITS PID class
 };
 
 #endif