]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/AliAnalysisTaskRhoAverage.cxx
From Marta
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliAnalysisTaskRhoAverage.cxx
CommitLineData
d41a0b1c 1// $Id$
2//
a487deae 3// Calculation of rho, method: median all particle pt / multiplicity density.
d41a0b1c 4//
1b3d7f8f 5// Authors: S. Aiola
d41a0b1c 6
f09b22c5 7#include "AliAnalysisTaskRhoAverage.h"
8
d41a0b1c 9#include <TClonesArray.h>
10#include <TMath.h>
11
1b3d7f8f 12#include "AliLog.h"
13#include "AliRhoParameter.h"
d41a0b1c 14#include "AliVCluster.h"
1b3d7f8f 15#include "AliVTrack.h"
d41a0b1c 16
17ClassImp(AliAnalysisTaskRhoAverage)
18
19//________________________________________________________________________
20AliAnalysisTaskRhoAverage::AliAnalysisTaskRhoAverage() :
a487deae 21 AliAnalysisTaskRhoBase("AliAnalysisTaskRhoAverage"),
22 fRhoType(0),
a315c08c 23 fNExclLeadPart(0),
24 fUseMedian(kFALSE)
d41a0b1c 25{
f09b22c5 26 // Default constructor.
d41a0b1c 27}
28
29//________________________________________________________________________
a487deae 30AliAnalysisTaskRhoAverage::AliAnalysisTaskRhoAverage(const char *name, Bool_t histo) :
31 AliAnalysisTaskRhoBase(name, histo),
32 fRhoType(0),
a315c08c 33 fNExclLeadPart(0),
34 fUseMedian(kFALSE)
d41a0b1c 35{
f09b22c5 36 // Constructor.
d41a0b1c 37}
38
39//________________________________________________________________________
a487deae 40Bool_t AliAnalysisTaskRhoAverage::Run()
d41a0b1c 41{
a487deae 42 // Run the analysis.
d41a0b1c 43
73e2fd59 44 const Int_t NMAX = 9999;
45 static Double_t rhovec[NMAX];
a487deae 46 Int_t NpartAcc = 0;
d41a0b1c 47
a315c08c 48 Int_t maxPartIds[] = {0, 0};
49 Float_t maxPartPts[] = {0, 0};
a487deae 50
51 // push all jets within selected acceptance into stack
52
53 if (fNExclLeadPart > 0) {
54
55 if (fTracks && (fRhoType == 0 || fRhoType == 1)) {
d41a0b1c 56
a487deae 57 const Int_t Ntracks = fTracks->GetEntriesFast();
58
59 for (Int_t it = 0; it < Ntracks; ++it) {
60
61 AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(it));
62
63 if (!track) {
64 AliError(Form("%s: Could not receive track %d", GetName(), it));
65 continue;
66 }
67
68 if (!AcceptTrack(track))
69 continue;
70
71 if (track->Pt() > maxPartPts[0]) {
72 maxPartPts[1] = maxPartPts[0];
73 maxPartIds[1] = maxPartIds[0];
74 maxPartPts[0] = track->Pt();
75 maxPartIds[0] = it+1;
76 }
77 else if (track->Pt() > maxPartPts[1]) {
78 maxPartPts[1] = track->Pt();
79 maxPartIds[1] = it+1;
80 }
81 }
d41a0b1c 82 }
d41a0b1c 83
a487deae 84 if (fCaloClusters && (fRhoType == 0 || fRhoType == 2)) {
d41a0b1c 85
a487deae 86 const Int_t Nclusters = fCaloClusters->GetEntriesFast();
d41a0b1c 87
a487deae 88 for (Int_t ic = 0; ic < Nclusters; ++ic) {
89
90 AliVCluster *cluster = static_cast<AliVCluster*>(fCaloClusters->At(ic));
91
92 if (!cluster) {
93 AliError(Form("%s: Could not receive cluster %d", GetName(), ic));
94 continue;
95 }
96
97 if (!AcceptCluster(cluster))
98 continue;
99
100 TLorentzVector nPart;
101 cluster->GetMomentum(nPart, fVertex);
102
103 if (nPart.Pt() > maxPartPts[0]) {
104 maxPartPts[1] = maxPartPts[0];
105 maxPartIds[1] = maxPartIds[0];
106 maxPartPts[0] = nPart.Pt();
107 maxPartIds[0] = -ic-1;
108 }
109 else if (nPart.Pt() > maxPartPts[1]) {
110 maxPartPts[1] = nPart.Pt();
111 maxPartIds[1] = -ic-1;
112 }
113 }
114 }
115
116 if (fNExclLeadPart < 2) {
a315c08c 117 maxPartIds[1] = 0;
a487deae 118 maxPartPts[1] = 0;
119 }
120 }
d41a0b1c 121
a487deae 122 if (fTracks && (fRhoType == 0 || fRhoType == 1)) {
d41a0b1c 123
a487deae 124 const Int_t Ntracks = fTracks->GetEntriesFast();
d41a0b1c 125
73e2fd59 126 for (Int_t it = 0; it < Ntracks && NpartAcc < NMAX; ++it) {
d41a0b1c 127
a487deae 128 // exlcuding lead particles
129 if (it == maxPartIds[0]-1 || it == maxPartIds[1]-1)
130 continue;
d41a0b1c 131
a487deae 132 AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(it));
d41a0b1c 133
a487deae 134 if (!track) {
135 AliError(Form("%s: Could not receive track %d", GetName(), it));
136 continue;
137 }
d41a0b1c 138
a487deae 139 if (!AcceptTrack(track))
140 continue;
d41a0b1c 141
a487deae 142 rhovec[NpartAcc] = track->Pt();
143 ++NpartAcc;
144 }
d41a0b1c 145 }
d41a0b1c 146
a487deae 147 if (fCaloClusters && (fRhoType == 0 || fRhoType == 2)) {
d41a0b1c 148
a487deae 149 const Int_t Nclusters = fCaloClusters->GetEntriesFast();
d41a0b1c 150
73e2fd59 151 for (Int_t ic = 0; ic < Nclusters && NpartAcc < NMAX; ++ic) {
f09b22c5 152
a487deae 153 // exlcuding lead particles
154 if (ic == -maxPartIds[0]-1 || ic == -maxPartIds[1]-1)
155 continue;
156
157 AliVCluster *cluster = static_cast<AliVCluster*>(fCaloClusters->At(ic));
158
159 if (!cluster) {
160 AliError(Form("%s: Could not receive cluster %d", GetName(), ic));
161 continue;
162 }
163
164 if (!AcceptCluster(cluster))
165 continue;
166
167 TLorentzVector nPart;
168 cluster->GetMomentum(nPart, fVertex);
f09b22c5 169
a487deae 170 rhovec[NpartAcc] = nPart.Pt();
171 ++NpartAcc;
db91838f 172 }
f09b22c5 173 }
174
73e2fd59 175 if (NpartAcc == NMAX) {
176 AliError(Form("%s: NpartAcc >= %d", GetName(), NMAX));
177 }
a315c08c 178
73e2fd59 179 Double_t rho = 0;
180
181 if (NpartAcc > 0) {
182 if (fUseMedian)
183 rho = TMath::Median(NpartAcc, rhovec);
184 else
185 rho = TMath::Mean(NpartAcc, rhovec);
186
187 Float_t maxEta = fTrackMaxEta;
188 Float_t minEta = fTrackMinEta;
189 Float_t maxPhi = fTrackMaxPhi;
190 Float_t minPhi = fTrackMinPhi;
191
192 if (maxPhi > TMath::Pi() * 2) maxPhi = TMath::Pi() * 2;
193 if (minPhi < 0) minPhi = 0;
194
195 Double_t area = (maxEta - minEta) * (maxPhi - minPhi);
196
197 if (area > 0) {
198 rho *= NpartAcc / area;
199 }
200 else {
201 AliError(Form("%s: Area <= 0 %f", GetName(), area));
202 return kFALSE;
203 }
f09b22c5 204 }
603ca74b 205
73e2fd59 206 fRho->SetVal(rho);
207
a487deae 208 if (fScaleFunction) {
209 Double_t rhoScaled = rho * GetScaleFactor(fCent);
210 fRhoScaled->SetVal(rhoScaled);
d41a0b1c 211 }
d41a0b1c 212
a487deae 213 return kTRUE;
d41a0b1c 214}