3 // Jet sample analysis task.
7 #include <TClonesArray.h>
11 #include <TLorentzVector.h>
13 #include "AliVCluster.h"
14 #include "AliAODCaloCluster.h"
15 #include "AliVTrack.h"
16 #include "AliEmcalJet.h"
17 #include "AliRhoParameter.h"
19 #include "AliJetContainer.h"
20 #include "AliParticleContainer.h"
21 #include "AliClusterContainer.h"
23 #include "AliAnalysisTaskEmcalJetSample.h"
25 ClassImp(AliAnalysisTaskEmcalJetSample)
27 //________________________________________________________________________
28 AliAnalysisTaskEmcalJetSample::AliAnalysisTaskEmcalJetSample() :
29 AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalJetSample", kTRUE),
35 fHistJetsPtLeadHad(0),
36 fHistJetsCorrPtArea(0),
42 // Default constructor.
44 fHistTracksPt = new TH1*[fNcentBins];
45 fHistClustersPt = new TH1*[fNcentBins];
46 fHistLeadingJetPt = new TH1*[fNcentBins];
47 fHistJetsPhiEta = new TH2*[fNcentBins];
48 fHistJetsPtArea = new TH2*[fNcentBins];
49 fHistJetsPtLeadHad = new TH2*[fNcentBins];
50 fHistJetsCorrPtArea = new TH2*[fNcentBins];
52 for (Int_t i = 0; i < fNcentBins; i++) {
54 fHistClustersPt[i] = 0;
55 fHistLeadingJetPt[i] = 0;
56 fHistJetsPhiEta[i] = 0;
57 fHistJetsPtArea[i] = 0;
58 fHistJetsPtLeadHad[i] = 0;
59 fHistJetsCorrPtArea[i] = 0;
62 SetMakeGeneralHistograms(kTRUE);
65 //________________________________________________________________________
66 AliAnalysisTaskEmcalJetSample::AliAnalysisTaskEmcalJetSample(const char *name) :
67 AliAnalysisTaskEmcalJet(name, kTRUE),
73 fHistJetsPtLeadHad(0),
74 fHistJetsCorrPtArea(0),
79 // Standard constructor.
81 fHistTracksPt = new TH1*[fNcentBins];
82 fHistClustersPt = new TH1*[fNcentBins];
83 fHistLeadingJetPt = new TH1*[fNcentBins];
84 fHistJetsPhiEta = new TH2*[fNcentBins];
85 fHistJetsPtArea = new TH2*[fNcentBins];
86 fHistJetsPtLeadHad = new TH2*[fNcentBins];
87 fHistJetsCorrPtArea = new TH2*[fNcentBins];
89 for (Int_t i = 0; i < fNcentBins; i++) {
91 fHistClustersPt[i] = 0;
92 fHistLeadingJetPt[i] = 0;
93 fHistJetsPhiEta[i] = 0;
94 fHistJetsPtArea[i] = 0;
95 fHistJetsPtLeadHad[i] = 0;
96 fHistJetsCorrPtArea[i] = 0;
99 SetMakeGeneralHistograms(kTRUE);
102 //________________________________________________________________________
103 AliAnalysisTaskEmcalJetSample::~AliAnalysisTaskEmcalJetSample()
108 //________________________________________________________________________
109 void AliAnalysisTaskEmcalJetSample::UserCreateOutputObjects()
111 // Create user output.
113 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
115 fJetsCont = GetJetContainer(0);
116 if(fJetsCont) { //get particles and clusters connected to jets
117 fTracksCont = fJetsCont->GetParticleContainer();
118 fCaloClustersCont = fJetsCont->GetClusterContainer();
119 } else { //no jets, just analysis tracks and clusters
120 fTracksCont = GetParticleContainer(0);
121 fCaloClustersCont = GetClusterContainer(0);
123 fTracksCont->SetClassName("AliVTrack");
124 fCaloClustersCont->SetClassName("AliAODCaloCluster");
128 for (Int_t i = 0; i < fNcentBins; i++) {
129 if (fParticleCollArray.GetEntriesFast()>0) {
130 histname = "fHistTracksPt_";
132 fHistTracksPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
133 fHistTracksPt[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
134 fHistTracksPt[i]->GetYaxis()->SetTitle("counts");
135 fOutput->Add(fHistTracksPt[i]);
138 if (fClusterCollArray.GetEntriesFast()>0) {
139 histname = "fHistClustersPt_";
141 fHistClustersPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
142 fHistClustersPt[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
143 fHistClustersPt[i]->GetYaxis()->SetTitle("counts");
144 fOutput->Add(fHistClustersPt[i]);
147 if (fJetCollArray.GetEntriesFast()>0) {
148 histname = "fHistLeadingJetPt_";
150 fHistLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
151 fHistLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
152 fHistLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
153 fOutput->Add(fHistLeadingJetPt[i]);
155 histname = "fHistJetsPhiEta_";
157 fHistJetsPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 50, -1, 1, 101, 0, TMath::Pi()*2 + TMath::Pi()/200);
158 fHistJetsPhiEta[i]->GetXaxis()->SetTitle("#eta");
159 fHistJetsPhiEta[i]->GetYaxis()->SetTitle("#phi");
160 fOutput->Add(fHistJetsPhiEta[i]);
162 histname = "fHistJetsPtArea_";
164 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 30, 0, 3);
165 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
166 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
167 fOutput->Add(fHistJetsPtArea[i]);
169 histname = "fHistJetsPtLeadHad_";
171 fHistJetsPtLeadHad[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins / 2, fMinBinPt, fMaxBinPt / 2);
172 fHistJetsPtLeadHad[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
173 fHistJetsPtLeadHad[i]->GetYaxis()->SetTitle("p_{T,lead} (GeV/c)");
174 fHistJetsPtLeadHad[i]->GetZaxis()->SetTitle("counts");
175 fOutput->Add(fHistJetsPtLeadHad[i]);
177 if (!(GetJetContainer()->GetRhoName().IsNull())) {
178 histname = "fHistJetsCorrPtArea_";
180 fHistJetsCorrPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 30, 0, 3);
181 fHistJetsCorrPtArea[i]->GetXaxis()->SetTitle("p_{T}^{corr} [GeV/c]");
182 fHistJetsCorrPtArea[i]->GetYaxis()->SetTitle("area");
183 fOutput->Add(fHistJetsCorrPtArea[i]);
187 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
190 //________________________________________________________________________
191 Bool_t AliAnalysisTaskEmcalJetSample::FillHistograms()
196 AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0));
198 fHistTracksPt[fCentBin]->Fill(track->Pt());
199 Int_t emc1 = track->GetEMCALcluster();
200 Printf("EMCAL cluster %d",emc1);
201 track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
205 if (fCaloClustersCont) {
206 // AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
207 AliAODCaloCluster *cluster = static_cast<AliAODCaloCluster*>(fCaloClustersCont->GetNextAcceptCluster(0));
210 TLorentzVector nPart;
211 cluster->GetMomentum(nPart, fVertex);
212 fHistClustersPt[fCentBin]->Fill(nPart.Pt());
214 AliVTrack *mt = NULL;
215 Printf("N matched tracks: %d",cluster->GetNTracksMatched());
216 if(cluster->GetNTracksMatched()>1)
217 mt = static_cast<AliVTrack*>(cluster->GetTrackMatched(0));
218 if(mt) Printf("matched track pt: %f eta: %f phi: %f",mt->Pt(),mt->Eta(),mt->Phi());
219 cluster = static_cast<AliAODCaloCluster*>(fCaloClustersCont->GetNextAcceptCluster());
224 AliEmcalJet *jet = fJetsCont->GetNextAcceptJet(0);
227 fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());
228 fHistJetsPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
230 Float_t ptLeading = fJetsCont->GetLeadingHadronPt(jet);
231 fHistJetsPtLeadHad[fCentBin]->Fill(jet->Pt(), ptLeading);
233 Float_t corrPt = jet->Pt() - fJetsCont->GetRhoVal() * jet->Area();
234 fHistJetsCorrPtArea[fCentBin]->Fill(corrPt, jet->Area());
236 jet = fJetsCont->GetNextAcceptJet();
239 jet = fJetsCont->GetLeadingJet();
240 if(jet) fHistLeadingJetPt[fCentBin]->Fill(jet->Pt());
246 //________________________________________________________________________
247 void AliAnalysisTaskEmcalJetSample::ExecOnce() {
249 AliAnalysisTaskEmcalJet::ExecOnce();
251 if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;
252 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
253 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
257 //________________________________________________________________________
258 Bool_t AliAnalysisTaskEmcalJetSample::Run()
260 // Run analysis code here, if needed. It will be executed before FillHistograms().
262 return kTRUE; // If return kFALSE FillHistogram() will NOT be executed.
265 //________________________________________________________________________
266 void AliAnalysisTaskEmcalJetSample::Terminate(Option_t *)
268 // Called once at the end of the analysis.