3 // Jet embedding deltaPt task.
7 #include <TClonesArray.h>
12 #include <TLorentzVector.h>
15 #include "AliVCluster.h"
16 #include "AliVParticle.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"
25 #include "AliAnalysisTaskDeltaPtJEmb.h"
27 ClassImp(AliAnalysisTaskDeltaPtJEmb)
29 //________________________________________________________________________
30 AliAnalysisTaskDeltaPtJEmb::AliAnalysisTaskDeltaPtJEmb() :
31 AliAnalysisTaskEmcalJet("AliAnalysisTaskDeltaPtJEmb", kTRUE),
35 fMinFractionShared(0.5),
36 fHistEmbJetsPtArea(0),
37 fHistEmbJetsCorrPtArea(0),
38 fHistEmbPartPtvsJetPt(0),
39 fHistEmbPartPtvsJetCorrPt(0),
40 fHistJetPtvsJetCorrPt(0),
41 fHistDistLeadPart2JetAxis(0),
44 fHistDeltaPtEmbArea(0),
45 fHistDeltaPtEmbvsEP(0),
46 fHistDeltaPtEmbPtProbe(0),
47 fHistEmbJetsPhiEta(0),
48 fHistLeadPartPhiEta(0)
50 // Default constructor.
52 fHistEmbJetsPtArea = new TH3*[fNcentBins];
53 fHistEmbJetsCorrPtArea = new TH3*[fNcentBins];
54 fHistEmbPartPtvsJetPt = new TH2*[fNcentBins];
55 fHistEmbPartPtvsJetCorrPt = new TH2*[fNcentBins];
56 fHistJetPtvsJetCorrPt = new TH2*[fNcentBins];
57 fHistDistLeadPart2JetAxis = new TH1*[fNcentBins];
58 fHistEmbBkgArea = new TH2*[fNcentBins];
59 fHistRhoVSEmbBkg = new TH2*[fNcentBins];
60 fHistDeltaPtEmbArea = new TH2*[fNcentBins];
61 fHistDeltaPtEmbvsEP = new TH2*[fNcentBins];
62 fHistDeltaPtEmbPtProbe = new TH2*[fNcentBins];
64 for (Int_t i = 0; i < fNcentBins; i++) {
65 fHistEmbJetsPtArea[i] = 0;
66 fHistEmbJetsCorrPtArea[i] = 0;
67 fHistEmbPartPtvsJetPt[i] = 0;
68 fHistEmbPartPtvsJetCorrPt[i] = 0;
69 fHistJetPtvsJetCorrPt[i] = 0;
70 fHistDistLeadPart2JetAxis[i] = 0;
71 fHistEmbBkgArea[i] = 0;
72 fHistRhoVSEmbBkg[i] = 0;
73 fHistDeltaPtEmbArea[i] = 0;
74 fHistDeltaPtEmbvsEP[i] = 0;
75 fHistDeltaPtEmbPtProbe[i] = 0;
78 SetMakeGeneralHistograms(kTRUE);
81 //________________________________________________________________________
82 AliAnalysisTaskDeltaPtJEmb::AliAnalysisTaskDeltaPtJEmb(const char *name) :
83 AliAnalysisTaskEmcalJet(name, kTRUE),
87 fMinFractionShared(0.5),
88 fHistEmbJetsPtArea(0),
89 fHistEmbJetsCorrPtArea(0),
90 fHistEmbPartPtvsJetPt(0),
91 fHistEmbPartPtvsJetCorrPt(0),
92 fHistJetPtvsJetCorrPt(0),
93 fHistDistLeadPart2JetAxis(0),
96 fHistDeltaPtEmbArea(0),
97 fHistDeltaPtEmbvsEP(0),
98 fHistDeltaPtEmbPtProbe(0),
99 fHistEmbJetsPhiEta(0),
100 fHistLeadPartPhiEta(0)
102 // Standard constructor.
104 fHistEmbJetsPtArea = new TH3*[fNcentBins];
105 fHistEmbJetsCorrPtArea = new TH3*[fNcentBins];
106 fHistEmbPartPtvsJetPt = new TH2*[fNcentBins];
107 fHistEmbPartPtvsJetCorrPt = new TH2*[fNcentBins];
108 fHistJetPtvsJetCorrPt = new TH2*[fNcentBins];
109 fHistDistLeadPart2JetAxis = new TH1*[fNcentBins];
110 fHistEmbBkgArea = new TH2*[fNcentBins];
111 fHistRhoVSEmbBkg = new TH2*[fNcentBins];
112 fHistDeltaPtEmbArea = new TH2*[fNcentBins];
113 fHistDeltaPtEmbvsEP = new TH2*[fNcentBins];
114 fHistDeltaPtEmbPtProbe = new TH2*[fNcentBins];
116 for (Int_t i = 0; i < fNcentBins; i++) {
117 fHistEmbJetsPtArea[i] = 0;
118 fHistEmbJetsCorrPtArea[i] = 0;
119 fHistEmbPartPtvsJetPt[i] = 0;
120 fHistEmbPartPtvsJetCorrPt[i] = 0;
121 fHistJetPtvsJetCorrPt[i] = 0;
122 fHistDistLeadPart2JetAxis[i] = 0;
123 fHistEmbBkgArea[i] = 0;
124 fHistRhoVSEmbBkg[i] = 0;
125 fHistDeltaPtEmbArea[i] = 0;
126 fHistDeltaPtEmbvsEP[i] = 0;
127 fHistDeltaPtEmbPtProbe[i] = 0;
130 SetMakeGeneralHistograms(kTRUE);
133 //________________________________________________________________________
134 void AliAnalysisTaskDeltaPtJEmb::UserCreateOutputObjects()
136 // Create user output.
138 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
140 fJetsCont = GetJetContainer("Jets");
141 fTracksCont = GetParticleContainer("Tracks");
142 fCaloClustersCont = GetClusterContainer("CaloClusters");
144 fHistEmbJetsPhiEta = new TH2F("fHistEmbJetsPhiEta","fHistEmbJetsPhiEta", 100, -1, 1, 201, 0, TMath::Pi() * 2.01);
145 fHistEmbJetsPhiEta->GetXaxis()->SetTitle("#eta");
146 fHistEmbJetsPhiEta->GetYaxis()->SetTitle("#phi");
147 fOutput->Add(fHistEmbJetsPhiEta);
149 fHistLeadPartPhiEta = new TH2F("fHistLeadPartPhiEta","fHistLeadPartPhiEta", 100, -1, 1, 201, 0, TMath::Pi() * 2.01);
150 fHistLeadPartPhiEta->GetXaxis()->SetTitle("#eta");
151 fHistLeadPartPhiEta->GetYaxis()->SetTitle("#phi");
152 fOutput->Add(fHistLeadPartPhiEta);
156 const Int_t nbinsZ = 12;
157 Float_t binsZ[nbinsZ+1] = {0,1,2,3,4,5,6,7,8,9,10,20,1000};
159 Float_t *binsPt = GenerateFixedBinArray(fNbins, fMinBinPt, fMaxBinPt);
160 Float_t *binsCorrPt = GenerateFixedBinArray(fNbins*2, -fMaxBinPt, fMaxBinPt);
161 Float_t *binsArea = GenerateFixedBinArray(50, 0, 2);
163 for (Int_t i = 0; i < fNcentBins; i++) {
164 histname = "fHistEmbJetsPtArea_";
166 fHistEmbJetsPtArea[i] = new TH3F(histname.Data(), histname.Data(), 50, binsArea, fNbins, binsPt, nbinsZ, binsZ);
167 fHistEmbJetsPtArea[i]->GetXaxis()->SetTitle("area");
168 fHistEmbJetsPtArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb,raw} (GeV/#it{c})");
169 fOutput->Add(fHistEmbJetsPtArea[i]);
171 histname = "fHistEmbJetsCorrPtArea_";
173 fHistEmbJetsCorrPtArea[i] = new TH3F(histname.Data(), histname.Data(), 50, binsArea, fNbins * 2, binsCorrPt, nbinsZ, binsZ);
174 fHistEmbJetsCorrPtArea[i]->GetXaxis()->SetTitle("area");
175 fHistEmbJetsCorrPtArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb,corr} (GeV/#it{c})");
176 fOutput->Add(fHistEmbJetsCorrPtArea[i]);
178 histname = "fHistEmbPartPtvsJetPt_";
180 fHistEmbPartPtvsJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
181 fHistEmbPartPtvsJetPt[i]->GetXaxis()->SetTitle("#sum#it{p}_{T,const}^{emb} (GeV/#it{c})");
182 fHistEmbPartPtvsJetPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} (GeV/#it{c})");
183 fHistEmbPartPtvsJetPt[i]->GetZaxis()->SetTitle("counts");
184 fOutput->Add(fHistEmbPartPtvsJetPt[i]);
186 histname = "fHistEmbPartPtvsJetCorrPt_";
188 fHistEmbPartPtvsJetCorrPt[i] = new TH2F(histname.Data(), histname.Data(),
189 fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt);
190 fHistEmbPartPtvsJetCorrPt[i]->GetXaxis()->SetTitle("#sum#it{p}_{T,const}^{emb} (GeV/#it{c})");
191 fHistEmbPartPtvsJetCorrPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - A#rho (GeV/#it{c})");
192 fHistEmbPartPtvsJetCorrPt[i]->GetZaxis()->SetTitle("counts");
193 fOutput->Add(fHistEmbPartPtvsJetCorrPt[i]);
195 histname = "fHistJetPtvsJetCorrPt_";
197 fHistJetPtvsJetCorrPt[i] = new TH2F(histname.Data(), histname.Data(),
198 fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt);
199 fHistJetPtvsJetCorrPt[i]->GetXaxis()->SetTitle("#it{p}_{T,jet}^{emb} (GeV/#it{c})");
200 fHistJetPtvsJetCorrPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - A#rho (GeV/#it{c})");
201 fHistJetPtvsJetCorrPt[i]->GetZaxis()->SetTitle("counts");
202 fOutput->Add(fHistJetPtvsJetCorrPt[i]);
204 histname = "fHistDistLeadPart2JetAxis_";
206 fHistDistLeadPart2JetAxis[i] = new TH1F(histname.Data(), histname.Data(), 50, 0, 0.5);
207 fHistDistLeadPart2JetAxis[i]->GetXaxis()->SetTitle("distance");
208 fHistDistLeadPart2JetAxis[i]->GetYaxis()->SetTitle("counts");
209 fOutput->Add(fHistDistLeadPart2JetAxis[i]);
211 histname = "fHistEmbBkgArea_";
213 fHistEmbBkgArea[i] = new TH2F(histname.Data(), histname.Data(), 50, 0, 2, fNbins, fMinBinPt, fMaxBinPt);
214 fHistEmbBkgArea[i]->GetXaxis()->SetTitle("area");
215 fHistEmbBkgArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - #sum#it{p}_{T,const}^{emb} (GeV/#it{c})");
216 fOutput->Add(fHistEmbBkgArea[i]);
218 histname = "fHistRhoVSEmbBkg_";
220 fHistRhoVSEmbBkg[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
221 fHistRhoVSEmbBkg[i]->GetXaxis()->SetTitle("A#rho (GeV/#it{c})");
222 fHistRhoVSEmbBkg[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - #sum#it{p}_{T,const}^{emb} (GeV/#it{c})");
223 fOutput->Add(fHistRhoVSEmbBkg[i]);
225 histname = "fHistDeltaPtEmbArea_";
227 fHistDeltaPtEmbArea[i] = new TH2F(histname.Data(), histname.Data(),
228 50, 0, 2, fNbins * 2, -fMaxBinPt, fMaxBinPt);
229 fHistDeltaPtEmbArea[i]->GetXaxis()->SetTitle("area");
230 fHistDeltaPtEmbArea[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{emb} (GeV/#it{c})");
231 fHistDeltaPtEmbArea[i]->GetZaxis()->SetTitle("counts");
232 fOutput->Add(fHistDeltaPtEmbArea[i]);
234 histname = "fHistDeltaPtEmbvsEP_";
236 fHistDeltaPtEmbvsEP[i] = new TH2F(histname.Data(), histname.Data(),
237 402, -TMath::Pi()*1.01, TMath::Pi()*3.01, fNbins * 2, -fMaxBinPt, fMaxBinPt);
238 fHistDeltaPtEmbvsEP[i]->GetXaxis()->SetTitle("#phi_{jet} - #Psi_{EP}");
239 fHistDeltaPtEmbvsEP[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{emb} (GeV/#it{c})");
240 fHistDeltaPtEmbvsEP[i]->GetZaxis()->SetTitle("counts");
241 fOutput->Add(fHistDeltaPtEmbvsEP[i]);
243 histname = "fHistDeltaPtEmbPtProbe_";
245 fHistDeltaPtEmbPtProbe[i] = new TH2F(histname.Data(), histname.Data(),
246 fNbins, fMinBinPt, fMaxBinPt, fNbins * 2, -fMaxBinPt, fMaxBinPt);
247 fHistDeltaPtEmbPtProbe[i]->GetXaxis()->SetTitle("#it{p}_{T,probe} (GeV/#it{c})");
248 fHistDeltaPtEmbPtProbe[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{emb} (GeV/#it{c})");
249 fHistDeltaPtEmbPtProbe[i]->GetZaxis()->SetTitle("counts");
250 fOutput->Add(fHistDeltaPtEmbPtProbe[i]);
257 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
260 //________________________________________________________________________
261 Bool_t AliAnalysisTaskDeltaPtJEmb::FillHistograms()
267 // Jets should already be matched, GetClosestJet gives matched partner. Cut on shared fraction to be applied
268 // _________________________________
271 AliEmcalJet *jet1 = NULL;
272 AliEmcalJet *jet2 = NULL;
273 fJetsCont->ResetCurrentID();
274 while((jet1 = fJetsCont->GetNextAcceptJet())) {
276 jet2 = jet1->ClosestJet();
279 Double_t fraction = fJetsCont->GetFractionSharedPt(jet1);
280 if(fMinFractionShared>0. && fraction<fMinFractionShared) continue;
283 fJetsCont->GetLeadingHadronMomentum(mom,jet1);
285 Double_t distLeading2Jet = TMath::Sqrt((jet1->Eta() - mom.Eta()) * (jet1->Eta() - mom.Eta()) + (jet1->Phi() - mom.Phi()+TMath::Pi()) * (jet1->Phi() - mom.Phi()+TMath::Pi()));
287 fHistEmbPartPtvsJetPt[fCentBin]->Fill(jet2->Pt(), jet1->Pt());
288 fHistEmbPartPtvsJetCorrPt[fCentBin]->Fill(jet2->Pt(), jet1->Pt() - jet1->Area() * fRhoVal);
289 fHistLeadPartPhiEta->Fill(mom.Eta(), mom.Phi()+TMath::Pi());
290 fHistDistLeadPart2JetAxis[fCentBin]->Fill(distLeading2Jet);
292 fHistEmbJetsPtArea[fCentBin]->Fill(jet1->Area(), jet1->Pt(), mom.Pt());
293 fHistEmbJetsCorrPtArea[fCentBin]->Fill(jet1->Area(), jet1->Pt() - fRhoVal * jet1->Area(), mom.Pt());
294 fHistEmbJetsPhiEta->Fill(jet1->Eta(), jet1->Phi());
295 fHistJetPtvsJetCorrPt[fCentBin]->Fill(jet1->Pt(), jet1->Pt() - fRhoVal * jet1->Area());
297 fHistEmbBkgArea[fCentBin]->Fill(jet1->Area(), jet1->Pt() - jet2->Pt());
298 fHistRhoVSEmbBkg[fCentBin]->Fill(fRhoVal * jet1->Area(), jet1->Pt() - jet2->Pt());
299 fHistDeltaPtEmbArea[fCentBin]->Fill(jet1->Area(), jet1->Pt() - jet1->Area() * fRhoVal - jet2->Pt());
300 fHistDeltaPtEmbvsEP[fCentBin]->Fill(jet1->Phi() - fEPV0, jet1->Pt() - jet1->Area() * fRhoVal - jet2->Pt());
301 fHistDeltaPtEmbPtProbe[fCentBin]->Fill(jet2->Pt(), jet1->Pt() - jet1->Area() * fRhoVal - jet2->Pt());
308 //________________________________________________________________________
309 void AliAnalysisTaskDeltaPtJEmb::ExecOnce()
311 // Initialize the analysis.
313 AliAnalysisTaskEmcalJet::ExecOnce();
315 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
316 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
317 if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;