X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ANALYSIS%2FAliESDtrackCuts.h;h=3570d705ac530138b0bd6940cd30fc31c9e69be5;hb=2cd9f718b3e7efe16e0fabb231f33d8917eb29c0;hp=b1dd4f799263fac932c2d157dd00d05b5893a9a2;hpb=746873147070519c9bf1a75bf7e07254f7e6bb4a;p=u%2Fmrichter%2FAliRoot.git diff --git a/ANALYSIS/AliESDtrackCuts.h b/ANALYSIS/AliESDtrackCuts.h index b1dd4f79926..3570d705ac5 100644 --- a/ANALYSIS/AliESDtrackCuts.h +++ b/ANALYSIS/AliESDtrackCuts.h @@ -21,18 +21,24 @@ #ifndef ALIESDTRACKCUTS_H #define ALIESDTRACKCUTS_H -#include -#include #include "AliAnalysisCuts.h" class AliESDEvent; class AliESDtrack; class AliLog; class TTree; +class TH1; +class TH1F; +class TH2F; +class TF1; +class TCollection; class AliESDtrackCuts : public AliAnalysisCuts { public: + enum ITSClusterRequirement { kOff = 0, kNone, kAny, kFirst, kOnlyFirst, kSecond, kOnlySecond, kBoth }; + enum Detector { kSPD = 0, kSDD, kSSD }; + AliESDtrackCuts(const Char_t* name = "AliESDtrackCuts", const Char_t* title = ""); virtual ~AliESDtrackCuts(); @@ -43,8 +49,13 @@ public: Bool_t AcceptTrack(AliESDtrack* esdTrack); TObjArray* GetAcceptedTracks(AliESDEvent* esd, Bool_t bTPC = kFALSE); Int_t CountAcceptedTracks(AliESDEvent* esd); + + static Int_t GetReferenceMultiplicity(AliESDEvent* esd, Bool_t tpcOnly); static AliESDtrack* GetTPCOnlyTrack(AliESDEvent* esd, Int_t iTrack); + + // Standard cut definitions + static AliESDtrackCuts* GetStandardTPCOnlyTrackCuts(); virtual Long64_t Merge(TCollection* list); virtual void Copy(TObject &c) const; @@ -55,44 +66,55 @@ public: // track quality cut setters void SetMinNClustersTPC(Int_t min=-1) {fCutMinNClusterTPC=min;} void SetMinNClustersITS(Int_t min=-1) {fCutMinNClusterITS=min;} + void SetClusterRequirementITS(Detector det, ITSClusterRequirement req = kOff) { fCutClusterRequirementITS[det] = req; } void SetMaxChi2PerClusterTPC(Float_t max=1e10) {fCutMaxChi2PerClusterTPC=max;} void SetMaxChi2PerClusterITS(Float_t max=1e10) {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 SetRequireITSStandAlone(Bool_t b) {fCutRequireITSStandAlone = b;} + void SetAcceptKinkDaughters(Bool_t b=kTRUE) {fCutAcceptKinkDaughters=b;} void SetMaxCovDiagonalElements(Float_t c1=1e10, Float_t c2=1e10, Float_t c3=1e10, Float_t c4=1e10, Float_t c5=1e10) {fCutMaxC11=c1; fCutMaxC22=c2; fCutMaxC33=c3; fCutMaxC44=c4; fCutMaxC55=c5;} + void SetMaxRel1PtUncertainty(Float_t max=1e10) {fCutMaxRel1PtUncertainty=max;} // track to vertex cut setters - void SetMinNsigmaToVertex(Float_t sigma=1e10) {fCutNsigmaToVertex = sigma;} - void SetRequireSigmaToVertex(Bool_t b=kTRUE ) {fCutSigmaToVertexRequired = b;} - void SetDCAToVertex(Float_t dist=1e10) {fCutDCAToVertex = dist;} - void SetDCAToVertexXY(Float_t dist=1e10) {fCutDCAToVertexXY = dist;} - void SetDCAToVertexZ(Float_t dist=1e10) {fCutDCAToVertexZ = dist;} + void SetMaxNsigmaToVertex(Float_t sigma=1e10) {fCutNsigmaToVertex = sigma; SetRequireSigmaToVertex(kTRUE);} + void SetRequireSigmaToVertex(Bool_t b=kTRUE) {fCutSigmaToVertexRequired = b;} + void SetMaxDCAToVertexXY(Float_t dist=1e10) {fCutMaxDCAToVertexXY = dist;} + void SetMaxDCAToVertexZ(Float_t dist=1e10) {fCutMaxDCAToVertexZ = dist;} + void SetMinDCAToVertexXY(Float_t dist=0.) {fCutMinDCAToVertexXY = dist;} + void SetMinDCAToVertexZ(Float_t dist=0.) {fCutMinDCAToVertexZ = dist;} + void SetDCAToVertex2D(Bool_t b=kFALSE) {fCutDCAToVertex2D = b;} // getters Int_t GetMinNClusterTPC() const { return fCutMinNClusterTPC;} Int_t GetMinNClustersITS() const { return fCutMinNClusterITS;} + ITSClusterRequirement GetClusterRequirementITS(Detector det) const { return fCutClusterRequirementITS[det]; } Float_t GetMaxChi2PerClusterTPC() const { return fCutMaxChi2PerClusterTPC;} Float_t GetMaxChi2PerClusterITS() const { return fCutMaxChi2PerClusterITS;} Bool_t GetRequireTPCRefit() const { return fCutRequireTPCRefit;} Bool_t GetRequireITSRefit() const { return fCutRequireITSRefit;} - Bool_t GetAcceptKingDaughters() const { return fCutAcceptKinkDaughters;} + Bool_t GetRequireITSStandAlone() const { return fCutRequireITSStandAlone; } + Bool_t GetAcceptKinkDaughters() const { return fCutAcceptKinkDaughters;} void GetMaxCovDiagonalElements(Float_t& c1, Float_t& c2, Float_t& c3, Float_t& c4, Float_t& c5) {c1 = fCutMaxC11; c2 = fCutMaxC22; c3 = fCutMaxC33; c4 = fCutMaxC44; c5 = fCutMaxC55;} - Float_t GetMinNsigmaToVertex() const { return fCutNsigmaToVertex;} - Float_t GetDCAToVertex() const { return fCutDCAToVertex;} - Float_t GetDCAToVertexXY() const { return fCutDCAToVertexXY;} + Float_t GetMaxRel1PtUncertainty() const { return fCutMaxRel1PtUncertainty;} + Float_t GetMaxNsigmaToVertex() const { return fCutNsigmaToVertex;} + Float_t GetMaxDCAToVertexXY() const { return fCutMaxDCAToVertexXY;} + Float_t GetMaxDCAToVertexZ() const { return fCutMaxDCAToVertexZ;} + Float_t GetMinDCAToVertexXY() const { return fCutMinDCAToVertexXY;} + Float_t GetMinDCAToVertexZ() const { return fCutMinDCAToVertexZ;} + Bool_t GetDCAToVertex2D() const { return fCutDCAToVertex2D;} Bool_t GetRequireSigmaToVertex( ) const { return fCutSigmaToVertexRequired;} - void GetPRange(Float_t& r1, Float_t& r2) {r1=fPMin; r2=fPMax;} - void GetPtRange(Float_t& r1, Float_t& r2) {r1=fPtMin; r2=fPtMax;} - void GetPxRange(Float_t& r1, Float_t& r2) {r1=fPxMin; r2=fPxMax;} - void GetPyRange(Float_t& r1, Float_t& r2) {r1=fPyMin; r2=fPyMax;} - void GetPzRange(Float_t& r1, Float_t& r2) {r1=fPzMin; r2=fPzMax;} - void GetEtaRange(Float_t& r1, Float_t& r2) {r1=fEtaMin; r2=fEtaMax;} - void GetRapRange(Float_t& r1, Float_t& r2) {r1=fRapMin; r2=fRapMax;} + void GetPRange(Float_t& r1, Float_t& r2) const {r1=fPMin; r2=fPMax;} + void GetPtRange(Float_t& r1, Float_t& r2) const {r1=fPtMin; r2=fPtMax;} + void GetPxRange(Float_t& r1, Float_t& r2) const {r1=fPxMin; r2=fPxMax;} + void GetPyRange(Float_t& r1, Float_t& r2) const {r1=fPyMin; r2=fPyMax;} + void GetPzRange(Float_t& r1, Float_t& r2) const {r1=fPzMin; r2=fPzMax;} + void GetEtaRange(Float_t& r1, Float_t& r2) const {r1=fEtaMin; r2=fEtaMax;} + void GetRapRange(Float_t& r1, Float_t& r2) const {r1=fRapMin; r2=fRapMax;} // track kinmatic cut setters void SetPRange(Float_t r1=0, Float_t r2=1e10) {fPMin=r1; fPMax=r2;} @@ -117,12 +139,13 @@ public: // void SaveQualityCuts(Char_t* file) // void LoadQualityCuts(Char_t* file) - TH1* GetDZNormalized(Int_t i) const { return fhDZNormalized[i]; } + TH1F* GetDZNormalized(Int_t i) const { return fhDZNormalized[i]; } protected: void Init(); // sets everything to 0 - - enum { kNCuts = 24 }; + Bool_t CheckITSClusterRequirement(ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2); + + enum { kNCuts = 32 }; //###################################################### // esd track quality cuts @@ -130,6 +153,8 @@ protected: Int_t fCutMinNClusterTPC; // min number of tpc clusters Int_t fCutMinNClusterITS; // min number of its clusters + + ITSClusterRequirement fCutClusterRequirementITS[3]; // detailed ITS cluster requirements for (SPD, SDD, SSD) Float_t fCutMaxChi2PerClusterTPC; // max tpc fit chi2 per tpc cluster Float_t fCutMaxChi2PerClusterITS; // max its fit chi2 per its cluster @@ -140,16 +165,21 @@ protected: 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) + Float_t fCutMaxRel1PtUncertainty; // max relative uncertainty of 1/pt + Bool_t fCutAcceptKinkDaughters; // accepting kink daughters? Bool_t fCutRequireTPCRefit; // require TPC refit Bool_t fCutRequireITSRefit; // require ITS refit + Bool_t fCutRequireITSStandAlone; // require ITS standalone tracks // 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 - Float_t fCutDCAToVertex; // track-to-vertex cut in absolute distance - Float_t fCutDCAToVertexXY; // track-to-vertex cut in absolute distance in xy-plane - Float_t fCutDCAToVertexZ; // track-to-vertex cut in absolute distance in z-plane + Float_t fCutMaxDCAToVertexXY; // track-to-vertex cut in max absolute distance in xy-plane + Float_t fCutMaxDCAToVertexZ; // track-to-vertex cut in max absolute distance in z-plane + Float_t fCutMinDCAToVertexXY; // track-to-vertex cut on min absolute distance in xy-plane + Float_t fCutMinDCAToVertexZ; // track-to-vertex cut on min absolute distance in z-plane + Bool_t fCutDCAToVertex2D; // if true a 2D DCA cut is made. Tracks are accepted if sqrt((DCAXY / fCutMaxDCAToVertexXY)^2 + (DCAZ / fCutMaxDCAToVertexZ)^2) < 1 AND sqrt((DCAXY / fCutMinDCAToVertexXY)^2 + (DCAZ / fCutMinDCAToVertexZ)^2) > 1 // esd kinematics cuts Float_t fPMin, fPMax; // definition of the range of the P @@ -176,9 +206,11 @@ protected: TH1F* fhC44[2]; //-> TH1F* fhC55[2]; //-> + TH1F* fhRel1PtUncertainty[2]; //-> rel. uncertainty of 1/pt + TH1F* fhDXY[2]; //-> TH1F* fhDZ[2]; //-> - TH1F* fhDXYDZ[2]; //-> absolute distance sqrt(dxy**2 + dz**2) to vertex + TH1F* fhDXYDZ[2]; //-> absolute distance sqrt(dxy**2 + dz**2) to vertex; if 2D cut is set, normalized to given values TH2F* fhDXYvsDZ[2]; //-> TH1F* fhDXYNormalized[2]; //-> @@ -194,7 +226,7 @@ protected: TH1F* fhCutStatistics; //-> statistics of what cuts the tracks did not survive TH2F* fhCutCorrelation; //-> 2d statistics plot - ClassDef(AliESDtrackCuts, 2) + ClassDef(AliESDtrackCuts, 7) };