c5560264f2a90c777a777920b7a2c4d28ce93302
[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     typedef enum{
43       kFound = 0,
44       kFoundIter1 = 1,
45       kCrossedRows = 2
46     } ETPCclusterDef_t;
47     typedef enum{
48       kFoundOverFindable = 0,
49       kFoundOverFindableIter1 = 1,
50       kFoundOverCR = 2,
51       kCROverFindable = 3
52     } ETPCclrDef_t;
53     AliHFEextraCuts(const Char_t *name, const Char_t *title);
54     AliHFEextraCuts(const AliHFEextraCuts &c);
55     AliHFEextraCuts &operator=(const AliHFEextraCuts &c);
56     virtual ~AliHFEextraCuts();
57     
58     virtual Bool_t IsSelected(TObject *o);
59     virtual Bool_t IsSelected(TList *) { return kTRUE; };
60     virtual void SetRecEventInfo(const TObject *event);
61
62     inline void SetClusterRatioTPC(Double_t ratio, ETPCclrDef_t def);
63     inline void SetRequireITSpixel(ITSPixel_t pixel);
64     inline void SetMinImpactParamR(Double_t impactParam);
65     inline void SetMaxImpactParamR(Double_t impactParam);
66     inline void SetMinImpactParamZ(Double_t impactParam);
67     inline void SetMaxImpactParamZ(Double_t impactParam);
68     inline void SetMinHFEImpactParamR(Float_t ipcutParam[4], Bool_t issigmacut);
69     inline void SetMinTrackletsTRD(Int_t minTracklets);
70     inline void SetMinNClustersTPC(Int_t minclusters, ETPCclusterDef_t def);
71     void SetTOFPID(Bool_t tofPid) { fTOFpid = tofPid;}
72     void SetTOFMISMATCH(Bool_t tofMismatch) { fTOFmismatch = tofMismatch;}
73     void SetMaxImpactParameterRpar(Bool_t maxImpactParameterRpar) {fMaxImpactParameterRpar = maxImpactParameterRpar;}
74     void SetFractionOfTPCSharedClusters(Double_t fractionOfTPCSharedClusters) {fFractionOfTPCSharedClusters = fractionOfTPCSharedClusters;}
75
76     void SetCheckITSstatus(Bool_t check) { fCheck = check; };
77     Bool_t GetCheckITSstatus() const { return fCheck; };
78
79     void SetDebugLevel(Int_t level) { fDebugLevel = level; };
80     Int_t GetDebugLevel() const { return fDebugLevel; };
81     
82   protected:
83     virtual void AddQAHistograms(TList *qaList);
84     Bool_t CheckRecCuts(AliVTrack *track);
85     Bool_t CheckMCCuts(AliVParticle * /*track*/) const;
86     Bool_t CheckITSstatus(Int_t itsStatus) const;
87     void FillQAhistosRec(AliVTrack *track, UInt_t when);
88 //     void FillQAhistosMC(AliMCParticle *track, UInt_t when);
89     void FillCutCorrelation(ULong64_t survivedCut);
90     void PrintBitMap(Int_t bitmap);
91     
92     // Getter Functions for ESD/AOD compatible mode
93     Int_t GetTRDnTrackletsPID(AliVTrack *track);
94     Int_t GetITSstatus(AliVTrack *track, Int_t layer);
95     UInt_t GetTPCncls(AliVTrack *track);
96     Double_t GetTPCclusterRatio(AliVTrack *track);
97     void GetImpactParameters(AliVTrack *track, Float_t &radial, Float_t &z);
98     void GetHFEImpactParameters(AliVTrack *track, Double_t &dcaxy, Double_t &dcansigmaxy);
99     void GetHFEImpactParameterCuts(AliVTrack *track, Double_t &hfeimpactRcut, Double_t &hfeimpactnsigmaRcut);
100     void GetMaxImpactParameterCutR(AliVTrack *track, Double_t &maximpactRcut);
101     Float_t GetTPCsharedClustersRatio(AliVTrack *track);
102
103   private:
104     typedef enum{
105       kMinImpactParamR = 0,
106       kMaxImpactParamR = 1,
107       kMinImpactParamZ = 2,
108       kMaxImpactParamZ = 3,
109       kClusterRatioTPC = 4,
110       kMinTrackletsTRD = 5,
111       kPixelITS = 6,
112       kMinHFEImpactParamR = 7,
113       kMinHFEImpactParamNsigmaR = 8,
114       kMinNClustersTPC = 9,
115       kNcuts = 10
116     } Cut_t;
117     enum{
118       //
119       // Common Constants
120       //
121       kBeforeCuts =0,
122       kAfterCuts = 1
123     };
124     AliVEvent *fEvent;                //! working event
125     ULong64_t fCutCorrelation;              // Cut Correlation
126     ULong64_t fRequirements;                  // Cut Requirements
127     Float_t fImpactParamCut[4];             // Impact Parmameter Cut
128     Float_t fIPcutParam[4];                     // Parmameter of impact parameter cut parametrization
129     UInt_t fMinNClustersTPC;          // Minimum TPC clusters cut
130     Float_t fClusterRatioTPC;                 // Ratio of findable vs. found clusters in TPC
131     UChar_t fMinTrackletsTRD;                 // Min. Number of Tracklets inside TRD
132     UChar_t fPixelITS;                // Cut on ITS Pixels
133     Bool_t  fTOFpid;                  // TOF pid
134     Bool_t  fTOFmismatch;             // TOF mismatch
135     UChar_t fTPCclusterDef;           // TPC cluster definition Bitmap
136     UChar_t fTPCclusterRatioDef;      // TPC cluster ratio definition Bitmap
137     Bool_t  fMaxImpactParameterRpar;  // Parametrized max impact parameter cut
138     Double_t  fFractionOfTPCSharedClusters; // Cut on fraction of shared clusters
139
140     Bool_t  fCheck;                     // check
141     TList *fQAlist;                     //! Directory for QA histograms
142     Int_t   fDebugLevel;                // Debug Level
143   
144   ClassDef(AliHFEextraCuts, 1)      // Additional cuts implemented by the ALICE HFE group
145 };
146
147 //__________________________________________________________
148 void AliHFEextraCuts::SetClusterRatioTPC(Double_t ratio, ETPCclrDef_t def) {
149   SETBIT(fRequirements, kClusterRatioTPC);
150   SETBIT(fTPCclusterRatioDef, def);
151   fClusterRatioTPC = ratio; 
152 }
153
154 //__________________________________________________________
155 void AliHFEextraCuts::SetRequireITSpixel(ITSPixel_t pixel) {
156   SETBIT(fRequirements, kPixelITS);
157   fPixelITS = pixel; 
158 }
159
160 //__________________________________________________________
161 void AliHFEextraCuts::SetMinImpactParamR(Double_t impactParam){
162   SETBIT(fRequirements, kMinImpactParamR);
163   fImpactParamCut[0] = impactParam;
164 }
165
166 //__________________________________________________________
167 void AliHFEextraCuts::SetMaxImpactParamR(Double_t impactParam){
168   SETBIT(fRequirements, kMaxImpactParamR);
169   fImpactParamCut[2] = impactParam;
170 }
171
172 //__________________________________________________________
173 void AliHFEextraCuts::SetMinImpactParamZ(Double_t impactParam){
174   SETBIT(fRequirements, kMinImpactParamZ);
175   fImpactParamCut[1] = impactParam;
176 }
177
178 //__________________________________________________________
179 void AliHFEextraCuts::SetMaxImpactParamZ(Double_t impactParam){
180   SETBIT(fRequirements, kMaxImpactParamZ);
181   fImpactParamCut[3] = impactParam;
182 }
183
184 //__________________________________________________________
185 void AliHFEextraCuts::SetMinHFEImpactParamR(Float_t ipcutParam[4], Bool_t isSigmacut){
186   if(isSigmacut) SETBIT(fRequirements, kMinHFEImpactParamNsigmaR);
187   else SETBIT(fRequirements, kMinHFEImpactParamR);
188   fIPcutParam[0]=ipcutParam[0];
189   fIPcutParam[1]=ipcutParam[1];
190   fIPcutParam[2]=ipcutParam[2];
191   fIPcutParam[3]=ipcutParam[3];
192 }
193
194 //__________________________________________________________
195 void AliHFEextraCuts::SetMinTrackletsTRD(Int_t minTracklets){
196   SETBIT(fRequirements, kMinTrackletsTRD);
197   fMinTrackletsTRD = minTracklets;
198 }
199
200 //__________________________________________________________
201 void AliHFEextraCuts::SetMinNClustersTPC(Int_t minClusters, ETPCclusterDef_t tpcdef){
202   SETBIT(fRequirements, kMinNClustersTPC);
203   SETBIT(fTPCclusterDef, tpcdef);
204   fMinNClustersTPC = minClusters;
205 }
206 #endif