]>
Commit | Line | Data |
---|---|---|
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 menagement class implemented by the | |
17 | // ALICE Heavy Flavour Electron Group | |
18 | // Interface to the correction framework | |
19 | // Provides a set of standard cuts | |
20 | // | |
21 | // Authors: | |
22 | // Raphaelle Bailhache <R.Bailhache@gsi.de> | |
23 | // Markus Fasel <M.Fasel@gsi.de> | |
24 | // Markus Heide <mheide@uni-muenster.de> | |
25 | // Matus Kalisky <m.kalisky@uni-muenster.de> | |
26 | // | |
27 | // Overview over the 18 steps in the correction Framework | |
28 | // 0. Generated Electrons | |
29 | // 1. Signal Electrons | |
30 | // 2. Electron in Acceptance | |
31 | // ------------------------------------------------------------ | |
32 | // 3. Rec without cuts (MC information) | |
33 | // 4. Rec Kine ITS/TPC (MC Information) | |
34 | // 5. Rec Primary (MC Information) | |
35 | // 6. HFE ITS (MC Information) | |
36 | // 7. HFE TRD (MC Information) | |
37 | // 8. PID (MC Information) | |
38 | // ............................................................ | |
39 | // 9. Rec without cuts(MC Information for tracks which are already registered) | |
40 | // 10. Rec Kine ITS/TPC (MC Information for tracks which are already registered) | |
41 | // 11. RecPrimary (MC Information for tracks which are already registered) | |
42 | // 12. HFE ITS (MC Information for tracks which are already registered) | |
43 | // 13. HFE TPC (MC Information for tracks which are already registered) | |
44 | // 14. PID (MC Information for tracks which are already registered) | |
45 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
46 | // 15. Rec without cuts | |
47 | // 16. Rec Kine ITS/TPC | |
48 | // 17. Rec Primary | |
49 | // 18. HFE ITS | |
50 | // 19. HFE TRD | |
51 | // 20. PID | |
52 | // | |
53 | #include <TClass.h> | |
54 | #include <TList.h> | |
55 | #include <TObjArray.h> | |
56 | #include <TString.h> | |
57 | ||
58 | #include "AliCFAcceptanceCuts.h" | |
59 | #include "AliCFCutBase.h" | |
60 | #include "AliCFEventGenCuts.h" | |
61 | #include "AliCFManager.h" | |
62 | #include "AliCFParticleGenCuts.h" | |
63 | #include "AliCFTrackIsPrimaryCuts.h" | |
64 | #include "AliCFTrackKineCuts.h" | |
65 | #include "AliCFTrackQualityCuts.h" | |
66 | #include "AliESDtrack.h" | |
67 | #include "AliHFEextraEventCuts.h" | |
68 | #include "AliMCEvent.h" | |
69 | #include "AliVEvent.h" | |
70 | ||
71 | #include "AliHFEcuts.h" | |
72 | ||
73 | ClassImp(AliHFEcuts) | |
74 | ||
75 | const Char_t *AliHFEcuts::fgkMCCutName[AliHFEcuts::kNcutStepsMCTrack] = { | |
76 | "MCGenerated", | |
77 | "MCGeneratedZOutNoPileUpCentralityFine", | |
78 | "MCGeneratedEventCut", | |
79 | "MCInAcceptance" | |
80 | }; | |
81 | ||
82 | const Char_t * AliHFEcuts::fgkRecoCutName[AliHFEcuts::kNcutStepsRecTrack] = { | |
83 | "NoCuts", | |
84 | "RecKineITSTPC", | |
85 | "Primary", | |
86 | "HFEITS", | |
87 | "HFETOF", | |
88 | "HFETPC", | |
89 | "HFETRD" | |
90 | }; | |
91 | ||
92 | const Char_t * AliHFEcuts::fgkDECutName[AliHFEcuts::kNcutStepsDETrack] = { | |
93 | "HFEDCA" | |
94 | }; | |
95 | ||
96 | const Char_t * AliHFEcuts::fgkSecvtxCutName[AliHFEcuts::kNcutStepsSecvtxTrack] = { | |
97 | "HFESecvtx" | |
98 | }; | |
99 | ||
100 | const Char_t * AliHFEcuts::fgkEventCutName[AliHFEcuts::kNcutStepsEvent] = { | |
101 | "EventStepGenerated", | |
102 | "EventStepRecNoCut", | |
103 | "EventStepRecNoPileUp", | |
104 | "EventStepRecCentralityOK", | |
105 | "EventStepZRange", | |
106 | "EventStepReconstructed" | |
107 | }; | |
108 | ||
109 | const Char_t * AliHFEcuts::fgkUndefined = "Undefined"; | |
110 | ||
111 | //__________________________________________________________________ | |
112 | AliHFEcuts::AliHFEcuts(): | |
113 | TNamed(), | |
114 | fRequirements(0), | |
115 | fTPCclusterDef(0), | |
116 | fTPCratioDef(0), | |
117 | fMinClustersTPC(0), | |
118 | fMinClustersTPCPID(0), | |
119 | fMinClustersITS(0), | |
120 | fMinTrackletsTRD(0), | |
121 | fMaxChi2TRD(-1.), | |
122 | fCutITSPixel(0), | |
123 | fCheckITSLayerStatus(kTRUE), | |
124 | fCutITSDrift(0), | |
125 | fMaxChi2clusterITS(-1.), | |
126 | fMaxChi2clusterTPC(0.), | |
127 | fMinClusterRatioTPC(0.), | |
128 | fVertexRangeZ(20.), | |
129 | fTRDtrackletsExact(kFALSE), | |
130 | fTOFPIDStep(kFALSE), | |
131 | fMatchTOFLabel(kFALSE), | |
132 | fTOFMISMATCHStep(kFALSE), | |
133 | fTPCPIDCLEANUPStep(kFALSE), | |
134 | fITSpatternCut(kFALSE), | |
135 | fUseMixedVertex(kTRUE), | |
136 | fUseSPDVertex(kFALSE), | |
137 | fUseCorrelationVertex(kFALSE), | |
138 | fSPDVtxResolution(kFALSE), | |
139 | fPApileupCut(kFALSE), | |
140 | fIsIPSigmacut(kFALSE), | |
141 | fIsIPcharge(kFALSE), | |
142 | fIsIPOpp(kFALSE), | |
143 | fFractionOfSharedTPCClusters(-1.0), | |
144 | fMaxImpactParameterRpar(kFALSE), | |
145 | fAdditionalStatusRequirement(0), | |
146 | fTOFsignaldx(-1.0), | |
147 | fTOFsignaldz(-1.0), | |
148 | fAODFilterBit(-1), | |
149 | fRejectKinkDaughters(kTRUE), | |
150 | fRejectKinkMothers(kTRUE), | |
151 | fHistQA(0x0), | |
152 | fCutList(0x0), | |
153 | fDebugLevel(0) | |
154 | { | |
155 | // | |
156 | // Dummy Constructor | |
157 | // | |
158 | memset(fProdVtx, 0, sizeof(Double_t) * 4); | |
159 | memset(fProdVtxZ, 0, sizeof(Double_t) * 2); | |
160 | memset(fDCAtoVtx, 0, sizeof(Double_t) * 2); | |
161 | memset(fPtRange, 0, sizeof(Double_t) * 2); | |
162 | memset(fIPCutParams, 0, sizeof(Float_t) * 4); | |
163 | memset(fSigmaToVtx, 0, sizeof(Double_t) * 3); | |
164 | fEtaRange[0] = -0.8; fEtaRange[1] = 0.8; | |
165 | fPhiRange[0] = -1.; fPhiRange[1] = -1.; | |
166 | } | |
167 | ||
168 | //__________________________________________________________________ | |
169 | AliHFEcuts::AliHFEcuts(const Char_t *name, const Char_t *title): | |
170 | TNamed(name, title), | |
171 | fRequirements(0), | |
172 | fTPCclusterDef(0), | |
173 | fTPCratioDef(0), | |
174 | fMinClustersTPC(0), | |
175 | fMinClustersTPCPID(0), | |
176 | fMinClustersITS(0), | |
177 | fMinTrackletsTRD(0), | |
178 | fMaxChi2TRD(-1.), | |
179 | fCutITSPixel(0), | |
180 | fCheckITSLayerStatus(kTRUE), | |
181 | fCutITSDrift(0), | |
182 | fMaxChi2clusterITS(-1.), | |
183 | fMaxChi2clusterTPC(0.), | |
184 | fMinClusterRatioTPC(0.), | |
185 | fVertexRangeZ(20.), | |
186 | fTRDtrackletsExact(kFALSE), | |
187 | fTOFPIDStep(kFALSE), | |
188 | fMatchTOFLabel(kFALSE), | |
189 | fTOFMISMATCHStep(kFALSE), | |
190 | fTPCPIDCLEANUPStep(kFALSE), | |
191 | fITSpatternCut(kFALSE), | |
192 | fUseMixedVertex(kTRUE), | |
193 | fUseSPDVertex(kFALSE), | |
194 | fUseCorrelationVertex(kFALSE), | |
195 | fSPDVtxResolution(kFALSE), | |
196 | fPApileupCut(kFALSE), | |
197 | fIsIPSigmacut(kFALSE), | |
198 | fIsIPcharge(kFALSE), | |
199 | fIsIPOpp(kFALSE), | |
200 | fFractionOfSharedTPCClusters(-1.0), | |
201 | fMaxImpactParameterRpar(kFALSE), | |
202 | fAdditionalStatusRequirement(0), | |
203 | fTOFsignaldx(-1.0), | |
204 | fTOFsignaldz(-1.0), | |
205 | fAODFilterBit(-1), | |
206 | fRejectKinkDaughters(kTRUE), | |
207 | fRejectKinkMothers(kTRUE), | |
208 | fHistQA(0x0), | |
209 | fCutList(0x0), | |
210 | fDebugLevel(0) | |
211 | { | |
212 | // | |
213 | // Default Constructor | |
214 | // | |
215 | memset(fProdVtx, 0, sizeof(Double_t) * 4); | |
216 | memset(fProdVtxZ, 0, sizeof(Double_t) * 2); | |
217 | memset(fDCAtoVtx, 0, sizeof(Double_t) * 2); | |
218 | memset(fPtRange, 0, sizeof(Double_t) * 2); | |
219 | memset(fIPCutParams, 0, sizeof(Float_t) * 4); | |
220 | memset(fSigmaToVtx, 0, sizeof(Double_t) * 3); | |
221 | fEtaRange[0] = -0.8; fEtaRange[1] = 0.8; | |
222 | fPhiRange[0] = -1.; fPhiRange[1] = -1.; | |
223 | } | |
224 | ||
225 | //__________________________________________________________________ | |
226 | AliHFEcuts::AliHFEcuts(const AliHFEcuts &c): | |
227 | TNamed(c), | |
228 | fRequirements(c.fRequirements), | |
229 | fTPCclusterDef(c.fTPCclusterDef), | |
230 | fTPCratioDef(c.fTPCratioDef), | |
231 | fMinClustersTPC(0), | |
232 | fMinClustersTPCPID(0), | |
233 | fMinClustersITS(0), | |
234 | fMinTrackletsTRD(0), | |
235 | fMaxChi2TRD(-1.), | |
236 | fCutITSPixel(0), | |
237 | fCheckITSLayerStatus(0), | |
238 | fCutITSDrift(0), | |
239 | fMaxChi2clusterITS(-1.), | |
240 | fMaxChi2clusterTPC(0), | |
241 | fMinClusterRatioTPC(0), | |
242 | fVertexRangeZ(20.), | |
243 | fTRDtrackletsExact(kFALSE), | |
244 | fTOFPIDStep(kFALSE), | |
245 | fMatchTOFLabel(kFALSE), | |
246 | fTOFMISMATCHStep(kFALSE), | |
247 | fTPCPIDCLEANUPStep(kFALSE), | |
248 | fITSpatternCut(c.fITSpatternCut), | |
249 | fUseMixedVertex(kTRUE), | |
250 | fUseSPDVertex(kFALSE), | |
251 | fUseCorrelationVertex(c.fUseCorrelationVertex), | |
252 | fSPDVtxResolution(c.fSPDVtxResolution), | |
253 | fPApileupCut(c.fPApileupCut), | |
254 | fIsIPSigmacut(kFALSE), | |
255 | fIsIPcharge(kFALSE), | |
256 | fIsIPOpp(kFALSE), | |
257 | fFractionOfSharedTPCClusters(-1.0), | |
258 | fMaxImpactParameterRpar(kFALSE), | |
259 | fAdditionalStatusRequirement(0), | |
260 | fTOFsignaldx(-1.0), | |
261 | fTOFsignaldz(-1.0), | |
262 | fAODFilterBit(-1), | |
263 | fRejectKinkDaughters(c.fRejectKinkDaughters), | |
264 | fRejectKinkMothers(c.fRejectKinkMothers), | |
265 | fHistQA(0x0), | |
266 | fCutList(0x0), | |
267 | fDebugLevel(0) | |
268 | { | |
269 | // | |
270 | // Copy Constructor | |
271 | // | |
272 | c.Copy(*this); | |
273 | } | |
274 | ||
275 | //__________________________________________________________________ | |
276 | AliHFEcuts &AliHFEcuts::operator=(const AliHFEcuts &c){ | |
277 | // | |
278 | // Make assignment | |
279 | // | |
280 | if(&c != this) c.Copy(*this); | |
281 | return *this; | |
282 | } | |
283 | ||
284 | //__________________________________________________________________ | |
285 | void AliHFEcuts::Copy(TObject &c) const { | |
286 | // | |
287 | // Performing copy | |
288 | // | |
289 | AliHFEcuts &target = dynamic_cast<AliHFEcuts &>(c); | |
290 | ||
291 | target.fRequirements = fRequirements; | |
292 | target.fTPCclusterDef = fTPCclusterDef; | |
293 | target.fTPCratioDef = fTPCratioDef; | |
294 | target.fMinClustersTPC = fMinClustersTPC; | |
295 | target.fMinClustersTPCPID = fMinClustersTPCPID; | |
296 | target.fMinClustersITS = fMinClustersITS; | |
297 | target.fMinTrackletsTRD = fMinTrackletsTRD; | |
298 | target.fMaxChi2TRD = fMaxChi2TRD; | |
299 | target.fCutITSPixel = fCutITSPixel; | |
300 | target.fCheckITSLayerStatus = fCheckITSLayerStatus; | |
301 | target.fCutITSDrift = fCutITSDrift; | |
302 | target.fMaxChi2clusterITS = fMaxChi2clusterITS; | |
303 | target.fMaxChi2clusterTPC = fMaxChi2clusterTPC; | |
304 | target.fMinClusterRatioTPC = fMinClusterRatioTPC; | |
305 | target.fVertexRangeZ = fVertexRangeZ; | |
306 | target.fTRDtrackletsExact = fTRDtrackletsExact; | |
307 | target.fTOFPIDStep = fTOFPIDStep; | |
308 | target.fMatchTOFLabel = fMatchTOFLabel; | |
309 | target.fTOFMISMATCHStep = fTOFMISMATCHStep; | |
310 | target.fTPCPIDCLEANUPStep = fTPCPIDCLEANUPStep; | |
311 | target.fUseMixedVertex = fUseMixedVertex; | |
312 | target.fUseSPDVertex = fUseSPDVertex; | |
313 | target.fUseCorrelationVertex = fUseCorrelationVertex; | |
314 | target.fSPDVtxResolution = fSPDVtxResolution; | |
315 | target.fPApileupCut = fPApileupCut; | |
316 | target.fIsIPSigmacut = fIsIPSigmacut; | |
317 | target.fIsIPcharge = fIsIPcharge; | |
318 | target.fIsIPOpp = fIsIPOpp; | |
319 | target.fFractionOfSharedTPCClusters = fFractionOfSharedTPCClusters; | |
320 | target.fMaxImpactParameterRpar = fMaxImpactParameterRpar; | |
321 | target.fAdditionalStatusRequirement = fAdditionalStatusRequirement; | |
322 | target.fTOFsignaldx = fTOFsignaldx; | |
323 | target.fTOFsignaldz = fTOFsignaldz; | |
324 | target.fAODFilterBit = fAODFilterBit; | |
325 | target.fRejectKinkDaughters = fRejectKinkDaughters; | |
326 | target.fRejectKinkMothers = fRejectKinkMothers; | |
327 | target.fDebugLevel = 0; | |
328 | ||
329 | memcpy(target.fProdVtx, fProdVtx, sizeof(Double_t) * 4); | |
330 | memcpy(target.fProdVtxZ, fProdVtxZ, sizeof(Double_t) * 2); | |
331 | memcpy(target.fDCAtoVtx, fDCAtoVtx, sizeof(Double_t) * 2); | |
332 | memcpy(target.fPtRange, fPtRange, sizeof(Double_t) *2); | |
333 | memcpy(target.fIPCutParams, fIPCutParams, sizeof(Float_t) * 4); | |
334 | memcpy(target.fSigmaToVtx, fSigmaToVtx, sizeof(Double_t) * 3); | |
335 | memcpy(target.fEtaRange, fEtaRange, sizeof(Double_t) * 2); | |
336 | memcpy(target.fPhiRange, fPhiRange, sizeof(Double_t) * 2); | |
337 | ||
338 | // Copy cut List | |
339 | if(target.fCutList){ | |
340 | target.fCutList->Clear(); | |
341 | delete target.fCutList; | |
342 | } | |
343 | if(fCutList){ | |
344 | target.fCutList = dynamic_cast<TObjArray *>(fCutList->Clone()); | |
345 | if(target.fCutList) target.fCutList->SetOwner(); // Coverity | |
346 | } | |
347 | if(target.fHistQA){ | |
348 | delete target.fHistQA; | |
349 | } | |
350 | if(fHistQA){ | |
351 | // If the QA list was already produced, then we create it new, loop over the cuts and connect all the histos with this list | |
352 | target.fHistQA = new TList; | |
353 | target.fHistQA->SetName(Form("%s_CutQAhistograms", GetName())); | |
354 | fHistQA->SetOwner(kTRUE); | |
355 | TIter cit(target.fCutList); | |
356 | TObjArray *clist = NULL; | |
357 | AliCFCutBase *co = NULL; | |
358 | while((clist = dynamic_cast<TObjArray *>(cit()))){ | |
359 | TIter cit1(clist); | |
360 | while((co = dynamic_cast<AliCFCutBase *>(cit1()))) co->SetQAOn(target.fHistQA); | |
361 | } | |
362 | } | |
363 | } | |
364 | ||
365 | //__________________________________________________________________ | |
366 | AliHFEcuts::~AliHFEcuts(){ | |
367 | // | |
368 | // Destruktor | |
369 | // | |
370 | if(fCutList){ | |
371 | fCutList->Delete(); | |
372 | delete fCutList; | |
373 | } | |
374 | fCutList = 0x0; | |
375 | if(fHistQA) delete fHistQA; | |
376 | } | |
377 | ||
378 | //__________________________________________________________________ | |
379 | Long64_t AliHFEcuts::Merge(const TCollection *list){ | |
380 | // | |
381 | // Merge function doing nothing, just writing the object to file | |
382 | // | |
383 | if(!list) return 0; | |
384 | if(list->IsEmpty()) return 1; | |
385 | Long64_t counts = 0; | |
386 | // just count the number of objects to merge | |
387 | TIter iter(list); | |
388 | while(iter()){ counts++; } | |
389 | return counts+1; | |
390 | } | |
391 | ||
392 | //__________________________________________________________________ | |
393 | void AliHFEcuts::Initialize(AliCFManager *cfm){ | |
394 | // | |
395 | // Initializes the cut objects from the correction framework | |
396 | // Publishes the cuts to the correction framework manager | |
397 | // | |
398 | AliDebug(2, "Called"); | |
399 | const Int_t kMCOffset = kNcutStepsMCTrack; | |
400 | const Int_t kRecOffset = kNcutStepsRecTrack; | |
401 | if(fCutList) | |
402 | fCutList->Delete(); | |
403 | else{ | |
404 | fCutList = new TObjArray; | |
405 | fCutList->SetOwner(); | |
406 | } | |
407 | if(IsQAOn()){ | |
408 | fHistQA = new TList; | |
409 | fHistQA->SetName(Form("%s_CutQAhistograms", GetName())); | |
410 | fHistQA->SetOwner(kTRUE); | |
411 | } | |
412 | ||
413 | // Call all the setters for the cuts | |
414 | SetParticleGenCutList(); | |
415 | SetAcceptanceCutList(); | |
416 | SetRecKineITSTPCCutList(); | |
417 | SetRecPrimaryCutList(); | |
418 | SetHFElectronITSCuts(); | |
419 | SetHFElectronTOFCuts(); | |
420 | SetHFElectronTPCCuts(); | |
421 | SetHFElectronTRDCuts(); | |
422 | SetHFElectronDcaCuts(); | |
423 | ||
424 | // Publish to the cuts which analysis type they are (ESD Analysis by default) | |
425 | if(IsAOD()){ | |
426 | AliInfo("Setting AOD Analysis"); | |
427 | TObjArray *genCuts = dynamic_cast<TObjArray *>(fCutList->FindObject("fPartGenCuts")); | |
428 | if(genCuts){ | |
429 | AliCFParticleGenCuts *myGenCut = dynamic_cast<AliCFParticleGenCuts *>(genCuts->FindObject("fCutsGenMC")); | |
430 | if(myGenCut) { | |
431 | myGenCut->SetAODMC(kTRUE); | |
432 | } | |
433 | } | |
434 | } | |
435 | ||
436 | // Connect the event cuts | |
437 | SetEventCutList(kEventStepGenerated); | |
438 | SetEventCutList(kEventStepReconstructed); | |
439 | cfm->SetEventCutsList(kEventStepGenerated, dynamic_cast<TObjArray *>(fCutList->FindObject("fEvGenCuts"))); | |
440 | cfm->SetEventCutsList(kEventStepReconstructed, dynamic_cast<TObjArray *>(fCutList->FindObject("fEvRecCuts"))); | |
441 | ||
442 | // Connect the particle cuts | |
443 | // 1st MC | |
444 | cfm->SetParticleCutsList(kStepMCGenerated, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartGenCuts"))); | |
445 | cfm->SetParticleCutsList(kStepMCInAcceptance, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartAccCuts"))); | |
446 | // 2nd Reco | |
447 | cfm->SetParticleCutsList(kStepRecKineITSTPC + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartRecKineITSTPCCuts"))); | |
448 | cfm->SetParticleCutsList(kStepRecPrim + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartPrimCuts"))); | |
449 | cfm->SetParticleCutsList(kStepHFEcutsITS + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsITS"))); | |
450 | cfm->SetParticleCutsList(kStepHFEcutsTOF+ kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsTOF"))); | |
451 | cfm->SetParticleCutsList(kStepHFEcutsTPC+ kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsTPC"))); | |
452 | cfm->SetParticleCutsList(kStepHFEcutsTRD + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsTRD"))); | |
453 | cfm->SetParticleCutsList(kStepHFEcutsDca + kRecOffset + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsDca"))); | |
454 | ||
455 | } | |
456 | ||
457 | //__________________________________________________________________ | |
458 | void AliHFEcuts::Initialize(){ | |
459 | // Call all the setters for the cuts | |
460 | AliDebug(2, "Called\n"); | |
461 | if(fCutList) | |
462 | fCutList->Delete(); | |
463 | else{ | |
464 | fCutList = new TObjArray; | |
465 | fCutList->SetOwner(); | |
466 | } | |
467 | if(IsQAOn()){ | |
468 | fHistQA = new TList; | |
469 | fHistQA->SetName(Form("%s_CutQAhistograms", GetName())); | |
470 | fHistQA->SetOwner(kFALSE); | |
471 | } | |
472 | SetParticleGenCutList(); | |
473 | SetAcceptanceCutList(); | |
474 | SetRecKineITSTPCCutList(); | |
475 | SetRecPrimaryCutList(); | |
476 | SetHFElectronITSCuts(); | |
477 | SetHFElectronTOFCuts(); | |
478 | SetHFElectronTPCCuts(); | |
479 | SetHFElectronTRDCuts(); | |
480 | SetHFElectronDcaCuts(); | |
481 | ||
482 | // Publish to the cuts which analysis type they are (ESD Analysis by default) | |
483 | if(IsAOD()){ | |
484 | //printf("Initialize AOD\n"); | |
485 | //AliInfo("Setting AOD Analysis"); | |
486 | TObjArray *genCuts = dynamic_cast<TObjArray *>(fCutList->FindObject("fPartGenCuts")); | |
487 | if(genCuts){ | |
488 | AliCFParticleGenCuts *myGenCut = dynamic_cast<AliCFParticleGenCuts *>(genCuts->FindObject("fCutsGenMC")); | |
489 | if(myGenCut) { | |
490 | myGenCut->SetAODMC(kTRUE); | |
491 | //printf("Set AOD MC\n"); | |
492 | } | |
493 | } | |
494 | } | |
495 | ||
496 | // Connect the event cuts | |
497 | SetEventCutList(kEventStepGenerated); | |
498 | SetEventCutList(kEventStepReconstructed); | |
499 | ||
500 | ||
501 | } | |
502 | ||
503 | //__________________________________________________________________ | |
504 | void AliHFEcuts::SetEventCutList(Int_t istep){ | |
505 | // | |
506 | // Cuts for Event Selection | |
507 | // | |
508 | AliDebug(2, "Called\n"); | |
509 | TObjArray *arr = new TObjArray; | |
510 | if(istep == kEventStepGenerated){ | |
511 | AliCFEventGenCuts *evGenCuts = new AliCFEventGenCuts((Char_t *)"fCutsEvGen", (Char_t *)"Event Generated cuts"); | |
512 | //evGenCuts->SetNTracksCut(1); | |
513 | evGenCuts->SetRequireVtxCuts(kTRUE); | |
514 | //evGenCuts->SetVertexXCut(-1, 1); | |
515 | //evGenCuts->SetVertexYCut(-1, 1); | |
516 | evGenCuts->SetVertexZCut(-fVertexRangeZ, fVertexRangeZ); | |
517 | if(IsQAOn()) evGenCuts->SetQAOn(fHistQA); | |
518 | ||
519 | arr->SetName("fEvGenCuts"); | |
520 | arr->AddLast(evGenCuts); | |
521 | } else { | |
522 | ||
523 | AliHFEextraEventCuts *evRecCuts = new AliHFEextraEventCuts((Char_t *)"fCutsEvRec", (Char_t *)"Event Reconstructed cuts"); | |
524 | evRecCuts->SetRequireVtxCuts(kTRUE); | |
525 | if(fUseSPDVertex) evRecCuts->SetUseSPDVertex(); | |
526 | if(fUseMixedVertex) evRecCuts->SetUseMixedVertex(); | |
527 | if(fUseCorrelationVertex) evRecCuts->SetCheckCorrelationSPDVtx(); | |
528 | if(fSPDVtxResolution) evRecCuts->SetCheckSPDResolution(); | |
529 | if(fPApileupCut) evRecCuts->SetpAPileupCut(); | |
530 | evRecCuts->SetVertexZCut(-fVertexRangeZ, fVertexRangeZ); | |
531 | //evRecCuts->SetVertexNContributors(1,(Int_t)1.e9); | |
532 | if(IsQAOn()) evRecCuts->SetQAOn(fHistQA); | |
533 | arr->SetName("fEvRecCuts"); | |
534 | arr->AddLast(evRecCuts); | |
535 | ||
536 | } | |
537 | fCutList->AddLast(arr); | |
538 | } | |
539 | ||
540 | //__________________________________________________________________ | |
541 | void AliHFEcuts::SetParticleGenCutList(){ | |
542 | // | |
543 | // Initialize Particle Cuts for Monte Carlo Tracks | |
544 | // Production Vertex Radius: < 3cm | |
545 | // Particle Species: Electrons | |
546 | // Eta: < 0.8 (fEtaRange) | |
547 | // | |
548 | ||
549 | TObjArray *mcCuts = new TObjArray; | |
550 | mcCuts->SetName("fPartGenCuts"); | |
551 | ||
552 | // | |
553 | AliDebug(2, "Called\n"); | |
554 | AliCFParticleGenCuts *genCuts = new AliCFParticleGenCuts("fCutsGenMC", "Particle Generation Cuts"); | |
555 | genCuts->SetRequireIsCharged(); | |
556 | if(IsRequirePrimary()) { | |
557 | genCuts->SetRequireIsPrimary(); | |
558 | } | |
559 | if(IsRequireProdVertex()){ | |
560 | AliDebug(3, Form("Vertex Range: fProdVtx[0] %f, fProdVtx[1] %f, fProdVtx[2] %f, fProdVtx[3] %f, fProdVtxZ[0] %f, fProdVtx[1] %f", fProdVtx[0], fProdVtx[1], fProdVtx[2], fProdVtx[3], fProdVtxZ[0], fProdVtxZ[1])); | |
561 | //if(!IsAOD()) { | |
562 | genCuts->SetProdVtxRangeX(fProdVtx[0], fProdVtx[1]); | |
563 | genCuts->SetProdVtxRangeY(fProdVtx[2], fProdVtx[3]); | |
564 | genCuts->SetProdVtxRangeZ(fProdVtxZ[0], fProdVtxZ[1]); | |
565 | genCuts->SetProdVtxRange2D(kTRUE); // Use ellipse | |
566 | //} | |
567 | //else { | |
568 | // (ONLY PROVISOIRE FOR MC AOD) | |
569 | // genCuts->SetProdVtxRangeX(-TMath::Abs(fProdVtx[1]), TMath::Abs(fProdVtx[1])); | |
570 | // genCuts->SetProdVtxRangeY(-TMath::Abs(fProdVtx[3]), TMath::Abs(fProdVtx[3])); | |
571 | //} | |
572 | } | |
573 | genCuts->SetRequirePdgCode(11, kTRUE); | |
574 | if(IsQAOn()) genCuts->SetQAOn(fHistQA); | |
575 | ||
576 | // Add | |
577 | mcCuts->AddLast(genCuts); | |
578 | ||
579 | // | |
580 | if(IsRequireKineMCCuts()) { | |
581 | AliCFTrackKineCuts *kineMCcuts = new AliCFTrackKineCuts((Char_t *)"fCutsKineMC", (Char_t *)"MC Kine Cuts"); | |
582 | kineMCcuts->SetPtRange(fPtRange[0], fPtRange[1]); | |
583 | //kineMCcuts->SetEtaRange(-0.8, 0.8); | |
584 | kineMCcuts->SetEtaRange(fEtaRange[0],fEtaRange[1]); | |
585 | if(fPhiRange[0] >= 0. && fPhiRange[1] >= 0.) kineMCcuts->SetPhiRange(fPhiRange[0], fPhiRange[1]); | |
586 | if(IsQAOn()) kineMCcuts->SetQAOn(fHistQA); | |
587 | mcCuts->AddLast(kineMCcuts); | |
588 | } | |
589 | ||
590 | fCutList->AddLast(mcCuts); | |
591 | } | |
592 | ||
593 | //__________________________________________________________________ | |
594 | void AliHFEcuts::SetAcceptanceCutList(){ | |
595 | // | |
596 | // Initialize Particle (Monte Carlo) acceptance cuts | |
597 | // Min. Required Hist for Detectors: | |
598 | // ITS [3] | |
599 | // TPC [2] | |
600 | // TRD [2*nTracklets] | |
601 | // TOF [0] | |
602 | // | |
603 | AliDebug(2, "Called\n"); | |
604 | AliCFAcceptanceCuts *accCuts = new AliCFAcceptanceCuts("fCutsAccMC", "MC Acceptance Cuts"); | |
605 | accCuts->SetMinNHitITS(3); | |
606 | accCuts->SetMinNHitTPC(2); | |
607 | accCuts->SetMinNHitTRD(2*fMinTrackletsTRD); | |
608 | if(IsQAOn()) accCuts->SetQAOn(fHistQA); | |
609 | ||
610 | TObjArray *partAccCuts = new TObjArray(); | |
611 | partAccCuts->SetName("fPartAccCuts"); | |
612 | partAccCuts->AddLast(accCuts); | |
613 | fCutList->AddLast(partAccCuts); | |
614 | } | |
615 | ||
616 | //__________________________________________________________________ | |
617 | void AliHFEcuts::SetRecKineITSTPCCutList(){ | |
618 | // | |
619 | // Track Kinematics and Quality cuts (Based on the Standard cuts from PWG0) | |
620 | // | |
621 | // ITS refit | |
622 | // Variances: | |
623 | // y: 2 | |
624 | // z: 2 | |
625 | // sin(phi): 0.5 | |
626 | // tan(theta): 0.5 | |
627 | // 1/pt: 2 | |
628 | // Min. Number of Clusters: | |
629 | // TPC: 50 | |
630 | // RefitRequired: | |
631 | // TPC | |
632 | // Chi2 per TPC cluster: 3.5 | |
633 | // | |
634 | // Kinematics: | |
635 | // Momentum Range: 100MeV - 20GeV | |
636 | // Eta: < 0.9 (TRD-TOF acceptance) | |
637 | // | |
638 | const Long_t kStatusSelectionDefault(AliESDtrack::kTPCrefit | AliESDtrack::kITSrefit); | |
639 | AliDebug(2, "Called\n"); | |
640 | AliCFTrackQualityCuts *trackQuality = new AliCFTrackQualityCuts((Char_t *)"fCutsQualityRec", (Char_t *)"REC Track Quality Cuts"); | |
641 | //trackQuality->SetMinNClusterITS(fMinClustersITS); | |
642 | trackQuality->SetMaxChi2PerClusterTPC(fMaxChi2clusterTPC); | |
643 | if(fMaxChi2clusterITS >= 0.) trackQuality->SetMaxChi2PerClusterITS(fMaxChi2clusterITS); | |
644 | Long_t statusRequirement; | |
645 | if(fAdditionalStatusRequirement) | |
646 | statusRequirement = kStatusSelectionDefault | fAdditionalStatusRequirement; | |
647 | else | |
648 | statusRequirement = kStatusSelectionDefault; | |
649 | trackQuality->SetStatus(statusRequirement); | |
650 | //trackQuality->SetMaxCovDiagonalElements(2., 2., 0.5, 0.5, 2); | |
651 | ||
652 | AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTPCRec","Extra cuts from the HFE group"); | |
653 | hfecuts->SetDebugLevel(fDebugLevel); | |
654 | hfecuts->SetMinNbITScls(fMinClustersITS); | |
655 | // Set the cut in the TPC number of clusters | |
656 | hfecuts->SetMinNClustersTPC(fMinClustersTPC,AliHFEextraCuts::ETPCclusterDef_t(fTPCclusterDef)); | |
657 | hfecuts->SetMinNClustersTPCPID(fMinClustersTPCPID); | |
658 | hfecuts->SetClusterRatioTPC(fMinClusterRatioTPC,AliHFEextraCuts::ETPCclrDef_t(fTPCratioDef)); | |
659 | if(fFractionOfSharedTPCClusters > 0.0) hfecuts->SetFractionOfTPCSharedClusters(fFractionOfSharedTPCClusters); | |
660 | if(fITSpatternCut) hfecuts->SetITSpatternCut(); | |
661 | if(fAODFilterBit > -1) hfecuts->SetAODFilterBit(fAODFilterBit); | |
662 | ||
663 | AliCFTrackKineCuts *kineCuts = new AliCFTrackKineCuts((Char_t *)"fCutsKineRec", (Char_t *)"REC Kine Cuts"); | |
664 | //printf("Setting max. pt to %f\n", fPtRange[1]); | |
665 | kineCuts->SetPtRange(fPtRange[0], fPtRange[1]); | |
666 | //kineCuts->SetEtaRange(-0.8, 0.8); | |
667 | kineCuts->SetEtaRange(fEtaRange[0],fEtaRange[1]); | |
668 | if(fPhiRange[0] >= 0. && fPhiRange[1] >= 0.) kineCuts->SetPhiRange(fPhiRange[0], fPhiRange[1]); | |
669 | ||
670 | if(IsQAOn()){ | |
671 | trackQuality->SetQAOn(fHistQA); | |
672 | hfecuts->SetQAOn(fHistQA); | |
673 | kineCuts->SetQAOn(fHistQA); | |
674 | } | |
675 | ||
676 | TObjArray *recCuts = new TObjArray; | |
677 | recCuts->SetName("fPartRecKineITSTPCCuts"); | |
678 | recCuts->AddLast(trackQuality); | |
679 | recCuts->AddLast(hfecuts); | |
680 | recCuts->AddLast(kineCuts); | |
681 | fCutList->AddLast(recCuts); | |
682 | } | |
683 | ||
684 | //__________________________________________________________________ | |
685 | void AliHFEcuts::SetRecPrimaryCutList(){ | |
686 | // | |
687 | // Primary cuts (based on standard cuts from PWG0): | |
688 | // DCA to Vertex: | |
689 | // XY: 3. cm | |
690 | // Z: 10. cm | |
691 | // No Kink daughters | |
692 | // | |
693 | AliDebug(2, "Called\n"); | |
694 | AliCFTrackIsPrimaryCuts *primaryCut = new AliCFTrackIsPrimaryCuts((Char_t *)"fCutsPrimaryCuts", (Char_t *)"REC Primary Cuts"); | |
695 | //if(IsRequireDCAToVertex()){ | |
696 | //primaryCut->SetDCAToVertex2D(kTRUE); | |
697 | //primaryCut->SetMaxDCAToVertexXY(fDCAtoVtx[0]); | |
698 | //primaryCut->SetMaxDCAToVertexZ(fDCAtoVtx[1]); | |
699 | //} | |
700 | if(IsRequireSigmaToVertex()){ | |
701 | primaryCut->SetRequireSigmaToVertex(kTRUE); | |
702 | if(fSigmaToVtx[0]) primaryCut->SetMaxNSigmaToVertex(fSigmaToVtx[0]); | |
703 | if(fSigmaToVtx[1]) primaryCut->SetMaxSigmaDCAxy(fSigmaToVtx[1]); | |
704 | if(fSigmaToVtx[2]) primaryCut->SetMaxSigmaDCAz(fSigmaToVtx[2]); | |
705 | } | |
706 | //primaryCut->SetAcceptKinkDaughters(kFALSE); | |
707 | if(IsQAOn()) primaryCut->SetQAOn(fHistQA); | |
708 | ||
709 | AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsPrimaryCutsextra","Extra cuts from the HFE group"); | |
710 | hfecuts->SetMaxImpactParameterRpar(fMaxImpactParameterRpar); | |
711 | if(fRejectKinkDaughters) hfecuts->SetRejectKinkDaughter(); | |
712 | if(fRejectKinkMothers) hfecuts->SetRejectKinkMother(); | |
713 | if(IsRequireDCAToVertex()){ | |
714 | hfecuts->SetMaxImpactParamR(fDCAtoVtx[0]); | |
715 | hfecuts->SetMaxImpactParamZ(fDCAtoVtx[1]); | |
716 | } | |
717 | ||
718 | TObjArray *primCuts = new TObjArray; | |
719 | primCuts->SetName("fPartPrimCuts"); | |
720 | // needed for AOD... | |
721 | if(IsRequireSigmaToVertex()) primCuts->AddLast(primaryCut); | |
722 | //if(fMaxImpactParameterRpar){ | |
723 | primCuts->AddLast(hfecuts); | |
724 | //} | |
725 | fCutList->AddLast(primCuts); | |
726 | } | |
727 | ||
728 | //__________________________________________________________________ | |
729 | void AliHFEcuts::SetHFElectronITSCuts(){ | |
730 | // | |
731 | // Special Cuts introduced by the HFElectron Group: ITS | |
732 | // | |
733 | AliDebug(2, "Called\n"); | |
734 | AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupPixels","Extra cuts from the HFE group"); | |
735 | if(IsRequireITSpixel()){ | |
736 | hfecuts->SetRequireITSpixel(AliHFEextraCuts::ITSPixel_t(fCutITSPixel)); | |
737 | hfecuts->SetCheckITSstatus(fCheckITSLayerStatus); | |
738 | } | |
739 | if(IsRequireITSdrift()){ | |
740 | hfecuts->SetRequireITSdrift(AliHFEextraCuts::ITSDrift_t(fCutITSDrift)); | |
741 | } | |
742 | ||
743 | if(IsQAOn()) hfecuts->SetQAOn(fHistQA); | |
744 | hfecuts->SetDebugLevel(fDebugLevel); | |
745 | ||
746 | TObjArray *hfeCuts = new TObjArray; | |
747 | hfeCuts->SetName("fPartHFECutsITS"); | |
748 | hfeCuts->AddLast(hfecuts); | |
749 | fCutList->AddLast(hfeCuts); | |
750 | } | |
751 | ||
752 | //__________________________________________________________________ | |
753 | void AliHFEcuts::SetHFElectronTOFCuts(){ | |
754 | // | |
755 | // Special Cuts introduced by the HFElectron Group: TRD | |
756 | // | |
757 | AliDebug(2, "Called\n"); | |
758 | AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTOF","Extra cuts from the HFE group on TOF PID"); | |
759 | if(fTOFPIDStep) hfecuts->SetTOFPID(kTRUE); | |
760 | if(fTOFMISMATCHStep) hfecuts->SetTOFMISMATCH(kTRUE); | |
761 | if(fMatchTOFLabel) hfecuts->SetMatchTOFLabel(kTRUE); | |
762 | if((fTOFsignaldx > 0.0) && (fTOFsignaldz > 0.0)) hfecuts->SetTOFsignalDxz(fTOFsignaldx,fTOFsignaldz); | |
763 | if(IsQAOn()) hfecuts->SetQAOn(fHistQA); | |
764 | hfecuts->SetDebugLevel(fDebugLevel); | |
765 | ||
766 | TObjArray *hfeCuts = new TObjArray; | |
767 | hfeCuts->SetName("fPartHFECutsTOF"); | |
768 | hfeCuts->AddLast(hfecuts); | |
769 | fCutList->AddLast(hfeCuts); | |
770 | } | |
771 | ||
772 | //__________________________________________________________________ | |
773 | void AliHFEcuts::SetHFElectronTPCCuts(){ | |
774 | // | |
775 | // Special Cuts introduced by the HFElectron Group: TPC | |
776 | // | |
777 | AliDebug(2, "Called\n"); | |
778 | AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTPCPID","Extra cuts from the HFE group on TPC PID"); | |
779 | if(fTPCPIDCLEANUPStep) hfecuts->SetTPCPIDCleanUp(kTRUE); | |
780 | if(IsQAOn()) hfecuts->SetQAOn(fHistQA); | |
781 | hfecuts->SetDebugLevel(fDebugLevel); | |
782 | ||
783 | TObjArray *hfeCuts = new TObjArray; | |
784 | hfeCuts->SetName("fPartHFECutsTPC"); | |
785 | hfeCuts->AddLast(hfecuts); | |
786 | fCutList->AddLast(hfeCuts); | |
787 | } | |
788 | ||
789 | ||
790 | //__________________________________________________________________ | |
791 | void AliHFEcuts::SetHFElectronTRDCuts(){ | |
792 | // | |
793 | // Special Cuts introduced by the HFElectron Group: TRD | |
794 | // | |
795 | AliDebug(2, "Called\n"); | |
796 | AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTRD","Extra cuts from the HFE group on TRD PID"); | |
797 | if(fMinTrackletsTRD > 0.) hfecuts->SetMinTrackletsTRD(fMinTrackletsTRD, fTRDtrackletsExact); | |
798 | if(fMaxChi2TRD >= 0) | |
799 | hfecuts->SetMaxChi2TRD(fMaxChi2TRD); | |
800 | ||
801 | if(IsQAOn()) hfecuts->SetQAOn(fHistQA); | |
802 | hfecuts->SetDebugLevel(fDebugLevel); | |
803 | ||
804 | TObjArray *hfeCuts = new TObjArray; | |
805 | hfeCuts->SetName("fPartHFECutsTRD"); | |
806 | hfeCuts->AddLast(hfecuts); | |
807 | fCutList->AddLast(hfeCuts); | |
808 | } | |
809 | ||
810 | //__________________________________________________________________ | |
811 | void AliHFEcuts::SetHFElectronDcaCuts(){ | |
812 | // | |
813 | // Special Cuts introduced by the HFElectron Group: minimum of impact parameter | |
814 | // | |
815 | AliDebug(2, "Called\n"); | |
816 | AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupDCA","Extra cuts from the HFE group"); | |
817 | hfecuts->SetMinHFEImpactParamR(fIPCutParams,fIsIPSigmacut,fIsIPcharge,fIsIPOpp); | |
818 | if(IsQAOn()) hfecuts->SetQAOn(fHistQA); | |
819 | hfecuts->SetDebugLevel(fDebugLevel); | |
820 | ||
821 | TObjArray *hfeCuts = new TObjArray; | |
822 | hfeCuts->SetName("fPartHFECutsDca"); | |
823 | hfeCuts->AddLast(hfecuts); | |
824 | fCutList->AddLast(hfeCuts); | |
825 | } | |
826 | ||
827 | //__________________________________________________________________ | |
828 | Bool_t AliHFEcuts::CheckParticleCuts(UInt_t step, TObject *o){ | |
829 | // | |
830 | // Checks the cuts without using the correction framework manager | |
831 | // | |
832 | AliDebug(2, "Called\n"); | |
833 | TString stepnames[kNcutStepsMCTrack + kNcutStepsRecTrack + kNcutStepsDETrack + kNcutStepsSecvtxTrack + 1] = {"fPartGenCuts","fPartEvCutPileupZ","fPartEvCut","fPartAccCuts","fPartRecNoCuts","fPartRecKineITSTPCCuts", "fPartPrimCuts", "fPartHFECutsITS","fPartHFECutsTOF","fPartHFECutsTPC","fPartHFECutsTRD","fPartHFECutsDca", "fPartHFECutsSecvtx"}; | |
834 | AliDebug(2, Form("Doing cut %s", stepnames[step].Data())); | |
835 | TObjArray *cuts = dynamic_cast<TObjArray *>(fCutList->FindObject(stepnames[step].Data())); | |
836 | if(!cuts) return kTRUE; | |
837 | TIter it(cuts); | |
838 | AliCFCutBase *mycut; | |
839 | Bool_t status = kTRUE; | |
840 | while((mycut = dynamic_cast<AliCFCutBase *>(it()))){ | |
841 | status &= mycut->IsSelected(o); | |
842 | } | |
843 | return status; | |
844 | } | |
845 | ||
846 | ||
847 | //__________________________________________________________________ | |
848 | Bool_t AliHFEcuts::CheckEventCuts(const char*namestep, TObject *o){ | |
849 | // | |
850 | // Checks the cuts without using the correction framework manager | |
851 | // | |
852 | AliDebug(2, "Called\n"); | |
853 | TObjArray *cuts = dynamic_cast<TObjArray *>(fCutList->FindObject(namestep)); | |
854 | if(!cuts) return kTRUE; | |
855 | TIter it(cuts); | |
856 | AliCFCutBase *mycut; | |
857 | Bool_t status = kTRUE; | |
858 | while((mycut = dynamic_cast<AliCFCutBase *>(it()))){ | |
859 | status &= mycut->IsSelected(o); | |
860 | } | |
861 | return status; | |
862 | } | |
863 | ||
864 | //__________________________________________________________________ | |
865 | void AliHFEcuts::SetRecEvent(const AliVEvent *ev){ | |
866 | // | |
867 | // Publish reconstructed event to the cuts | |
868 | // | |
869 | TIter cutsteps(fCutList); | |
870 | TObjArray *cutstep; | |
871 | AliCFCutBase *cut; | |
872 | while((cutstep = dynamic_cast<TObjArray *>(cutsteps()))){ | |
873 | TIter cutIter(cutstep); | |
874 | while((cut = dynamic_cast<AliCFCutBase *>(cutIter()))){ | |
875 | cut->SetRecEventInfo(ev); | |
876 | } | |
877 | } | |
878 | } | |
879 | ||
880 | //__________________________________________________________________ | |
881 | void AliHFEcuts::SetMCEvent(const AliVEvent *ev){ | |
882 | // | |
883 | // Publish reconstructed event to the cuts | |
884 | // | |
885 | TIter cutsteps(fCutList); | |
886 | TObjArray *cutstep; | |
887 | AliCFCutBase *cut; | |
888 | while((cutstep = dynamic_cast<TObjArray *>(cutsteps()))){ | |
889 | TIter cutIter(cutstep); | |
890 | while((cut = dynamic_cast<AliCFCutBase *>(cutIter()))){ | |
891 | cut->SetMCEventInfo(ev); | |
892 | } | |
893 | } | |
894 | } |