5 // Authors: R.Reed, S.Aiola
10 #include <TClonesArray.h>
15 #include "AliAnalysisManager.h"
16 #include "AliVEventHandler.h"
17 #include "AliCentrality.h"
18 #include "AliEmcalJet.h"
19 #include "AliVCluster.h"
21 #include "AliAnalysisTaskRho.h"
23 ClassImp(AliAnalysisTaskRho)
25 //________________________________________________________________________
26 AliAnalysisTaskRho::AliAnalysisTaskRho() :
27 AliAnalysisTaskRhoBase(),
28 fTracksName("tracks"),
30 fClustersName("caloClusters"),
45 fHistDeltaRhovsCent(0),
46 fHistDeltaRhoScalevsCent(0),
48 fHistJetAreavsCent(0),
51 fHistDeltaRhovsNtrack(0),
52 fHistDeltaRhoScalevsNtrack(0),
53 fHistJetPtvsNtrack(0),
54 fHistJetAreavsNtrack(0),
60 //________________________________________________________________________
61 AliAnalysisTaskRho::AliAnalysisTaskRho(const char *name) :
62 AliAnalysisTaskRhoBase(name),
63 fTracksName("tracks"),
65 fClustersName("caloClusters"),
80 fHistDeltaRhovsCent(0),
81 fHistDeltaRhoScalevsCent(0),
83 fHistJetAreavsCent(0),
86 fHistDeltaRhovsNtrack(0),
87 fHistDeltaRhoScalevsNtrack(0),
88 fHistJetPtvsNtrack(0),
89 fHistJetAreavsNtrack(0),
95 DefineOutput(1, TList::Class());
98 //________________________________________________________________________
99 void AliAnalysisTaskRho::UserCreateOutputObjects()
101 AliAnalysisTaskRhoBase::UserCreateOutputObjects();
103 fRhoScaledName = fRhoName;
104 fRhoScaledName += "_Scaled";
105 fRhoScaled = new TParameter<Double_t>(fRhoScaledName, 0);
108 fOutputList = new TList();
109 fOutputList->SetOwner();
112 PostData(1, fOutputList);
116 fHistCentrality = new TH1F("Centrality", "Centrality", 101, -1, 100);
117 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 101, -1, 100, 500, 0, 500);
118 fHistDeltaRhovsCent = new TH2F("DeltaRhovsCent", "DetlaRhovsCent", 101, -1, 100, 500, -250, 250);
119 fHistDeltaRhoScalevsCent = new TH2F("DeltaRhoScalevsCent", "DeltaRhoScalevsCent", 101, -1, 100, 500, -250, 250);
120 fHistJetPtvsCent = new TH2F("JetPtvsCent", "JetPtvsCent", 101, -1, 100, 200, 0, 500);
121 fHistJetAreavsCent = new TH2F("JetAreavsCent", "JetAreavsCent", 101, -1, 100, 100, 0, 1.0);
122 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 101, -1, 100, 100, 0, 100);
124 fHistRhovsNtrack = new TH2F("RhovsNtrack", "RhovsNtrack", 500, 0, 2500, 500, 0, 500);
125 fHistDeltaRhovsNtrack = new TH2F("DeltaRhovsNtrack", "DeltaRhovsNtrack", 500, 0, 2500, 500, -250, 250);
126 fHistDeltaRhoScalevsNtrack = new TH2F("DeltaRhoScalevsNtrack", "DeltaRhoScalevsNtrack", 500, 0, 2500, 500, -250, 250);
127 fHistJetPtvsNtrack = new TH2F("JetPtvsNtrack", "JetPtvsNtrack", 500, 0, 2500, 200, 0, 500);
128 fHistJetAreavsNtrack = new TH2F("JetAreavsNtrack", "JetAreavsNtrack", 500, 0, 2500, 100, 0, 1.0);
129 fHistNjetvsNtrack = new TH2F("NjetvsNtrack", "rNjetvsNtrack", 500, 0, 2500, 100, 0, 100);
131 fHistJetPt = new TH1F("JetPt", "Jet Pt", 100, 0, 250);
132 fHistJetArea = new TH1F("JetArea", "Jet Area", 100, 0.0, 1.0);
134 fOutputList->Add(fHistCentrality);
135 fOutputList->Add(fHistRhovsCent);
136 fOutputList->Add(fHistJetPt);
137 fOutputList->Add(fHistJetArea);
138 fOutputList->Add(fHistDeltaRhovsCent);
139 fOutputList->Add(fHistDeltaRhoScalevsCent);
140 fOutputList->Add(fHistJetPtvsCent);
141 fOutputList->Add(fHistJetAreavsCent);
142 fOutputList->Add(fHistNjetvsCent);
144 fOutputList->Add(fHistRhovsNtrack);
145 fOutputList->Add(fHistDeltaRhovsNtrack);
146 fOutputList->Add(fHistDeltaRhoScalevsNtrack);
147 fOutputList->Add(fHistJetPtvsNtrack);
148 fOutputList->Add(fHistJetAreavsNtrack);
149 fOutputList->Add(fHistNjetvsNtrack);
151 PostData(1, fOutputList);
155 //________________________________________________________________________
156 Double_t AliAnalysisTaskRho::GetScaleFactor(Double_t cent)
160 scale = fScaleFunction->Eval(cent);
165 //________________________________________________________________________
166 void AliAnalysisTaskRho::UserExec(Option_t *)
168 // Main loop, called for each event.
170 AliAnalysisTaskRhoBase::UserExec("");
174 // add rho to event if not yet there
175 if (!(InputEvent()->FindListObject(fRhoScaledName))) {
176 new(fRhoScaled) TParameter<Double_t>(fRhoScaledName, -1);
177 InputEvent()->AddObject(fRhoScaled);
180 fRhoScaled->SetVal(-1);
183 // optimization in case autobranch loading is off
184 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
185 if (fTracksName == "Tracks")
186 am->LoadBranch("Tracks");
188 TClonesArray *jets = 0;
189 TClonesArray *tracks = 0;
191 tracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
193 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
197 jets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
199 AliError(Form("Pointer to jets %s == 0", fJetsName.Data() ));
204 fHistCentrality->Fill(fCent);
206 const Int_t Ntracks = tracks->GetEntries();
207 const Int_t Njets = jets->GetEntries();
209 Int_t maxJetIds[] = {-1, -1};
210 Int_t maxJetPts[] = {0, 0};
211 if (fNExclLeadJets > 0) {
212 for (Int_t ij = 0; ij < Njets; ij++) {
214 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ij));
217 AliError(Form("Could not receive jet %d", ij));
221 if (jet->Pt() > maxJetPts[0]) {
222 maxJetPts[1] = maxJetPts[0];
223 maxJetIds[1] = maxJetPts[0];
224 maxJetPts[0] = jet->Pt();
228 if (jet->Pt() > maxJetPts[1]) {
229 maxJetPts[1] = jet->Pt();
233 if (fNExclLeadJets < 2) {
239 static Double_t rhovec[999];
242 // push all jets within selected acceptance into stack
243 for (Int_t iJets = 0; iJets < Njets; ++iJets) {
245 // exlcuding lead jets
246 if (iJets == maxJetIds[0] || iJets == maxJetIds[1])
249 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(iJets));
254 // applying some other cuts
255 if (jet->Area() < fAreaCut)
257 if ((jet->Phi() < fPhiMin) || (jet->Phi() > fPhiMax))
259 if ((jet->Eta() < fEtaMin) || (jet->Eta() > fEtaMax))
261 if (jet->Area() == 0)
264 rhovec[NjetAcc] = jet->Pt() / jet->Area();
269 // filling histograms
270 fHistJetPt->Fill(jet->Pt());
271 fHistJetArea->Fill(jet->Area());
272 fHistJetPtvsCent->Fill(fCent, jet->Pt());
273 fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
274 fHistJetAreavsCent->Fill(fCent, jet->Area());
275 fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
280 fHistNjetvsCent->Fill(fCent, NjetAcc);
281 fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
284 Double_t scale = GetScaleFactor(fCent);
285 Double_t rhochem = GetRhoFactor(fCent);
291 rho0 = TMath::Median(NjetAcc, rhovec);
293 Double_t rhoScaled = rho0 * scale;
296 fRhoScaled->SetVal(rhoScaled);
299 // filling other histograms
300 fHistRhovsCent->Fill(fCent, rho0);
301 fHistDeltaRhovsCent->Fill(fCent, rho0 - rhochem);
302 fHistDeltaRhoScalevsCent->Fill(fCent, rhoScaled - rhochem);
303 fHistRhovsNtrack->Fill(Ntracks, rho0);
304 fHistDeltaRhovsNtrack->Fill(Ntracks, rho0 - rhochem);
305 fHistDeltaRhoScalevsNtrack->Fill(Ntracks, rhoScaled - rhochem);
310 PostData(1, fOutputList);
314 //________________________________________________________________________
315 void AliAnalysisTaskRho::Terminate(Option_t *)