]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/hfe/AliHFEextraCuts.h
Bug fix
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEextraCuts.h
1
2 /**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 *                                                                        *
5 * Author: The ALICE Off-line Project.                                    *
6 * Contributors are mentioned in the code where appropriate.              *
7 *                                                                        *
8 * Permission to use, copy, modify and distribute this software and its   *
9 * documentation strictly for non-commercial purposes is hereby granted   *
10 * without fee, provided that the above copyright notice appears in all   *
11 * copies and that both the copyright notice and this permission notice   *
12 * appear in the supporting documentation. The authors make no claims     *
13 * about the suitability of this software for any purpose. It is          *
14 * provided "as is" without express or implied warranty.                  *
15 **************************************************************************/
16 //
17 // Extra Cuts from the ALICE HFE Group
18 // Container for cuts which are currently not implemented by
19 // the Correction Framework
20 //
21 #ifndef ALIHFEEXTRACUTS_H
22 #define ALIHFEEXTRACUTS_H
23
24 // #ifndef ALICFCUTBASE_H
25 #include "AliCFCutBase.h"
26 // #endif
27
28 class TList;
29
30 class AliVEvent;
31 class AliVParticle;
32 class AliVTrack;
33 class AliVVertex;
34 class AliAODVertex;
35 class AliAODEvent;
36 class AliESDEvent;
37
38 class AliHFEextraCuts: public AliCFCutBase{
39   public:
40     typedef enum{
41       kFirst = 0,
42       kSecond = 1,
43       kBoth = 2,
44       kNone = 3,
45       kAny = 4,
46       kExclusiveSecond = 5
47     } ITSPixel_t;
48     typedef enum{
49       kFirstD = 0  
50     } ITSDrift_t;
51     typedef enum{
52       kFound = 0,
53       kFoundIter1 = 1,
54       kCrossedRows = 2,
55       kFoundAll = 3
56     } ETPCclusterDef_t;
57     typedef enum{
58       kFoundOverFindable = 0,
59       kFoundOverFindableIter1 = 1,
60       kFoundOverCR = 2,
61       kCROverFindable = 3,
62       kFoundAllOverFindable = 4,
63     } ETPCclrDef_t;
64     AliHFEextraCuts(const Char_t *name, const Char_t *title);
65     AliHFEextraCuts(const AliHFEextraCuts &c);
66     AliHFEextraCuts &operator=(const AliHFEextraCuts &c);
67     virtual ~AliHFEextraCuts();
68     
69     virtual Bool_t IsSelected(TObject *o);
70     virtual Bool_t IsSelected(TList *) { return kTRUE; };
71     virtual void SetRecEventInfo(const TObject *event);
72
73     inline void SetClusterRatioTPC(Double_t ratio, ETPCclrDef_t def);
74     inline void SetRequireITSpixel(ITSPixel_t pixel);
75     inline void SetRequireITSdrift(ITSDrift_t drift);
76     inline void SetMinImpactParamR(Double_t impactParam);
77     inline void SetMaxImpactParamR(Double_t impactParam);
78     inline void SetMinImpactParamZ(Double_t impactParam);
79     inline void SetMaxImpactParamZ(Double_t impactParam);
80     inline void SetMinHFEImpactParamR(Float_t ipcutParam[4], Bool_t issigmacut, Bool_t isabs);
81     inline void SetMinTrackletsTRD(Int_t minTracklets, Bool_t exact = kFALSE);
82     inline void SetMaxChi2TRD(Float_t maxchi2);
83     inline void SetMinNClustersTPC(Int_t minclusters, ETPCclusterDef_t def);
84     void SetMinNClustersTPCPID(Int_t minclusters) { SETBIT(fRequirements, kMinNClustersTPCPID); fMinNClustersTPCPID = minclusters; }
85     void SetTOFPID(Bool_t tofPid) { tofPid ? SETBIT(fRequirements, kTOFPID) : CLRBIT(fRequirements, kTOFPID); }
86     void SetTOFMISMATCH(Bool_t tofMismatch) { tofMismatch ? SETBIT(fRequirements, kTOFmismatch) : CLRBIT(fRequirements, kTOFmismatch); }
87     void SetTPCPIDCleanUp(Bool_t tpcPIDCleanUp) { tpcPIDCleanUp ? SETBIT(fRequirements, kTPCPIDCleanUp) : CLRBIT(fRequirements, kTPCPIDCleanUp); }
88     void SetMaxImpactParameterRpar(Bool_t maxImpactParameterRpar) { maxImpactParameterRpar ? SETBIT(fRequirements, kMaxImpactParameterRpar) : CLRBIT(fRequirements, kMaxImpactParameterRpar); }
89     void SetFractionOfTPCSharedClusters(Double_t fractionShared) { fFractionTPCShared= fractionShared; SETBIT(fRequirements, kTPCfractionShared); }
90     void SetMinNbITScls(UChar_t minNbITScls) { fMinNbITScls = minNbITScls; SETBIT(fRequirements, kMinNbITScls); }
91     void SetTOFsignalDxz(Double_t tofsignalDx,Double_t tofsignalDz) { fTOFsignalDx=tofsignalDx; fTOFsignalDz=tofsignalDz; SETBIT(fRequirements, kTOFsignalDxy); }
92     void SetRejectKinkDaughter() { SETBIT(fRequirements, kRejectKinkDaughter);}; 
93     void SetRejectKinkMother() { SETBIT(fRequirements, kRejectKinkMother);}; 
94     void SetCheckITSstatus(Bool_t check) { fCheck = check; };
95     void SetITSpatternCut() { SETBIT(fRequirements, kITSpattern); }
96     void SetDebugLevel(Int_t level) { fDebugLevel = level; };
97
98     Bool_t GetCheckITSstatus() const { return fCheck; };
99     Int_t GetDebugLevel() const { return fDebugLevel; };
100     void GetHFEImpactParameters(AliVTrack *track, Double_t &dcaxy, Double_t &dcansigmaxy); // temporary moved from protected to publich for IP QA 
101     void GetHFEImpactParameters(AliVTrack *track, Double_t dcaD[2], Double_t covD[3]);
102     void GetImpactParameters(AliVTrack *track, Float_t &radial, Float_t &z);
103     const AliVVertex* RemoveDaughtersFromPrimaryVtx(AliESDEvent *esdevent, AliVTrack *track);
104     AliAODVertex* RemoveDaughtersFromPrimaryVtx(AliAODEvent *aod, AliVTrack *track);
105     Int_t GetITSstatus(const AliVTrack * const track, Int_t layer) const;
106     Bool_t CheckITSstatus(Int_t itsStatus) const;
107     Bool_t CheckITSpattern(const AliVTrack *const track) const;
108     Bool_t IsKinkDaughter(AliVTrack *track);
109
110     void UnSetRejectKinkDaughter() { CLRBIT(fRequirements, kRejectKinkDaughter);}; 
111     void UnSetRejectKinkMother() { CLRBIT(fRequirements, kRejectKinkMother);}; 
112
113     
114   protected:
115     virtual void AddQAHistograms(TList *qaList);
116     Bool_t CheckRecCuts(AliVTrack *track);
117     Bool_t CheckMCCuts(AliVParticle * /*track*/) const;
118     void FillQAhistosRec(AliVTrack *track, UInt_t when);
119     //void FillQAhistosMC(AliMCParticle *track, UInt_t when);
120     void FillCutCorrelation(ULong64_t survivedCut);
121     void PrintBitMap(Int_t bitmap);
122     
123     // Getter Functions for ESD/AOD compatible mode
124     UInt_t GetTPCncls(AliVTrack *track);
125     Bool_t GetTPCCountSharedMapBitsAboveThreshold(AliVTrack *track);
126     Double_t GetTPCclusterRatio(AliVTrack *track); 
127     //void GetHFEImpactParameters(AliVTrack *track, Double_t &dcaxy, Double_t &dcansigmaxy);
128     void GetHFEImpactParameterCuts(AliVTrack *track, Double_t &hfeimpactRcut, Double_t &hfeimpactnsigmaRcut);
129     void GetMaxImpactParameterCutR(AliVTrack *track, Double_t &maximpactRcut);
130     void GetTOFsignalDxDz(AliVTrack *track, Double_t &tofsignalDx, Double_t &tofsignalDz);
131     Float_t GetTPCsharedClustersRatio(AliVTrack *track);
132     Float_t GetTRDchi(AliVTrack *track);
133     Int_t GetITSNbOfcls(AliVTrack *track);
134     Bool_t IsKinkMother(AliVTrack *track);
135
136   private:
137     typedef enum{
138       kMinImpactParamR = 0,
139       kMaxImpactParamR = 1,
140       kMinImpactParamZ = 2,
141       kMaxImpactParamZ = 3,
142       kClusterRatioTPC = 4,
143       kMinTrackletsTRD = 5,
144       kPixelITS = 6,
145       kMinHFEImpactParamR = 7,
146       kMinHFEImpactParamNsigmaR = 8,
147       kMinNClustersTPC = 9,
148       kMinNClustersTPCPID = 10,
149       kTPCfractionShared = 11,
150       kTOFPID = 12,
151       kTOFmismatch = 13,
152       kTPCPIDCleanUp = 14,
153       kEMCALmatch = 15,
154       kMaxImpactParameterRpar = 16,
155       kMinNbITScls = 17,
156       kRejectKinkDaughter = 18,
157       kRejectKinkMother = 19,
158       kDriftITS = 20,
159       kTOFsignalDxy = 21,
160       kMaxTRDChi2 = 22,
161       kITSpattern = 23,
162       kNcuts = 24
163     } Cut_t;
164     enum{
165       //
166       // Common Constants
167       //
168       kBeforeCuts =0,
169       kAfterCuts = 1
170     };
171     static const Int_t fgkNQAhistos;   // Number of QA histos
172     AliVEvent *fEvent;                //! working event
173     ULong64_t fCutCorrelation;        // Cut Correlation
174     ULong64_t fRequirements;          // Cut Requirements
175     Float_t fImpactParamCut[4];       // Impact Parmameter Cut
176     Float_t fIPcutParam[4];           // Parmameter of impact parameter cut parametrization
177     UInt_t fMinNClustersTPC;          // Minimum TPC clusters cut
178     UInt_t fMinNClustersTPCPID;       // Minimum TPC PID clusters cut
179     Float_t fClusterRatioTPC;         // Ratio of findable vs. found clusters in TPC
180     UChar_t fMinTrackletsTRD;         // Min. Number of Tracklets inside TRD
181     Float_t fMaxChi2TRD;              // Max chi2 TRD
182     UChar_t fMinNbITScls;             // Min. Number of ITS clusters
183     Bool_t  fTRDtrackletsExact;       // Require exact number of tracklets
184     UChar_t fPixelITS;                // Cut on ITS Pixels
185     UChar_t fDriftITS;                // Cut on ITS Drift
186     UChar_t fTPCclusterDef;           // TPC cluster definition Bitmap
187     UChar_t fTPCclusterRatioDef;      // TPC cluster ratio definition Bitmap
188     Double_t  fFractionTPCShared;     // Cut on fraction of shared clusters
189     Bool_t fAbsHFEImpactParamNsigmaR; // flag to use abs ip cut
190     Double_t fTOFsignalDx;            // TOF signal dx
191     Double_t fTOFsignalDz;            // TOF signal dz
192
193     Bool_t  fCheck;                     // check
194     TList *fQAlist;                     //! Directory for QA histograms
195     Int_t   fDebugLevel;                // Debug Level
196   
197     ClassDef(AliHFEextraCuts, 5)      // Additional cuts implemented by the ALICE HFE group
198 };
199
200 //__________________________________________________________
201 void AliHFEextraCuts::SetClusterRatioTPC(Double_t ratio, ETPCclrDef_t def) {
202   SETBIT(fRequirements, kClusterRatioTPC);
203   SETBIT(fTPCclusterRatioDef, def);
204   fClusterRatioTPC = ratio; 
205 }
206
207 //__________________________________________________________
208 void AliHFEextraCuts::SetRequireITSpixel(ITSPixel_t pixel) {
209   SETBIT(fRequirements, kPixelITS);
210   fPixelITS = pixel; 
211 }
212
213 //__________________________________________________________
214 void AliHFEextraCuts::SetRequireITSdrift(ITSDrift_t drift) {
215   SETBIT(fRequirements, kDriftITS);
216   fDriftITS = drift; 
217 }
218
219 //__________________________________________________________
220 void AliHFEextraCuts::SetMinImpactParamR(Double_t impactParam){
221   SETBIT(fRequirements, kMinImpactParamR);
222   fImpactParamCut[0] = impactParam;
223 }
224
225 //__________________________________________________________
226 void AliHFEextraCuts::SetMaxImpactParamR(Double_t impactParam){
227   SETBIT(fRequirements, kMaxImpactParamR);
228   fImpactParamCut[2] = impactParam;
229 }
230
231 //__________________________________________________________
232 void AliHFEextraCuts::SetMinImpactParamZ(Double_t impactParam){
233   SETBIT(fRequirements, kMinImpactParamZ);
234   fImpactParamCut[1] = impactParam;
235 }
236
237 //__________________________________________________________
238 void AliHFEextraCuts::SetMaxImpactParamZ(Double_t impactParam){
239   SETBIT(fRequirements, kMaxImpactParamZ);
240   fImpactParamCut[3] = impactParam;
241 }
242
243 //__________________________________________________________
244 void AliHFEextraCuts::SetMinHFEImpactParamR(Float_t ipcutParam[4], Bool_t isSigmacut, Bool_t isabs){
245   if(isSigmacut) SETBIT(fRequirements, kMinHFEImpactParamNsigmaR);
246   else SETBIT(fRequirements, kMinHFEImpactParamR);
247   fIPcutParam[0]=ipcutParam[0];
248   fIPcutParam[1]=ipcutParam[1];
249   fIPcutParam[2]=ipcutParam[2];
250   fIPcutParam[3]=ipcutParam[3];
251   fAbsHFEImpactParamNsigmaR = isabs;
252 }
253
254 //__________________________________________________________
255 void AliHFEextraCuts::SetMinTrackletsTRD(Int_t minTracklets, Bool_t exact){
256   SETBIT(fRequirements, kMinTrackletsTRD);
257   fMinTrackletsTRD = minTracklets;
258   fTRDtrackletsExact = exact;
259 }
260
261 //__________________________________________________________
262 void AliHFEextraCuts::SetMaxChi2TRD(Float_t maxchi2){
263   SETBIT(fRequirements, kMaxTRDChi2);
264   fMaxChi2TRD = maxchi2;
265 }
266
267
268 //__________________________________________________________
269 void AliHFEextraCuts::SetMinNClustersTPC(Int_t minClusters, ETPCclusterDef_t tpcdef){
270   SETBIT(fRequirements, kMinNClustersTPC);
271   SETBIT(fTPCclusterDef, tpcdef);
272   fMinNClustersTPC = minClusters;
273 }
274 #endif