]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliESDtrackCuts.cxx
Doxygen documentation fixes
[u/mrichter/AliRoot.git] / ANALYSIS / AliESDtrackCuts.cxx
index b65597df4601f5d6116afc0c4ca3801158eba528..9cc2650df616d8ec7009f1199863e1c5a48ee136 100644 (file)
@@ -71,6 +71,7 @@ const Char_t* AliESDtrackCuts::fgkCutNames[kNCuts] = {
  "require ITS Pid",
  "n crossed rows TPC",
  "n crossed rows / n findable clusters",
+ "missing ITS points"
 };
 
 //____________________________________________________________________
@@ -81,6 +82,7 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   fCutMinRatioCrossedRowsOverFindableClustersTPC(0),
   fCutMaxChi2PerClusterTPC(0),
   fCutMaxChi2PerClusterITS(0),
+  fCutMaxMissingITSPoints(0),
   fCutMaxC11(0),
   fCutMaxC22(0),
   fCutMaxC33(0),
@@ -144,6 +146,7 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   SetMinRatioCrossedRowsOverFindableClustersTPC();
   SetMaxChi2PerClusterTPC();
   SetMaxChi2PerClusterITS();                               
+  SetMaxNOfMissingITSPoints();
   SetMaxCovDiagonalElements();
   SetMaxRel1PtUncertainty();
   SetRequireTPCRefit();
@@ -183,6 +186,7 @@ AliESDtrackCuts::AliESDtrackCuts(const AliESDtrackCuts &c) : AliAnalysisCuts(c),
   fCutMinRatioCrossedRowsOverFindableClustersTPC(0),
   fCutMaxChi2PerClusterTPC(0),
   fCutMaxChi2PerClusterITS(0),
+  fCutMaxMissingITSPoints(0),
   fCutMaxC11(0),
   fCutMaxC22(0),
   fCutMaxC33(0),
@@ -251,6 +255,8 @@ AliESDtrackCuts::~AliESDtrackCuts()
       delete fhNClustersITS[i];            
     if (fhNClustersTPC[i])
       delete fhNClustersTPC[i];                
+    if (fhNSharedClustersTPC[i])
+      delete fhNSharedClustersTPC[i];                
     if (fhNCrossedRowsTPC[i])
       delete fhNCrossedRowsTPC[i];                
     if (fhRatioCrossedRowsOverFindableClustersTPC[i])
@@ -258,7 +264,11 @@ AliESDtrackCuts::~AliESDtrackCuts()
     if (fhChi2PerClusterITS[i])
       delete fhChi2PerClusterITS[i];       
     if (fhChi2PerClusterTPC[i])
-      delete fhChi2PerClusterTPC[i];       
+      delete fhChi2PerClusterTPC[i];    
+    if(fhNClustersForITSPID[i])
+      delete fhNClustersForITSPID[i];
+    if(fhNMissingITSPoints[i])
+      delete fhNMissingITSPoints[i];
     if (fhC11[i])
       delete fhC11[i];                     
     if (fhC22[i])
@@ -326,6 +336,7 @@ void AliESDtrackCuts::Init()
 
   fCutMaxChi2PerClusterTPC = 0;
   fCutMaxChi2PerClusterITS = 0;
+  fCutMaxMissingITSPoints  = 0;
   
   for (Int_t i = 0; i < 3; i++)
        fCutClusterRequirementITS[i] = kOff;
@@ -393,11 +404,14 @@ void AliESDtrackCuts::Init()
   {
     fhNClustersITS[i] = 0;
     fhNClustersTPC[i] = 0;
+    fhNSharedClustersTPC[i] = 0;
     fhNCrossedRowsTPC[i] = 0;
     fhRatioCrossedRowsOverFindableClustersTPC[i] = 0;
 
     fhChi2PerClusterITS[i] = 0;
     fhChi2PerClusterTPC[i] = 0;
+    fhNClustersForITSPID[i] = 0;
+    fhNMissingITSPoints[i] = 0;
 
     fhC11[i] = 0;
     fhC22[i] = 0;
@@ -456,6 +470,7 @@ void AliESDtrackCuts::Copy(TObject &c) const
 
   target.fCutMaxChi2PerClusterTPC = fCutMaxChi2PerClusterTPC;
   target.fCutMaxChi2PerClusterITS = fCutMaxChi2PerClusterITS;
+  target.fCutMaxMissingITSPoints = fCutMaxMissingITSPoints;
 
   for (Int_t i = 0; i < 3; i++)
     target.fCutClusterRequirementITS[i] = fCutClusterRequirementITS[i];
@@ -519,11 +534,14 @@ void AliESDtrackCuts::Copy(TObject &c) const
   {
     if (fhNClustersITS[i]) target.fhNClustersITS[i] = (TH1F*) fhNClustersITS[i]->Clone();
     if (fhNClustersTPC[i]) target.fhNClustersTPC[i] = (TH1F*) fhNClustersTPC[i]->Clone();
+    if (fhNSharedClustersTPC[i]) target.fhNSharedClustersTPC[i] = (TH1F*) fhNSharedClustersTPC[i]->Clone();
     if (fhNCrossedRowsTPC[i]) target.fhNCrossedRowsTPC[i] = (TH1F*) fhNCrossedRowsTPC[i]->Clone();
     if (fhRatioCrossedRowsOverFindableClustersTPC[i]) target.fhRatioCrossedRowsOverFindableClustersTPC[i] = (TH1F*) fhRatioCrossedRowsOverFindableClustersTPC[i]->Clone();
 
     if (fhChi2PerClusterITS[i]) target.fhChi2PerClusterITS[i] = (TH1F*) fhChi2PerClusterITS[i]->Clone();
     if (fhChi2PerClusterTPC[i]) target.fhChi2PerClusterTPC[i] = (TH1F*) fhChi2PerClusterTPC[i]->Clone();
+    if (fhNClustersForITSPID[i]) target.fhNClustersForITSPID[i] = (TH1F*) fhNClustersForITSPID[i]->Clone();
+    if (fhNMissingITSPoints[i]) target.fhNMissingITSPoints[i] = (TH1F*) fhNMissingITSPoints[i]->Clone();
 
     if (fhC11[i]) target.fhC11[i] = (TH1F*) fhC11[i]->Clone();
     if (fhC22[i]) target.fhC22[i] = (TH1F*) fhC22[i]->Clone();
@@ -582,12 +600,20 @@ Long64_t AliESDtrackCuts::Merge(TCollection* list) {
       
       fhNClustersITS[i]      ->Add(entry->fhNClustersITS[i]     );      
       fhNClustersTPC[i]      ->Add(entry->fhNClustersTPC[i]     ); 
-      fhNCrossedRowsTPC[i]   ->Add(entry->fhNCrossedRowsTPC[i]     ); 
-      fhRatioCrossedRowsOverFindableClustersTPC[i]      ->Add(entry->fhRatioCrossedRowsOverFindableClustersTPC[i]     ); 
+      if (fhNSharedClustersTPC[i])
+        fhNSharedClustersTPC[i]      ->Add(entry->fhNSharedClustersTPC[i]     ); 
+      if (fhNCrossedRowsTPC[i])
+        fhNCrossedRowsTPC[i]   ->Add(entry->fhNCrossedRowsTPC[i]     ); 
+      if (fhRatioCrossedRowsOverFindableClustersTPC[i])
+        fhRatioCrossedRowsOverFindableClustersTPC[i]      ->Add(entry->fhRatioCrossedRowsOverFindableClustersTPC[i]     ); 
                                                                    
       fhChi2PerClusterITS[i] ->Add(entry->fhChi2PerClusterITS[i]); 
       fhChi2PerClusterTPC[i] ->Add(entry->fhChi2PerClusterTPC[i]); 
-                                                                   
+      if (fhNClustersForITSPID[i])
+       fhNClustersForITSPID[i]->Add(entry->fhNClustersForITSPID[i]);
+      if (fhNMissingITSPoints[i])
+       fhNMissingITSPoints[i] ->Add(entry->fhNMissingITSPoints[i]);
+
       fhC11[i]               ->Add(entry->fhC11[i]              ); 
       fhC22[i]               ->Add(entry->fhC22[i]              ); 
       fhC33[i]               ->Add(entry->fhC33[i]              ); 
@@ -808,7 +834,18 @@ AliESDtrackCuts* AliESDtrackCuts::GetStandardITSSATrackCuts2010(Bool_t selPrimar
 }
 
 //____________________________________________________________________
-Int_t AliESDtrackCuts::GetReferenceMultiplicity(AliESDEvent* esd, Bool_t tpcOnly)
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSSATrackCutsPbPb2010(Bool_t selPrimaries, Bool_t useForPid)
+{
+  // creates an AliESDtrackCuts object and fills it with standard values for ITS pure SA tracks -- PbPb 2010
+  
+  AliESDtrackCuts* esdTrackCuts = GetStandardITSSATrackCuts2010(selPrimaries, useForPid);
+  esdTrackCuts->SetMaxNOfMissingITSPoints(1);
+
+  return esdTrackCuts;
+}
+
+//____________________________________________________________________
+Int_t AliESDtrackCuts::GetReferenceMultiplicity(const AliESDEvent* esd, Bool_t tpcOnly)
 {
   // Gets reference multiplicity following the standard cuts and a defined fiducial volume
   // tpcOnly = kTRUE -> consider TPC-only tracks
@@ -937,7 +974,7 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
   Float_t nCrossedRowsTPC = esdTrack->GetTPCClusterInfo(2,1); 
   Float_t  ratioCrossedRowsOverFindableClustersTPC = 1.0;
   if (esdTrack->GetTPCNclsF()>0) {
-    ratioCrossedRowsOverFindableClustersTPC = esdTrack->GetTPCClusterInfo(2,1)/esdTrack->GetTPCNclsF();
+    ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC / esdTrack->GetTPCNclsF();
   }
   
   Int_t nClustersTPCShared = esdTrack->GetTPCnclsS();
@@ -1103,20 +1140,28 @@ 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;
+  Int_t nITSPointsForPid=0;
+  UChar_t clumap=esdTrack->GetITSClusterMap();
+  for(Int_t i=2; i<6; i++){
+    if(clumap&(1<<i)) ++nITSPointsForPid;
   }
+  if(fCutRequireITSPid && nITSPointsForPid<3) cuts[35] = kTRUE;
+  
 
   if (nCrossedRowsTPC<fCutMinNCrossedRowsTPC)
     cuts[36]=kTRUE;
   if (ratioCrossedRowsOverFindableClustersTPC<fCutMinRatioCrossedRowsOverFindableClustersTPC) 
     cuts[37]=kTRUE;
 
+  Int_t nMissITSpts=0;
+  Int_t idet,statusLay;
+  Float_t xloc,zloc;
+  for(Int_t iLay=0; iLay<6; iLay++){
+    Bool_t retc=esdTrack->GetITSModuleIndexInfo(iLay,idet,statusLay,xloc,zloc);
+    if(retc && statusLay==5) ++nMissITSpts;
+  }
+  if(nMissITSpts>fCutMaxMissingITSPoints) cuts[38] = kTRUE;
+
   Bool_t cut=kFALSE;
   for (Int_t i=0; i<kNCuts; i++) 
     if (cuts[i]) {cut = kTRUE;}
@@ -1158,10 +1203,13 @@ Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
     {
       fhNClustersITS[id]->Fill(nClustersITS);
       fhNClustersTPC[id]->Fill(nClustersTPC);
+      fhNSharedClustersTPC[id]->Fill(nClustersTPCShared);
       fhNCrossedRowsTPC[id]->Fill(nCrossedRowsTPC);
       fhRatioCrossedRowsOverFindableClustersTPC[id]->Fill(ratioCrossedRowsOverFindableClustersTPC);
       fhChi2PerClusterITS[id]->Fill(chi2PerClusterITS);
       fhChi2PerClusterTPC[id]->Fill(chi2PerClusterTPC);
+      fhNClustersForITSPID[id]->Fill(nITSPointsForPid);
+      fhNMissingITSPoints[id]->Fill(nMissITSpts);
 
       fhC11[id]->Fill(extCov[0]);
       fhC22[id]->Fill(extCov[2]);
@@ -1301,7 +1349,7 @@ TObjArray* AliESDtrackCuts::GetAcceptedTracks(AliESDEvent* esd,Bool_t bTPC)
 }
 
 //____________________________________________________________________
-Int_t AliESDtrackCuts::CountAcceptedTracks(AliESDEvent* const esd)
+Int_t AliESDtrackCuts::CountAcceptedTracks(const AliESDEvent* const esd)
 {
   //
   // returns an the number of tracks that pass the cuts
@@ -1354,10 +1402,13 @@ Int_t AliESDtrackCuts::CountAcceptedTracks(AliESDEvent* const esd)
   for (Int_t i=0; i<2; i++) {
     fhNClustersITS[i]        = new TH1F("nClustersITS"    ,"",8,-0.5,7.5);
     fhNClustersTPC[i]        = new TH1F("nClustersTPC"     ,"",165,-0.5,164.5);
+    fhNSharedClustersTPC[i]  = new TH1F("nSharedClustersTPC"     ,"",165,-0.5,164.5);
     fhNCrossedRowsTPC[i]     = new TH1F("nCrossedRowsTPC"  ,"",165,-0.5,164.5);
     fhRatioCrossedRowsOverFindableClustersTPC[i]     = new TH1F("ratioCrossedRowsOverFindableClustersTPC"  ,"",60,0,1.5);
     fhChi2PerClusterITS[i]   = new TH1F("chi2PerClusterITS","",500,0,10);
     fhChi2PerClusterTPC[i]   = new TH1F("chi2PerClusterTPC","",500,0,10);
+    fhNClustersForITSPID[i]  = new TH1F("nPointsForITSpid","",5,-0.5,4.5);
+    fhNMissingITSPoints[i]   = new TH1F("nMissingITSClusters","",7,-0.5,6.5);
 
     fhC11[i]                 = new TH1F("covMatrixDiagonal11","",2000,0,20);
     fhC22[i]                 = new TH1F("covMatrixDiagonal22","",2000,0,20);
@@ -1383,8 +1434,11 @@ Int_t AliESDtrackCuts::CountAcceptedTracks(AliESDEvent* const esd)
     
     fhNClustersITS[i]->SetTitle("n ITS clusters");
     fhNClustersTPC[i]->SetTitle("n TPC clusters");
+    fhNSharedClustersTPC[i]->SetTitle("n TPC shared clusters");
     fhChi2PerClusterITS[i]->SetTitle("#Chi^{2} per ITS cluster");
     fhChi2PerClusterTPC[i]->SetTitle("#Chi^{2} per TPC cluster");
+    fhNClustersForITSPID[i]->SetTitle("n ITS points for PID");
+    fhNMissingITSPoints[i]->SetTitle("n ITS layers with missing cluster");
 
     fhC11[i]->SetTitle("cov 11 : #sigma_{y}^{2} [cm^{2}]");
     fhC22[i]->SetTitle("cov 22 : #sigma_{z}^{2} [cm^{2}]");
@@ -1408,8 +1462,11 @@ Int_t AliESDtrackCuts::CountAcceptedTracks(AliESDEvent* const esd)
 
     fhNClustersITS[i]->SetLineColor(color);   fhNClustersITS[i]->SetLineWidth(2);
     fhNClustersTPC[i]->SetLineColor(color);   fhNClustersTPC[i]->SetLineWidth(2);
+    fhNSharedClustersTPC[i]->SetLineColor(color);  fhNSharedClustersTPC[i]->SetLineWidth(2);
     fhChi2PerClusterITS[i]->SetLineColor(color);   fhChi2PerClusterITS[i]->SetLineWidth(2);
     fhChi2PerClusterTPC[i]->SetLineColor(color);   fhChi2PerClusterTPC[i]->SetLineWidth(2);
+    fhNClustersForITSPID[i]->SetLineColor(color);  fhNClustersForITSPID[i]->SetLineWidth(2);
+    fhNMissingITSPoints[i]->SetLineColor(color);   fhNMissingITSPoints[i]->SetLineWidth(2);
 
     fhC11[i]->SetLineColor(color);   fhC11[i]->SetLineWidth(2);
     fhC22[i]->SetLineColor(color);   fhC22[i]->SetLineWidth(2);
@@ -1464,10 +1521,13 @@ Bool_t AliESDtrackCuts::LoadHistograms(const Char_t* dir)
 
     fhNClustersITS[i]      = dynamic_cast<TH1F*> (gDirectory->Get("nClustersITS"     ));
     fhNClustersTPC[i]      = dynamic_cast<TH1F*> (gDirectory->Get("nClustersTPC"     ));
+    fhNSharedClustersTPC[i] = dynamic_cast<TH1F*> (gDirectory->Get("nSharedClustersTPC"     ));
     fhNCrossedRowsTPC[i]   = dynamic_cast<TH1F*> (gDirectory->Get("nCrossedRowsTPC"  ));
     fhRatioCrossedRowsOverFindableClustersTPC[i]   = dynamic_cast<TH1F*> (gDirectory->Get("ratioCrossedRowsOverFindableClustersTPC"  ));
     fhChi2PerClusterITS[i] = dynamic_cast<TH1F*> (gDirectory->Get("chi2PerClusterITS"));
     fhChi2PerClusterTPC[i] = dynamic_cast<TH1F*> (gDirectory->Get("chi2PerClusterTPC"));
+    fhNClustersForITSPID[i] = dynamic_cast<TH1F*> (gDirectory->Get("nPointsForITSpid"));
+    fhNMissingITSPoints[i] = dynamic_cast<TH1F*> (gDirectory->Get("nMissingITSClusters"));
 
     fhC11[i] = dynamic_cast<TH1F*> (gDirectory->Get("covMatrixDiagonal11"));
     fhC22[i] = dynamic_cast<TH1F*> (gDirectory->Get("covMatrixDiagonal22"));
@@ -1533,10 +1593,13 @@ void AliESDtrackCuts::SaveHistograms(const Char_t* dir) {
 
     fhNClustersITS[i]        ->Write();
     fhNClustersTPC[i]        ->Write();
+    fhNSharedClustersTPC[i]  ->Write();
     fhNCrossedRowsTPC[i]     ->Write();
     fhRatioCrossedRowsOverFindableClustersTPC[i]     ->Write();
     fhChi2PerClusterITS[i]   ->Write();
     fhChi2PerClusterTPC[i]   ->Write();
+    fhNClustersForITSPID[i]  ->Write();
+    fhNMissingITSPoints[i]   ->Write();
 
     fhC11[i]                 ->Write();
     fhC22[i]                 ->Write();