]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/AliAnalysisTaskRhoAverage.cxx
move EMCALJetTasks from PWGGA to PWGJE
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliAnalysisTaskRhoAverage.cxx
CommitLineData
d41a0b1c 1// $Id$
2//
f09b22c5 3// Calculation of rho, method: sum of all particle pt / full acceptance area.
d41a0b1c 4//
1b3d7f8f 5// Authors: S. Aiola
d41a0b1c 6
f09b22c5 7#include "AliAnalysisTaskRhoAverage.h"
8
d41a0b1c 9#include <TClonesArray.h>
f09b22c5 10#include <TList.h>
d41a0b1c 11#include <TMath.h>
12
d41a0b1c 13#include "AliAnalysisManager.h"
d41a0b1c 14#include "AliCentrality.h"
15#include "AliEmcalJet.h"
1b3d7f8f 16#include "AliLog.h"
17#include "AliRhoParameter.h"
d41a0b1c 18#include "AliVCluster.h"
1b3d7f8f 19#include "AliVEventHandler.h"
20#include "AliVTrack.h"
d41a0b1c 21
22ClassImp(AliAnalysisTaskRhoAverage)
23
24//________________________________________________________________________
25AliAnalysisTaskRhoAverage::AliAnalysisTaskRhoAverage() :
26 AliAnalysisTaskRhoBase(),
f09b22c5 27 fTracksName(),
28 fClustersName(),
29 fJetsName(),
30 fEtaMin(0),
31 fEtaMax(0),
d41a0b1c 32 fPhiMin(0),
f09b22c5 33 fPhiMax(0),
34 fPtMin(0),
35 fClusters(0),
36 fJets(0),
37 fTracks(0)
d41a0b1c 38{
f09b22c5 39 // Default constructor.
d41a0b1c 40}
41
42//________________________________________________________________________
43AliAnalysisTaskRhoAverage::AliAnalysisTaskRhoAverage(const char *name) :
44 AliAnalysisTaskRhoBase(name),
45 fTracksName("tracks"),
46 fClustersName("caloClusters"),
47 fJetsName("KtJets"),
48 fEtaMin(-0.9),
49 fEtaMax(0.9),
50 fPhiMin(0),
51 fPhiMax(2 * TMath::Pi()),
f09b22c5 52 fPtMin(0.15),
53 fClusters(0),
54 fJets(0),
55 fTracks(0)
d41a0b1c 56{
f09b22c5 57 // Constructor.
d41a0b1c 58}
59
60//________________________________________________________________________
61void AliAnalysisTaskRhoAverage::UserExec(Option_t *)
62{
63 // Main loop, called for each event.
64
f09b22c5 65 if (!fIsInit) {
66 ExecOnce();
67 fIsInit = 1;
d41a0b1c 68 }
69
f09b22c5 70 fRho->SetVal(-1);
d41a0b1c 71
72 Double_t rho = 0;
73
f09b22c5 74 Int_t Ntracks = 0;
75 if (fTracks)
76 Ntracks = fTracks->GetEntriesFast();
d41a0b1c 77
78 Int_t Nclusters = 0;
f09b22c5 79 if (fClusters)
80 Nclusters = fClusters->GetEntriesFast();
d41a0b1c 81
82 Int_t Njets = 0;
f09b22c5 83 if (fJets)
84 Njets = fJets->GetEntriesFast();
d41a0b1c 85
f09b22c5 86 Double_t maxJetPt = 0;
088a1412 87 Int_t maxJetId = -1;
d41a0b1c 88 AliEmcalJet *maxJet = 0;
89 for (Int_t ij = 0; ij < Njets; ij++) {
90
f09b22c5 91 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ij));
d41a0b1c 92
93 if (!jet) {
f09b22c5 94 AliError(Form("%s: Could not receive jet %d", GetName(), ij));
d41a0b1c 95 continue;
96 }
97
98 if (jet->Pt() > maxJetPt) {
99 maxJetPt = jet->Pt();
100 maxJetId = ij;
101 }
102 }
103
104 if (maxJetId >= 0)
f09b22c5 105 maxJet = static_cast<AliEmcalJet*>(fJets->At(maxJetId));
d41a0b1c 106
f09b22c5 107 for (Int_t it = 0; it < Ntracks; ++it) {
d41a0b1c 108
f09b22c5 109 AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(it));
d41a0b1c 110
111 if (!track) {
f09b22c5 112 AliError(Form("%s: Could not receive track %d", GetName(), it));
d41a0b1c 113 continue;
114 }
115
116 if (track->Eta() < fEtaMin || track->Eta() > fEtaMax || track->Phi() < fPhiMin || track->Phi() > fPhiMax)
117 continue;
118
119 if (track->Pt() < fPtMin)
120 continue;
121
122 if (maxJet && IsJetTrack(maxJet, it))
123 continue;
124
125 rho += track->Pt();
126 }
127
128 Double_t vertex[] = {0, 0, 0};
129 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
130
f09b22c5 131 for (Int_t ic = 0; ic < Nclusters; ++ic) {
d41a0b1c 132
f09b22c5 133 AliVCluster *cluster = static_cast<AliVCluster*>(fClusters->At(ic));
d41a0b1c 134
135 if (!cluster) {
f09b22c5 136 AliError(Form("%s: Could not receive cluster %d", GetName(), ic));
d41a0b1c 137 continue;
138 }
139
140 Float_t pos[3];
141 cluster->GetPosition(pos);
142 TVector3 clusVec(pos);
143
603ca74b 144 if (clusVec.Eta() < fEtaMin || clusVec.Eta() > fEtaMax ||
145 clusVec.Phi() < fPhiMin || clusVec.Phi() > fPhiMax)
d41a0b1c 146 continue;
147
148 TLorentzVector nPart;
149 cluster->GetMomentum(nPart, const_cast<Double_t*>(vertex));
150
151 if (nPart.Et() < fPtMin)
152 continue;
153
154 if (maxJet && IsJetCluster(maxJet, ic))
155 continue;
156
157 rho += nPart.Et();
158 }
159
160 Double_t area = (fEtaMax - fEtaMin) * (fPhiMax - fPhiMin);
161
162 if (maxJet)
163 area -= maxJet->Area();
164
f09b22c5 165 if (area>0) {
166 rho /= area;
167 fRho->SetVal(rho);
168 } else {
169 AliError(Form("%s: Area negative %f", GetName(), area));
170 }
d41a0b1c 171}
172
f09b22c5 173//________________________________________________________________________
174void AliAnalysisTaskRhoAverage::ExecOnce()
175{
176 // Initialize some settings that need to be determined in UserExec.
177
178 AliAnalysisTaskRhoBase::ExecOnce();
179
db91838f 180 if (!fClustersName.IsNull()) {
181 fClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fClustersName));
182 if (!fClusters) {
183 AliError(Form("%s: Pointer to jets %s == 0", GetName(), fClustersName.Data() ));
184 return;
185 }
f09b22c5 186 }
187
db91838f 188 if (!fTracksName.IsNull()) {
189 fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
190 if (!fTracks) {
191 AliError(Form("%s: Pointer to tracks %s == 0", GetName(), fTracksName.Data() ));
192 return;
193 }
f09b22c5 194 }
195
db91838f 196 if (!fJetsName.IsNull()) {
197 fJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
198 if (!fJets) {
199 AliError(Form("%s: Pointer to jets %s == 0", GetName(), fJetsName.Data() ));
200 return;
201 }
f09b22c5 202 }
203}
204
d41a0b1c 205//________________________________________________________________________
206Bool_t AliAnalysisTaskRhoAverage::IsJetTrack(AliEmcalJet* jet, Int_t itrack) const
207{
603ca74b 208 // Return true if track is in jet.
209
d41a0b1c 210 for (Int_t i = 0; i < jet->GetNumberOfTracks(); i++) {
211 Int_t ijettrack = jet->TrackAt(i);
212 if (ijettrack == itrack)
213 return kTRUE;
214 }
215 return kFALSE;
216}
217
218//________________________________________________________________________
219Bool_t AliAnalysisTaskRhoAverage::IsJetCluster(AliEmcalJet* jet, Int_t iclus) const
220{
603ca74b 221 // Return true if cluster is in jet.
222
d41a0b1c 223 for (Int_t i = 0; i < jet->GetNumberOfClusters(); i++) {
224 Int_t ijetclus = jet->ClusterAt(i);
225 if (ijetclus == iclus)
226 return kTRUE;
227 }
228 return kFALSE;
229}