3 // Jet trigger selection task.
7 #include <TLorentzVector.h>
11 #include "AliVEvent.h"
12 #include "AliVCluster.h"
13 #include "AliEmcalJet.h"
15 #include "AliVVZERO.h"
16 #include "AliESDUtils.h"
18 #include "AliJetTriggerSelectionTask.h"
20 ClassImp(AliJetTriggerSelectionTask)
22 //________________________________________________________________________
23 AliJetTriggerSelectionTask::AliJetTriggerSelectionTask() :
24 AliAnalysisTaskEmcalJet("AliJetTriggerSelectionTask", kFALSE),
26 fMaxDistance2(0.0225),
27 fTriggerBits(AliVEvent::kEMCEJE),
28 fTaskSettingsOk(kFALSE),
34 // Default constructor.
36 for (Int_t i = 0; i < 999; i++) {
37 fTrigPos[i][0] = -999;
38 fTrigPos[i][1] = -999;
42 //________________________________________________________________________
43 AliJetTriggerSelectionTask::AliJetTriggerSelectionTask(const char *name) :
44 AliAnalysisTaskEmcalJet(name, kFALSE),
46 fMaxDistance2(0.0225),
47 fTriggerBits(AliVEvent::kEMCEJE),
48 fTaskSettingsOk(kFALSE),
54 // Standard constructor.
56 for (Int_t i = 0; i < 999; i++) {
57 fTrigPos[i][0] = -999;
58 fTrigPos[i][1] = -999;
62 //________________________________________________________________________
63 void AliJetTriggerSelectionTask::ExecOnce()
65 // Initialize the task.
67 AliAnalysisTaskEmcalJet::ExecOnce();
69 fTaskSettingsOk = kTRUE;
71 fVZERO = InputEvent()->GetVZEROData();
73 AliError(Form("%s: AliVVZERO not available, task will not be executed!",GetName()));
74 fTaskSettingsOk = kFALSE;
77 if (GetClusterArray() == 0) {
78 AliError(Form("%s: No cluster collection provided, task will not be executed!",GetName()));
79 fTaskSettingsOk = kFALSE;
82 if (GetJetArray() == 0) {
83 AliError(Form("%s: No jet collection provided, task will not be executed!",GetName()));
84 fTaskSettingsOk = kFALSE;
87 if (!fEnergyThreshold) {
88 AliError(Form("%s: No threshold function provided, task will not be executed!",GetName()));
89 fTaskSettingsOk = kFALSE;
93 //________________________________________________________________________
94 Bool_t AliJetTriggerSelectionTask::RetrieveEventObjects()
96 // Retrieve event objects.
98 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
102 fV0ATotMult = fVZERO->GetMTotV0A();
103 fV0CTotMult = fVZERO->GetMTotV0C();
109 //________________________________________________________________________
110 Bool_t AliJetTriggerSelectionTask::Run()
114 if (!fTaskSettingsOk) return kFALSE;
122 //________________________________________________________________________
123 void AliJetTriggerSelectionTask::FindTriggers()
127 Int_t nclusters = GetNClusters();
129 Double_t th = fEnergyThreshold->Eval(fV0ATotMult+fV0CTotMult);
131 for (Int_t i = 0; i < nclusters; i++) {
132 if (fNTriggers >= 999) {
133 AliError("More than 999 triggers found!");
137 AliVCluster *cluster = GetAcceptClusterFromArray(i);
141 //Printf("Cluster energy=%.3f, th=%.3f",cluster->E(), th);
143 if (cluster->E() > th) {
145 cluster->GetMomentum(vect,fVertex);
146 fTrigPos[fNTriggers][0] = vect.Eta();
147 fTrigPos[fNTriggers][1] = vect.Phi();
152 AliDebug(2,Form("%s: %d triggers found among %d candidates (cent=%.1f, mult=%.1f, th=%.2f)!",GetName(),fNTriggers,nclusters,fCent,fV0ATotMult+fV0CTotMult,th));
155 //________________________________________________________________________
156 void AliJetTriggerSelectionTask::SelectJets()
158 for (Int_t c = 0; c < fJetCollArray.GetEntriesFast(); c++) {
160 Int_t njets = GetNJets(c);
162 for (Int_t i = 0; i < njets; i++) {
163 AliEmcalJet *jet = GetAcceptJetFromArray(i,c);
164 if (IsTriggerJet(jet)) jet->AddTrigger(fTriggerBits);
169 //________________________________________________________________________
170 Bool_t AliJetTriggerSelectionTask::IsTriggerJet(AliEmcalJet *jet)
172 if (!jet) return kFALSE;
174 for (Int_t i = 0; i < fNTriggers; i++) {
175 Double_t deta = jet->Eta() - fTrigPos[i][0];
176 Double_t dphi = jet->Phi() - fTrigPos[i][1];
178 Double_t d2 = deta * deta + dphi * dphi;
180 if (d2 < fMaxDistance2)