]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PWGHF/hfe/AliHFEcuts.h
mixed events modified
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEcuts.h
... / ...
CommitLineData
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// Cut container class for the ALICE HFE group
17// Serves also as interface to the correction Framework
18// Provides a set of standard cuts
19//
20#ifndef ALIHFECUTS_H
21#define ALIHFECUTS_H
22
23#ifndef ROOT_TNamed
24#include <TNamed.h>
25#endif
26
27#ifndef ALIHFEEXTRACUTS_H
28#include "AliHFEextraCuts.h"
29#endif
30
31class AliCFManager;
32class AliESDtrack;
33class AliMCEvent;
34class AliMCParticle;
35class AliVEvent;
36
37class TObjArray;
38class TList;
39
40class AliHFEcuts : public TNamed{
41 public:
42 typedef enum{
43 kStepRecNoCut = 0,
44 kStepRecKineITSTPC = 1,
45 kStepRecPrim = 2,
46 kStepHFEcutsITS = 3,
47 kStepHFEcutsTOF = 4,
48 kStepHFEcutsTPC = 5,
49 kStepHFEcutsTRD = 6,
50 kNcutStepsRecTrack = 7
51 } RecoCutStep_t;
52 typedef enum{
53 kStepHFEcutsDca = 0,
54 kNcutStepsDETrack = 1
55 } DECutStep_t;
56 typedef enum{
57 kStepHFEcutsSecvtx = 0,
58 kNcutStepsSecvtxTrack = 1
59 } SecvtxCutStep_t;
60 typedef enum{
61 kStepMCGenerated = 0,
62 kStepMCGeneratedZOutNoPileUpCentralityFine = 1,
63 kStepMCGeneratedEventCut = 2,
64 kStepMCInAcceptance = 3,
65 kNcutStepsMCTrack = 4
66 } MCCutStep_t;
67 typedef enum{
68 kEventStepGenerated = 0,
69 kEventStepRecNoCut = 1,
70 kEventStepRecNoPileUp = 2,
71 kEventStepRecCentralityOk = 3,
72 kEventStepZRange = 4,
73 kEventStepReconstructed = 5,
74 kNcutStepsEvent = 6
75 } EventCutStep_t;
76
77 AliHFEcuts();
78 AliHFEcuts(const Char_t *name, const Char_t *title);
79 AliHFEcuts(const AliHFEcuts &c);
80 AliHFEcuts &operator=(const AliHFEcuts &c);
81 void Copy(TObject &o) const;
82 Long64_t Merge(const TCollection *list);
83 ~AliHFEcuts();
84
85 void Initialize(AliCFManager *cfm);
86 void Initialize();
87
88 Bool_t CheckParticleCuts(UInt_t step, TObject *o);
89 Bool_t CheckEventCuts(const char*namestep, TObject *o);
90 void SetRecEvent(const AliVEvent *ev);
91 void SetMCEvent(const AliVEvent *ev);
92
93 TList *GetQAhistograms() const { return fHistQA; }
94
95 void SetQAOn() {SetBit(kDebugMode, kTRUE); };
96 void UnsetQA() {SetBit(kDebugMode, kFALSE); };
97 Bool_t IsQAOn() const { return TestBit(kDebugMode); };
98 void SetAOD() { SetBit(kAOD, kTRUE); }
99 void SetESD() { SetBit(kAOD, kFALSE); }
100 Bool_t IsAOD() const { return TestBit(kAOD); }
101 Bool_t IsESD() const { return !TestBit(kAOD); }
102
103 // Cut Names
104 static const Char_t *MCCutName(UInt_t step){
105 if(step >= kNcutStepsMCTrack) return fgkUndefined;
106 return fgkMCCutName[step];
107 };
108 static const Char_t *RecoCutName(UInt_t step){
109 if(step >= kNcutStepsRecTrack) return fgkUndefined;
110 return fgkRecoCutName[step];
111 }
112 static const Char_t *DECutName(UInt_t step){
113 if(step >= kNcutStepsDETrack) return fgkUndefined;
114 return fgkDECutName[step];
115 }
116 static const Char_t *SecvtxCutName(UInt_t step){
117 if(step >= kNcutStepsSecvtxTrack) return fgkUndefined;
118 return fgkSecvtxCutName[step];
119 }
120 static const Char_t *EventCutName(UInt_t step){
121 if(step >= kNcutStepsEvent) return fgkUndefined;
122 return fgkEventCutName[step];
123 }
124
125 // Getters
126 Bool_t IsRequireITSpixel() const { return TESTBIT(fRequirements, kITSPixel); };
127 Bool_t IsRequireITSdrift() const { return TESTBIT(fRequirements, kITSDrift); };
128 Bool_t IsRequireMaxImpactParam() const { return TESTBIT(fRequirements, kMaxImpactParam); };
129 Bool_t IsRequirePrimary() const { return TESTBIT(fRequirements, kPrimary); };
130 Bool_t IsRequireProdVertex() const { return TESTBIT(fRequirements, kProductionVertex); };
131 Bool_t IsRequireSigmaToVertex() const { return TESTBIT(fRequirements, kSigmaToVertex); };
132 Bool_t IsRequireDCAToVertex() const {return TESTBIT(fRequirements, kDCAToVertex); };
133 Bool_t IsRequireKineMCCuts() const {return TESTBIT(fRequirements, kKineMCCuts); };
134 Double_t GetVertexRange() const {return fVertexRangeZ; };
135 Int_t GetMinTrackletsTRD() const { return fMinTrackletsTRD; }
136 Bool_t GetUseMixedVertex() const { return fUseMixedVertex;};
137
138 // Setters
139 inline void SetCutITSpixel(UChar_t cut);
140 inline void SetCutITSdrift(UChar_t cut);
141 void SetCheckITSLayerStatus(Bool_t checkITSLayerStatus) { fCheckITSLayerStatus = checkITSLayerStatus; }
142 void SetMinNClustersTPC(UChar_t minClustersTPC) { fMinClustersTPC = minClustersTPC; }
143 void SetMinNClustersTPCPID(UChar_t minClustersTPC) { fMinClustersTPCPID = minClustersTPC; }
144 void SetMinNClustersITS(UChar_t minClustersITS) { fMinClustersITS = minClustersITS; }
145 void SetMinNTrackletsTRD(UChar_t minNtrackletsTRD, Bool_t exact = kFALSE) { fMinTrackletsTRD = minNtrackletsTRD; fTRDtrackletsExact = exact; }
146 void SetMaxChi2perTrackletTRD(Float_t maxchi2trackletTRD) { fMaxChi2TRD = maxchi2trackletTRD; }
147 void SetMaxChi2perClusterITS(Double_t chi2) { fMaxChi2clusterITS = chi2; };
148 void SetMaxChi2perClusterTPC(Double_t chi2) { fMaxChi2clusterTPC = chi2; };
149 inline void SetMaxImpactParam(Double_t radial, Double_t z);
150 inline void SetIPcutParam(Float_t p0, Float_t p1, Float_t p2, Float_t p3, Bool_t isIPcharge, Bool_t isipsigma, Bool_t isopp);
151 void SetMinRatioTPCclusters(Double_t minRatioTPC) { fMinClusterRatioTPC = minRatioTPC; };
152 void SetPtRange(Double_t ptmin, Double_t ptmax){fPtRange[0] = ptmin; fPtRange[1] = ptmax;};
153 void SetTOFsignaldxz(Double_t tofsignaldx, Double_t tofsignaldz){fTOFsignaldx = tofsignaldx; fTOFsignaldz = tofsignaldz;};
154 void SetAODFilterBit(Int_t bit) { fAODFilterBit = bit; };
155 inline void SetProductionVertex(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax);
156 inline void SetSigmaToVertex(Double_t sig);
157 inline void SetSigmaToVertexXY(Double_t sig);
158 inline void SetSigmaToVertexZ(Double_t sig);
159 void SetTPCmodes(UChar_t clusterDef, UChar_t ratioDef) {
160 fTPCclusterDef= clusterDef;
161 fTPCratioDef = ratioDef;
162 }
163 void SetEtaRange(Double_t etaRange){fEtaRange = etaRange;};
164 void SetVertexRange(Double_t zrange){fVertexRangeZ = zrange;};
165 void SetTOFPIDStep(Bool_t tofPidStep) {fTOFPIDStep = tofPidStep;};
166 void SetTOFMISMATCHStep(Bool_t tofMismatchStep) {fTOFMISMATCHStep = tofMismatchStep;};
167 void SetTPCPIDCleanUpStep(Bool_t tpcPIDCleanUpStep) {fTPCPIDCLEANUPStep = tpcPIDCleanUpStep;};
168 void SetITSpatternCut() { fITSpatternCut = kTRUE; }
169 inline void SetUseMixedVertex(Bool_t useMixedVertex);
170 inline void SetUseSPDVertex(Bool_t useSPDVertex);
171 void SetUseCorrelationVertex() { fUseCorrelationVertex = kTRUE;};
172 void SetSPDVtxResolutionCut() {fSPDVtxResolution = kTRUE;}
173 void SetFractionOfSharedTPCClusters(Double_t fractionOfSharedTPCClusters) {fFractionOfSharedTPCClusters = fractionOfSharedTPCClusters;};
174 void SetMaxImpactParameterRpar(Bool_t maxImpactParameterRpar) { fMaxImpactParameterRpar = maxImpactParameterRpar; };
175
176 inline void CreateStandardCuts();
177
178 // Requirements
179 void SetAdditionalStatusRequirement(Long_t requirement) {fAdditionalStatusRequirement = requirement;}
180 void SetRequireDCAToVertex() { SETBIT(fRequirements, kDCAToVertex); CLRBIT(fRequirements, kSigmaToVertex); };
181 void SetRequireIsPrimary() { SETBIT(fRequirements, kPrimary); };
182 void SetRequireITSPixel() { SETBIT(fRequirements, kITSPixel); }
183 void SetRequireITSDrift() { SETBIT(fRequirements, kITSDrift); }
184 void UnsetRequireITSPixel() { CLRBIT(fRequirements, kITSPixel); }
185 void SetRequireProdVertex() { SETBIT(fRequirements, kProductionVertex); };
186 void SetRequireSigmaToVertex() { SETBIT(fRequirements, kSigmaToVertex); CLRBIT(fRequirements, kDCAToVertex); };
187 void UnsetVertexRequirement() { CLRBIT(fRequirements, kDCAToVertex); CLRBIT(fRequirements, kSigmaToVertex); }
188 void SetRequireKineMCCuts() { SETBIT(fRequirements, kKineMCCuts); };
189
190 void SetDebugLevel(Int_t level) { fDebugLevel = level; };
191 Int_t GetDebugLevel() const { return fDebugLevel; };
192
193 private:
194 enum{
195 kDebugMode = BIT(14),
196 kAOD = BIT(15)
197 };
198 typedef enum{
199 kPrimary = 0,
200 kProductionVertex = 1,
201 kSigmaToVertex = 2,
202 kDCAToVertex = 3,
203 kITSPixel = 4,
204 kMaxImpactParam = 5,
205 kKineMCCuts = 6,
206 kITSDrift = 7
207 } Require_t;
208 void SetParticleGenCutList();
209 void SetAcceptanceCutList();
210 void SetRecKineITSTPCCutList();
211 void SetRecPrimaryCutList();
212 void SetHFElectronITSCuts();
213 void SetHFElectronTOFCuts();
214 void SetHFElectronTPCCuts();
215 void SetHFElectronTRDCuts();
216 void SetHFElectronDcaCuts();
217 void SetEventCutList(Int_t istep);
218
219 static const Char_t* fgkMCCutName[kNcutStepsMCTrack]; // Cut step names for MC single Track cuts
220 static const Char_t* fgkRecoCutName[kNcutStepsRecTrack]; // Cut step names for Rec single Track cuts
221 static const Char_t* fgkDECutName[kNcutStepsDETrack]; // Cut step names for impact parameter cuts
222 static const Char_t* fgkSecvtxCutName[kNcutStepsSecvtxTrack]; // Cut step names for secondary vertexing cuts
223 static const Char_t* fgkEventCutName[kNcutStepsEvent]; // Cut step names for Event cuts
224 static const Char_t* fgkUndefined; // Name for undefined (overflow)
225
226 ULong64_t fRequirements; // Bitmap for requirements
227 UChar_t fTPCclusterDef; // TPC cluster definition
228 UChar_t fTPCratioDef; // TPC cluster ratio Definition
229 Double_t fEtaRange; // Eta range
230 Double_t fDCAtoVtx[2]; // DCA to Vertex
231 Double_t fProdVtx[4]; // Production Vertex
232 Double_t fPtRange[2]; // pt range
233 UChar_t fMinClustersTPC; // Min.Number of TPC clusters
234 UChar_t fMinClustersTPCPID; // Min.Number of TPC clusters
235 UChar_t fMinClustersITS; // Min.Number of TPC clusters
236 UChar_t fMinTrackletsTRD; // Min. Number of TRD tracklets
237 Float_t fMaxChi2TRD; // Max. Chi2 per TRD tracklet
238 UChar_t fCutITSPixel; // Cut on ITS pixel
239 Bool_t fCheckITSLayerStatus; // Check ITS layer status
240 UChar_t fCutITSDrift; // Cut on ITS drift
241 Double_t fMaxChi2clusterITS; // Max Chi2 per ITS cluster
242 Double_t fMaxChi2clusterTPC; // Max Chi2 per TPC cluster
243 Double_t fMinClusterRatioTPC; // Min. Ratio findable / found TPC clusters
244 Double_t fSigmaToVtx[3]; // Sigma To Vertex
245 Double_t fVertexRangeZ; // Vertex Range reconstructed
246 Bool_t fTRDtrackletsExact; // Require exact number of tracklets
247 Bool_t fTOFPIDStep; // TOF matching step efficiency
248 Bool_t fTOFMISMATCHStep; // TOF mismatch step
249 Bool_t fTPCPIDCLEANUPStep; // TPC PIC cleanup step
250 Bool_t fITSpatternCut; // Cut on ITS pattern
251 Bool_t fUseMixedVertex; // Use primary vertex from track if there otherwise SPD vertex
252 Bool_t fUseSPDVertex; // Use primary SPD vertex
253 Bool_t fUseCorrelationVertex; // Use the correlation of the vertex in z
254 Bool_t fSPDVtxResolution; // Check resolution of the SPD vertex
255 Float_t fIPCutParams[4]; // Parameters of impact parameter cut parametrization
256 Bool_t fIsIPSigmacut; // if IP cut or IP sigma cut
257 Bool_t fIsIPcharge; // if cut on IP * charge (cut using only positive side of distribution, to eliminate conversions)
258 Bool_t fIsIPOpp; // if IP*charge cut on side of the photon peak
259 Double_t fFractionOfSharedTPCClusters; // Fraction of shared TPC clusters
260 Bool_t fMaxImpactParameterRpar; // Max impact parameter
261 Long_t fAdditionalStatusRequirement; // Additional status bit requirement
262 Double_t fTOFsignaldx; // TOF signal Dx
263 Double_t fTOFsignaldz; // TOF signal Dz
264 Int_t fAODFilterBit; // AOD Filter Bit Number
265
266 TList *fHistQA; //! QA Histograms
267 TObjArray *fCutList; //! List of cut objects(Correction Framework Manager)
268
269 Int_t fDebugLevel; // Debug Level
270
271 ClassDef(AliHFEcuts, 5) // Container for HFE cuts
272};
273
274//__________________________________________________________________
275void AliHFEcuts::SetProductionVertex(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax){
276 // Set the production vertex constraint
277 SetRequireProdVertex();
278 fProdVtx[0] = xmin;
279 fProdVtx[1] = xmax;
280 fProdVtx[2] = ymin;
281 fProdVtx[3] = ymax;
282}
283
284//__________________________________________________________________
285void AliHFEcuts::SetSigmaToVertex(Double_t sig){
286 SetRequireSigmaToVertex();
287 fSigmaToVtx[0] = sig;
288}
289
290//__________________________________________________________________
291void AliHFEcuts::SetSigmaToVertexXY(Double_t sig){
292 SetRequireSigmaToVertex();
293 fSigmaToVtx[1] = sig;
294}
295
296//__________________________________________________________________
297void AliHFEcuts::SetSigmaToVertexZ(Double_t sig){
298 SetRequireSigmaToVertex();
299 fSigmaToVtx[2] = sig;
300}
301
302//__________________________________________________________________
303void AliHFEcuts::SetMaxImpactParam(Double_t radial, Double_t z){
304 SetRequireDCAToVertex();
305 fDCAtoVtx[0] = radial;
306 fDCAtoVtx[1] = z;
307}
308
309//__________________________________________________________________
310void AliHFEcuts::SetIPcutParam(Float_t p0, Float_t p1, Float_t p2, Float_t p3, Bool_t isipsigma, Bool_t isIPcharge, Bool_t isopp){
311 // Set parameters for impact parameter cut parametrization
312 fIPCutParams[0] = p0;
313 fIPCutParams[1] = p1;
314 fIPCutParams[2] = p2;
315 fIPCutParams[3] = p3;
316 fIsIPSigmacut = isipsigma;
317 fIsIPcharge = isIPcharge;
318 fIsIPOpp = isopp;
319}
320
321//__________________________________________________________________
322void AliHFEcuts::SetCutITSpixel(UChar_t cut){
323 SetRequireITSPixel();
324 fCutITSPixel = cut;
325}
326
327//__________________________________________________________________
328void AliHFEcuts::SetCutITSdrift(UChar_t cut){
329 SetRequireITSDrift();
330 fCutITSDrift = cut;
331}
332//__________________________________________________________________
333void AliHFEcuts::SetUseMixedVertex(Bool_t useMixedVertex){
334 //
335 // Choice of a vertex
336 //
337 fUseMixedVertex = useMixedVertex;
338 if(useMixedVertex) fUseSPDVertex = kFALSE;
339}
340//__________________________________________________________________
341void AliHFEcuts::SetUseSPDVertex(Bool_t useSPDVertex){
342 //
343 // Choice of a vertex
344 //
345 fUseSPDVertex = useSPDVertex;
346 if(useSPDVertex) fUseMixedVertex = kFALSE;
347}
348
349//__________________________________________________________________
350void AliHFEcuts::CreateStandardCuts(){
351 //
352 // Standard Cuts defined by the HFE Group
353 //
354 SetRequireProdVertex();
355 fProdVtx[0] = 0;
356 fProdVtx[1] = 3;
357 fProdVtx[2] = 0;
358 fProdVtx[3] = 3;
359 //SetRequireDCAToVertex();
360 //fDCAtoVtx[0] = 0.5;
361 //fDCAtoVtx[1] = 1.5;
362 fMinClustersTPC = 80;
363 fMinClustersITS = 4;
364 fMinTrackletsTRD = 0;
365 SetRequireITSPixel();
366 fCutITSPixel = AliHFEextraCuts::kFirst;
367 fMaxChi2clusterITS = -1.;
368 fMaxChi2clusterTPC = 4.;
369 fMinClusterRatioTPC = 0.6;
370 fPtRange[0] = 0.1;
371 fPtRange[1] = 20.;
372 SetRequireKineMCCuts();
373}
374#endif