I implemented the possibility
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 12 Mar 2010 15:07:03 +0000 (15:07 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 12 Mar 2010 15:07:03 +0000 (15:07 +0000)
- to reject all tracks that have shared TPC clusters:
� void SetAcceptSharedTPCClusters(Bool_t b=kTRUE){fCutAcceptSharedTPCClusters=b;}

Marta Verweij <marta.verweij@cern.ch>

ANALYSIS/AliESDtrackCuts.cxx
ANALYSIS/AliESDtrackCuts.h

index 75943f7..e4dc796 100644 (file)
@@ -81,6 +81,8 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   fCutMaxC55(0),
   fCutMaxRel1PtUncertainty(0),
   fCutAcceptKinkDaughters(0),
+  fCutAcceptSharedTPCClusters(0),
+  fCutMaxFractionSharedTPCClusters(0),
   fCutRequireTPCRefit(0),
   fCutRequireTPCStandAlone(0),
   fCutRequireITSRefit(0),
@@ -163,6 +165,8 @@ AliESDtrackCuts::AliESDtrackCuts(const AliESDtrackCuts &c) : AliAnalysisCuts(c),
   fCutMaxC55(0),
   fCutMaxRel1PtUncertainty(0),
   fCutAcceptKinkDaughters(0),
+  fCutAcceptSharedTPCClusters(0),
+  fCutMaxFractionSharedTPCClusters(0),
   fCutRequireTPCRefit(0),
   fCutRequireTPCStandAlone(0),
   fCutRequireITSRefit(0),
@@ -286,6 +290,8 @@ void AliESDtrackCuts::Init()
   fCutMaxRel1PtUncertainty = 0;
 
   fCutAcceptKinkDaughters = 0;
+  fCutAcceptSharedTPCClusters = 0;
+  fCutMaxFractionSharedTPCClusters = 0;
   fCutRequireTPCRefit = 0;
   fCutRequireTPCStandAlone = 0;
   fCutRequireITSRefit = 0;
@@ -392,6 +398,8 @@ void AliESDtrackCuts::Copy(TObject &c) const
   target.fCutMaxRel1PtUncertainty = fCutMaxRel1PtUncertainty;
 
   target.fCutAcceptKinkDaughters = fCutAcceptKinkDaughters;
+  target.fCutAcceptSharedTPCClusters = fCutAcceptSharedTPCClusters;
+  target.fCutMaxFractionSharedTPCClusters = fCutMaxFractionSharedTPCClusters;
   target.fCutRequireTPCRefit = fCutRequireTPCRefit;
   target.fCutRequireTPCStandAlone = fCutRequireTPCStandAlone;
   target.fCutRequireITSRefit = fCutRequireITSRefit;
@@ -669,6 +677,9 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
     nClustersTPC = esdTrack->GetTPCclusters(0);
   }
 
+  Int_t nClustersTPCShared = esdTrack->GetTPCnclsS();
+  Float_t fracClustersTPCShared = -1.;
+
   Float_t chi2PerClusterITS = -1;
   Float_t chi2PerClusterTPC = -1;
   if (nClustersITS!=0)
@@ -679,6 +690,7 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
     } else {
       chi2PerClusterTPC = esdTrack->GetTPCchi2()/Float_t(nClustersTPC);
     }
+    fracClustersTPCShared = Float_t(nClustersTPCShared)/Float_t(nClustersTPC);
   }
 
   Double_t extCov[15];
@@ -801,17 +813,22 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
     cuts[28+i] = !CheckITSClusterRequirement(fCutClusterRequirementITS[i], esdTrack->HasPointOnITSLayer(i*2), esdTrack->HasPointOnITSLayer(i*2+1));
   
   if (fCutRequireITSStandAlone && ((status & AliESDtrack::kITSin) == 0 || (status & AliESDtrack::kTPCin)))
-    cuts[31]=kTRUE;
+    cuts[31] = kTRUE;
   
   if (relUncertainty1Pt > fCutMaxRel1PtUncertainty)
-     cuts[32]=kTRUE;
-  
+     cuts[32] = kTRUE;
+
+  if (!fCutAcceptSharedTPCClusters && nClustersTPCShared!=0)
+    cuts[33] = kTRUE;
+
+  if (fracClustersTPCShared > fCutMaxFractionSharedTPCClusters)
+    cuts[34] = kTRUE;  
+
   Bool_t cut=kFALSE;
   for (Int_t i=0; i<kNCuts; i++) 
     if (cuts[i]) {cut = kTRUE;}
 
 
-
   //########################################################################
   // filling histograms
   if (fHistogramsOn) {
index 0af13b1..83aa717 100644 (file)
@@ -73,7 +73,9 @@ public:
   void SetRequireTPCStandAlone(Bool_t b=kFALSE)  {fCutRequireTPCStandAlone=b;}
   void SetRequireITSRefit(Bool_t b=kFALSE)       {fCutRequireITSRefit=b;}
   void SetRequireITSStandAlone(Bool_t b)         {fCutRequireITSStandAlone = b;}
-  void SetAcceptKinkDaughters(Bool_t b=kTRUE)   {fCutAcceptKinkDaughters=b;}
+  void SetAcceptKinkDaughters(Bool_t b=kTRUE)    {fCutAcceptKinkDaughters=b;}
+  void SetAcceptSharedTPCClusters(Bool_t b=kTRUE){fCutAcceptSharedTPCClusters=b;}
+  void SetMaxFractionSharedTPCClusters(Float_t max=1e10) {fCutMaxFractionSharedTPCClusters=max;}
   void SetMaxCovDiagonalElements(Float_t c1=1e10, Float_t c2=1e10, Float_t c3=1e10, Float_t c4=1e10, Float_t c5=1e10) 
     {fCutMaxC11=c1; fCutMaxC22=c2; fCutMaxC33=c3; fCutMaxC44=c4; fCutMaxC55=c5;}
   void SetMaxRel1PtUncertainty(Float_t max=1e10)      {fCutMaxRel1PtUncertainty=max;}
@@ -99,6 +101,8 @@ public:
   Bool_t  GetRequireITSRefit()       const   { return fCutRequireITSRefit;}
   Bool_t  GetRequireITSStandAlone()  const   { return fCutRequireITSStandAlone; }
   Bool_t  GetAcceptKinkDaughters()   const   { return fCutAcceptKinkDaughters;}
+  Bool_t  GetAcceptSharedTPCClusters()        const   {return fCutAcceptSharedTPCClusters;}
+  Float_t GetMaxFractionSharedTPCClusters()   const   {return fCutMaxFractionSharedTPCClusters;}
   void    GetMaxCovDiagonalElements(Float_t& c1, Float_t& c2, Float_t& c3, Float_t& c4, Float_t& c5) 
       {c1 = fCutMaxC11; c2 = fCutMaxC22; c3 = fCutMaxC33; c4 = fCutMaxC44; c5 = fCutMaxC55;}
   Float_t GetMaxRel1PtUncertainty()  const   { return fCutMaxRel1PtUncertainty;}
@@ -147,7 +151,7 @@ protected:
   void Init(); // sets everything to 0
   Bool_t CheckITSClusterRequirement(ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2);
   
-  enum { kNCuts = 33 }; 
+  enum { kNCuts = 35 }; 
 
   //######################################################
   // esd track quality cuts
@@ -170,6 +174,8 @@ protected:
   Float_t fCutMaxRel1PtUncertainty;   // max relative uncertainty of 1/pt
 
   Bool_t  fCutAcceptKinkDaughters;    // accepting kink daughters?
+  Bool_t  fCutAcceptSharedTPCClusters;// accepting shared clusters in TPC?
+  Float_t fCutMaxFractionSharedTPCClusters; //Maximum fraction of shared clusters in TPC
   Bool_t  fCutRequireTPCRefit;        // require TPC refit
   Bool_t  fCutRequireTPCStandAlone;   // require TPC standalone tracks
   Bool_t  fCutRequireITSRefit;        // require ITS refit