Major update of the HFE package (comments inside the code
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEextraCuts.h
1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  *
14 **************************************************************************/
15 //
16 // Extra Cuts from the ALICE HFE Group
17 // Container for cuts which are currently not implemented by
18 // the Correction Framework
19 //
20 #ifndef ALIHFEEXTRACUTS_H
21 #define ALIHFEEXTRACUTS_H
22
23 // #ifndef ALICFCUTBASE_H
24 #include "AliCFCutBase.h"
25 // #endif
26
27 class TList;
28
29 class AliVEvent;
30 class AliVParticle;
31 class AliVTrack;
32
33 class AliHFEextraCuts : public AliCFCutBase{
34   public:
35     typedef enum{
36       kFirst = 0,
37       kSecond = 1,
38       kBoth = 2,
39       kNone = 3,
40       kAny = 4
41     } ITSPixel_t;
42     AliHFEextraCuts(const Char_t *name, const Char_t *title);
43     AliHFEextraCuts(const AliHFEextraCuts &c);
44     AliHFEextraCuts &operator=(const AliHFEextraCuts &c);
45     virtual ~AliHFEextraCuts();
46     
47     virtual Bool_t IsSelected(TObject *o);
48     virtual Bool_t IsSelected(TList *) { return kTRUE; };
49     virtual void SetRecEventInfo(const TObject *event);
50
51     inline void SetClusterRatioTPC(Double_t ratio);
52     inline void SetRequireITSpixel(ITSPixel_t pixel);
53     inline void SetMinImpactParamR(Double_t impactParam);
54     inline void SetMaxImpactParamR(Double_t impactParam);
55     inline void SetMinImpactParamZ(Double_t impactParam);
56     inline void SetMaxImpactParamZ(Double_t impactParam);
57     inline void SetMinHFEImpactParamR();
58     inline void SetMinHFEImpactParamNsigmaR();
59     inline void SetMinTrackletsTRD(Int_t minTracklets);
60     inline void SetMinNClustersTPC(Int_t minclusters);
61     void SetTPCIter1(Bool_t tpcIter1) { fTPCiter1 = tpcIter1; }
62
63     void SetCheckITSstatus(Bool_t check) { fCheck = check; };
64     Bool_t GetCheckITSstatus() const { return fCheck; };
65
66     void SetDebugLevel(Int_t level) { fDebugLevel = level; };
67     Int_t GetDebugLevel() const { return fDebugLevel; };
68     
69   protected:
70     virtual void AddQAHistograms(TList *qaList);
71     Bool_t CheckRecCuts(AliVTrack *track);
72     Bool_t CheckMCCuts(AliVParticle * /*track*/) const;
73     Bool_t CheckITSstatus(Int_t itsStatus) const;
74     void FillQAhistosRec(AliVTrack *track, UInt_t when);
75 //     void FillQAhistosMC(AliMCParticle *track, UInt_t when);
76     void FillCutCorrelation(ULong64_t survivedCut);
77     void PrintBitMap(Int_t bitmap);
78     
79     // Getter Functions for ESD/AOD compatible mode
80     Int_t GetTRDnTrackletsPID(AliVTrack *track);
81     Int_t GetITSstatus(AliVTrack *track, Int_t layer);
82     Int_t GetTPCfindableClusters(AliVTrack *track, Bool_t iter1 = kFALSE);
83     Int_t GetTPCncls(AliVTrack *track, Bool_t iter1 = kFALSE);
84     void GetImpactParameters(AliVTrack *track, Float_t &radial, Float_t &z);
85     void GetHFEImpactParameters(AliVTrack *track, Double_t &dcaxy, Double_t &dcansigmaxy);
86     void GetHFEImpactParameterCuts(AliVTrack *track, Double_t &hfeimpactRcut, Double_t &hfeimpactnsigmaRcut);
87
88   private:
89     typedef enum{
90       kMinImpactParamR = 0,
91       kMaxImpactParamR = 1,
92       kMinImpactParamZ = 2,
93       kMaxImpactParamZ = 3,
94       kClusterRatioTPC = 4,
95       kMinTrackletsTRD = 5,
96       kPixelITS = 6,
97       kMinHFEImpactParamR = 7,
98       kMinHFEImpactParamNsigmaR = 8,
99       kMinNClustersTPC = 9,
100       kNcuts = 10
101     } Cut_t;
102     enum{
103       //
104       // Common Constants
105       //
106       kBeforeCuts =0,
107       kAfterCuts = 1
108     };
109     AliVEvent *fEvent;            //! working event
110     ULong64_t fCutCorrelation;          // Cut Correlation
111     ULong64_t fRequirements;            // Cut Requirements
112     Bool_t fTPCiter1;           // Tracking iteration from which the number of clusters is taken
113     Float_t fImpactParamCut[4];         // Impact Parmameter Cut
114     UInt_t fMinNClustersTPC;      // Minimum TPC clusters cut
115     Float_t fClusterRatioTPC;           // Ratio of findable vs. found clusters in TPC
116     UChar_t fMinTrackletsTRD;           // Min. Number of Tracklets inside TRD
117     UChar_t fPixelITS;                  // Cut on ITS Pixels
118
119     Bool_t  fCheck;                     // check
120     TList *fQAlist;                     //! Directory for QA histograms
121     Int_t   fDebugLevel;                // Debug Level
122   
123   ClassDef(AliHFEextraCuts, 1)      // Additional cuts implemented by the ALICE HFE group
124 };
125
126 //__________________________________________________________
127 void AliHFEextraCuts::SetClusterRatioTPC(Double_t ratio) {
128   SETBIT(fRequirements, kClusterRatioTPC);
129   fClusterRatioTPC = ratio; 
130 }
131
132 //__________________________________________________________
133 void AliHFEextraCuts::SetRequireITSpixel(ITSPixel_t pixel) {
134   SETBIT(fRequirements, kPixelITS);
135   fPixelITS = pixel; 
136 }
137
138 //__________________________________________________________
139 void AliHFEextraCuts::SetMinImpactParamR(Double_t impactParam){
140   SETBIT(fRequirements, kMinImpactParamR);
141   fImpactParamCut[0] = impactParam;
142 }
143
144 //__________________________________________________________
145 void AliHFEextraCuts::SetMaxImpactParamR(Double_t impactParam){
146   SETBIT(fRequirements, kMaxImpactParamR);
147   fImpactParamCut[2] = impactParam;
148 }
149
150 //__________________________________________________________
151 void AliHFEextraCuts::SetMinImpactParamZ(Double_t impactParam){
152   SETBIT(fRequirements, kMinImpactParamZ);
153   fImpactParamCut[1] = impactParam;
154 }
155
156 //__________________________________________________________
157 void AliHFEextraCuts::SetMaxImpactParamZ(Double_t impactParam){
158   SETBIT(fRequirements, kMaxImpactParamZ);
159   fImpactParamCut[3] = impactParam;
160 }
161
162 //__________________________________________________________
163 void AliHFEextraCuts::SetMinHFEImpactParamR(){
164   SETBIT(fRequirements, kMinHFEImpactParamR);
165 }
166
167 //__________________________________________________________
168 void AliHFEextraCuts::SetMinHFEImpactParamNsigmaR(){
169   SETBIT(fRequirements, kMinHFEImpactParamNsigmaR);
170 }
171
172 //__________________________________________________________
173 void AliHFEextraCuts::SetMinTrackletsTRD(Int_t minTracklets){
174   SETBIT(fRequirements, kMinTrackletsTRD);
175   fMinTrackletsTRD = minTracklets;
176 }
177
178 //__________________________________________________________
179 void AliHFEextraCuts::SetMinNClustersTPC(Int_t minClusters){
180   SETBIT(fRequirements, kMinNClustersTPC);
181   fMinNClustersTPC = minClusters;
182 }
183 #endif