3 // Calculation of rho, method: sum of all particle pt / full acceptance area.
7 #include "AliAnalysisTaskRhoAverage.h"
9 #include <TClonesArray.h>
13 #include "AliAnalysisManager.h"
14 #include "AliCentrality.h"
15 #include "AliEmcalJet.h"
17 #include "AliRhoParameter.h"
18 #include "AliVCluster.h"
19 #include "AliVEventHandler.h"
20 #include "AliVTrack.h"
22 ClassImp(AliAnalysisTaskRhoAverage)
24 //________________________________________________________________________
25 AliAnalysisTaskRhoAverage::AliAnalysisTaskRhoAverage() :
26 AliAnalysisTaskRhoBase(),
39 // Default constructor.
42 //________________________________________________________________________
43 AliAnalysisTaskRhoAverage::AliAnalysisTaskRhoAverage(const char *name) :
44 AliAnalysisTaskRhoBase(name),
45 fTracksName("tracks"),
46 fClustersName("caloClusters"),
51 fPhiMax(2 * TMath::Pi()),
60 //________________________________________________________________________
61 void AliAnalysisTaskRhoAverage::UserExec(Option_t *)
63 // Main loop, called for each event.
76 Ntracks = fTracks->GetEntriesFast();
80 Nclusters = fClusters->GetEntriesFast();
84 Njets = fJets->GetEntriesFast();
86 Double_t maxJetPt = 0;
88 AliEmcalJet *maxJet = 0;
89 for (Int_t ij = 0; ij < Njets; ij++) {
91 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ij));
94 AliError(Form("%s: Could not receive jet %d", GetName(), ij));
98 if (jet->Pt() > maxJetPt) {
105 maxJet = static_cast<AliEmcalJet*>(fJets->At(maxJetId));
107 for (Int_t it = 0; it < Ntracks; ++it) {
109 AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(it));
112 AliError(Form("%s: Could not receive track %d", GetName(), it));
116 if (track->Eta() < fEtaMin || track->Eta() > fEtaMax || track->Phi() < fPhiMin || track->Phi() > fPhiMax)
119 if (track->Pt() < fPtMin)
122 if (maxJet && IsJetTrack(maxJet, it))
128 Double_t vertex[] = {0, 0, 0};
129 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
131 for (Int_t ic = 0; ic < Nclusters; ++ic) {
133 AliVCluster *cluster = static_cast<AliVCluster*>(fClusters->At(ic));
136 AliError(Form("%s: Could not receive cluster %d", GetName(), ic));
141 cluster->GetPosition(pos);
142 TVector3 clusVec(pos);
144 if (clusVec.Eta() < fEtaMin || clusVec.Eta() > fEtaMax ||
145 clusVec.Phi() < fPhiMin || clusVec.Phi() > fPhiMax)
148 TLorentzVector nPart;
149 cluster->GetMomentum(nPart, const_cast<Double_t*>(vertex));
151 if (nPart.Et() < fPtMin)
154 if (maxJet && IsJetCluster(maxJet, ic))
160 Double_t area = (fEtaMax - fEtaMin) * (fPhiMax - fPhiMin);
163 area -= maxJet->Area();
169 AliError(Form("%s: Area negative %f", GetName(), area));
173 //________________________________________________________________________
174 void AliAnalysisTaskRhoAverage::ExecOnce()
176 // Initialize some settings that need to be determined in UserExec.
178 AliAnalysisTaskRhoBase::ExecOnce();
180 if (!fClustersName.IsNull()) {
181 fClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fClustersName));
183 AliError(Form("%s: Pointer to jets %s == 0", GetName(), fClustersName.Data() ));
188 if (!fTracksName.IsNull()) {
189 fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
191 AliError(Form("%s: Pointer to tracks %s == 0", GetName(), fTracksName.Data() ));
196 if (!fJetsName.IsNull()) {
197 fJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
199 AliError(Form("%s: Pointer to jets %s == 0", GetName(), fJetsName.Data() ));
205 //________________________________________________________________________
206 Bool_t AliAnalysisTaskRhoAverage::IsJetTrack(AliEmcalJet* jet, Int_t itrack) const
208 // Return true if track is in jet.
210 for (Int_t i = 0; i < jet->GetNumberOfTracks(); i++) {
211 Int_t ijettrack = jet->TrackAt(i);
212 if (ijettrack == itrack)
218 //________________________________________________________________________
219 Bool_t AliAnalysisTaskRhoAverage::IsJetCluster(AliEmcalJet* jet, Int_t iclus) const
221 // Return true if cluster is in jet.
223 for (Int_t i = 0; i < jet->GetNumberOfClusters(); i++) {
224 Int_t ijetclus = jet->ClusterAt(i);
225 if (ijetclus == iclus)