1 AliAnalysisTaskCaloFilter * AddTaskCaloFilter(const Bool_t bias = kTRUE,
2 const Bool_t mc = kFALSE,
3 const Float_t minE = 6,
4 const Float_t minN = 3,
5 const Float_t vz = 10.,
6 const Int_t opt = AliAnalysisTaskCaloFilter::kBoth, //kPHOS, kEMCAL or kBoth
7 const Bool_t correct = kFALSE,
8 const Bool_t fillTrack = kTRUE,
9 const Bool_t fillAOD = kTRUE)
12 // Get the pointer to the existing analysis manager via the static access method.
13 //==============================================================================
14 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
17 ::Error("AddTaskCaloFilter", "No analysis manager to connect to.");
21 // Check the analysis type using the event handlers connected to the analysis manager.
22 //==============================================================================
23 if (!mgr->GetInputEventHandler())
25 ::Error("AddTaskCaloFilter", "This task requires an input event handler");
29 AliAnalysisTaskCaloFilter * filter = new AliAnalysisTaskCaloFilter("CaloFilter");
31 //filter->SetDebugLevel(2);
33 filter->SetCaloFilter(opt); //kPHOS, kEMCAL or kBoth
39 filter->SetEventSelection(1,0,0); // Select events depending on EMCAL, PHOS and tracks criteria
40 filter->SwitchOnAcceptAllMBEvent();
42 filter->SwitchOnFillMCParticles();
44 filter->SetEMCALEnergyCut(minE);
45 filter->SetEMCALNcellsCut(minN);
47 filter->SetPHOSEnergyCut(minE);
48 filter->SetPHOSNcellsCut(minN);
50 filter->SetTrackPtCut(minE);
52 else if(bias) // select events with significant signal in EMCAL or TPC or PHOS
54 filter->SetEventSelection(1,0,0); // Select events depending on EMCAL, PHOS and tracks criteria
55 filter->SwitchOnAcceptAllMBEvent();
57 filter->SetEMCALEnergyCut(minE);
58 filter->SetEMCALNcellsCut(minN);
60 filter->SetPHOSEnergyCut(minE);
61 filter->SetPHOSNcellsCut(minN);
63 filter->SetTrackPtCut(minE);
65 //filter->SetMBTriggerMask(AliVEvent::kAnyINT);
66 filter->SetMBTriggerMask(AliVEvent::kMB); // not working for all productions
68 filter->SelectCollisionCandidates(AliVEvent::kAny) ;
70 printf("--- Select events with 1 cluster with at least %2.2f GeV and N = %d ---\n",minE,minN);
72 else // Do not bias the signal in EMCAL, select MB events
75 filter->SetEventSelection(0,0,0);
76 filter->SwitchOnAcceptAllMBEvent();
78 filter->SetEMCALEnergyCut(-1);
79 filter->SetEMCALNcellsCut(0);
81 filter->SetPHOSEnergyCut(-1);
82 filter->SetPHOSNcellsCut(0);
84 filter->SetTrackPtCut(-1);
86 filter->SelectCollisionCandidates(AliVEvent::kMB);// | AliVEvent::kCentral | AliVEvent::kSemiCentral ) ;
88 printf("--- Select Min Bias events ---\n");
92 // filter->SelectCollisionCandidates(AliVEvent::kAny) ;
94 if(correct) filter->SwitchOnClusterCorrection();
95 else filter->SwitchOffClusterCorrection();
97 AliEMCALRecoUtils * reco = filter->GetEMCALRecoUtils();
98 reco->SwitchOnRejectExoticCluster() ;
99 reco->SetExoticCellFractionCut(0.97);
100 reco->SetExoticCellMinAmplitudeCut(2.);
102 if(fillTrack) { filter->SwitchOnFillTracks() ; filter->SwitchOnFillHybridTracks() ; }
103 else { filter->SwitchOffFillTracks() ; filter->SwitchOffFillHybridTracks() ; }
105 filter->SwitchOffFillv0s() ; // Put ON if you know what you do.
107 filter->SwitchOnFillVZERO(); // Be able to recalculate centrality and event plane afterwards even it is stored in header
109 if(fillAOD) filter->SwitchOnFillAODFile();
110 else filter->SwitchOffFillAODFile();
114 mgr->AddTask(filter);
116 // Create containers for input/output
117 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
118 AliAnalysisDataContainer *coutput1 = mgr->GetCommonOutputContainer();
120 mgr->ConnectInput (filter, 0, cinput1);
121 mgr->ConnectOutput (filter, 0, coutput1 );