3 // Calculation of rho, method: sum of all particle pt / full acceptance area
8 #include <TClonesArray.h>
11 #include "AliAnalysisManager.h"
12 #include "AliCentrality.h"
13 #include "AliEmcalJet.h"
15 #include "AliRhoParameter.h"
16 #include "AliVCluster.h"
17 #include "AliVEventHandler.h"
18 #include "AliVTrack.h"
19 #include "AliAnalysisTaskRhoAverage.h"
21 ClassImp(AliAnalysisTaskRhoAverage)
23 //________________________________________________________________________
24 AliAnalysisTaskRhoAverage::AliAnalysisTaskRhoAverage() :
25 AliAnalysisTaskRhoBase(),
26 fTracksName("tracks"),
27 fClustersName("caloClusters"),
32 fPhiMax(2 * TMath::Pi()),
38 //________________________________________________________________________
39 AliAnalysisTaskRhoAverage::AliAnalysisTaskRhoAverage(const char *name) :
40 AliAnalysisTaskRhoBase(name),
41 fTracksName("tracks"),
42 fClustersName("caloClusters"),
47 fPhiMax(2 * TMath::Pi()),
54 //________________________________________________________________________
55 void AliAnalysisTaskRhoAverage::UserExec(Option_t *)
57 // Main loop, called for each event.
59 AliAnalysisTaskRhoBase::UserExec("");
63 TClonesArray *jets = 0;
64 TClonesArray *tracks = 0;
65 TClonesArray *clusters = 0;
67 tracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
69 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
73 if (fClustersName != "") {
74 clusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fClustersName));
76 AliError(Form("Pointer to clusters %s == 0", fClustersName.Data() ));
81 if (fJetsName != "") {
82 jets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
84 AliError(Form("Pointer to jets %s == 0", fJetsName.Data() ));
91 Int_t Ntracks = tracks->GetEntries();
95 Nclusters = clusters->GetEntries();
99 Njets = jets->GetEntries();
101 Float_t maxJetPt = 0;
103 AliEmcalJet *maxJet = 0;
104 for (Int_t ij = 0; ij < Njets; ij++) {
106 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ij));
109 AliError(Form("Could not receive jet %d", ij));
113 if (jet->Pt() > maxJetPt) {
114 maxJetPt = jet->Pt();
120 maxJet = static_cast<AliEmcalJet*>(jets->At(maxJetId));
122 for (Int_t it = 0; it < Ntracks; it++) {
124 AliVTrack *track = static_cast<AliVTrack*>(tracks->At(it));
127 AliError(Form("Could not receive track %d", it));
131 if (track->Eta() < fEtaMin || track->Eta() > fEtaMax || track->Phi() < fPhiMin || track->Phi() > fPhiMax)
134 if (track->Pt() < fPtMin)
137 if (maxJet && IsJetTrack(maxJet, it))
143 Double_t vertex[] = {0, 0, 0};
144 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
146 for (Int_t ic = 0; ic < Nclusters; ic++) {
148 AliVCluster *cluster = static_cast<AliVCluster*>(clusters->At(ic));
151 AliError(Form("Could not receive cluster %d", ic));
156 cluster->GetPosition(pos);
157 TVector3 clusVec(pos);
159 if (clusVec.Eta() < fEtaMin || clusVec.Eta() > fEtaMax || clusVec.Phi() < fPhiMin || clusVec.Phi() > fPhiMax)
162 TLorentzVector nPart;
163 cluster->GetMomentum(nPart, const_cast<Double_t*>(vertex));
165 if (nPart.Et() < fPtMin)
168 if (maxJet && IsJetCluster(maxJet, ic))
174 Double_t area = (fEtaMax - fEtaMin) * (fPhiMax - fPhiMin);
177 area -= maxJet->Area();
184 //________________________________________________________________________
185 Bool_t AliAnalysisTaskRhoAverage::IsJetTrack(AliEmcalJet* jet, Int_t itrack) const
187 for (Int_t i = 0; i < jet->GetNumberOfTracks(); i++) {
188 Int_t ijettrack = jet->TrackAt(i);
189 if (ijettrack == itrack)
195 //________________________________________________________________________
196 Bool_t AliAnalysisTaskRhoAverage::IsJetCluster(AliEmcalJet* jet, Int_t iclus) const
198 for (Int_t i = 0; i < jet->GetNumberOfClusters(); i++) {
199 Int_t ijetclus = jet->ClusterAt(i);
200 if (ijetclus == iclus)
207 //________________________________________________________________________
208 void AliAnalysisTaskRhoAverage::Terminate(Option_t *)