Extended functionality of GetTPCClusterDensity + methods to manipulate
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 23 Jan 2012 15:46:03 +0000 (15:46 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 23 Jan 2012 15:46:03 +0000 (15:46 +0000)
V0 kinematics (Marian, https://savannah.cern.ch/bugs/?90749)

STEER/AOD/AliAODTrack.cxx
STEER/AOD/AliAODTrack.h
STEER/ESD/AliESDtrack.cxx
STEER/ESD/AliESDtrack.h
STEER/ESD/AliESDv0.cxx
STEER/ESD/AliESDv0.h
STEER/STEERBase/AliVTrack.h

index cb6b060..c0c5859 100644 (file)
@@ -575,30 +575,35 @@ Bool_t AliAODTrack::GetPxPyPz(Double_t p[3]) const
   return kTRUE;
 }
 
-//______________________________________________________________________________
-Float_t AliAODTrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/, Int_t row0, Int_t row1) const
+
+//_______________________________________________________________________
+Float_t AliAODTrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/, Int_t row0, Int_t row1, Int_t bitType ) const
 {
   //
-  // TPC cluster information
+  // TPC cluster information 
   // type 0: get fraction of found/findable clusters with neighbourhood definition
   //      1: findable clusters with neighbourhood definition
   //      2: found clusters
-  //
+  // bitType:
+  //      0 - all cluster used
+  //      1 - clusters  used for the kalman update
   // definition of findable clusters:
   //            a cluster is defined as findable if there is another cluster
   //           within +- nNeighbours pad rows. The idea is to overcome threshold
   //           effects with a very simple algorithm.
   //
-  
-  if (type==2) return fTPCClusterMap.CountBits();
+
   
   Int_t found=0;
   Int_t findable=0;
   Int_t last=-nNeighbours;
+  const TBits & clusterMap = (bitType%2==0) ? fTPCClusterMap : fTPCFitMap;
   
-  for (Int_t i=row0; i<row1; ++i){
+  Int_t upperBound=clusterMap.GetNbits();
+  if (upperBound>row1) upperBound=row1;
+  for (Int_t i=row0; i<upperBound; ++i){
     //look to current row
-    if (fTPCClusterMap[i]) {
+    if (clusterMap[i]) {
       last=i;
       ++found;
       ++findable;
@@ -611,25 +616,27 @@ Float_t AliAODTrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/
     }
     //look to nNeighbours after
     for (Int_t j=i+1; j<i+1+nNeighbours; ++j){
-      if (fTPCClusterMap[j]){
+      if (clusterMap[j]){
         ++findable;
         break;
       }
     }
   }
+  if (type==2) return found;
   if (type==1) return findable;
   
   if (type==0){
     Float_t fraction=0;
-    if (findable>0)
+    if (findable>0) 
       fraction=(Float_t)found/(Float_t)findable;
-    else
+    else 
       fraction=0;
     return fraction;
-  }
+  }  
   return 0;  // undefined type - default value
 }
 
+
 //______________________________________________________________________________
 Double_t  AliAODTrack::GetTRDslice(Int_t plane, Int_t slice) const {
   //
index 386d41f..3f6026a 100644 (file)
@@ -241,7 +241,7 @@ class AliAODTrack : public AliVTrack {
 
   const TBits& GetTPCClusterMap() const {return fTPCClusterMap;}
   const TBits& GetTPCFitMap() const {return fTPCFitMap;}
-  Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159) const;
+  Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159, Int_t /*type*/=0) const;
   
   const TBits& GetTPCSharedMap() const {return fTPCSharedMap;}
   void    SetTPCClusterMap(const TBits amap) {fTPCClusterMap = amap;}
index b6d565e..aa57fed 100644 (file)
@@ -1766,31 +1766,33 @@ Float_t AliESDtrack::GetTPCCrossedRows() const
 }
 
 //_______________________________________________________________________
-Float_t AliESDtrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/, Int_t row0, Int_t row1) const
+Float_t AliESDtrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/, Int_t row0, Int_t row1, Int_t bitType ) const
 {
   //
   // TPC cluster information
   // type 0: get fraction of found/findable clusters with neighbourhood definition
   //      1: findable clusters with neighbourhood definition
   //      2: found clusters
-  //
+  // bitType:
+  //      0 - all cluster used
+  //      1 - clusters  used for the kalman update
   // definition of findable clusters:
   //            a cluster is defined as findable if there is another cluster
   //           within +- nNeighbours pad rows. The idea is to overcome threshold
   //           effects with a very simple algorithm.
   //
 
-  if (type==2) return fTPCClusterMap.CountBits();
   
   Int_t found=0;
   Int_t findable=0;
   Int_t last=-nNeighbours;
+  const TBits & clusterMap = (bitType%2==0) ? fTPCClusterMap : fTPCFitMap;
   
-  Int_t upperBound=fTPCClusterMap.GetNbits();
+  Int_t upperBound=clusterMap.GetNbits();
   if (upperBound>row1) upperBound=row1;
   for (Int_t i=row0; i<upperBound; ++i){
     //look to current row
-    if (fTPCClusterMap[i]) {
+    if (clusterMap[i]) {
       last=i;
       ++found;
       ++findable;
@@ -1803,12 +1805,62 @@ Float_t AliESDtrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/
     }
     //look to nNeighbours after
     for (Int_t j=i+1; j<i+1+nNeighbours; ++j){
-      if (fTPCClusterMap[j]){
+      if (clusterMap[j]){
         ++findable;
         break;
       }
     }
   }
+  if (type==2) return found;
+  if (type==1) return findable;
+  
+  if (type==0){
+    Float_t fraction=0;
+    if (findable>0) 
+      fraction=(Float_t)found/(Float_t)findable;
+    else 
+      fraction=0;
+    return fraction;
+  }  
+  return 0;  // undefined type - default value
+}
+
+//_______________________________________________________________________
+Float_t AliESDtrack::GetTPCClusterDensity(Int_t nNeighbours/*=3*/, Int_t type/*=0*/, Int_t row0, Int_t row1, Int_t bitType ) const
+{
+  //
+  // TPC cluster density -  only rows where signal before and after given row are used
+  //                     -  slower function
+  // type 0: get fraction of found/findable clusters with neighbourhood definition
+  //      1: findable clusters with neighbourhood definition
+  //      2: found clusters
+  // bitType:
+  //      0 - all cluster used
+  //      1 - clusters  used for the kalman update
+  // definition of findable clusters:
+  //            a cluster is defined as findable if there is another cluster
+  //           within +- nNeighbours pad rows. The idea is to overcome threshold
+  //           effects with a very simple algorithm.
+  //  
+  Int_t found=0;
+  Int_t findable=0;
+  //  Int_t last=-nNeighbours;
+  const TBits & clusterMap = (bitType%2==0) ? fTPCClusterMap : fTPCFitMap;
+  Int_t upperBound=clusterMap.GetNbits();
+  if (upperBound>row1) upperBound=row1;
+  for (Int_t i=row0; i<upperBound; ++i){
+    Bool_t isUp=kFALSE;
+    Bool_t isDown=kFALSE;
+    for (Int_t idelta=1; idelta<=nNeighbours; idelta++){
+      if (i-idelta>=0 && clusterMap[i-idelta]) isDown=kTRUE;
+      if (i+idelta<upperBound && clusterMap[i+idelta]) isUp=kTRUE;
+    }
+    if (isUp&&isDown){
+      ++findable;
+      if (clusterMap[i]) ++found;
+    }
+  }
+  if (type==2) return found;
   if (type==1) return findable;
   
   if (type==0){
@@ -1822,6 +1874,9 @@ Float_t AliESDtrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/
   return 0;  // undefined type - default value
 }
 
+
+
+
 //_______________________________________________________________________
 Double_t AliESDtrack::GetTPCdensity(Int_t row0, Int_t row1) const{
   //
index 86e3161..4b6c0f5 100644 (file)
@@ -238,7 +238,8 @@ public:
   void    SetTPCFitMap(const TBits &amap) {fTPCFitMap = amap;}
   void    SetTPCClusterMap(const TBits &amap) {fTPCClusterMap = amap;}
   void    SetTPCSharedMap(const TBits &amap) {fTPCSharedMap = amap;}
-  Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159) const;
+  Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159, Int_t bitType=0 ) const;
+  Float_t GetTPCClusterDensity(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159, Int_t bitType=0 ) const;
   Float_t GetTPCCrossedRows() const;
   
   void    SetTRDpid(const Double_t *p);
index 0e12cf6..8390b06 100644 (file)
@@ -33,6 +33,8 @@
 #include "AliLog.h"
 #include "AliESDv0.h"
 #include "AliESDV0Params.h"
+#include "AliKFParticle.h"
+#include "AliKFVertex.h"
 
 ClassImp(AliESDv0)
 
@@ -749,10 +751,82 @@ Double_t AliESDv0::GetEffMass(UInt_t p1, UInt_t p2) const{
   return (TMath::Sqrt(mass));
   */
   if(p1>4 || p2>4) return -1;
-  Double_t e12   = kpmass[p1]*kpmass[p1]+fPmom[0]*fPmom[0]+fPmom[1]*fPmom[1]+fPmom[2]*fPmom[2];
-  Double_t e22   = kpmass[p2]*kpmass[p2]+fNmom[0]*fNmom[0]+fNmom[1]*fNmom[1]+fNmom[2]*fNmom[2];
+  const AliExternalTrackParam *paramP = GetParamP();
+  const AliExternalTrackParam *paramN = GetParamN();
+  if (paramP->GetParameter()[4]<0){
+    paramP=GetParamN();
+    paramN=GetParamP();
+  }
+  Double_t pmom[3]={0}, nmom[3]={0};
+  paramP->GetPxPyPz(pmom);
+  paramN->GetPxPyPz(nmom);
+  Double_t e12   = kpmass[p1]*kpmass[p1]+pmom[0]*pmom[0]+pmom[1]*pmom[1]+pmom[2]*pmom[2];
+  Double_t e22   = kpmass[p2]*kpmass[p2]+nmom[0]*nmom[0]+nmom[1]*nmom[1]+nmom[2]*nmom[2];
   Double_t cmass = TMath::Sqrt(TMath::Max(kpmass[p1]*kpmass[p1]+kpmass[p2]*kpmass[p2]
-                                         +2.*(TMath::Sqrt(e12*e22)-fPmom[0]*fNmom[0]-fPmom[1]*fNmom[1]-fPmom[2]*fNmom[2]),0.));
+                                         +2.*(TMath::Sqrt(e12*e22)-pmom[0]*nmom[0]-pmom[1]*nmom[1]-pmom[2]*nmom[2]),0.));
   return cmass;
                               
 }
+
+
+
+Double_t AliESDv0::GetKFInfo(UInt_t p1, UInt_t p2, Int_t type) const{
+  //
+  // type:
+  //   0 - return mass
+  //   1 - return err mass
+  //   2 - return chi2
+  // 
+  const Int_t spdg[5]={kPositron,kMuonPlus,kPiPlus, kKPlus, kProton};
+  const AliExternalTrackParam *paramP = GetParamP();
+  const AliExternalTrackParam *paramN = GetParamN();
+  if (paramP->GetSign()<0){
+    paramP=GetParamN();
+    paramN=GetParamP();
+  }
+  AliKFParticle kfp1(  *(paramP), spdg[p1] *TMath::Sign(1,p1) );
+  AliKFParticle kfp2( *(paramN), spdg[p2] *TMath::Sign(1,p2) );
+  AliKFParticle *V0KF = new AliKFParticle;
+  *(V0KF)+=kfp1;
+  *(V0KF)+=kfp2;
+  if (type==0) return V0KF->GetMass();
+  if (type==1) return V0KF->GetErrMass();
+  if (type==2) return V0KF->GetChi2();
+  return 0;
+}
+
+
+Double_t AliESDv0::GetKFInfoScale(UInt_t p1, UInt_t p2, Int_t type, Double_t d1pt, Double_t s1pt) const{
+  //
+  // type
+  //   0 - return mass
+  //   1 - return err mass
+  //   2 - return chi2
+  //   d1pt - 1/pt shift
+  //   s1pt - scaling of 1/pt
+  // Important function to benchmark the pt resolution, and to find out systematic distortion
+  //
+  const Int_t spdg[5]={kPositron,kMuonPlus,kPiPlus, kKPlus, kProton};
+  const AliExternalTrackParam *paramP = GetParamP();
+  const AliExternalTrackParam *paramN = GetParamN();
+  if (paramP->GetSign()<0){
+    paramP=GetParamP();
+    paramN=GetParamN();
+  }
+  Double_t *pparam1 = (Double_t*)paramP->GetParameter();
+  Double_t *pparam2 = (Double_t*)paramN->GetParameter();
+  pparam1[4]+=d1pt;
+  pparam2[4]+=d1pt;
+  pparam1[4]*=(1+s1pt);
+  pparam2[4]*=(1+s1pt);
+  //
+  AliKFParticle kfp1( *paramP, spdg[p1] *TMath::Sign(1,p1) );
+  AliKFParticle kfp2( *paramN, spdg[p2] *TMath::Sign(1,p2) );
+  AliKFParticle *V0KF = new AliKFParticle;
+  *(V0KF)+=kfp1;
+  *(V0KF)+=kfp2;
+  if (type==0) return V0KF->GetMass();
+  if (type==1) return V0KF->GetErrMass();
+  if (type==2) return V0KF->GetChi2();
+  return 0;
+}
index d5d5aeb..cbab544 100644 (file)
@@ -55,7 +55,7 @@ public:
   virtual Short_t  Charge() const { return 0; }
   virtual Int_t    GetLabel() const { return -1; }  // temporary
   virtual const Double_t *PID() const { return 0; } // return PID object ? (to be discussed!)
-
+  
   // Then extend the AliVParticle functions
   Double_t E(Int_t pdg) const;
   Double_t Y(Int_t pdg) const;
@@ -139,8 +139,9 @@ public:
   
   //virtual Bool_t   GetPxPyPz(Double_t */*p*/) const { return kFALSE; }
   virtual void     SetID(Short_t /*id*/) {;}
-    
-
+  Double_t GetKFInfo(UInt_t p1, UInt_t p2, Int_t type) const;
+  Double_t GetKFInfoScale(UInt_t p1, UInt_t p2, Int_t type, Double_t d1pt, Double_t s1pt) const;
+  //
 protected:
   AliExternalTrackParam fParamN;  // external parameters of negative particle
   AliExternalTrackParam fParamP;  // external parameters of positive particle
index 2f41666..5a5ca56 100644 (file)
@@ -52,7 +52,7 @@ public:
 \r
   virtual Int_t    GetID() const = 0;\r
   virtual UChar_t  GetITSClusterMap() const = 0;\r
-  virtual Float_t  GetTPCClusterInfo(Int_t /*nNeighbours*/, Int_t /*type*/, Int_t /*row0*/=0, Int_t /*row1*/=159) const {return 0.;}\r
+  virtual Float_t  GetTPCClusterInfo(Int_t /*nNeighbours*/, Int_t /*type*/, Int_t /*row0*/=0, Int_t /*row1*/=159, Int_t /*type*/= 0) const {return 0.;}\r
   virtual AliTPCdEdxInfo * GetTPCdEdxInfo() {return 0x0;}\r
   virtual UShort_t GetTPCNcls() const { return 0;}\r
   virtual UShort_t GetTPCNclsF() const { return 0;}\r