7 #include <TClonesArray.h>
11 #include <TLorentzVector.h>
13 #include "AliVCluster.h"
14 #include "AliVParticle.h"
15 #include "AliEmcalJet.h"
16 #include "AliRhoParameter.h"
19 #include "AliAnalysisTaskSAJF.h"
21 ClassImp(AliAnalysisTaskSAJF)
23 //________________________________________________________________________
24 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF() :
25 AliAnalysisTaskEmcalJet("AliAnalysisTaskSAJF", kTRUE),
26 fHistEventObservables(0),
27 fHistJetObservables(0)
30 // Default constructor.
32 for (Int_t i = 0; i < 4; i++) {
33 fHistTracksJetPt[i] = 0;
34 fHistClustersJetPt[i] = 0;
35 fHistTracksPtDist[i] = 0;
36 fHistClustersPtDist[i] = 0;
39 SetMakeGeneralHistograms(kTRUE);
42 //________________________________________________________________________
43 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF(const char *name) :
44 AliAnalysisTaskEmcalJet(name, kTRUE),
45 fHistEventObservables(0),
46 fHistJetObservables(0)
48 // Standard constructor.
50 for (Int_t i = 0; i < 4; i++) {
51 fHistTracksJetPt[i] = 0;
52 fHistClustersJetPt[i] = 0;
53 fHistTracksPtDist[i] = 0;
54 fHistClustersPtDist[i] = 0;
57 SetMakeGeneralHistograms(kTRUE);
60 //________________________________________________________________________
61 void AliAnalysisTaskSAJF::UserCreateOutputObjects()
63 // Create user output.
65 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
67 TString title[20]= {""};
68 Int_t nbins[20] = {0};
69 Double_t min[20] = {0.};
70 Double_t max[20] = {0.};
73 if (fForceBeamType != kpp) {
74 title[dim] = "Centrality (%)";
80 title[dim] = "#psi_{RP} (rad)";
82 min[dim] = -TMath::Pi();
83 max[dim] = TMath::Pi();
87 title[dim] = "No. of jets";
93 title[dim] = "p_{T,lead jet} (GeV/c)";
99 title[dim] = "A_{lead jet}";
105 if (!fRhoName.IsNull()) {
106 title[dim] = "#rho (GeV/c)";
112 title[dim] = "p_{T,lead jet}^{corr} (GeV/c)";
113 nbins[dim] = fNbins*2;
119 fHistEventObservables = new THnSparseD("fHistEventObservables","fHistEventObservables",dim,nbins,min,max);
120 for (Int_t i = 0; i < dim; i++)
121 fHistEventObservables->GetAxis(i)->SetTitle(title[i]);
125 if (fForceBeamType != kpp) {
126 title[dim] = "Centrality (%)";
132 title[dim] = "#psi_{RP} (rad)";
134 min[dim] = -TMath::Pi();
135 max[dim] = TMath::Pi();
139 title[dim] = "#phi_{jet} (rad)";
142 max[dim] = TMath::Pi()*201/100;
151 title[dim] = "p_{T} (GeV/c)";
157 title[dim] = "A_{jet}";
164 title[dim] = "p_{T}^{MC} (GeV/c)";
171 if (!fRhoName.IsNull()) {
172 title[dim] = "p_{T}^{corr} (GeV/c)";
173 nbins[dim] = fNbins*2;
179 title[dim] = "No. of constituents";
197 title[dim] = "p_{T,particle}^{leading} (GeV/c)";
203 fHistJetObservables = new THnSparseD("fHistJetObservables","fHistJetObservables",dim,nbins,min,max);
204 for (Int_t i = 0; i < dim; i++)
205 fHistJetObservables->GetAxis(i)->SetTitle(title[i]);
207 for (Int_t i = 0; i < 4; i++) {
210 if (!fTracksName.IsNull()) {
211 histname = "fHistTracksJetPt_";
213 fHistTracksJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, fNbins, fMinBinPt, fMaxBinPt);
214 fHistTracksJetPt[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
215 fHistTracksJetPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)");
216 fHistTracksJetPt[i]->GetZaxis()->SetTitle("counts");
217 fOutput->Add(fHistTracksJetPt[i]);
219 histname = "fHistTracksPtDist_";
221 fHistTracksPtDist[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, 100, 0, 5);
222 fHistTracksPtDist[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
223 fHistTracksPtDist[i]->GetYaxis()->SetTitle("d");
224 fHistTracksPtDist[i]->GetZaxis()->SetTitle("counts");
225 fOutput->Add(fHistTracksPtDist[i]);
228 if (!fCaloName.IsNull()) {
229 histname = "fHistClustersJetPt_";
231 fHistClustersJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, fNbins, fMinBinPt, fMaxBinPt);
232 fHistClustersJetPt[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
233 fHistClustersJetPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)");
234 fHistClustersJetPt[i]->GetZaxis()->SetTitle("counts");
235 fOutput->Add(fHistClustersJetPt[i]);
237 histname = "fHistClustersPtDist_";
239 fHistClustersPtDist[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, 100, 0, 5);
240 fHistClustersPtDist[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
241 fHistClustersPtDist[i]->GetYaxis()->SetTitle("d");
242 fHistClustersPtDist[i]->GetZaxis()->SetTitle("counts");
243 fOutput->Add(fHistClustersPtDist[i]);
247 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
251 //________________________________________________________________________
252 Bool_t AliAnalysisTaskSAJF::FillHistograms()
257 AliError(Form("%s - Jet array not provided, returning...", GetName()));
261 static Int_t sortedJets[9999] = {-1};
262 Int_t nacc = GetSortedArray(sortedJets, fJets, fRhoVal);
267 AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(sortedJets[0]));
270 // Don't need to do AcceptJet since it was done already in GetSortedArray
271 corrPt = jet->Pt() - fRhoVal * jet->Area();
273 DoJetLoop(nacc, sortedJets);
276 AliError(Form("Could not receive jet %d", sortedJets[0]));
285 //________________________________________________________________________
286 void AliAnalysisTaskSAJF::DoJetLoop(const Int_t nacc, const Int_t* sortedJets)
290 for (Int_t ij = 0; ij < nacc; ij++) {
292 AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(sortedJets[ij]));
295 AliError(Form("Could not receive jet %d", ij));
299 // Don't need to do AcceptJet since it was done already in GetSortedArray
301 Float_t ptLeading = GetLeadingHadronPt(jet);
302 Float_t corrPt = jet->Pt() - fRhoVal * jet->Area();
307 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
308 AliVParticle *track = jet->TrackAt(it, fTracks);
310 fHistTracksJetPt[fCentBin]->Fill(track->Pt(), jet->Pt());
311 Double_t dist = TMath::Sqrt((track->Eta() - jet->Eta()) * (track->Eta() - jet->Eta()) + (track->Phi() - jet->Phi()) * (track->Phi() - jet->Phi()));
312 fHistTracksPtDist[fCentBin]->Fill(track->Pt(), dist);
318 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
319 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
322 TLorentzVector nPart;
323 cluster->GetMomentum(nPart, fVertex);
325 fHistClustersJetPt[fCentBin]->Fill(nPart.Pt(), jet->Pt());
326 Double_t dist = TMath::Sqrt((nPart.Eta() - jet->Eta()) * (nPart.Eta() - jet->Eta()) + (nPart.Phi() - jet->Phi()) * (nPart.Phi() - jet->Phi()));
327 fHistClustersPtDist[fCentBin]->Fill(nPart.Pt(), dist);