3 // Jet sample analysis task.
7 #include <TClonesArray.h>
12 #include <TLorentzVector.h>
14 #include "AliVCluster.h"
15 #include "AliAODCaloCluster.h"
16 #include "AliESDCaloCluster.h"
17 #include "AliVTrack.h"
18 #include "AliEmcalJet.h"
19 #include "AliRhoParameter.h"
21 #include "AliJetContainer.h"
22 #include "AliParticleContainer.h"
23 #include "AliClusterContainer.h"
24 #include "AliPicoTrack.h"
26 #include "AliAnalysisTaskEmcalJetSample.h"
28 ClassImp(AliAnalysisTaskEmcalJetSample)
30 //________________________________________________________________________
31 AliAnalysisTaskEmcalJetSample::AliAnalysisTaskEmcalJetSample() :
32 AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalJetSample", kTRUE),
38 fHistJetsPtLeadHad(0),
39 fHistJetsCorrPtArea(0),
40 fHistPtDEtaDPhiTrackClus(0),
41 fHistPtDEtaDPhiClusTrack(0),
49 // Default constructor.
51 fHistTracksPt = new TH1*[fNcentBins];
52 fHistClustersPt = new TH1*[fNcentBins];
53 fHistLeadingJetPt = new TH1*[fNcentBins];
54 fHistJetsPhiEta = new TH2*[fNcentBins];
55 fHistJetsPtArea = new TH2*[fNcentBins];
56 fHistJetsPtLeadHad = new TH2*[fNcentBins];
57 fHistJetsCorrPtArea = new TH2*[fNcentBins];
59 for (Int_t i = 0; i < fNcentBins; i++) {
61 fHistClustersPt[i] = 0;
62 fHistLeadingJetPt[i] = 0;
63 fHistJetsPhiEta[i] = 0;
64 fHistJetsPtArea[i] = 0;
65 fHistJetsPtLeadHad[i] = 0;
66 fHistJetsCorrPtArea[i] = 0;
69 SetMakeGeneralHistograms(kTRUE);
72 //________________________________________________________________________
73 AliAnalysisTaskEmcalJetSample::AliAnalysisTaskEmcalJetSample(const char *name) :
74 AliAnalysisTaskEmcalJet(name, kTRUE),
80 fHistJetsPtLeadHad(0),
81 fHistJetsCorrPtArea(0),
82 fHistPtDEtaDPhiTrackClus(0),
83 fHistPtDEtaDPhiClusTrack(0),
90 // Standard constructor.
92 fHistTracksPt = new TH1*[fNcentBins];
93 fHistClustersPt = new TH1*[fNcentBins];
94 fHistLeadingJetPt = new TH1*[fNcentBins];
95 fHistJetsPhiEta = new TH2*[fNcentBins];
96 fHistJetsPtArea = new TH2*[fNcentBins];
97 fHistJetsPtLeadHad = new TH2*[fNcentBins];
98 fHistJetsCorrPtArea = new TH2*[fNcentBins];
100 for (Int_t i = 0; i < fNcentBins; i++) {
101 fHistTracksPt[i] = 0;
102 fHistClustersPt[i] = 0;
103 fHistLeadingJetPt[i] = 0;
104 fHistJetsPhiEta[i] = 0;
105 fHistJetsPtArea[i] = 0;
106 fHistJetsPtLeadHad[i] = 0;
107 fHistJetsCorrPtArea[i] = 0;
110 SetMakeGeneralHistograms(kTRUE);
113 //________________________________________________________________________
114 AliAnalysisTaskEmcalJetSample::~AliAnalysisTaskEmcalJetSample()
119 //________________________________________________________________________
120 void AliAnalysisTaskEmcalJetSample::UserCreateOutputObjects()
122 // Create user output.
124 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
126 fJetsCont = GetJetContainer(0);
127 if(fJetsCont) { //get particles and clusters connected to jets
128 fTracksCont = fJetsCont->GetParticleContainer();
129 fCaloClustersCont = fJetsCont->GetClusterContainer();
130 } else { //no jets, just analysis tracks and clusters
131 fTracksCont = GetParticleContainer(0);
132 fCaloClustersCont = GetClusterContainer(0);
134 if(fTracksCont) fTracksCont->SetClassName("AliVTrack");
135 if(fCaloClustersCont) fCaloClustersCont->SetClassName("AliVCluster");
139 for (Int_t i = 0; i < fNcentBins; i++) {
140 if (fParticleCollArray.GetEntriesFast()>0) {
141 histname = "fHistTracksPt_";
143 fHistTracksPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
144 fHistTracksPt[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
145 fHistTracksPt[i]->GetYaxis()->SetTitle("counts");
146 fOutput->Add(fHistTracksPt[i]);
149 if (fClusterCollArray.GetEntriesFast()>0) {
150 histname = "fHistClustersPt_";
152 fHistClustersPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
153 fHistClustersPt[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
154 fHistClustersPt[i]->GetYaxis()->SetTitle("counts");
155 fOutput->Add(fHistClustersPt[i]);
158 if (fJetCollArray.GetEntriesFast()>0) {
159 histname = "fHistLeadingJetPt_";
161 fHistLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
162 fHistLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
163 fHistLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
164 fOutput->Add(fHistLeadingJetPt[i]);
166 histname = "fHistJetsPhiEta_";
168 fHistJetsPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 50, -1, 1, 101, 0, TMath::Pi()*2 + TMath::Pi()/200);
169 fHistJetsPhiEta[i]->GetXaxis()->SetTitle("#eta");
170 fHistJetsPhiEta[i]->GetYaxis()->SetTitle("#phi");
171 fOutput->Add(fHistJetsPhiEta[i]);
173 histname = "fHistJetsPtArea_";
175 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 30, 0, 3);
176 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
177 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
178 fOutput->Add(fHistJetsPtArea[i]);
180 histname = "fHistJetsPtLeadHad_";
182 fHistJetsPtLeadHad[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins / 2, fMinBinPt, fMaxBinPt / 2);
183 fHistJetsPtLeadHad[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
184 fHistJetsPtLeadHad[i]->GetYaxis()->SetTitle("p_{T,lead} (GeV/c)");
185 fHistJetsPtLeadHad[i]->GetZaxis()->SetTitle("counts");
186 fOutput->Add(fHistJetsPtLeadHad[i]);
188 if (!(GetJetContainer()->GetRhoName().IsNull())) {
189 histname = "fHistJetsCorrPtArea_";
191 fHistJetsCorrPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 30, 0, 3);
192 fHistJetsCorrPtArea[i]->GetXaxis()->SetTitle("p_{T}^{corr} [GeV/c]");
193 fHistJetsCorrPtArea[i]->GetYaxis()->SetTitle("area");
194 fOutput->Add(fHistJetsCorrPtArea[i]);
199 histname = "fHistPtDEtaDPhiTrackClus";
200 fHistPtDEtaDPhiTrackClus = new TH3F(histname.Data(),Form("%s;#it{p}_{T}^{track};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
201 fOutput->Add(fHistPtDEtaDPhiTrackClus);
203 histname = "fHistPtDEtaDPhiClusTrack";
204 fHistPtDEtaDPhiClusTrack = new TH3F(histname.Data(),Form("%s;#it{p}_{T}^{clus};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
205 fOutput->Add(fHistPtDEtaDPhiClusTrack);
207 fHistClustDx = new TH1F("fHistClustDx","fHistClustDx;Dx",1000,0.,1.);
208 fOutput->Add(fHistClustDx);
210 fHistClustDz = new TH1F("fHistClustDz","fHistClustDz;Dz",1000,0.,1.);
211 fOutput->Add(fHistClustDz);
213 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
216 //________________________________________________________________________
217 Bool_t AliAnalysisTaskEmcalJetSample::FillHistograms()
222 AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0));
224 fHistTracksPt[fCentBin]->Fill(track->Pt());
225 track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
229 if (fCaloClustersCont) {
230 AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
232 TLorentzVector nPart;
233 cluster->GetMomentum(nPart, fVertex);
234 fHistClustersPt[fCentBin]->Fill(nPart.Pt());
235 Double_t dx = cluster->GetTrackDx();
236 Double_t dz = cluster->GetTrackDz();
237 fHistClustDx->Fill(dx);
238 fHistClustDz->Fill(dz);
239 cluster = fCaloClustersCont->GetNextAcceptCluster();
244 AliEmcalJet *jet = fJetsCont->GetNextAcceptJet(0);
247 fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());
248 fHistJetsPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
250 Float_t ptLeading = fJetsCont->GetLeadingHadronPt(jet);
251 fHistJetsPtLeadHad[fCentBin]->Fill(jet->Pt(), ptLeading);
253 if (fHistJetsCorrPtArea[fCentBin]) {
254 Float_t corrPt = jet->Pt() - fJetsCont->GetRhoVal() * jet->Area();
255 fHistJetsCorrPtArea[fCentBin]->Fill(corrPt, jet->Area());
257 jet = fJetsCont->GetNextAcceptJet();
260 jet = fJetsCont->GetLeadingJet();
261 if(jet) fHistLeadingJetPt[fCentBin]->Fill(jet->Pt());
264 CheckClusTrackMatching();
269 //________________________________________________________________________
270 void AliAnalysisTaskEmcalJetSample::CheckClusTrackMatching()
273 if(!fTracksCont || !fCaloClustersCont)
279 //Get closest cluster to track
280 AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0));
282 //Get matched cluster
283 Int_t emc1 = track->GetEMCALcluster();
284 if(fCaloClustersCont && emc1>=0) {
285 AliVCluster *clusMatch = fCaloClustersCont->GetCluster(emc1);
287 AliPicoTrack::GetEtaPhiDiff(track, clusMatch, dphi, deta);
288 fHistPtDEtaDPhiTrackClus->Fill(track->Pt(),deta,dphi);
291 track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
294 //Get closest track to cluster
295 AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
297 TLorentzVector nPart;
298 cluster->GetMomentum(nPart, fVertex);
299 fHistClustersPt[fCentBin]->Fill(nPart.Pt());
302 AliVTrack *mt = NULL;
303 AliAODCaloCluster *acl = dynamic_cast<AliAODCaloCluster*>(cluster);
305 if(acl->GetNTracksMatched()>1)
306 mt = static_cast<AliVTrack*>(acl->GetTrackMatched(0));
309 AliESDCaloCluster *ecl = dynamic_cast<AliESDCaloCluster*>(cluster);
310 Int_t im = ecl->GetTrackMatchedIndex();
311 if(fTracksCont && im>=0) {
312 mt = static_cast<AliVTrack*>(fTracksCont->GetParticle(im));
316 AliPicoTrack::GetEtaPhiDiff(mt, cluster, dphi, deta);
317 fHistPtDEtaDPhiClusTrack->Fill(nPart.Pt(),deta,dphi);
321 Int_t emc1 = mt->GetEMCALcluster();
322 Printf("current id: %d emc1: %d",fCaloClustersCont->GetCurrentID(),emc1);
323 AliVCluster *clm = fCaloClustersCont->GetCluster(emc1);
324 AliPicoTrack::GetEtaPhiDiff(mt, clm, dphi, deta);
325 Printf("deta: %f dphi: %f",deta,dphi);
329 cluster = fCaloClustersCont->GetNextAcceptCluster();
333 //________________________________________________________________________
334 void AliAnalysisTaskEmcalJetSample::ExecOnce() {
336 AliAnalysisTaskEmcalJet::ExecOnce();
338 if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;
339 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
340 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
344 //________________________________________________________________________
345 Bool_t AliAnalysisTaskEmcalJetSample::Run()
347 // Run analysis code here, if needed. It will be executed before FillHistograms().
349 return kTRUE; // If return kFALSE FillHistogram() will NOT be executed.
352 //________________________________________________________________________
353 void AliAnalysisTaskEmcalJetSample::Terminate(Option_t *)
355 // Called once at the end of the analysis.