]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
New pt dependent dca cuts.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 8 Apr 2010 09:41:07 +0000 (09:41 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 8 Apr 2010 09:41:07 +0000 (09:41 +0000)
(A. Dainese)

ANALYSIS/AliESDtrackCuts.cxx
ANALYSIS/AliESDtrackCuts.h

index 8c142a131de207670fd24fe5856ee09e58d04f70..aabc85ebfa2183cbe29e5153b998ee75414a8d7c 100644 (file)
@@ -87,12 +87,17 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   fCutRequireTPCStandAlone(0),
   fCutRequireITSRefit(0),
   fCutRequireITSStandAlone(0),
+  fCutRejectITSpureSA(0),
   fCutNsigmaToVertex(0),
   fCutSigmaToVertexRequired(0),
   fCutMaxDCAToVertexXY(0),
   fCutMaxDCAToVertexZ(0),
   fCutMinDCAToVertexXY(0),
   fCutMinDCAToVertexZ(0),
+  fCutMaxDCAToVertexXYPtDep(""),
+  fCutMaxDCAToVertexZPtDep(""),
+  fCutMinDCAToVertexXYPtDep(""),
+  fCutMinDCAToVertexZPtDep(""),
   fCutDCAToVertex2D(0),
   fPMin(0),
   fPMax(0),
@@ -171,12 +176,17 @@ AliESDtrackCuts::AliESDtrackCuts(const AliESDtrackCuts &c) : AliAnalysisCuts(c),
   fCutRequireTPCStandAlone(0),
   fCutRequireITSRefit(0),
   fCutRequireITSStandAlone(0),
+  fCutRejectITSpureSA(0),
   fCutNsigmaToVertex(0),
   fCutSigmaToVertexRequired(0),
   fCutMaxDCAToVertexXY(0),
   fCutMaxDCAToVertexZ(0),
   fCutMinDCAToVertexXY(0),
   fCutMinDCAToVertexZ(0),
+  fCutMaxDCAToVertexXYPtDep(""),
+  fCutMaxDCAToVertexZPtDep(""),
+  fCutMinDCAToVertexXYPtDep(""),
+  fCutMinDCAToVertexZPtDep(""),
   fCutDCAToVertex2D(0),
   fPMin(0),
   fPMax(0),
@@ -296,6 +306,7 @@ void AliESDtrackCuts::Init()
   fCutRequireTPCStandAlone = 0;
   fCutRequireITSRefit = 0;
   fCutRequireITSStandAlone = 0;
+  fCutRejectITSpureSA = 0;
 
   fCutNsigmaToVertex = 0;
   fCutSigmaToVertexRequired = 0;
@@ -304,6 +315,10 @@ void AliESDtrackCuts::Init()
   fCutDCAToVertex2D = 0;
   fCutMinDCAToVertexXY = 0;
   fCutMinDCAToVertexZ = 0;
+  fCutMaxDCAToVertexXYPtDep = "";
+  fCutMaxDCAToVertexZPtDep = "";
+  fCutMinDCAToVertexXYPtDep = "";
+  fCutMinDCAToVertexZPtDep = "";
 
   
   fPMin = 0;
@@ -404,6 +419,7 @@ void AliESDtrackCuts::Copy(TObject &c) const
   target.fCutRequireTPCStandAlone = fCutRequireTPCStandAlone;
   target.fCutRequireITSRefit = fCutRequireITSRefit;
   target.fCutRequireITSStandAlone = fCutRequireITSStandAlone;
+  target.fCutRejectITSpureSA = fCutRejectITSpureSA;
 
   target.fCutNsigmaToVertex = fCutNsigmaToVertex;
   target.fCutSigmaToVertexRequired = fCutSigmaToVertexRequired;
@@ -412,6 +428,10 @@ void AliESDtrackCuts::Copy(TObject &c) const
   target.fCutDCAToVertex2D = fCutDCAToVertex2D;
   target.fCutMinDCAToVertexXY = fCutMinDCAToVertexXY;
   target.fCutMinDCAToVertexZ = fCutMinDCAToVertexZ;
+  target.fCutMaxDCAToVertexXYPtDep = fCutMaxDCAToVertexXYPtDep;
+  target.fCutMaxDCAToVertexZPtDep = fCutMaxDCAToVertexZPtDep;
+  target.fCutMinDCAToVertexXYPtDep = fCutMinDCAToVertexXYPtDep;
+  target.fCutMinDCAToVertexZPtDep = fCutMinDCAToVertexZPtDep;
 
   target.fPMin = fPMin;
   target.fPMax = fPMax;
@@ -550,6 +570,35 @@ AliESDtrackCuts* AliESDtrackCuts::GetStandardTPCOnlyTrackCuts()
   return esdTrackCuts;
 }
 
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries)
+{
+  // creates an AliESDtrackCuts object and fills it with standard values for ITS-TPC cuts for pp 2009 data
+  
+  Printf("AliESDtrackCuts::GetStandardITSTPCTrackCuts: Creating track cuts for ITS+TPC.");
+  
+  AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+
+  // TPC  
+  esdTrackCuts->SetMinNClustersTPC(70);
+  esdTrackCuts->SetMaxChi2PerClusterTPC(4);
+  esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+  // ITS
+  esdTrackCuts->SetRequireITSRefit(kTRUE);
+  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                        AliESDtrackCuts::kAny);
+  if(selPrimaries) {
+    // 7*(0.0050+0.0060/pt^0.9)
+    esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
+  }
+  esdTrackCuts->SetMaxDCAToVertexZ(1.e6);
+  esdTrackCuts->SetDCAToVertex2D(kFALSE);
+  esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  //esdTrackCuts->SetEtaRange(-0.8,+0.8);
+  
+  return esdTrackCuts;
+}
+
 //____________________________________________________________________
 Int_t AliESDtrackCuts::GetReferenceMultiplicity(AliESDEvent* esd, Bool_t tpcOnly)
 {
@@ -707,6 +756,11 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
     bCov[0]=0; bCov[2]=0;
   }
 
+
+  // set pt-dependent DCA cuts, if requested
+  SetPtDepDCACuts(esdTrack->Pt());
+
+
   Float_t dcaToVertexXY = b[0];
   Float_t dcaToVertexZ = b[1];
 
@@ -814,7 +868,11 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
   
   if (fCutRequireITSStandAlone && ((status & AliESDtrack::kITSin) == 0 || (status & AliESDtrack::kTPCin)))
     cuts[31] = kTRUE;
-  
+
+  if (fCutRejectITSpureSA && (status & AliESDtrack::kITSpureSA)) 
+    cuts[31] = kTRUE;
+
+
   if (relUncertainty1Pt > fCutMaxRel1PtUncertainty)
      cuts[32] = kTRUE;
 
@@ -1392,4 +1450,54 @@ void AliESDtrackCuts::DrawHistograms()
   fhChi2PerClusterTPC[1]->SetLineColor(2);
   fhChi2PerClusterTPC[1]->DrawCopy("SAME");*/
 }
+//--------------------------------------------------------------------------
+void AliESDtrackCuts::SetPtDepDCACuts(Double_t pt) {
+  //
+  // set the pt-dependent DCA cuts
+  //
+
+  if(CheckPtDepDCA(fCutMaxDCAToVertexXYPtDep)) {
+    TString formula=fCutMaxDCAToVertexXYPtDep;
+    formula.ReplaceAll("pt","x");
+    TFormula dcacut("dcacut",formula.Data());
+    fCutMaxDCAToVertexXY=dcacut.Eval(pt);
+  }
+
+  if(CheckPtDepDCA(fCutMaxDCAToVertexZPtDep)) {
+    TString formula=fCutMaxDCAToVertexZPtDep;
+    formula.ReplaceAll("pt","x");
+    TFormula dcacut("dcacut",formula.Data());
+    fCutMaxDCAToVertexZ=dcacut.Eval(pt);
+  }
+
+  if(CheckPtDepDCA(fCutMinDCAToVertexXYPtDep)) {
+    TString formula=fCutMinDCAToVertexXYPtDep;
+    formula.ReplaceAll("pt","x");
+    TFormula dcacut("dcacut",formula.Data());
+    fCutMinDCAToVertexXY=dcacut.Eval(pt);
+  }
+
+  if(CheckPtDepDCA(fCutMinDCAToVertexZPtDep)) {
+    TString formula=fCutMinDCAToVertexZPtDep;
+    formula.ReplaceAll("pt","x");
+    TFormula dcacut("dcacut",formula.Data());
+    fCutMinDCAToVertexZ=dcacut.Eval(pt);
+  }
+
+
+  return;
+}
+//--------------------------------------------------------------------------
+Bool_t AliESDtrackCuts::CheckPtDepDCA(TString dist,Bool_t print) const {
+  //
+  // Check the correctness of the string syntax
+  //
+  Bool_t retval=kTRUE;
+
+  if(!dist.Contains("pt")) {
+    if(print) printf("AliESDtrackCuts::CheckPtDepDCA(): string must contain \"pt\"\n");
+    retval= kFALSE;
+  } 
+  return retval;
+}
 
index 14fa10b4965c829353551ae135297b519c91274f..fce0de63043b8d156cc540a17c2715cacf4b105a 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef ALIESDTRACKCUTS_H
 #define ALIESDTRACKCUTS_H
 
+#include <TString.h>
+
 #include "AliAnalysisCuts.h"
 
 class AliESDEvent;
@@ -56,6 +58,8 @@ public:
   
   // Standard cut definitions
   static AliESDtrackCuts* GetStandardTPCOnlyTrackCuts();
+  static AliESDtrackCuts* GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE);
+
 
   virtual Long64_t Merge(TCollection* list);
   virtual void Copy(TObject &c) const;
@@ -72,7 +76,7 @@ public:
   void SetRequireTPCRefit(Bool_t b=kFALSE)       {fCutRequireTPCRefit=b;}
   void SetRequireTPCStandAlone(Bool_t b=kFALSE)  {fCutRequireTPCStandAlone=b;}
   void SetRequireITSRefit(Bool_t b=kFALSE)       {fCutRequireITSRefit=b;}
-  void SetRequireITSStandAlone(Bool_t b)         {fCutRequireITSStandAlone = b;}
+  void SetRequireITSStandAlone(Bool_t b,Bool_t rejectITSpureSA=kFALSE) {fCutRequireITSStandAlone = b; fCutRejectITSpureSA=rejectITSpureSA;}
   void SetAcceptKinkDaughters(Bool_t b=kTRUE)    {fCutAcceptKinkDaughters=b;}
   void SetAcceptSharedTPCClusters(Bool_t b=kTRUE){fCutAcceptSharedTPCClusters=b;}
   void SetMaxFractionSharedTPCClusters(Float_t max=1e10) {fCutMaxFractionSharedTPCClusters=max;}
@@ -87,8 +91,13 @@ public:
   void SetMaxDCAToVertexZ(Float_t dist=1e10)          {fCutMaxDCAToVertexZ = dist;}
   void SetMinDCAToVertexXY(Float_t dist=0.)           {fCutMinDCAToVertexXY = dist;}
   void SetMinDCAToVertexZ(Float_t dist=0.)            {fCutMinDCAToVertexZ = dist;}
+  void SetMaxDCAToVertexXYPtDep(const char *dist="")         {CheckPtDepDCA(dist,kTRUE); fCutMaxDCAToVertexXYPtDep = dist;}
+  void SetMaxDCAToVertexZPtDep(const char *dist="")          {CheckPtDepDCA(dist,kTRUE); fCutMaxDCAToVertexZPtDep = dist;}
+  void SetMinDCAToVertexXYPtDep(const char *dist="")           {CheckPtDepDCA(dist,kTRUE); fCutMinDCAToVertexXYPtDep = dist;}
+  void SetMinDCAToVertexZPtDep(const char *dist="")            {CheckPtDepDCA(dist,kTRUE); fCutMinDCAToVertexZPtDep= dist;}
   void SetDCAToVertex2D(Bool_t b=kFALSE)              {fCutDCAToVertex2D = b;}
 
+
   // getters
 
   Int_t   GetMinNClusterTPC()        const   { return fCutMinNClusterTPC;}
@@ -111,6 +120,10 @@ public:
   Float_t GetMaxDCAToVertexZ()       const   { return fCutMaxDCAToVertexZ;}
   Float_t GetMinDCAToVertexXY()      const   { return fCutMinDCAToVertexXY;}
   Float_t GetMinDCAToVertexZ()       const   { return fCutMinDCAToVertexZ;}
+  const char* GetMaxDCAToVertexXYPtDep() const   { return fCutMaxDCAToVertexXYPtDep;}
+  const char* GetMaxDCAToVertexZPtDep()  const   { return fCutMaxDCAToVertexZPtDep;}
+  const char* GetMinDCAToVertexXYPtDep() const   { return fCutMinDCAToVertexXYPtDep;}
+  const char* GetMinDCAToVertexZPtDep()  const   { return fCutMinDCAToVertexZPtDep;}
   Bool_t  GetDCAToVertex2D()         const   { return fCutDCAToVertex2D;}
   Bool_t  GetRequireSigmaToVertex( ) const   { return fCutSigmaToVertexRequired;}
 
@@ -150,7 +163,9 @@ public:
 protected:
   void Init(); // sets everything to 0
   Bool_t CheckITSClusterRequirement(ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2);
-  
+  Bool_t CheckPtDepDCA(TString dist,Bool_t print=kFALSE) const;
+  void SetPtDepDCACuts(Double_t pt);
+
   enum { kNCuts = 35 }; 
 
   //######################################################
@@ -180,6 +195,7 @@ protected:
   Bool_t  fCutRequireTPCStandAlone;   // require TPC standalone tracks
   Bool_t  fCutRequireITSRefit;        // require ITS refit
   Bool_t  fCutRequireITSStandAlone;   // require ITS standalone tracks
+  Bool_t  fCutRejectITSpureSA;        // reject  ITS standalone tracks found using all ITS clusters
 
   // track to vertex cut
   Float_t fCutNsigmaToVertex;         // max number of estimated sigma from track-to-vertex
@@ -188,6 +204,10 @@ protected:
   Float_t fCutMaxDCAToVertexZ;        // track-to-vertex cut in max absolute distance in z-plane
   Float_t fCutMinDCAToVertexXY;       // track-to-vertex cut on min absolute distance in xy-plane
   Float_t fCutMinDCAToVertexZ;        // track-to-vertex cut on min absolute distance in z-plane
+  TString fCutMaxDCAToVertexXYPtDep;  // pt-dep track-to-vertex cut in max absolute distance in xy-plane
+  TString fCutMaxDCAToVertexZPtDep;   // pt-dep track-to-vertex cut in max absolute distance in z-plane
+  TString fCutMinDCAToVertexXYPtDep;  // pt-dep track-to-vertex cut on min absolute distance in xy-plane
+  TString fCutMinDCAToVertexZPtDep;   // pt-dep track-to-vertex cut on min absolute distance in z-plane
   Bool_t  fCutDCAToVertex2D;          // if true a 2D DCA cut is made. Tracks are accepted if sqrt((DCAXY / fCutMaxDCAToVertexXY)^2 + (DCAZ / fCutMaxDCAToVertexZ)^2) < 1 AND sqrt((DCAXY / fCutMinDCAToVertexXY)^2 + (DCAZ / fCutMinDCAToVertexZ)^2) > 1
 
   // esd kinematics cuts
@@ -235,7 +255,7 @@ protected:
   TH1F*  fhCutStatistics;             //-> statistics of what cuts the tracks did not survive
   TH2F*  fhCutCorrelation;            //-> 2d statistics plot
 
-  ClassDef(AliESDtrackCuts, 9)
+  ClassDef(AliESDtrackCuts, 10)
 };