]>
Commit | Line | Data |
---|---|---|
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 | ||
31 | class AliCFManager; | |
32 | class AliESDtrack; | |
e17c1f86 | 33 | class AliMCEvent; |
809a4336 | 34 | class AliMCParticle; |
e17c1f86 | 35 | class AliVEvent; |
809a4336 | 36 | |
37 | class TObjArray; | |
38 | class TList; | |
39 | ||
e3fc062d | 40 | class 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; } |
cedf0381 | 145 | void SetMaxChi2perTrackletTRD(Float_t maxchi2trackletTRD) { fMaxChi2TRD = maxchi2trackletTRD; } |
8c1c76e9 | 146 | void SetMaxChi2perClusterITS(Double_t chi2) { fMaxChi2clusterITS = chi2; }; |
75d81601 | 147 | void SetMaxChi2perClusterTPC(Double_t chi2) { fMaxChi2clusterTPC = chi2; }; |
148 | inline void SetMaxImpactParam(Double_t radial, Double_t z); | |
11ff28c5 | 149 | inline void SetIPcutParam(Float_t p0, Float_t p1, Float_t p2, Float_t p3, Bool_t isipsigma, Bool_t isabs); |
75d81601 | 150 | void SetMinRatioTPCclusters(Double_t minRatioTPC) { fMinClusterRatioTPC = minRatioTPC; }; |
151 | void SetPtRange(Double_t ptmin, Double_t ptmax){fPtRange[0] = ptmin; fPtRange[1] = ptmax;}; | |
1c051dd4 | 152 | void SetTOFsignaldxz(Double_t tofsignaldx, Double_t tofsignaldz){fTOFsignaldx = tofsignaldx; fTOFsignaldz = tofsignaldz;}; |
75d81601 | 153 | inline void SetProductionVertex(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax); |
154 | inline void SetSigmaToVertex(Double_t sig); | |
8c1c76e9 | 155 | inline void SetSigmaToVertexXY(Double_t sig); |
156 | inline void SetSigmaToVertexZ(Double_t sig); | |
e3ae862b | 157 | void SetTPCmodes(AliHFEextraCuts::ETPCclusterDef_t clusterDef, AliHFEextraCuts::ETPCclrDef_t ratioDef) { |
158 | fTPCclusterDef= clusterDef; | |
159 | fTPCratioDef = ratioDef; | |
160 | } | |
1c051dd4 | 161 | void SetEtaRange(Double_t etaRange){fEtaRange = etaRange;}; |
e3ae862b | 162 | void SetVertexRange(Double_t zrange){fVertexRangeZ = zrange;}; |
c2690925 | 163 | void SetTOFPIDStep(Bool_t tofPidStep) {fTOFPIDStep = tofPidStep;}; |
164 | void SetTOFMISMATCHStep(Bool_t tofMismatchStep) {fTOFMISMATCHStep = tofMismatchStep;}; | |
8c1c76e9 | 165 | void SetTPCPIDCleanUpStep(Bool_t tpcPIDCleanUpStep) {fTPCPIDCLEANUPStep = tpcPIDCleanUpStep;}; |
cedf0381 | 166 | void SetITSpatternCut() { fITSpatternCut = kTRUE; } |
c2690925 | 167 | void SetUseMixedVertex(Bool_t useMixedVertex) {fUseMixedVertex = useMixedVertex;}; |
e17c1f86 | 168 | void SetFractionOfSharedTPCClusters(Double_t fractionOfSharedTPCClusters) {fFractionOfSharedTPCClusters = fractionOfSharedTPCClusters;}; |
9250ffbf | 169 | void SetMaxImpactParameterRpar(Bool_t maxImpactParameterRpar) { fMaxImpactParameterRpar = maxImpactParameterRpar; }; |
809a4336 | 170 | |
75d81601 | 171 | inline void CreateStandardCuts(); |
809a4336 | 172 | |
75d81601 | 173 | // Requirements |
11ff28c5 | 174 | void SetAdditionalStatusRequirement(Long_t requirement) {fAdditionalStatusRequirement = requirement;} |
67fe7bd0 | 175 | void SetRequireDCAToVertex() { SETBIT(fRequirements, kDCAToVertex); CLRBIT(fRequirements, kSigmaToVertex); }; |
75d81601 | 176 | void SetRequireIsPrimary() { SETBIT(fRequirements, kPrimary); }; |
177 | void SetRequireITSPixel() { SETBIT(fRequirements, kITSPixel); } | |
5cd679b7 | 178 | void SetRequireITSDrift() { SETBIT(fRequirements, kITSDrift); } |
11ff28c5 | 179 | void UnsetRequireITSPixel() { CLRBIT(fRequirements, kITSPixel); } |
75d81601 | 180 | void SetRequireProdVertex() { SETBIT(fRequirements, kProductionVertex); }; |
67fe7bd0 | 181 | void SetRequireSigmaToVertex() { SETBIT(fRequirements, kSigmaToVertex); CLRBIT(fRequirements, kDCAToVertex); }; |
3a72645a | 182 | void UnsetVertexRequirement() { CLRBIT(fRequirements, kDCAToVertex); CLRBIT(fRequirements, kSigmaToVertex); } |
faee3b18 | 183 | void SetRequireKineMCCuts() { SETBIT(fRequirements, kKineMCCuts); }; |
dbe3abbe | 184 | |
75d81601 | 185 | void SetDebugLevel(Int_t level) { fDebugLevel = level; }; |
186 | Int_t GetDebugLevel() const { return fDebugLevel; }; | |
187 | ||
188 | private: | |
50685501 | 189 | enum{ |
9bcfd1ab | 190 | kDebugMode = BIT(14), |
191 | kAOD = BIT(15) | |
50685501 | 192 | }; |
193 | typedef enum{ | |
194 | kPrimary = 0, | |
195 | kProductionVertex = 1, | |
196 | kSigmaToVertex = 2, | |
197 | kDCAToVertex = 3, | |
198 | kITSPixel = 4, | |
faee3b18 | 199 | kMaxImpactParam = 5, |
5cd679b7 | 200 | kKineMCCuts = 6, |
cedf0381 | 201 | kITSDrift = 7 |
50685501 | 202 | } Require_t; |
75d81601 | 203 | void SetParticleGenCutList(); |
204 | void SetAcceptanceCutList(); | |
722347d8 | 205 | void SetRecKineITSTPCCutList(); |
75d81601 | 206 | void SetRecPrimaryCutList(); |
207 | void SetHFElectronITSCuts(); | |
9250ffbf | 208 | void SetHFElectronTOFCuts(); |
8c1c76e9 | 209 | void SetHFElectronTPCCuts(); |
75d81601 | 210 | void SetHFElectronTRDCuts(); |
3a72645a | 211 | void SetHFElectronDcaCuts(); |
0792aa82 | 212 | void SetEventCutList(Int_t istep); |
3a72645a | 213 | |
214 | static const Char_t* fgkMCCutName[kNcutStepsMCTrack]; // Cut step names for MC single Track cuts | |
215 | static const Char_t* fgkRecoCutName[kNcutStepsRecTrack]; // Cut step names for Rec single Track cuts | |
216 | static const Char_t* fgkDECutName[kNcutStepsDETrack]; // Cut step names for impact parameter cuts | |
c2690925 | 217 | static const Char_t* fgkSecvtxCutName[kNcutStepsSecvtxTrack]; // Cut step names for secondary vertexing cuts |
3a72645a | 218 | static const Char_t* fgkEventCutName[kNcutStepsEvent]; // Cut step names for Event cuts |
219 | static const Char_t* fgkUndefined; // Name for undefined (overflow) | |
dbe3abbe | 220 | |
75d81601 | 221 | ULong64_t fRequirements; // Bitmap for requirements |
e3ae862b | 222 | AliHFEextraCuts::ETPCclusterDef_t fTPCclusterDef; // TPC cluster definition |
223 | AliHFEextraCuts::ETPCclrDef_t fTPCratioDef; // TPC cluster ratio Definition | |
1c051dd4 | 224 | Double_t fEtaRange; // Eta range |
75d81601 | 225 | Double_t fDCAtoVtx[2]; // DCA to Vertex |
226 | Double_t fProdVtx[4]; // Production Vertex | |
227 | Double_t fPtRange[2]; // pt range | |
228 | UChar_t fMinClustersTPC; // Min.Number of TPC clusters | |
e17c1f86 | 229 | UChar_t fMinClustersTPCPID; // Min.Number of TPC clusters |
3a72645a | 230 | UChar_t fMinClustersITS; // Min.Number of TPC clusters |
75d81601 | 231 | UChar_t fMinTrackletsTRD; // Min. Number of TRD tracklets |
cedf0381 | 232 | Float_t fMaxChi2TRD; // Max. Chi2 per TRD tracklet |
75d81601 | 233 | UChar_t fCutITSPixel; // Cut on ITS pixel |
0792aa82 | 234 | Bool_t fCheckITSLayerStatus; // Check ITS layer status |
5cd679b7 | 235 | UChar_t fCutITSDrift; // Cut on ITS drift |
8c1c76e9 | 236 | Double_t fMaxChi2clusterITS; // Max Chi2 per ITS cluster |
75d81601 | 237 | Double_t fMaxChi2clusterTPC; // Max Chi2 per TPC cluster |
238 | Double_t fMinClusterRatioTPC; // Min. Ratio findable / found TPC clusters | |
8c1c76e9 | 239 | Double_t fSigmaToVtx[3]; // Sigma To Vertex |
3a72645a | 240 | Double_t fVertexRangeZ; // Vertex Range reconstructed |
e17c1f86 | 241 | Bool_t fTRDtrackletsExact; // Require exact number of tracklets |
e3ae862b | 242 | Bool_t fTOFPIDStep; // TOF matching step efficiency |
c2690925 | 243 | Bool_t fTOFMISMATCHStep; // TOF mismatch step |
8c1c76e9 | 244 | Bool_t fTPCPIDCLEANUPStep; // TPC PIC cleanup step |
cedf0381 | 245 | Bool_t fITSpatternCut; // Cut on ITS pattern |
c2690925 | 246 | Bool_t fUseMixedVertex; // Use primary vertex from track only as before |
247 | Float_t fIPCutParams[4]; // Parameters of impact parameter cut parametrization | |
11ff28c5 | 248 | Bool_t fIsIPSigmacut; // if IP cut or IP sigma cut |
249 | Bool_t fIsIPAbs; // if abs IP sigma cut | |
9250ffbf | 250 | Double_t fFractionOfSharedTPCClusters; // Fraction of shared TPC clusters |
251 | Bool_t fMaxImpactParameterRpar; // Max impact parameter | |
11ff28c5 | 252 | Long_t fAdditionalStatusRequirement; // Additional status bit requirement |
1c051dd4 | 253 | Double_t fTOFsignaldx; // TOF signal Dx |
254 | Double_t fTOFsignaldz; // TOF signal Dz | |
3a72645a | 255 | |
809a4336 | 256 | |
75d81601 | 257 | TList *fHistQA; //! QA Histograms |
258 | TObjArray *fCutList; //! List of cut objects(Correction Framework Manager) | |
dbe3abbe | 259 | |
75d81601 | 260 | Int_t fDebugLevel; // Debug Level |
809a4336 | 261 | |
1c051dd4 | 262 | ClassDef(AliHFEcuts, 4) // Container for HFE cuts |
75d81601 | 263 | }; |
809a4336 | 264 | |
75d81601 | 265 | //__________________________________________________________________ |
266 | void AliHFEcuts::SetProductionVertex(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax){ | |
267 | // Set the production vertex constraint | |
268 | SetRequireProdVertex(); | |
269 | fProdVtx[0] = xmin; | |
270 | fProdVtx[1] = xmax; | |
271 | fProdVtx[2] = ymin; | |
272 | fProdVtx[3] = ymax; | |
273 | } | |
809a4336 | 274 | |
275 | //__________________________________________________________________ | |
276 | void AliHFEcuts::SetSigmaToVertex(Double_t sig){ | |
277 | SetRequireSigmaToVertex(); | |
8c1c76e9 | 278 | fSigmaToVtx[0] = sig; |
279 | } | |
280 | ||
281 | //__________________________________________________________________ | |
282 | void AliHFEcuts::SetSigmaToVertexXY(Double_t sig){ | |
283 | SetRequireSigmaToVertex(); | |
284 | fSigmaToVtx[1] = sig; | |
285 | } | |
286 | ||
287 | //__________________________________________________________________ | |
288 | void AliHFEcuts::SetSigmaToVertexZ(Double_t sig){ | |
289 | SetRequireSigmaToVertex(); | |
290 | fSigmaToVtx[2] = sig; | |
809a4336 | 291 | } |
292 | ||
293 | //__________________________________________________________________ | |
294 | void AliHFEcuts::SetMaxImpactParam(Double_t radial, Double_t z){ | |
ad75027f | 295 | SetRequireDCAToVertex(); |
296 | fDCAtoVtx[0] = radial; | |
297 | fDCAtoVtx[1] = z; | |
809a4336 | 298 | } |
299 | ||
c2690925 | 300 | //__________________________________________________________________ |
11ff28c5 | 301 | void AliHFEcuts::SetIPcutParam(Float_t p0, Float_t p1, Float_t p2, Float_t p3, Bool_t isipsigma, Bool_t isabs){ |
c2690925 | 302 | // Set parameters for impact parameter cut parametrization |
303 | fIPCutParams[0] = p0; | |
304 | fIPCutParams[1] = p1; | |
305 | fIPCutParams[2] = p2; | |
306 | fIPCutParams[3] = p3; | |
307 | fIsIPSigmacut = isipsigma; | |
11ff28c5 | 308 | fIsIPAbs = isabs; |
c2690925 | 309 | } |
310 | ||
809a4336 | 311 | //__________________________________________________________________ |
312 | void AliHFEcuts::SetCutITSpixel(UChar_t cut){ | |
313 | SetRequireITSPixel(); | |
314 | fCutITSPixel = cut; | |
315 | } | |
316 | ||
5cd679b7 | 317 | //__________________________________________________________________ |
318 | void AliHFEcuts::SetCutITSdrift(UChar_t cut){ | |
319 | SetRequireITSDrift(); | |
320 | fCutITSDrift = cut; | |
321 | } | |
322 | ||
809a4336 | 323 | //__________________________________________________________________ |
324 | void AliHFEcuts::CreateStandardCuts(){ | |
325 | // | |
326 | // Standard Cuts defined by the HFE Group | |
327 | // | |
ad75027f | 328 | SetRequireProdVertex(); |
faee3b18 | 329 | fProdVtx[0] = 0; |
722347d8 | 330 | fProdVtx[1] = 3; |
faee3b18 | 331 | fProdVtx[2] = 0; |
722347d8 | 332 | fProdVtx[3] = 3; |
faee3b18 | 333 | //SetRequireDCAToVertex(); |
334 | //fDCAtoVtx[0] = 0.5; | |
335 | //fDCAtoVtx[1] = 1.5; | |
336 | fMinClustersTPC = 80; | |
3a72645a | 337 | fMinClustersITS = 4; |
722347d8 | 338 | fMinTrackletsTRD = 0; |
dbe3abbe | 339 | SetRequireITSPixel(); |
722347d8 | 340 | fCutITSPixel = AliHFEextraCuts::kFirst; |
8c1c76e9 | 341 | fMaxChi2clusterITS = -1.; |
3a72645a | 342 | fMaxChi2clusterTPC = 4.; |
809a4336 | 343 | fMinClusterRatioTPC = 0.6; |
344 | fPtRange[0] = 0.1; | |
345 | fPtRange[1] = 20.; | |
faee3b18 | 346 | SetRequireKineMCCuts(); |
809a4336 | 347 | } |
348 | #endif |