]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/esdTrackCuts/AliESDtrackCuts.h
adding support for AliESDEvent in AliESDtrackCuts
[u/mrichter/AliRoot.git] / PWG0 / esdTrackCuts / AliESDtrackCuts.h
index 38d7a1333c781736fc2f20d0397aa21bd03263ff..8d40eb8106a3721af288a359a1a5a73c9d08d18a 100644 (file)
 //  - update print method
 //  - is there a smarter way to manage the cuts?
 //  - put comments to each variable
-//  - implement destructor !!!
 //
 
 #ifndef ALIESDTRACKCUTS_H
 #define ALIESDTRACKCUTS_H
 
-#include <TObject.h>
+#include <TF1.h>
 #include <TH2.h>
+#include "AliAnalysisCuts.h"
 
 class AliESD;
+class AliESDEvent;
 class AliESDtrack;
 class AliLog;
+class TTree;
 
-class AliESDtrackCuts : public TObject 
+class AliESDtrackCuts : public AliAnalysisCuts
 {
-
 public:
-  AliESDtrackCuts();
-  AliESDtrackCuts(const AliESDtrackCuts& pd);  // Copy Constructor
+  AliESDtrackCuts(const Char_t* name = "AliESDtrackCuts", const Char_t* title = "");
   virtual ~AliESDtrackCuts();
-
+  Bool_t IsSelected(TObject* obj)
+       {return AcceptTrack((AliESDtrack*)obj);}
   Bool_t AcceptTrack(AliESDtrack* esdTrack);
   TObjArray* GetAcceptedTracks(AliESD* esd);
+  Int_t CountAcceptedTracks(AliESD* esd);
+  TObjArray* GetAcceptedTracks(AliESDEvent* esd);
+  Int_t CountAcceptedTracks(AliESDEvent* esd);
 
-  AliESDtrackCuts &operator=(const AliESDtrackCuts &c);
+  virtual Long64_t Merge(TCollection* list);
   virtual void Copy(TObject &c) const;
+  AliESDtrackCuts(const AliESDtrackCuts& pd);  // Copy Constructor
+  AliESDtrackCuts &operator=(const AliESDtrackCuts &c);
 
   //######################################################
   // track quality cut setters  
@@ -56,12 +62,16 @@ public:
   void SetAcceptKingDaughters(Bool_t b=kFALSE)   {fCutAcceptKinkDaughters=b;}
   void SetMaxCovDiagonalElements(Float_t c1=1e99, Float_t c2=1e99, Float_t c3=1e99, Float_t c4=1e99, Float_t c5=1e99) 
     {fCutMaxC11=c1; fCutMaxC22=c2; fCutMaxC33=c3; fCutMaxC44=c4; fCutMaxC55=c5;}
-  
+
   // track to vertex cut setters
   void SetMinNsigmaToVertex(Float_t sigma=1e99)       {fCutNsigmaToVertex = sigma;}
   void SetRequireSigmaToVertex(Bool_t b=kTRUE )       {fCutSigmaToVertexRequired = b;}
-  
-  // track kinmatic cut setters  
+
+  // getters
+  Float_t GetMinNsigmaToVertex()       { return fCutNsigmaToVertex;}
+  Bool_t GetRequireSigmaToVertex( )    { return fCutSigmaToVertexRequired;}
+
+  // track kinmatic cut setters
   void SetPRange(Float_t r1=0, Float_t r2=1e99)       {fPMin=r1;   fPMax=r2;}
   void SetPtRange(Float_t r1=0, Float_t r2=1e99)      {fPtMin=r1;  fPtMax=r2;}
   void SetPxRange(Float_t r1=-1e99, Float_t r2=1e99)  {fPxMin=r1;  fPxMax=r2;}
@@ -73,13 +83,19 @@ public:
   //######################################################
   void SetHistogramsOn(Bool_t b=kFALSE) {fHistogramsOn = b;}
   void DefineHistograms(Int_t color=1);
-  void SaveHistograms(Char_t* dir="track_selection");
+  virtual Bool_t LoadHistograms(const Char_t* dir = 0);
+  void SaveHistograms(const Char_t* dir = 0);
+  void DrawHistograms();
+
+  Float_t GetSigmaToVertex(AliESDtrack* esdTrack);
   
-  virtual void Print(const Option_t* = "") const;
+  static void EnableNeededBranches(TTree* tree);
 
   // void SaveQualityCuts(Char_t* file)
   // void LoadQualityCuts(Char_t* file)
 
+       TH1* GetDZNormalized(Int_t i) const { return fhDZNormalized[i]; }
+
 protected:
   void Init(); // sets everything to 0
 
@@ -90,7 +106,7 @@ protected:
   static const Char_t* fgkCutNames[kNCuts]; //! names of cuts (for internal use)
 
   Int_t   fCutMinNClusterTPC;         // min number of tpc clusters
-  Int_t   fCutMinNClusterITS;         // min number of its clusters  
+  Int_t   fCutMinNClusterITS;         // min number of its clusters
 
   Float_t fCutMaxChi2PerClusterTPC;   // max tpc fit chi2 per tpc cluster
   Float_t fCutMaxChi2PerClusterITS;   // max its fit chi2 per its cluster
@@ -104,7 +120,7 @@ protected:
   Bool_t  fCutAcceptKinkDaughters;    // accepting kink daughters?
   Bool_t  fCutRequireTPCRefit;        // require TPC refit
   Bool_t  fCutRequireITSRefit;        // require ITS refit
-  
+
   // 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
@@ -141,10 +157,13 @@ protected:
   TH1F* fhDXYNormalized[2];           //->
   TH1F* fhDZNormalized[2];            //->
   TH2F* fhDXYvsDZNormalized[2];       //->
+  TH1F* fhNSigmaToVertex[2];          //->
+
+  TF1*  ffDTheoretical;               //-> theoretical distance to vertex normalized (2d gauss)
 
   TH1F*  fhCutStatistics;             //-> statistics of what cuts the tracks did not survive
   TH2F*  fhCutCorrelation;            //-> 2d statistics plot
-  
+
   ClassDef(AliESDtrackCuts, 1)
 };