Adding track cut on clusters in SPD, SDD, SSD
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Nov 2008 09:10:34 +0000 (09:10 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Nov 2008 09:10:34 +0000 (09:10 +0000)
Correcting some incorrect function names (old functions still exist and print a deprecated warning. to be removed soon)

ANALYSIS/AliESDtrackCuts.cxx
ANALYSIS/AliESDtrackCuts.h

index 75d3bfa..4d3ecb0 100644 (file)
@@ -54,7 +54,10 @@ const Char_t* AliESDtrackCuts::fgkCutNames[kNCuts] = {
  "eta",
  "trk-to-vtx dca absolute",
  "trk-to-vtx dca xy absolute",
- "trk-to-vtx dca z absolute"
+ "trk-to-vtx dca z absolute",
+ "SPD cluster requirement",
+ "SDD cluster requirement",
+ "SSD cluster requirement"
 };
 
 //____________________________________________________________________
@@ -111,11 +114,11 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   SetRequireTPCRefit();
   SetRequireITSRefit();
   SetAcceptKingDaughters();
-  SetMinNsigmaToVertex();
+  SetMaxNsigmaToVertex();
   SetRequireSigmaToVertex();
-  SetDCAToVertex();
-  SetDCAToVertexXY();
-  SetDCAToVertexZ();
+  SetMaxDCAToVertex();
+  SetMaxDCAToVertexXY();
+  SetMaxDCAToVertexZ();
   SetPRange();
   SetPtRange();
   SetPxRange();
@@ -123,6 +126,9 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   SetPzRange();
   SetEtaRange();
   SetRapRange();
+  SetClusterRequirementITS(kSPD);
+  SetClusterRequirementITS(kSDD);
+  SetClusterRequirementITS(kSSD);
 
   SetHistogramsOn();
 }
@@ -242,6 +248,9 @@ void AliESDtrackCuts::Init()
 
   fCutMaxChi2PerClusterTPC = 0;
   fCutMaxChi2PerClusterITS = 0;
+  
+  for (Int_t i = 0; i < 3; i++)
+       fCutClusterRequirementITS[i] = kOff;
 
   fCutMaxC11 = 0;
   fCutMaxC22 = 0;
@@ -337,6 +346,9 @@ void AliESDtrackCuts::Copy(TObject &c) const
   target.fCutMaxChi2PerClusterTPC = fCutMaxChi2PerClusterTPC;
   target.fCutMaxChi2PerClusterITS = fCutMaxChi2PerClusterITS;
 
+  for (Int_t i = 0; i < 3; i++)
+    target.fCutClusterRequirementITS[i] = fCutClusterRequirementITS[i];
+
   target.fCutMaxC11 = fCutMaxC11;
   target.fCutMaxC22 = fCutMaxC22;
   target.fCutMaxC33 = fCutMaxC33;
@@ -664,6 +676,9 @@ AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack) {
     cuts[22] = kTRUE;
   if (TMath::Abs(dcaToVertexZ) > fCutDCAToVertexZ)
     cuts[23] = kTRUE;
+  
+  for (Int_t i = 0; i < 3; i++)
+    cuts[24+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++) 
@@ -742,6 +757,26 @@ AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack) {
 }
 
 //____________________________________________________________________
+Bool_t AliESDtrackCuts::CheckITSClusterRequirement(ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2)
+{
+  // checks if the cluster requirement is fullfilled (in this case: return kTRUE)
+  
+  switch (req)
+  {
+       case kOff:        return kTRUE;
+       case kNone:       return !clusterL1 && !clusterL2;
+       case kAny:        return clusterL1 || clusterL2;
+       case kFirst:      return clusterL1;
+       case kOnlyFirst:  return clusterL1 && !clusterL2;
+       case kSecond:     return clusterL2;
+       case kOnlySecond: return clusterL2 && !clusterL1;
+       case kBoth:       return clusterL1 && clusterL2;
+  }
+  
+  return kFALSE;
+}
+
+//____________________________________________________________________
 AliESDtrack* AliESDtrackCuts::GetTPCOnlyTrack(AliESDEvent* esd, Int_t iTrack)
 {
   // creates a TPC only track from the given esd track
@@ -1204,3 +1239,47 @@ void AliESDtrackCuts::DrawHistograms()
   fhChi2PerClusterTPC[1]->DrawCopy("SAME");*/
 }
 
+Float_t AliESDtrackCuts::GetMinNsigmaToVertex() const
+{
+  // deprecated, please use GetMaxNsigmaToVertex
+
+  Printf("WARNING: AliESDtrackCuts::GetMinNsigmaToVertex is DEPRECATED and will be removed in the next release. Please use GetMaxNsigmaToVertex instead. Renaming was done to improve code readability.");
+
+  return GetMaxNsigmaToVertex();
+}
+
+void AliESDtrackCuts::SetMinNsigmaToVertex(Float_t sigma)
+{
+  // deprecated, will be removed in next release
+
+  Printf("WARNING: AliESDtrackCuts::SetMinNsigmaToVertex is DEPRECATED and will be removed in the next release. Please use SetMaxNsigmaToVertex instead. Renaming was done to improve code readability.");
+  
+  SetMaxNsigmaToVertex(sigma);
+}
+
+void AliESDtrackCuts::SetDCAToVertex(Float_t dist)
+{
+  // deprecated, will be removed in next release
+
+  Printf("WARNING: AliESDtrackCuts::SetDCAToVertex is DEPRECATED and will be removed in the next release. Please use SetMaxDCAToVertex instead. Renaming was done to improve code readability.");
+  
+  SetMaxDCAToVertex(dist);
+}
+  
+void AliESDtrackCuts::SetDCAToVertexXY(Float_t dist)
+{
+  // deprecated, will be removed in next release
+
+  Printf("WARNING: AliESDtrackCuts::SetDCAToVertexXY is DEPRECATED and will be removed in the next release. Please use SetMaxDCAToVertexXY instead. Renaming was done to improve code readability.");
+  
+  SetMaxDCAToVertexXY(dist);
+}
+  
+void AliESDtrackCuts::SetDCAToVertexZ(Float_t dist)
+{
+  // deprecated, will be removed in next release
+
+  Printf("WARNING: AliESDtrackCuts::SetDCAToVertexZ is DEPRECATED and will be removed in the next release. Please use SetMaxDCAToVertexZ instead. Renaming was done to improve code readability.");
+  
+  SetMaxDCAToVertexZ(dist);
+}
index b1dd4f7..13cd3c2 100644 (file)
@@ -33,6 +33,9 @@ class TTree;
 class AliESDtrackCuts : public AliAnalysisCuts
 {
 public:
+  enum ITSClusterRequirement { kOff = 0, kNone, kAny, kFirst, kOnlyFirst, kSecond, kOnlySecond, kBoth };
+  enum Detector { kSPD = 0, kSDD, kSSD };
+  
   AliESDtrackCuts(const Char_t* name = "AliESDtrackCuts", const Char_t* title = "");
   virtual ~AliESDtrackCuts();
 
@@ -55,6 +58,7 @@ public:
   // track quality cut setters  
   void SetMinNClustersTPC(Int_t min=-1)          {fCutMinNClusterTPC=min;}
   void SetMinNClustersITS(Int_t min=-1)          {fCutMinNClusterITS=min;}
+  void SetClusterRequirementITS(Detector det, ITSClusterRequirement req = kOff) { fCutClusterRequirementITS[det] = req; }
   void SetMaxChi2PerClusterTPC(Float_t max=1e10) {fCutMaxChi2PerClusterTPC=max;}
   void SetMaxChi2PerClusterITS(Float_t max=1e10) {fCutMaxChi2PerClusterITS=max;}
   void SetRequireTPCRefit(Bool_t b=kFALSE)       {fCutRequireTPCRefit=b;}
@@ -64,16 +68,24 @@ public:
     {fCutMaxC11=c1; fCutMaxC22=c2; fCutMaxC33=c3; fCutMaxC44=c4; fCutMaxC55=c5;}
 
   // track to vertex cut setters
-  void SetMinNsigmaToVertex(Float_t sigma=1e10)       {fCutNsigmaToVertex = sigma;}
+  void SetMaxNsigmaToVertex(Float_t sigma=1e10)       {fCutNsigmaToVertex = sigma;}
   void SetRequireSigmaToVertex(Bool_t b=kTRUE )       {fCutSigmaToVertexRequired = b;}
-  void SetDCAToVertex(Float_t dist=1e10)              {fCutDCAToVertex = dist;}
-  void SetDCAToVertexXY(Float_t dist=1e10)            {fCutDCAToVertexXY = dist;}
-  void SetDCAToVertexZ(Float_t dist=1e10)             {fCutDCAToVertexZ = dist;}
+  void SetMaxDCAToVertex(Float_t dist=1e10)           {fCutDCAToVertex = dist;}
+  void SetMaxDCAToVertexXY(Float_t dist=1e10)         {fCutDCAToVertexXY = dist;}
+  void SetMaxDCAToVertexZ(Float_t dist=1e10)          {fCutDCAToVertexZ = dist;}
+  
+  // deprecated, will be removed in next release
+  void SetMinNsigmaToVertex(Float_t sigma=1e10);
+  void SetDCAToVertex(Float_t dist=1e10);
+  void SetDCAToVertexXY(Float_t dist=1e10);
+  void SetDCAToVertexZ(Float_t dist=1e10);
+  Float_t GetMinNsigmaToVertex() const;
 
   // getters
 
   Int_t   GetMinNClusterTPC()        const   { return fCutMinNClusterTPC;}
   Int_t   GetMinNClustersITS()       const   { return fCutMinNClusterITS;}
+  ITSClusterRequirement GetClusterRequirementITS(Detector det) const { return fCutClusterRequirementITS[det]; }
   Float_t GetMaxChi2PerClusterTPC()  const   { return fCutMaxChi2PerClusterTPC;}
   Float_t GetMaxChi2PerClusterITS()  const   { return fCutMaxChi2PerClusterITS;}
   Bool_t  GetRequireTPCRefit()       const   { return fCutRequireTPCRefit;}
@@ -81,9 +93,10 @@ public:
   Bool_t  GetAcceptKingDaughters()   const   { return fCutAcceptKinkDaughters;}
   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 GetMinNsigmaToVertex()     const   { return fCutNsigmaToVertex;}
-  Float_t GetDCAToVertex()           const   { return fCutDCAToVertex;}
-  Float_t GetDCAToVertexXY()         const   { return fCutDCAToVertexXY;}
+  Float_t GetMaxNsigmaToVertex()     const   { return fCutNsigmaToVertex;}
+  Float_t GetMaxDCAToVertex()         const   { return fCutDCAToVertex;}
+  Float_t GetMaxDCAToVertexXY()       const   { return fCutDCAToVertexXY;}
+  Float_t GetMaxDCAToVertexZ()       const   { return fCutDCAToVertexZ;}
   Bool_t  GetRequireSigmaToVertex( ) const   { return fCutSigmaToVertexRequired;}
 
   void GetPRange(Float_t& r1, Float_t& r2)   {r1=fPMin;   r2=fPMax;}
@@ -121,8 +134,9 @@ public:
 
 protected:
   void Init(); // sets everything to 0
-
-  enum { kNCuts = 24 };
+  Bool_t CheckITSClusterRequirement(ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2);
+  
+  enum { kNCuts = 27 };
 
   //######################################################
   // esd track quality cuts
@@ -130,6 +144,8 @@ protected:
 
   Int_t   fCutMinNClusterTPC;         // min number of tpc clusters
   Int_t   fCutMinNClusterITS;         // min number of its clusters
+  
+  ITSClusterRequirement fCutClusterRequirementITS[3];  // detailed ITS cluster requirements for (SPD, SDD, SSD)
 
   Float_t fCutMaxChi2PerClusterTPC;   // max tpc fit chi2 per tpc cluster
   Float_t fCutMaxChi2PerClusterITS;   // max its fit chi2 per its cluster
@@ -194,7 +210,7 @@ protected:
   TH1F*  fhCutStatistics;             //-> statistics of what cuts the tracks did not survive
   TH2F*  fhCutCorrelation;            //-> 2d statistics plot
 
-  ClassDef(AliESDtrackCuts, 2)
+  ClassDef(AliESDtrackCuts, 3)
 };