// - 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
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;}
//######################################################
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
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
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
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)
};