1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
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
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>
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
55 #include <TObjArray.h>
58 #include "AliCFAcceptanceCuts.h"
59 #include "AliCFCutBase.h"
60 #include "AliCFEventGenCuts.h"
61 #include "AliCFEventRecCuts.h"
62 #include "AliCFManager.h"
63 #include "AliCFParticleGenCuts.h"
64 #include "AliCFTrackIsPrimaryCuts.h"
65 #include "AliCFTrackKineCuts.h"
66 #include "AliCFTrackQualityCuts.h"
67 #include "AliESDtrack.h"
68 #include "AliHFEextraEventCuts.h"
70 #include "AliHFEcuts.h"
74 const Char_t *AliHFEcuts::fgkMCCutName[AliHFEcuts::kNcutStepsMCTrack] = {
76 "MCGeneratedZOutNoPileUpCentralityFine",
77 "MCGeneratedEventCut",
81 const Char_t * AliHFEcuts::fgkRecoCutName[AliHFEcuts::kNcutStepsRecTrack] = {
91 const Char_t * AliHFEcuts::fgkDECutName[AliHFEcuts::kNcutStepsDETrack] = {
95 const Char_t * AliHFEcuts::fgkSecvtxCutName[AliHFEcuts::kNcutStepsSecvtxTrack] = {
99 const Char_t * AliHFEcuts::fgkEventCutName[AliHFEcuts::kNcutStepsEvent] = {
100 "EventStepGenerated",
102 "EventStepRecNoPileUp",
103 "EventStepRecCentralityOK",
105 "EventStepReconstructed"
108 const Char_t * AliHFEcuts::fgkUndefined = "Undefined";
110 //__________________________________________________________________
111 AliHFEcuts::AliHFEcuts():
114 fTPCclusterDef(AliHFEextraCuts::kFound),
115 fTPCratioDef(AliHFEextraCuts::kFoundOverFindable),
120 fCheckITSLayerStatus(kTRUE),
121 fMaxChi2clusterITS(-1.),
122 fMaxChi2clusterTPC(0.),
123 fMinClusterRatioTPC(0.),
126 fTOFMISMATCHStep(kFALSE),
127 fTPCPIDCLEANUPStep(kFALSE),
128 fUseMixedVertex(kTRUE),
129 fIsIPSigmacut(kFALSE),
130 fFractionOfSharedTPCClusters(-1.0),
131 fMaxImpactParameterRpar(kFALSE),
139 memset(fProdVtx, 0, sizeof(Double_t) * 4);
140 memset(fDCAtoVtx, 0, sizeof(Double_t) * 2);
141 memset(fPtRange, 0, sizeof(Double_t) * 2);
142 memset(fIPCutParams, 0, sizeof(Float_t) * 4);
143 memset(fSigmaToVtx, 0, sizeof(Double_t) * 3);
147 //__________________________________________________________________
148 AliHFEcuts::AliHFEcuts(const Char_t *name, const Char_t *title):
151 fTPCclusterDef(AliHFEextraCuts::kFound),
152 fTPCratioDef(AliHFEextraCuts::kFoundOverFindable),
157 fCheckITSLayerStatus(kTRUE),
158 fMaxChi2clusterITS(-1.),
159 fMaxChi2clusterTPC(0.),
160 fMinClusterRatioTPC(0.),
163 fTOFMISMATCHStep(kFALSE),
164 fTPCPIDCLEANUPStep(kFALSE),
165 fUseMixedVertex(kTRUE),
166 fIsIPSigmacut(kFALSE),
167 fFractionOfSharedTPCClusters(-1.0),
168 fMaxImpactParameterRpar(kFALSE),
174 // Default Constructor
176 memset(fProdVtx, 0, sizeof(Double_t) * 4);
177 memset(fDCAtoVtx, 0, sizeof(Double_t) * 2);
178 memset(fPtRange, 0, sizeof(Double_t) * 2);
179 memset(fIPCutParams, 0, sizeof(Float_t) * 4);
180 memset(fSigmaToVtx, 0, sizeof(Double_t) * 3);
183 //__________________________________________________________________
184 AliHFEcuts::AliHFEcuts(const AliHFEcuts &c):
186 fRequirements(c.fRequirements),
187 fTPCclusterDef(c.fTPCclusterDef),
188 fTPCratioDef(c.fTPCratioDef),
193 fCheckITSLayerStatus(0),
194 fMaxChi2clusterITS(-1.),
195 fMaxChi2clusterTPC(0),
196 fMinClusterRatioTPC(0),
199 fTOFMISMATCHStep(kFALSE),
200 fTPCPIDCLEANUPStep(kFALSE),
201 fUseMixedVertex(kTRUE),
202 fIsIPSigmacut(kFALSE),
203 fFractionOfSharedTPCClusters(-1.0),
204 fMaxImpactParameterRpar(kFALSE),
215 //__________________________________________________________________
216 AliHFEcuts &AliHFEcuts::operator=(const AliHFEcuts &c){
220 if(&c != this) c.Copy(*this);
224 //__________________________________________________________________
225 void AliHFEcuts::Copy(TObject &c) const {
229 AliHFEcuts &target = dynamic_cast<AliHFEcuts &>(c);
231 target.fRequirements = fRequirements;
232 target.fTPCclusterDef = fTPCclusterDef;
233 target.fTPCratioDef = fTPCratioDef;
234 target.fMinClustersTPC = fMinClustersTPC;
235 target.fMinClustersITS = fMinClustersITS;
236 target.fMinTrackletsTRD = fMinTrackletsTRD;
237 target.fCutITSPixel = fCutITSPixel;
238 target.fCheckITSLayerStatus = fCheckITSLayerStatus;
239 target.fMaxChi2clusterITS = fMaxChi2clusterITS;
240 target.fMaxChi2clusterTPC = fMaxChi2clusterTPC;
241 target.fMinClusterRatioTPC = fMinClusterRatioTPC;
242 target.fVertexRangeZ = fVertexRangeZ;
243 target.fTOFPIDStep = fTOFPIDStep;
244 target.fTOFMISMATCHStep = fTOFMISMATCHStep;
245 target.fTPCPIDCLEANUPStep = fTPCPIDCLEANUPStep;
246 target.fUseMixedVertex = fUseMixedVertex;
247 target.fIsIPSigmacut = fIsIPSigmacut;
248 target.fFractionOfSharedTPCClusters = fFractionOfSharedTPCClusters;
249 target.fMaxImpactParameterRpar = fMaxImpactParameterRpar;
250 target.fDebugLevel = 0;
252 memcpy(target.fProdVtx, fProdVtx, sizeof(Double_t) * 4);
253 memcpy(target.fDCAtoVtx, fDCAtoVtx, sizeof(Double_t) * 2);
254 memcpy(target.fPtRange, fPtRange, sizeof(Double_t) *2);
255 memcpy(target.fIPCutParams, fIPCutParams, sizeof(Float_t) * 4);
256 memcpy(target.fSigmaToVtx, fSigmaToVtx, sizeof(Double_t) * 3);
260 target.fCutList->Clear();
261 delete target.fCutList;
264 target.fCutList = dynamic_cast<TObjArray *>(fCutList->Clone());
265 if(target.fCutList) target.fCutList->SetOwner(); // Coverity
268 delete target.fHistQA;
271 // If the QA list was already produced, then we create it new, loop over the cuts and connect all the histos with this list
272 target.fHistQA = new TList;
273 target.fHistQA->SetName(Form("%s_CutQAhistograms", GetName()));
274 fHistQA->SetOwner(kTRUE);
275 TIter cit(target.fCutList);
276 TObjArray *clist = NULL;
277 AliCFCutBase *co = NULL;
278 while((clist = dynamic_cast<TObjArray *>(cit()))){
280 while((co = dynamic_cast<AliCFCutBase *>(cit1()))) co->SetQAOn(target.fHistQA);
285 //__________________________________________________________________
286 AliHFEcuts::~AliHFEcuts(){
295 if(fHistQA) delete fHistQA;
298 //__________________________________________________________________
299 Long64_t AliHFEcuts::Merge(const TCollection *list){
301 // Merge function doing nothing, just writing the object to file
304 if(list->IsEmpty()) return 1;
306 // just count the number of objects to merge
308 while(iter()){ counts++; }
312 //__________________________________________________________________
313 void AliHFEcuts::Initialize(AliCFManager *cfm){
315 // Initializes the cut objects from the correction framework
316 // Publishes the cuts to the correction framework manager
318 AliDebug(2, "Called");
319 const Int_t kMCOffset = kNcutStepsMCTrack;
320 const Int_t kRecOffset = kNcutStepsRecTrack;
324 fCutList = new TObjArray;
325 fCutList->SetOwner();
329 fHistQA->SetName(Form("%s_CutQAhistograms", GetName()));
330 fHistQA->SetOwner(kTRUE);
333 // Call all the setters for the cuts
334 SetParticleGenCutList();
335 SetAcceptanceCutList();
336 SetRecKineITSTPCCutList();
337 SetRecPrimaryCutList();
338 SetHFElectronITSCuts();
339 SetHFElectronTOFCuts();
340 SetHFElectronTPCCuts();
341 SetHFElectronTRDCuts();
342 SetHFElectronDcaCuts();
344 // Publish to the cuts which analysis type they are (ESD Analysis by default)
346 AliInfo("Setting AOD Analysis");
347 TObjArray *genCuts = dynamic_cast<TObjArray *>(fCutList->FindObject("fPartGenCuts"));
349 AliCFParticleGenCuts *myGenCut = dynamic_cast<AliCFParticleGenCuts *>(genCuts->FindObject("fCutsGenMC"));
350 if(myGenCut) myGenCut->SetAODMC(kTRUE);
354 // Connect the event cuts
355 SetEventCutList(kEventStepGenerated);
356 SetEventCutList(kEventStepReconstructed);
357 cfm->SetEventCutsList(kEventStepGenerated, dynamic_cast<TObjArray *>(fCutList->FindObject("fEvGenCuts")));
358 cfm->SetEventCutsList(kEventStepReconstructed, dynamic_cast<TObjArray *>(fCutList->FindObject("fEvRecCuts")));
360 // Connect the particle cuts
362 cfm->SetParticleCutsList(kStepMCGenerated, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartGenCuts")));
363 cfm->SetParticleCutsList(kStepMCInAcceptance, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartAccCuts")));
365 cfm->SetParticleCutsList(kStepRecKineITSTPC + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartRecKineITSTPCCuts")));
366 cfm->SetParticleCutsList(kStepRecPrim + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartPrimCuts")));
367 cfm->SetParticleCutsList(kStepHFEcutsITS + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsITS")));
368 cfm->SetParticleCutsList(kStepHFEcutsTOF+ kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsTOF")));
369 cfm->SetParticleCutsList(kStepHFEcutsTPC+ kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsTPC")));
370 cfm->SetParticleCutsList(kStepHFEcutsTRD + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsTRD")));
371 cfm->SetParticleCutsList(kStepHFEcutsDca + kRecOffset + kMCOffset, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsDca")));
375 //__________________________________________________________________
376 void AliHFEcuts::Initialize(){
377 // Call all the setters for the cuts
378 AliDebug(2, "Called\n");
382 fCutList = new TObjArray;
383 fCutList->SetOwner();
387 fHistQA->SetName(Form("%s_CutQAhistograms", GetName()));
388 fHistQA->SetOwner(kFALSE);
390 SetParticleGenCutList();
391 SetAcceptanceCutList();
392 SetRecKineITSTPCCutList();
393 SetRecPrimaryCutList();
394 SetHFElectronITSCuts();
395 SetHFElectronTOFCuts();
396 SetHFElectronTPCCuts();
397 SetHFElectronTRDCuts();
398 SetHFElectronDcaCuts();
400 // Connect the event cuts
401 SetEventCutList(kEventStepGenerated);
402 SetEventCutList(kEventStepReconstructed);
407 //__________________________________________________________________
408 void AliHFEcuts::SetEventCutList(Int_t istep){
410 // Cuts for Event Selection
412 AliDebug(2, "Called\n");
413 TObjArray *arr = new TObjArray;
414 if(istep == kEventStepGenerated){
415 AliCFEventGenCuts *evGenCuts = new AliCFEventGenCuts((Char_t *)"fCutsEvGen", (Char_t *)"Event Generated cuts");
416 //evGenCuts->SetNTracksCut(1);
417 evGenCuts->SetRequireVtxCuts(kTRUE);
418 //evGenCuts->SetVertexXCut(-1, 1);
419 //evGenCuts->SetVertexYCut(-1, 1);
420 evGenCuts->SetVertexZCut(-fVertexRangeZ, fVertexRangeZ);
421 if(IsQAOn()) evGenCuts->SetQAOn(fHistQA);
423 arr->SetName("fEvGenCuts");
424 arr->AddLast(evGenCuts);
427 if(!fUseMixedVertex) {
428 AliCFEventRecCuts *evRecCuts = new AliCFEventRecCuts((Char_t *)"fCutsEvRec", (Char_t *)"Event Reconstructed cuts");
429 //evRecCuts->SetNTracksCut(1);
430 evRecCuts->SetRequireVtxCuts(kTRUE);
431 //evRecCuts->SetVertexXCut(-1, 1);
432 //evRecCuts->SetVertexYCut(-1, 1);
433 //evRecCuts->SetVertexZCut(-30, 30);
434 evRecCuts->SetVertexZCut(-fVertexRangeZ, fVertexRangeZ);
435 evRecCuts->SetVertexNContributors(1,(Int_t)1.e9);
436 if(IsQAOn()) evRecCuts->SetQAOn(fHistQA);
437 arr->SetName("fEvRecCuts");
438 arr->AddLast(evRecCuts);
440 AliHFEextraEventCuts *evRecCuts = new AliHFEextraEventCuts((Char_t *)"fCutsEvRec", (Char_t *)"Event Reconstructed cuts");
441 evRecCuts->SetRequireVtxCuts(kTRUE);
442 evRecCuts->SetUseMixedVertex();
443 evRecCuts->SetVertexZCut(-fVertexRangeZ, fVertexRangeZ);
444 //evRecCuts->SetVertexNContributors(1,(Int_t)1.e9);
445 if(IsQAOn()) evRecCuts->SetQAOn(fHistQA);
446 arr->SetName("fEvRecCuts");
447 arr->AddLast(evRecCuts);
450 fCutList->AddLast(arr);
453 //__________________________________________________________________
454 void AliHFEcuts::SetParticleGenCutList(){
456 // Initialize Particle Cuts for Monte Carlo Tracks
457 // Production Vertex Radius: < 3cm
458 // Particle Species: Electrons
462 TObjArray *mcCuts = new TObjArray;
463 mcCuts->SetName("fPartGenCuts");
466 AliDebug(2, "Called\n");
467 AliCFParticleGenCuts *genCuts = new AliCFParticleGenCuts("fCutsGenMC", "Particle Generation Cuts");
468 genCuts->SetRequireIsCharged();
469 if(IsRequirePrimary()) {
470 genCuts->SetRequireIsPrimary();
472 if(IsRequireProdVertex()){
473 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]));
474 genCuts->SetProdVtxRangeX(fProdVtx[0], fProdVtx[1]);
475 genCuts->SetProdVtxRangeY(fProdVtx[2], fProdVtx[3]);
476 genCuts->SetProdVtxRange2D(kTRUE); // Use ellipse
478 genCuts->SetRequirePdgCode(11, kTRUE);
479 if(IsQAOn()) genCuts->SetQAOn(fHistQA);
482 mcCuts->AddLast(genCuts);
485 if(IsRequireKineMCCuts()) {
486 AliCFTrackKineCuts *kineMCcuts = new AliCFTrackKineCuts((Char_t *)"fCutsKineMC", (Char_t *)"MC Kine Cuts");
487 kineMCcuts->SetPtRange(fPtRange[0], fPtRange[1]);
488 kineMCcuts->SetEtaRange(-0.8, 0.8);
489 if(IsQAOn()) kineMCcuts->SetQAOn(fHistQA);
490 mcCuts->AddLast(kineMCcuts);
493 fCutList->AddLast(mcCuts);
496 //__________________________________________________________________
497 void AliHFEcuts::SetAcceptanceCutList(){
499 // Initialize Particle (Monte Carlo) acceptance cuts
500 // Min. Required Hist for Detectors:
503 // TRD [2*nTracklets]
506 AliDebug(2, "Called\n");
507 AliCFAcceptanceCuts *accCuts = new AliCFAcceptanceCuts("fCutsAccMC", "MC Acceptance Cuts");
508 accCuts->SetMinNHitITS(3);
509 accCuts->SetMinNHitTPC(2);
510 accCuts->SetMinNHitTRD(2*fMinTrackletsTRD);
511 if(IsQAOn()) accCuts->SetQAOn(fHistQA);
513 TObjArray *partAccCuts = new TObjArray();
514 partAccCuts->SetName("fPartAccCuts");
515 partAccCuts->AddLast(accCuts);
516 fCutList->AddLast(partAccCuts);
519 //__________________________________________________________________
520 void AliHFEcuts::SetRecKineITSTPCCutList(){
522 // Track Kinematics and Quality cuts (Based on the Standard cuts from PWG0)
531 // Min. Number of Clusters:
535 // Chi2 per TPC cluster: 3.5
538 // Momentum Range: 100MeV - 20GeV
539 // Eta: < 0.9 (TRD-TOF acceptance)
541 AliDebug(2, "Called\n");
542 AliCFTrackQualityCuts *trackQuality = new AliCFTrackQualityCuts((Char_t *)"fCutsQualityRec", (Char_t *)"REC Track Quality Cuts");
543 trackQuality->SetMinNClusterITS(fMinClustersITS);
544 trackQuality->SetMaxChi2PerClusterTPC(fMaxChi2clusterTPC);
545 if(fMaxChi2clusterITS >= 0.) trackQuality->SetMaxChi2PerClusterITS(fMaxChi2clusterITS);
546 trackQuality->SetStatus(AliESDtrack::kTPCrefit | AliESDtrack::kITSrefit);
547 //trackQuality->SetMaxCovDiagonalElements(2., 2., 0.5, 0.5, 2);
549 AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTPC","Extra cuts from the HFE group");
550 hfecuts->SetDebugLevel(fDebugLevel);
552 // Set the cut in the TPC number of clusters
553 hfecuts->SetMinNClustersTPC(fMinClustersTPC, fTPCclusterDef);
554 hfecuts->SetClusterRatioTPC(fMinClusterRatioTPC, fTPCratioDef);
555 if(fFractionOfSharedTPCClusters > 0.0) hfecuts->SetFractionOfTPCSharedClusters(fFractionOfSharedTPCClusters);
557 AliCFTrackKineCuts *kineCuts = new AliCFTrackKineCuts((Char_t *)"fCutsKineRec", (Char_t *)"REC Kine Cuts");
558 kineCuts->SetPtRange(fPtRange[0], fPtRange[1]);
559 kineCuts->SetEtaRange(-0.8, 0.8);
562 trackQuality->SetQAOn(fHistQA);
563 hfecuts->SetQAOn(fHistQA);
564 kineCuts->SetQAOn(fHistQA);
567 TObjArray *recCuts = new TObjArray;
568 recCuts->SetName("fPartRecKineITSTPCCuts");
569 recCuts->AddLast(trackQuality);
570 recCuts->AddLast(hfecuts);
571 recCuts->AddLast(kineCuts);
572 fCutList->AddLast(recCuts);
575 //__________________________________________________________________
576 void AliHFEcuts::SetRecPrimaryCutList(){
578 // Primary cuts (based on standard cuts from PWG0):
584 AliDebug(2, "Called\n");
585 AliCFTrackIsPrimaryCuts *primaryCut = new AliCFTrackIsPrimaryCuts((Char_t *)"fCutsPrimaryCuts", (Char_t *)"REC Primary Cuts");
586 if(IsRequireDCAToVertex()){
587 //primaryCut->SetDCAToVertex2D(kTRUE);
588 primaryCut->SetMaxDCAToVertexXY(fDCAtoVtx[0]);
589 primaryCut->SetMaxDCAToVertexZ(fDCAtoVtx[1]);
591 if(IsRequireSigmaToVertex()){
592 primaryCut->SetRequireSigmaToVertex(kTRUE);
593 if(fSigmaToVtx[0]) primaryCut->SetMaxNSigmaToVertex(fSigmaToVtx[0]);
594 if(fSigmaToVtx[1]) primaryCut->SetMaxSigmaDCAxy(fSigmaToVtx[1]);
595 if(fSigmaToVtx[2]) primaryCut->SetMaxSigmaDCAz(fSigmaToVtx[2]);
597 primaryCut->SetAcceptKinkDaughters(kFALSE);
598 if(IsQAOn()) primaryCut->SetQAOn(fHistQA);
600 AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsPrimaryCutsextra","Extra cuts from the HFE group");
601 hfecuts->SetMaxImpactParameterRpar(fMaxImpactParameterRpar);
603 TObjArray *primCuts = new TObjArray;
604 primCuts->SetName("fPartPrimCuts");
605 primCuts->AddLast(primaryCut);
606 if(fMaxImpactParameterRpar){
607 primCuts->AddLast(hfecuts);
609 fCutList->AddLast(primCuts);
612 //__________________________________________________________________
613 void AliHFEcuts::SetHFElectronITSCuts(){
615 // Special Cuts introduced by the HFElectron Group: ITS
617 AliDebug(2, "Called\n");
618 AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupPixels","Extra cuts from the HFE group");
619 if(IsRequireITSpixel()){
620 hfecuts->SetRequireITSpixel(AliHFEextraCuts::ITSPixel_t(fCutITSPixel));
621 hfecuts->SetCheckITSstatus(fCheckITSLayerStatus);
624 if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
625 hfecuts->SetDebugLevel(fDebugLevel);
627 TObjArray *hfeCuts = new TObjArray;
628 hfeCuts->SetName("fPartHFECutsITS");
629 hfeCuts->AddLast(hfecuts);
630 fCutList->AddLast(hfeCuts);
633 //__________________________________________________________________
634 void AliHFEcuts::SetHFElectronTOFCuts(){
636 // Special Cuts introduced by the HFElectron Group: TRD
638 AliDebug(2, "Called\n");
639 AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTOF","Extra cuts from the HFE group on TOF PID");
640 if(fTOFPIDStep) hfecuts->SetTOFPID(kTRUE);
641 if(fTOFMISMATCHStep) hfecuts->SetTOFMISMATCH(kTRUE);
642 if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
643 hfecuts->SetDebugLevel(fDebugLevel);
645 TObjArray *hfeCuts = new TObjArray;
646 hfeCuts->SetName("fPartHFECutsTOF");
647 hfeCuts->AddLast(hfecuts);
648 fCutList->AddLast(hfeCuts);
651 //__________________________________________________________________
652 void AliHFEcuts::SetHFElectronTPCCuts(){
654 // Special Cuts introduced by the HFElectron Group: TPC
656 AliDebug(2, "Called\n");
657 AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTPC","Extra cuts from the HFE group on TPC PID");
658 if(fTPCPIDCLEANUPStep) hfecuts->SetTPCPIDCleanUp(kTRUE);
659 if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
660 hfecuts->SetDebugLevel(fDebugLevel);
662 TObjArray *hfeCuts = new TObjArray;
663 hfeCuts->SetName("fPartHFECutsTPC");
664 hfeCuts->AddLast(hfecuts);
665 fCutList->AddLast(hfeCuts);
669 //__________________________________________________________________
670 void AliHFEcuts::SetHFElectronTRDCuts(){
672 // Special Cuts introduced by the HFElectron Group: TRD
674 AliDebug(2, "Called\n");
675 AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTRD","Extra cuts from the HFE group on TRD PID");
676 if(fMinTrackletsTRD > 0.) hfecuts->SetMinTrackletsTRD(fMinTrackletsTRD);
677 if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
678 hfecuts->SetDebugLevel(fDebugLevel);
680 TObjArray *hfeCuts = new TObjArray;
681 hfeCuts->SetName("fPartHFECutsTRD");
682 hfeCuts->AddLast(hfecuts);
683 fCutList->AddLast(hfeCuts);
686 //__________________________________________________________________
687 void AliHFEcuts::SetHFElectronDcaCuts(){
689 // Special Cuts introduced by the HFElectron Group: minimum of impact parameter
691 AliDebug(2, "Called\n");
692 AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupDCA","Extra cuts from the HFE group");
693 hfecuts->SetMinHFEImpactParamR(fIPCutParams,fIsIPSigmacut);
694 if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
695 hfecuts->SetDebugLevel(fDebugLevel);
697 TObjArray *hfeCuts = new TObjArray;
698 hfeCuts->SetName("fPartHFECutsDca");
699 hfeCuts->AddLast(hfecuts);
700 fCutList->AddLast(hfeCuts);
703 //__________________________________________________________________
704 Bool_t AliHFEcuts::CheckParticleCuts(UInt_t step, TObject *o){
706 // Checks the cuts without using the correction framework manager
708 AliDebug(2, "Called\n");
709 TString stepnames[kNcutStepsMCTrack + kNcutStepsRecTrack + kNcutStepsDETrack + kNcutStepsSecvtxTrack + 1] = {"fPartGenCuts","fPartEvCutPileupZ","fPartEvCut","fPartAccCuts","fPartRecNoCuts","fPartRecKineITSTPCCuts", "fPartPrimCuts", "fPartHFECutsITS","fPartHFECutsTOF","fPartHFECutsTPC","fPartHFECutsTRD","fPartHFECutsDca", "fPartHFECutsSecvtx"};
710 AliDebug(2, Form("Doing cut %s", stepnames[step].Data()));
711 TObjArray *cuts = dynamic_cast<TObjArray *>(fCutList->FindObject(stepnames[step].Data()));
712 if(!cuts) return kTRUE;
715 Bool_t status = kTRUE;
716 while((mycut = dynamic_cast<AliCFCutBase *>(it()))){
717 status &= mycut->IsSelected(o);
723 //__________________________________________________________________
724 Bool_t AliHFEcuts::CheckEventCuts(const char*namestep, TObject *o){
726 // Checks the cuts without using the correction framework manager
728 AliDebug(2, "Called\n");
729 TObjArray *cuts = dynamic_cast<TObjArray *>(fCutList->FindObject(namestep));
730 if(!cuts) return kTRUE;
733 Bool_t status = kTRUE;
734 while((mycut = dynamic_cast<AliCFCutBase *>(it()))){
735 status &= mycut->IsSelected(o);