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