]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHMEC.cxx
add macros to run analyses more granuarly
[u/mrichter/AliRoot.git] / PWGGA / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalJetHMEC.cxx
CommitLineData
1101e468 1#include "TChain.h"
2#include "TTree.h"
3#include "TList.h"
4#include "TH1F.h"
5#include "TH2F.h"
6#include "THnSparse.h"
7#include "TCanvas.h"
8#include <TClonesArray.h>
9#include <TParticle.h>
10#include "AliVTrack.h"
11#include "TParameter.h"
12
13#include "AliAODEvent.h"
14#include "AliAnalysisTask.h"
15#include "AliAnalysisManager.h"
16
17#include "AliESDEvent.h"
18#include "AliESDInputHandler.h"
19#include "AliESDCaloCluster.h"
20#include "AliESDVertex.h"
21#include "AliCentrality.h"
22#include "AliAODJet.h"
23#include "AliEmcalJet.h"
24#include "AliESDtrackCuts.h"
25#include "AliAnalysisTaskEmcalJetHMEC.h"
26#include "TVector3.h"
27
28ClassImp(AliAnalysisTaskEmcalJetHMEC)
29
30//________________________________________________________________________
31AliAnalysisTaskEmcalJetHMEC::AliAnalysisTaskEmcalJetHMEC() :
32 AliAnalysisTaskSE(),
33 fTracksName("tracks"),
34 fJetsName("jets"),
35 fPhimin(-10),
36 fPhimax(10),
37 fEtamin(-0.9),
38 fEtamax(0.9),
39 fAreacut(0.0),
40 fESD(0),
41 fOutputList(0),
42 fHistTrackPt(0),
43 fHistCentrality(0),
44 fHistJetEtaPhi(0),
45 fHistTrackEtaPhi(0),
46 fHistJetHEtaPhi(0)
47{
48 // Default Constructor
49
50 for(Int_t icent = 0; icent<6; ++icent){
51 fHistJetPt[icent]=0;
81941f29 52 fHistJetPtBias[icent]=0;
53 fHistJetPtTT[icent]=0;
1101e468 54 for(Int_t iptjet = 0; iptjet<3; ++iptjet){
55 for(Int_t ieta = 0; ieta<3; ++ieta){
56 fHistJetH[icent][iptjet][ieta]=0;
57 fHistJetHBias[icent][iptjet][ieta]=0;
81941f29 58 fHistJetHTT[icent][iptjet][ieta]=0;
59
1101e468 60 }
61 }
62 }
63
64}
65//________________________________________________________________________
66AliAnalysisTaskEmcalJetHMEC::AliAnalysisTaskEmcalJetHMEC(const char *name) :
67 AliAnalysisTaskSE(name),
68 fTracksName("tracks"),
69 fJetsName("jets"),
70 fPhimin(-10),
71 fPhimax(10),
72 fEtamin(-0.9),
73 fEtamax(0.9),
74 fAreacut(0.0),
75 fESD(0),
76 fOutputList(0),
77 fHistTrackPt(0),
78 fHistCentrality(0),
79 fHistJetEtaPhi(0),
80 fHistTrackEtaPhi(0),
81 fHistJetHEtaPhi(0)
82{
83 // Constructor
84 for(Int_t icent = 0; icent<6; ++icent){
85 fHistJetPt[icent]=0;
86 fHistJetPtBias[icent]=0;
81941f29 87 fHistJetPtTT[icent]=0;
88 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
1101e468 89 for(Int_t ieta = 0; ieta<3; ++ieta){
90 fHistJetH[icent][iptjet][ieta]=0;
91 fHistJetHBias[icent][iptjet][ieta]=0;
81941f29 92 fHistJetHTT[icent][iptjet][ieta]=0;
1101e468 93 }
94 }
95 }
96
97 DefineInput(0, TChain::Class());
98 DefineOutput(1, TList::Class());
99
100}
101
102//________________________________________________________________________
103void AliAnalysisTaskEmcalJetHMEC::UserCreateOutputObjects()
104{
105 // Called once
106
107
108 AliVEventHandler* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
109 if (!handler) {
110 AliError("Input handler not available!");
111 return;
112 }
113
114 OpenFile(1);
115 fOutputList = new TList();
116 fOutputList->SetOwner();
117
118 // Create histograms
119
120 fHistTrackPt = new TH1F("fHistTrackPt", "P_{T} distribution", 1000, 0.0, 100.0);
121
122
123
124 fHistCentrality = new TH1F("fHistCentrality","centrality",100,0,100);
125
126 fHistJetEtaPhi = new TH2F("fHistJetEtaPhi","Jet eta-phi",900,-1.8,1.8,640,-3.2,3.2);
127 fHistTrackEtaPhi = new TH2F("fHistTrackEtaPhi","Track eta-phi",900,-1.8,1.8,640,-3.2,3.2);
128 fHistJetHEtaPhi = new TH2F("fHistJetHEtaPhi","Jet-Hadron deta-dphi",900,-1.8,1.8,640,-1.6,4.8);
129
130 char name[200];
131
132
133 for(Int_t icent = 0; icent<6; ++icent){
134 sprintf(name,"fHistJetPt_%i",icent);
135 fHistJetPt[icent] = new TH1F(name,name,200,0,200);
136 fOutputList->Add(fHistJetPt[icent]);
137
138 sprintf(name,"fHistJetPtBias_%i",icent);
139 fHistJetPtBias[icent] = new TH1F(name,name,200,0,200);
140 fOutputList->Add(fHistJetPtBias[icent]);
141
81941f29 142 sprintf(name,"fHistJetPtTT_%i",icent);
143 fHistJetPtTT[icent] = new TH1F(name,name,200,0,200);
144 fOutputList->Add(fHistJetPtTT[icent]);
145
146 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
1101e468 147 for(Int_t ieta = 0; ieta<3; ++ieta){
148 sprintf(name,"fHistJetH_%i_%i_%i",icent,iptjet,ieta);
149 fHistJetH[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
150 fOutputList->Add(fHistJetH[icent][iptjet][ieta]);
151
152 sprintf(name,"fHistJetHBias_%i_%i_%i",icent,iptjet,ieta);
153 fHistJetHBias[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
154 fOutputList->Add(fHistJetHBias[icent][iptjet][ieta]);
155
81941f29 156 sprintf(name,"fHistJetHTT_%i_%i_%i",icent,iptjet,ieta);
157 fHistJetHTT[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
158 fOutputList->Add(fHistJetHTT[icent][iptjet][ieta]);
159
1101e468 160 }
161 }
162 }
163
164
165
166 fOutputList->Add(fHistTrackPt);
167 fOutputList->Add(fHistCentrality);
168 fOutputList->Add(fHistJetEtaPhi);
169 fOutputList->Add(fHistTrackEtaPhi);
170 fOutputList->Add(fHistJetHEtaPhi);
171
172
173 PostData(1, fOutputList);
174
175}
176
177//________________________________________________________________________
178
179Double_t AliAnalysisTaskEmcalJetHMEC:: RelativePhi(Double_t mphi,Double_t vphi) {
180
181
182 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
183 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
184 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
185 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
186 Double_t dphi = vphi-mphi;
187 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
188 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
189
190 return dphi;//dphi in [-Pi, Pi]
191}
192
193
194//________________________________________________________________________
195Int_t AliAnalysisTaskEmcalJetHMEC::GetCentBin(Double_t cent) const
196{
197 // Get centrality bin.
198
199 Int_t centbin = -1;
200 if (cent>=0 && cent<10)
201 centbin = 0;
202 else if (cent>=10 && cent<20)
203 centbin = 1;
204 else if (cent>=20 && cent<30)
205 centbin = 2;
206 else if (cent>=30 && cent<40)
207 centbin = 3;
208 else if (cent>=40 && cent<50)
209 centbin = 4;
210 else if (cent>=50 && cent<90)
211 centbin = 5;
212 return centbin;
213}
214
215
216//________________________________________________________________________
217Int_t AliAnalysisTaskEmcalJetHMEC::GetEtaBin(Double_t eta) const
218{
219 // Get eta bin for histos.
220
221 Int_t etabin = -1;
222 if (TMath::Abs(eta)<=0.4)
223 etabin = 0;
224 else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8)
225 etabin = 1;
226 else if (TMath::Abs(eta)>=0.8)
227 etabin = 2;
228 return etabin;
229}
230//________________________________________________________________________
81941f29 231Int_t AliAnalysisTaskEmcalJetHMEC::GetpTjetBin(Double_t pt) const
1101e468 232{
81941f29 233 // Get jet pt bin for histos.
234
235 Int_t ptbin = -1;
236 if (pt>=10 && pt<15)
237 ptbin = 0;
238 else if (pt>=15 && pt<20)
239 ptbin = 1;
240 else if (pt>=20 && pt<25)
241 ptbin = 2;
242 else if (pt>=25 && pt<30)
243 ptbin = 3;
244 else if (pt>=30)
245 ptbin = 4;
246
247
248 return ptbin;
1101e468 249}
250
251
252//________________________________________________________________________
253void AliAnalysisTaskEmcalJetHMEC::UserExec(Option_t *)
254{
255
256
257 // Main loop called for each event
258 // esd or aod mode
259 Bool_t esdMode = kTRUE;
260 if (dynamic_cast<AliAODEvent*>(InputEvent()))
261 esdMode = kFALSE;
262
263
264 if (esdMode) {
265 // optimization in case autobranch loading is off
266 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
267 if (fTracksName == "Tracks")
268 am->LoadBranch("Tracks");
269 }
270
271
272 //get centrality
273 TList *list = InputEvent()->GetList();
274 AliCentrality *centrality = InputEvent()->GetCentrality() ;
275 Double_t fcent=-1;
276 if(centrality)
277 fcent = centrality->GetCentralityPercentile("V0M");
278 else
279 fcent=99;//probably pp data
280
281 if (fcent<0) {
282 AliError(Form("Centrality negative: %f", fcent));
283 return;
284 }
285
286
287 fHistCentrality->Fill(fcent);
288 Int_t centbin = GetCentBin(fcent);
289
290 TClonesArray *jets = 0;
291 TClonesArray *tracks = 0;
292
293 tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));
294 if (!tracks) {
295 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
296 return;
297 }
298 const Int_t Ntracks=tracks->GetEntries();
299
300 jets= dynamic_cast<TClonesArray*>(list->FindObject(fJetsName));
301 const Int_t Njets = jets->GetEntries();
302
81941f29 303 //Leticia's loop to find hardest track
304
305 Int_t iTT=-1;
306 Double_t ptmax=-10;
307
308 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++)
309 {
310 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
311 if (!track) {
312 printf("ERROR: Could not receive track %d\n", iTracks);
313 continue;
314 }
315
316 if(TMath::Abs(track->Eta())>0.9) continue;
317 if(track->Pt()<0.15)continue;
318 //iCount++;
319 if(track->Pt()>ptmax){
320 ptmax=track->Pt();
321 iTT=iTracks;
322 }
323 }
1101e468 324
325
81941f29 326 Int_t ijethi=-1;
327
328 Double_t highestjetpt=0.0;
329
330 Int_t passedTTcut=0;
1101e468 331
332 for (Int_t ijet = 0; ijet < Njets; ijet++)
333 {
81941f29 334
1101e468 335 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
336
337 if (!jet)
338 continue;
339
340 //pt,eta,phi,centrality
341 float jetphi = jet->Phi();
342 if (jetphi>TMath::Pi())
343 jetphi = jetphi-2*TMath::Pi();
344
345 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax))
346 continue;
347 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax))
348 continue;
349 //fHistAreavsRawPt[centbin]->Fill(jet->Pt(),jet->Area());
350 if (jet->Area()<fAreacut)
351 continue;
352 //prevents 0 area jets from sneaking by when area cut == 0
353 if (jet->Area()==0)
354 continue;
355
1101e468 356 Double_t jetPt = jet->Pt();
357
59d5ae99 358 if(highestjetpt<jetPt){
359 ijethi=ijet;
360 highestjetpt=jetPt;
361 }
362
363 }
364
365
366
367 //Only look at the highest pT jet in the event
368
369 if(ijethi>-1){
370 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijethi));
371
372 float jetphi = jet->Phi();
373 Double_t jetPt = jet->Pt();
1101e468 374
375 fHistJetPt[centbin]->Fill(jet->Pt());
376
81941f29 377 if ((jet->MaxTrackPt()>6) || (jet->MaxClusterPt()>6))
378 fHistJetPtBias[centbin]->Fill(jet->Pt());
379
380
1101e468 381 fHistJetEtaPhi->Fill(jet->Eta(),jetphi);
382
383 //fHistDeltaPtvsArea->Fill(jetPt,jet->Area());
384
81941f29 385 if(iTT>0){
386 AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
387 if(TMath::Abs(jetphi-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
388 else passedTTcut=0;
389 }
1101e468 390
81941f29 391 if(passedTTcut)
392 fHistJetPtTT[centbin]->Fill(jet->Pt());
59d5ae99 393
81941f29 394
395 if (highestjetpt>10) {
81941f29 396
81941f29 397 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++)
398 {
399 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
400 if (!track) {
401 printf("ERROR: Could not receive track %d\n", iTracks);
402 continue;
403 }
404
1101e468 405 if(TMath::Abs(track->Eta())>0.9) continue;
406
407 fHistTrackPt->Fill(track->Pt());
408
81941f29 409 if (track->Pt()<0.15)
1101e468 410 continue;
411
412 Double_t trackphi = track->Phi();
413 if (trackphi > TMath::Pi())
414 trackphi = trackphi-2*TMath::Pi();
415
416 Double_t tracketa=track->Eta();
417 Double_t jeteta=jet->Eta();
418
419 Double_t deta=tracketa-jeteta;
420 Int_t ieta=GetEtaBin(deta);
421
422 //Jet pt, track pt, dPhi,deta,fcent
423 Double_t dphijh = RelativePhi(jetphi,trackphi);
424 if (dphijh < -0.5*TMath::Pi())
425 dphijh= dphijh+ 2*TMath::Pi();
426
427 Int_t iptjet=-1;
428 iptjet=GetpTjetBin(jetPt);
429
430 fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
431 fHistJetHEtaPhi->Fill(deta,dphijh);
432 fHistTrackEtaPhi->Fill(tracketa,trackphi);
81941f29 433 if ((jet->MaxTrackPt()>6) || (jet->MaxClusterPt()>6))
1101e468 434 fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
81941f29 435
436 if(passedTTcut)
59d5ae99 437 fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
1101e468 438
1101e468 439
440 } //track loop
59d5ae99 441 }//jet pt cut
442 }
443
1101e468 444 PostData(1, fOutputList);
445}
446
447//________________________________________________________________________
448void AliAnalysisTaskEmcalJetHMEC::Terminate(Option_t *)
449{
450 //just terminate
451
452}
453
454