adding minimal DCA cut (Andrea)
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Dec 2008 11:43:30 +0000 (11:43 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Dec 2008 11:43:30 +0000 (11:43 +0000)
ANALYSIS/AliESDtrackCuts.cxx
ANALYSIS/AliESDtrackCuts.h

index 76fa89f..9f94dba 100644 (file)
@@ -52,9 +52,12 @@ const Char_t* AliESDtrackCuts::fgkCutNames[kNCuts] = {
  "p_{z}",
  "eta",
  "y",
- "trk-to-vtx dca 2D absolute",
- "trk-to-vtx dca xy absolute",
- "trk-to-vtx dca z absolute",
+ "trk-to-vtx max dca 2D absolute",
+ "trk-to-vtx max dca xy absolute",
+ "trk-to-vtx max dca z absolute",
+ "trk-to-vtx min dca 2D absolute",
+ "trk-to-vtx min dca xy absolute",
+ "trk-to-vtx min dca z absolute",
  "SPD cluster requirement",
  "SDD cluster requirement",
  "SSD cluster requirement"
@@ -76,8 +79,10 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   fCutRequireITSRefit(0),
   fCutNsigmaToVertex(0),
   fCutSigmaToVertexRequired(0),
-  fCutDCAToVertexXY(0),
-  fCutDCAToVertexZ(0),
+  fCutMaxDCAToVertexXY(0),
+  fCutMaxDCAToVertexZ(0),
+  fCutMinDCAToVertexXY(0),
+  fCutMinDCAToVertexZ(0),
   fCutDCAToVertex2D(0),
   fPMin(0),
   fPMax(0),
@@ -118,6 +123,8 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   SetMaxDCAToVertexXY();
   SetMaxDCAToVertexZ();
   SetDCAToVertex2D();
+  SetMinDCAToVertexXY();
+  SetMinDCAToVertexZ();
   SetPRange();
   SetPtRange();
   SetPxRange();
@@ -148,8 +155,10 @@ AliESDtrackCuts::AliESDtrackCuts(const AliESDtrackCuts &c) : AliAnalysisCuts(c),
   fCutRequireITSRefit(0),
   fCutNsigmaToVertex(0),
   fCutSigmaToVertexRequired(0),
-  fCutDCAToVertexXY(0),
-  fCutDCAToVertexZ(0),
+  fCutMaxDCAToVertexXY(0),
+  fCutMaxDCAToVertexZ(0),
+  fCutMinDCAToVertexXY(0),
+  fCutMinDCAToVertexZ(0),
   fCutDCAToVertex2D(0),
   fPMin(0),
   fPMax(0),
@@ -263,9 +272,12 @@ void AliESDtrackCuts::Init()
 
   fCutNsigmaToVertex = 0;
   fCutSigmaToVertexRequired = 0;
-  fCutDCAToVertexXY = 0;
-  fCutDCAToVertexZ = 0;
+  fCutMaxDCAToVertexXY = 0;
+  fCutMaxDCAToVertexZ = 0;
   fCutDCAToVertex2D = 0;
+  fCutMinDCAToVertexXY = 0;
+  fCutMinDCAToVertexZ = 0;
+
   
   fPMin = 0;
   fPMax = 0;
@@ -360,9 +372,11 @@ void AliESDtrackCuts::Copy(TObject &c) const
 
   target.fCutNsigmaToVertex = fCutNsigmaToVertex;
   target.fCutSigmaToVertexRequired = fCutSigmaToVertexRequired;
-  target.fCutDCAToVertexXY = fCutDCAToVertexXY;
-  target.fCutDCAToVertexZ = fCutDCAToVertexZ;
+  target.fCutMaxDCAToVertexXY = fCutMaxDCAToVertexXY;
+  target.fCutMaxDCAToVertexZ = fCutMaxDCAToVertexZ;
   target.fCutDCAToVertex2D = fCutDCAToVertex2D;
+  target.fCutMinDCAToVertexXY = fCutMinDCAToVertexXY;
+  target.fCutMinDCAToVertexZ = fCutMinDCAToVertexZ;
 
   target.fPMin = fPMin;
   target.fPMax = fPMax;
@@ -567,7 +581,6 @@ AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack) {
   // fTracks.fP   //GetMass
   // fTracks.fKinkIndexes
 
-
   UInt_t status = esdTrack->GetStatus();
 
   // getting quality parameters from the ESD track
@@ -601,12 +614,11 @@ AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack) {
   
   if (fCutDCAToVertex2D)
   {
-    dcaToVertex = TMath::Sqrt(dcaToVertexXY*dcaToVertexXY/fCutDCAToVertexXY/fCutDCAToVertexXY + dcaToVertexZ*dcaToVertexZ/fCutDCAToVertexZ/fCutDCAToVertexZ);
+    dcaToVertex = TMath::Sqrt(dcaToVertexXY*dcaToVertexXY/fCutMaxDCAToVertexXY/fCutMaxDCAToVertexXY + dcaToVertexZ*dcaToVertexZ/fCutMaxDCAToVertexZ/fCutMaxDCAToVertexZ);
   }
   else
     dcaToVertex = TMath::Sqrt(dcaToVertexXY*dcaToVertexXY + dcaToVertexZ*dcaToVertexZ);
-  
-
+    
   // getting the kinematic variables of the track
   // (assuming the mass is known)
   Double_t p[3];
@@ -679,17 +691,23 @@ AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack) {
     cuts[20] = kTRUE;
   if (fCutDCAToVertex2D && dcaToVertex > 1)
     cuts[21] = kTRUE;
-  if (!fCutDCAToVertex2D && TMath::Abs(dcaToVertexXY) > fCutDCAToVertexXY)
+  if (!fCutDCAToVertex2D && TMath::Abs(dcaToVertexXY) > fCutMaxDCAToVertexXY)
     cuts[22] = kTRUE;
-  if (!fCutDCAToVertex2D && TMath::Abs(dcaToVertexZ) > fCutDCAToVertexZ)
+  if (!fCutDCAToVertex2D && TMath::Abs(dcaToVertexZ) > fCutMaxDCAToVertexZ)
     cuts[23] = kTRUE;
+  if (fCutDCAToVertex2D && fCutMinDCAToVertexXY > 0 && fCutMinDCAToVertexZ > 0 && dcaToVertexXY*dcaToVertexXY/fCutMinDCAToVertexXY/fCutMinDCAToVertexXY + dcaToVertexZ*dcaToVertexZ/fCutMinDCAToVertexZ/fCutMinDCAToVertexZ < 1)
+    cuts[24] = kTRUE;
+  if (!fCutDCAToVertex2D && TMath::Abs(dcaToVertexXY) < fCutMinDCAToVertexXY)
+    cuts[25] = kTRUE;
+  if (!fCutDCAToVertex2D && TMath::Abs(dcaToVertexZ) < fCutMinDCAToVertexZ)
+    cuts[26] = kTRUE;
   
   for (Int_t i = 0; i < 3; i++)
-    cuts[24+i] = !CheckITSClusterRequirement(fCutClusterRequirementITS[i], esdTrack->HasPointOnITSLayer(i*2), esdTrack->HasPointOnITSLayer(i*2+1));
+    cuts[27+i] = !CheckITSClusterRequirement(fCutClusterRequirementITS[i], esdTrack->HasPointOnITSLayer(i*2), esdTrack->HasPointOnITSLayer(i*2+1));
 
   Bool_t cut=kFALSE;
   for (Int_t i=0; i<kNCuts; i++) 
-    if (cuts[i]) cut = kTRUE;
+    if (cuts[i]) {cut = kTRUE;}
 
 
 
index d2a860f..27865f7 100644 (file)
@@ -70,8 +70,10 @@ public:
   // track to vertex cut setters
   void SetMaxNsigmaToVertex(Float_t sigma=1e10)       {fCutNsigmaToVertex = sigma; SetRequireSigmaToVertex(kTRUE);}
   void SetRequireSigmaToVertex(Bool_t b=kTRUE )       {fCutSigmaToVertexRequired = b;}
-  void SetMaxDCAToVertexXY(Float_t dist=1e10)         {fCutDCAToVertexXY = dist;}
-  void SetMaxDCAToVertexZ(Float_t dist=1e10)          {fCutDCAToVertexZ = dist;}
+  void SetMaxDCAToVertexXY(Float_t dist=1e10)         {fCutMaxDCAToVertexXY = dist;}
+  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 SetDCAToVertex2D(Bool_t b=kFALSE)              {fCutDCAToVertex2D = b;}
   
   // deprecated, will be removed in next release
@@ -95,8 +97,10 @@ public:
   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 GetMaxNsigmaToVertex()     const   { return fCutNsigmaToVertex;}
-  Float_t GetMaxDCAToVertexXY()       const   { return fCutDCAToVertexXY;}
-  Float_t GetMaxDCAToVertexZ()       const   { return fCutDCAToVertexZ;}
+  Float_t GetMaxDCAToVertexXY()      const   { return fCutMaxDCAToVertexXY;}
+  Float_t GetMaxDCAToVertexZ()       const   { return fCutMaxDCAToVertexZ;}
+  Float_t GetMinDCAToVertexXY()      const   { return fCutMinDCAToVertexXY;}
+  Float_t GetMinDCAToVertexZ()       const   { return fCutMinDCAToVertexZ;}
   Bool_t  GetDCAToVertex2D()         const   { return fCutDCAToVertex2D;}
   Bool_t  GetRequireSigmaToVertex( ) const   { return fCutSigmaToVertexRequired;}
 
@@ -137,7 +141,7 @@ protected:
   void Init(); // sets everything to 0
   Bool_t CheckITSClusterRequirement(ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2);
   
-  enum { kNCuts = 27 };
+  enum { kNCuts = 30 };
 
   //######################################################
   // esd track quality cuts
@@ -164,9 +168,11 @@ protected:
   // track to vertex cut
   Float_t fCutNsigmaToVertex;         // max number of estimated sigma from track-to-vertex
   Bool_t  fCutSigmaToVertexRequired;  // cut track if sigma from track-to-vertex could not be calculated
-  Float_t fCutDCAToVertexXY;          // track-to-vertex cut in absolute distance in xy-plane
-  Float_t fCutDCAToVertexZ;           // track-to-vertex cut in absolute distance in z-plane
-  Bool_t  fCutDCAToVertex2D;          // if true a 2D DCA cut using fCutDCAToVertexXY and fCutDCAToVertexZ is made. Tracks are accepted if sqrt((DCAXY / fCutDCAToVertexXY)^2 + (DCAZ / fCutDCAToVertexZ)^2) < 1
+  Float_t fCutMaxDCAToVertexXY;       // track-to-vertex cut in max absolute distance in xy-plane
+  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
+  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
   Float_t fPMin,   fPMax;             // definition of the range of the P
@@ -211,7 +217,7 @@ protected:
   TH1F*  fhCutStatistics;             //-> statistics of what cuts the tracks did not survive
   TH2F*  fhCutCorrelation;            //-> 2d statistics plot
 
-  ClassDef(AliESDtrackCuts, 4)
+  ClassDef(AliESDtrackCuts, 5)
 };