-#ifndef ALIESDTRACKCUTS_H
-#define ALIESDTRACKCUTS_H
-
-//****************************************************************
//
-// Class for handling of ESD track cuts
+// Class for handling of ESD track cuts.
+//
+// The class manages a number of track quality cuts, a
+// track-to-vertex cut and a number of kinematic cuts. Two methods
+// can be used to figure out if an ESD track survives the cuts:
+// AcceptTrack which takes a single AliESDtrack as argument and
+// returns kTRUE/kFALSE or GetAcceptedTracks which takes an AliESD
+// object and returns an TObjArray (of AliESDtracks) with the tracks
+// in the ESD that survived the cuts.
+//
//
// TODO:
// - add functionality to save and load cuts
-// - fix the n sigma cut so it is really a n sigma cut
// - add different ways to make track to vertex cut
// - add histograms for kinematic cut variables?
// - upper and lower cuts for all (non-boolean) cuts
// - update print method
// - is there a smarter way to manage the cuts?
-// - put comment to each variable
+// - put comments to each variable
// - implement destructor !!!
//
-// NOTE:
-// -
-//
+#ifndef ALIESDTRACKCUTS_H
+#define ALIESDTRACKCUTS_H
-#include "TObject.h"
-#include "TH1.h"
-#include "TH2.h"
+#include <TObject.h>
+#include <TH2.h>
-#include "AliESD.h"
-#include "AliESDtrack.h"
-#include "AliLog.h"
+class AliESD;
+class AliESDtrack;
+class AliLog;
class AliESDtrackCuts : public TObject
{
public:
AliESDtrackCuts();
- virtual ~AliESDtrackCuts();
AliESDtrackCuts(const AliESDtrackCuts& pd); // Copy Constructor
+ virtual ~AliESDtrackCuts();
Bool_t AcceptTrack(AliESDtrack* esdTrack);
-
TObjArray* GetAcceptedTracks(AliESD* esd);
+ Int_t CountAcceptedTracks(AliESD* esd);
AliESDtrackCuts &operator=(const AliESDtrackCuts &c);
virtual void Copy(TObject &c) const;
//######################################################
// track quality cut setters
- void SetMinNClustersTPC(Int_t min=-1) {fCut_MinNClusterTPC=min;}
- void SetMinNClustersITS(Int_t min=-1) {fCut_MinNClusterITS=min;}
- void SetMaxChi2PerClusterTPC(Float_t max=1e99) {fCut_MaxChi2PerClusterTPC=max;}
- void SetMaxChi2PerClusterITS(Float_t max=1e99) {fCut_MaxChi2PerClusterITS=max;}
- void SetRequireTPCRefit(Bool_t b=kFALSE) {fCut_RequireTPCRefit=b;}
- void SetRequireITSRefit(Bool_t b=kFALSE) {fCut_RequireITSRefit=b;}
- void SetAcceptKingDaughters(Bool_t b=kFALSE) {fCut_AcceptKinkDaughters=b;}
+ void SetMinNClustersTPC(Int_t min=-1) {fCutMinNClusterTPC=min;}
+ void SetMinNClustersITS(Int_t min=-1) {fCutMinNClusterITS=min;}
+ void SetMaxChi2PerClusterTPC(Float_t max=1e99) {fCutMaxChi2PerClusterTPC=max;}
+ void SetMaxChi2PerClusterITS(Float_t max=1e99) {fCutMaxChi2PerClusterITS=max;}
+ void SetRequireTPCRefit(Bool_t b=kFALSE) {fCutRequireTPCRefit=b;}
+ void SetRequireITSRefit(Bool_t b=kFALSE) {fCutRequireITSRefit=b;}
+ 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)
- {fCut_MaxC11=c1; fCut_MaxC22=c2; fCut_MaxC33=c3; fCut_MaxC44=c4; fCut_MaxC55=c5;}
+ {fCutMaxC11=c1; fCutMaxC22=c2; fCutMaxC33=c3; fCutMaxC44=c4; fCutMaxC55=c5;}
// track to vertex cut setters
- void SetMinNsigmaToVertex(Float_t sigma=1e99) {fCut_NsigmaToVertex = sigma;}
- void SetRequireSigmaToVertex(Bool_t b=kTRUE ) {fCut_SigmaToVertexRequired = b;}
+ void SetMinNsigmaToVertex(Float_t sigma=1e99) {fCutNsigmaToVertex = sigma;}
+ void SetRequireSigmaToVertex(Bool_t b=kTRUE ) {fCutSigmaToVertexRequired = b;}
// track kinmatic cut setters
void SetPRange(Float_t r1=0, Float_t r2=1e99) {fPMin=r1; fPMax=r2;}
//######################################################
// esd track quality cuts
- static const Char_t* fCutNames[kNCuts];
-
- Int_t fCut_MinNClusterTPC; // min number of tpc clusters
- Int_t fCut_MinNClusterITS; // min number of its clusters
-
- Float_t fCut_MaxChi2PerClusterTPC; // max tpc fit chi2 per tpc cluster
- Float_t fCut_MaxChi2PerClusterITS; // max its fit chi2 per its cluster
-
- Float_t fCut_MaxC11; // max resolutions of covariance matrix diag. elements
- Float_t fCut_MaxC22;
- Float_t fCut_MaxC33;
- Float_t fCut_MaxC44;
- Float_t fCut_MaxC55;
-
- Bool_t fCut_AcceptKinkDaughters; // accepting kink daughters?
- Bool_t fCut_RequireTPCRefit; // require TPC refit
- Bool_t fCut_RequireITSRefit; // require ITS refit
+ 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
+
+ Float_t fCutMaxChi2PerClusterTPC; // max tpc fit chi2 per tpc cluster
+ Float_t fCutMaxChi2PerClusterITS; // max its fit chi2 per its cluster
+
+ Float_t fCutMaxC11; // max cov. matrix diag. elements (res. y^2)
+ Float_t fCutMaxC22; // max cov. matrix diag. elements (res. z^2)
+ Float_t fCutMaxC33; // max cov. matrix diag. elements (res. sin(phi)^2)
+ Float_t fCutMaxC44; // max cov. matrix diag. elements (res. tan(theta_dip)^2)
+ Float_t fCutMaxC55; // max cov. matrix diag. elements (res. 1/pt^2)
+
+ Bool_t fCutAcceptKinkDaughters; // accepting kink daughters?
+ Bool_t fCutRequireTPCRefit; // require TPC refit
+ Bool_t fCutRequireITSRefit; // require ITS refit
// track to vertex cut
- Float_t fCut_NsigmaToVertex; // max number of estimated sigma from track-to-vertex
- Bool_t fCut_SigmaToVertexRequired; // cut track if sigma from track-to-vertex could not be calculated
+ 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
// esd kinematics cuts
Float_t fPMin, fPMax; // definition of the range of the P
//######################################################
// diagnostics histograms
- Bool_t fHistogramsOn;
+ Bool_t fHistogramsOn; // histograms on/off
- TH1F *fhNClustersITS[2]; //[2]
- TH1F *fhNClustersTPC[2]; //[2]
-
- TH1F* fhChi2PerClusterITS[2]; //[2]
- TH1F* fhChi2PerClusterTPC[2]; //[2]
+ TH1F* fhNClustersITS[2]; //->
+ TH1F* fhNClustersTPC[2]; //->
+
+ TH1F* fhChi2PerClusterITS[2]; //->
+ TH1F* fhChi2PerClusterTPC[2]; //->
- TH1F* fhC11[2]; //[2]
- TH1F* fhC22[2]; //[2]
- TH1F* fhC33[2]; //[2]
- TH1F* fhC44[2]; //[2]
- TH1F* fhC55[2]; //[2]
+ TH1F* fhC11[2]; //->
+ TH1F* fhC22[2]; //->
+ TH1F* fhC33[2]; //->
+ TH1F* fhC44[2]; //->
+ TH1F* fhC55[2]; //->
- TH1F* fhDXY[2]; //[2]
- TH1F* fhDZ[2]; //[2]
- TH2F* fhDXYvsDZ[2]; //[2]
+ TH1F* fhDXY[2]; //->
+ TH1F* fhDZ[2]; //->
+ TH2F* fhDXYvsDZ[2]; //->
- TH1F* fhDXYNormalized[2]; //[2]
- TH1F* fhDZNormalized[2]; //[2]
- TH2F* fhDXYvsDZNormalized[2]; //[2]
+ TH1F* fhDXYNormalized[2]; //->
+ TH1F* fhDZNormalized[2]; //->
+ TH2F* fhDXYvsDZNormalized[2]; //->
- TH1F* fhCutStatistics; //[2]
- TH2F* fhCutCorrelation; //[2]
+ TH1F* fhCutStatistics; //-> statistics of what cuts the tracks did not survive
+ TH2F* fhCutCorrelation; //-> 2d statistics plot
- ClassDef(AliESDtrackCuts,0)
+ ClassDef(AliESDtrackCuts, 1)
};