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