More user-friendly selection for ITS standalone tracks and allows to select tracks...
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 8 Sep 2010 15:36:04 +0000 (15:36 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 8 Sep 2010 15:36:04 +0000 (15:36 +0000)
used for ITS PID (= having >=3 clusters in SDD and SSD).
(F. Prino)

ANALYSIS/AliESDtrackCuts.cxx
ANALYSIS/AliESDtrackCuts.h
PWG2/RESONANCES/AliRsnCutESD2010.cxx

index 340c1df..68b90d9 100644 (file)
@@ -65,7 +65,8 @@ const Char_t* AliESDtrackCuts::fgkCutNames[kNCuts] = {
  "SDD cluster requirement",
  "SSD cluster requirement",
  "require ITS stand-alone",
- "rel 1/pt uncertainty"
+ "rel 1/pt uncertainty",
+ "require ITS Pid"
 };
 
 //____________________________________________________________________
@@ -85,9 +86,10 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   fCutMaxFractionSharedTPCClusters(0),
   fCutRequireTPCRefit(0),
   fCutRequireTPCStandAlone(0),
-  fCutRequireITSRefit(0),
+  fCutRequireITSRefit(0), 
+  fCutRequireITSPid(0),
   fCutRequireITSStandAlone(0),
-  fCutRejectITSpureSA(0),
+  fCutRequireITSpureSA(0),
   fCutNsigmaToVertex(0),
   fCutSigmaToVertexRequired(0),
   fCutMaxDCAToVertexXY(0),
@@ -139,7 +141,9 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   SetRequireTPCRefit();
   SetRequireTPCStandAlone();
   SetRequireITSRefit();
+  SetRequireITSPid(kFALSE);
   SetRequireITSStandAlone(kFALSE);
+  SetRequireITSPureStandAlone(kFALSE);
   SetAcceptKinkDaughters();
   SetMaxNsigmaToVertex();
   SetMaxDCAToVertexXY();
@@ -179,8 +183,9 @@ AliESDtrackCuts::AliESDtrackCuts(const AliESDtrackCuts &c) : AliAnalysisCuts(c),
   fCutRequireTPCRefit(0),
   fCutRequireTPCStandAlone(0),
   fCutRequireITSRefit(0),
+  fCutRequireITSPid(0),
   fCutRequireITSStandAlone(0),
-  fCutRejectITSpureSA(0),
+  fCutRequireITSpureSA(0),
   fCutNsigmaToVertex(0),
   fCutSigmaToVertexRequired(0),
   fCutMaxDCAToVertexXY(0),
@@ -323,8 +328,9 @@ void AliESDtrackCuts::Init()
   fCutRequireTPCRefit = 0;
   fCutRequireTPCStandAlone = 0;
   fCutRequireITSRefit = 0;
+  fCutRequireITSPid = 0;
   fCutRequireITSStandAlone = 0;
-  fCutRejectITSpureSA = 0;
+  fCutRequireITSpureSA = 0;
 
   fCutNsigmaToVertex = 0;
   fCutSigmaToVertexRequired = 0;
@@ -447,8 +453,9 @@ void AliESDtrackCuts::Copy(TObject &c) const
   target.fCutRequireTPCRefit = fCutRequireTPCRefit;
   target.fCutRequireTPCStandAlone = fCutRequireTPCStandAlone;
   target.fCutRequireITSRefit = fCutRequireITSRefit;
+  target.fCutRequireITSPid = fCutRequireITSPid;
   target.fCutRequireITSStandAlone = fCutRequireITSStandAlone;
-  target.fCutRejectITSpureSA = fCutRejectITSpureSA;
+  target.fCutRequireITSpureSA = fCutRequireITSpureSA;
 
   target.fCutNsigmaToVertex = fCutNsigmaToVertex;
   target.fCutSigmaToVertexRequired = fCutSigmaToVertexRequired;
@@ -636,6 +643,52 @@ AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(Bool_t selPrima
   
   return esdTrackCuts;
 }
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSPureSATrackCuts2009(Bool_t selPrimaries, Bool_t useForPid)
+{
+  // creates an AliESDtrackCuts object and fills it with standard values for ITS pure SA tracks
+  
+  AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+  esdTrackCuts->SetRequireITSPureStandAlone(kTRUE);
+  esdTrackCuts->SetRequireITSRefit(kTRUE); 
+  esdTrackCuts->SetMinNClustersITS(4);
+  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                        AliESDtrackCuts::kAny);
+  esdTrackCuts->SetMaxChi2PerClusterITS(1.);
+
+  if(selPrimaries) {
+    // 7*(0.0085+0.0026/pt^1.55)
+    esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0595+0.0182/pt^1.55");
+  }
+  if(useForPid){
+    esdTrackCuts->SetRequireITSPid(kTRUE);
+  }
+  return esdTrackCuts;
+}
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSSATrackCuts2009(Bool_t selPrimaries, Bool_t useForPid)
+{
+  // creates an AliESDtrackCuts object and fills it with standard values for ITS pure SA tracks
+  
+  AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+  esdTrackCuts->SetRequireITSStandAlone(kTRUE);
+  esdTrackCuts->SetRequireITSPureStandAlone(kFALSE);
+  esdTrackCuts->SetRequireITSRefit(kTRUE); 
+  esdTrackCuts->SetMinNClustersITS(4);
+  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                        AliESDtrackCuts::kAny);
+  esdTrackCuts->SetMaxChi2PerClusterITS(1.);
+
+  if(selPrimaries) {
+    // 7*(0.0085+0.0026/pt^1.55)
+    esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0595+0.0182/pt^1.55");
+  }
+  if(useForPid){
+    esdTrackCuts->SetRequireITSPid(kTRUE);
+  }
+  return esdTrackCuts;
+}
+
 
 //____________________________________________________________________
 Int_t AliESDtrackCuts::GetReferenceMultiplicity(AliESDEvent* esd, Bool_t tpcOnly)
@@ -904,12 +957,19 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
   for (Int_t i = 0; i < 3; i++)
     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;
-
-  if (fCutRejectITSpureSA && (status & AliESDtrack::kITSpureSA)) 
-    cuts[31] = kTRUE;
-
+  if(fCutRequireITSStandAlone || fCutRequireITSpureSA){
+    if ((status & AliESDtrack::kITSin) == 0 || (status & AliESDtrack::kTPCin)){
+      // TPC tracks
+      cuts[31] = kTRUE; 
+    }else{
+      // ITS standalone tracks
+      if(fCutRequireITSStandAlone && !fCutRequireITSpureSA){
+       if(status & AliESDtrack::kITSpureSA) cuts[31] = kTRUE;
+      }else if(fCutRequireITSpureSA){
+       if(!(status & AliESDtrack::kITSpureSA)) cuts[31] = kTRUE;
+      }
+    }
+  }
 
   if (relUncertainty1Pt > fCutMaxRel1PtUncertainty)
      cuts[32] = kTRUE;
@@ -920,6 +980,15 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
   if (fracClustersTPCShared > fCutMaxFractionSharedTPCClusters)
     cuts[34] = kTRUE;  
 
+  if(fCutRequireITSPid){
+    UChar_t clumap=esdTrack->GetITSClusterMap();
+    Int_t nPointsForPid=0;
+    for(Int_t i=2; i<6; i++){
+      if(clumap&(1<<i)) ++nPointsForPid;
+    }
+    if(nPointsForPid<3) cuts[35] = kTRUE;
+  }
+
   Bool_t cut=kFALSE;
   for (Int_t i=0; i<kNCuts; i++) 
     if (cuts[i]) {cut = kTRUE;}
index c3864b3..261669f 100644 (file)
@@ -60,7 +60,8 @@ public:
   // Standard cut definitions
   static AliESDtrackCuts* GetStandardTPCOnlyTrackCuts();
   static AliESDtrackCuts* GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE);
-
+  static AliESDtrackCuts* GetStandardITSSATrackCuts2009(Bool_t selPrimaries=kTRUE, Bool_t useForPid=kTRUE);
+  static AliESDtrackCuts* GetStandardITSPureSATrackCuts2009(Bool_t selPrimaries=kTRUE, Bool_t useForPid=kTRUE);
 
   virtual Long64_t Merge(TCollection* list);
   virtual void Copy(TObject &c) const;
@@ -77,7 +78,11 @@ 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,Bool_t rejectITSpureSA=kFALSE) {fCutRequireITSStandAlone = b; fCutRejectITSpureSA=rejectITSpureSA;}
+  void SetRequireITSPid(Bool_t b=kFALSE)         {fCutRequireITSPid=b;}
+  void SetRequireITSStandAlone(Bool_t b=kFALSE)    {fCutRequireITSStandAlone = b;} 
+  void SetRequireITSPureStandAlone(Bool_t b=kFALSE){fCutRequireITSpureSA = 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;}
@@ -167,7 +172,7 @@ protected:
   Bool_t CheckPtDepDCA(TString dist,Bool_t print=kFALSE) const;
   void SetPtDepDCACuts(Double_t pt);
 
-  enum { kNCuts = 35 }; 
+  enum { kNCuts = 36 }; 
 
   //######################################################
   // esd track quality cuts
@@ -195,8 +200,9 @@ protected:
   Bool_t  fCutRequireTPCRefit;        // require TPC refit
   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
+  Bool_t  fCutRequireITSPid;          // require ITS refit
+  Bool_t  fCutRequireITSStandAlone;   // require ITS standalone tracks (remove pure SA)
+  Bool_t  fCutRequireITSpureSA;       // require ITS pure standalone tracks (found using all ITS clusters)
 
   // track to vertex cut
   Float_t fCutNsigmaToVertex;         // max number of estimated sigma from track-to-vertex
index 1f3267c..f75bec2 100644 (file)
@@ -154,7 +154,7 @@ void AliRsnCutESD2010::InitializeToDefaults(Bool_t isSim)
   fESDtrackCutsTPC.SetRequireSigmaToVertex(kFALSE);
   
   // ----> set standard quality cuts for ITS standalone tracks
-  fESDtrackCutsITS.SetRequireITSStandAlone(kTRUE, kTRUE);
+  fESDtrackCutsITS.SetRequireITSStandAlone(kTRUE);
   fESDtrackCutsITS.SetRequireITSRefit(kTRUE);
   fESDtrackCutsITS.SetMinNClustersITS(4);
   fESDtrackCutsITS.SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);