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