]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskDcalDijetPerf.cxx
73b4a72c503b9c59b89eab491997400944a36794
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskDcalDijetPerf.cxx
1 // $Id$
2 //
3 // Dcal dijet performance task
4 //
5 // Author: R. Reed
6
7 #include <TClonesArray.h>
8 #include <TH1F.h>
9 #include <TH2F.h>
10 #include <TH3F.h>
11 #include <THnSparse.h>
12 #include <TList.h>
13 #include <TLorentzVector.h>
14
15 #include "AliVCluster.h"
16 #include "AliAODCaloCluster.h"
17 #include "AliESDCaloCluster.h"
18 #include "AliVTrack.h"
19 #include "AliEmcalJet.h"
20 #include "AliRhoParameter.h"
21 #include "AliLog.h"
22 #include "AliJetContainer.h"
23 #include "AliParticleContainer.h"
24 #include "AliClusterContainer.h"
25 #include "AliPicoTrack.h"
26
27 #include "AliAnalysisTaskDcalDijetPerf.h"
28
29 ClassImp(AliAnalysisTaskDcalDijetPerf)
30
31 //________________________________________________________________________
32 AliAnalysisTaskDcalDijetPerf::AliAnalysisTaskDcalDijetPerf() : 
33   AliAnalysisTaskEmcalJet("AliAnalysisTaskDcalDijetPerf", kTRUE),
34   fHistTracksPt(0),
35   fHistTracksEtaPhi(0),
36   fHistClustersPt(0),
37   fHistLeadingJetPt(0),
38   fHistJetsPhiEta(0),
39   fHistJetsPtArea(0),
40   fHistJetsPtLeadHad(0),
41   fHistJetsCorrPtArea(0),
42   fHistJet1(0),
43   fHistJet1m(0),
44   fHistJet1nm(0),
45   fHistJet2(0),
46   fHistJet1to2(0),
47   fJetsCont(0),
48   fJetsCont2(0),
49   fTracksCont(0),
50   fCaloClustersCont(0)
51
52 {
53   // Default constructor.
54
55   fHistTracksPt       = new TH1*[fNcentBins];
56   fHistTracksEtaPhi   = new TH2*[fNcentBins];
57   fHistClustersPt     = new TH1*[fNcentBins];
58   fHistLeadingJetPt   = new TH1*[fNcentBins];
59   fHistJetsPhiEta     = new TH2*[fNcentBins];
60   fHistJetsPtArea     = new TH2*[fNcentBins];
61   fHistJetsPtLeadHad  = new TH2*[fNcentBins];
62   fHistJetsCorrPtArea = new TH2*[fNcentBins];
63
64   for (Int_t i = 0; i < fNcentBins; i++) {
65     fHistTracksPt[i] = 0;
66     fHistTracksEtaPhi[i] = 0;
67     fHistClustersPt[i] = 0;
68     fHistLeadingJetPt[i] = 0;
69     fHistJetsPhiEta[i] = 0;
70     fHistJetsPtArea[i] = 0;
71     fHistJetsPtLeadHad[i] = 0;
72     fHistJetsCorrPtArea[i] = 0;
73   }
74     fHistJet1 = 0;
75     fHistJet1m = 0;
76     fHistJet1nm = 0;
77     fHistJet2 = 0;
78     fHistJet1to2 = 0;
79   SetMakeGeneralHistograms(kTRUE);
80 }
81
82 //________________________________________________________________________
83 AliAnalysisTaskDcalDijetPerf::AliAnalysisTaskDcalDijetPerf(const char *name) : 
84   AliAnalysisTaskEmcalJet(name, kTRUE),
85   fHistTracksPt(0),
86   fHistTracksEtaPhi(0),
87   fHistClustersPt(0),
88   fHistLeadingJetPt(0),
89   fHistJetsPhiEta(0),
90   fHistJetsPtArea(0),
91   fHistJetsPtLeadHad(0),
92   fHistJetsCorrPtArea(0),
93   fHistJet1(0),
94   fHistJet1m(0),
95   fHistJet1nm(0),
96   fHistJet2(0),
97   fHistJet1to2(0),
98   fJetsCont(0),
99   fJetsCont2(0),
100   fTracksCont(0),
101   fCaloClustersCont(0)
102 {
103   // Standard constructor.
104
105   fHistTracksPt       = new TH1*[fNcentBins];
106   fHistTracksEtaPhi   = new TH2*[fNcentBins];
107   fHistClustersPt     = new TH1*[fNcentBins];
108   fHistLeadingJetPt   = new TH1*[fNcentBins];
109   fHistJetsPhiEta     = new TH2*[fNcentBins];
110   fHistJetsPtArea     = new TH2*[fNcentBins];
111   fHistJetsPtLeadHad  = new TH2*[fNcentBins];
112   fHistJetsCorrPtArea = new TH2*[fNcentBins];
113
114   for (Int_t i = 0; i < fNcentBins; i++) {
115     fHistTracksPt[i] = 0;
116     fHistTracksEtaPhi[i] = 0;
117     fHistClustersPt[i] = 0;
118     fHistLeadingJetPt[i] = 0;
119     fHistJetsPhiEta[i] = 0;
120     fHistJetsPtArea[i] = 0;
121     fHistJetsPtLeadHad[i] = 0;
122     fHistJetsCorrPtArea[i] = 0;
123   }
124   fHistJet1 = 0;
125   fHistJet1m = 0;
126   fHistJet1nm = 0;
127   fHistJet2 = 0;
128   fHistJet1to2 = 0;
129
130   SetMakeGeneralHistograms(kTRUE);
131 }
132
133 //________________________________________________________________________
134 AliAnalysisTaskDcalDijetPerf::~AliAnalysisTaskDcalDijetPerf()
135 {
136   // Destructor.
137 }
138
139 //________________________________________________________________________
140 void AliAnalysisTaskDcalDijetPerf::UserCreateOutputObjects()
141 {
142   // Create user output.
143
144   AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
145
146   fJetsCont           = GetJetContainer(0);
147   fJetsCont2           = GetJetContainer(1);
148   if(fJetsCont) { //get particles and clusters connected to jets
149     fTracksCont       = fJetsCont->GetParticleContainer();
150     fCaloClustersCont = fJetsCont->GetClusterContainer();
151   } else {        //no jets, just analysis tracks and clusters
152     fTracksCont       = GetParticleContainer(0);
153     fCaloClustersCont = GetClusterContainer(0);
154   }
155   fTracksCont->SetClassName("AliVTrack");
156   //fCaloClustersCont->SetClassName("AliVCluster");
157   TString histname;
158
159   for (Int_t i = 0; i < fNcentBins; i++) {
160     if (fParticleCollArray.GetEntriesFast()>0) {
161       histname = "fHistTracksPt_";
162       histname += i;
163       fHistTracksPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
164       fHistTracksPt[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
165       fHistTracksPt[i]->GetYaxis()->SetTitle("counts");
166       fOutput->Add(fHistTracksPt[i]);
167       histname = "fHistTracksEtaPhi_";
168       histname += i;
169         fHistTracksEtaPhi[i] = new TH2F(histname.Data(), histname.Data(), fNbins, -0.7, 0.7, fNbins, 0, TMath::Pi()*2);
170       fHistTracksEtaPhi[i]->GetXaxis()->SetTitle("eta");
171       fHistTracksEtaPhi[i]->GetYaxis()->SetTitle("phi");
172       fOutput->Add(fHistTracksEtaPhi[i]);
173     }
174
175     if (fClusterCollArray.GetEntriesFast()>0) {
176       histname = "fHistClustersPt_";
177       histname += i;
178       fHistClustersPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
179       fHistClustersPt[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
180       fHistClustersPt[i]->GetYaxis()->SetTitle("counts");
181       fOutput->Add(fHistClustersPt[i]);
182     }
183
184     if (fJetCollArray.GetEntriesFast()>0) {
185       histname = "fHistLeadingJetPt_";
186       histname += i;
187       fHistLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
188       fHistLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
189       fHistLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
190       fOutput->Add(fHistLeadingJetPt[i]);
191       
192       histname = "fHistJetsPhiEta_";
193       histname += i;
194       fHistJetsPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 50, -1, 1, 101, 0, TMath::Pi()*2 + TMath::Pi()/200);
195       fHistJetsPhiEta[i]->GetXaxis()->SetTitle("#eta");
196       fHistJetsPhiEta[i]->GetYaxis()->SetTitle("#phi");
197       fOutput->Add(fHistJetsPhiEta[i]);
198       
199       histname = "fHistJetsPtArea_";
200       histname += i;
201       fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 30, 0, 3);
202       fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
203       fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
204       fOutput->Add(fHistJetsPtArea[i]);
205
206       histname = "fHistJetsPtLeadHad_";
207       histname += i;
208       fHistJetsPtLeadHad[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins / 2, fMinBinPt, fMaxBinPt / 2);
209       fHistJetsPtLeadHad[i]->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
210       fHistJetsPtLeadHad[i]->GetYaxis()->SetTitle("p_{T,lead} (GeV/c)");
211       fHistJetsPtLeadHad[i]->GetZaxis()->SetTitle("counts");
212       fOutput->Add(fHistJetsPtLeadHad[i]);
213     
214       if (!(GetJetContainer()->GetRhoName().IsNull())) {
215         histname = "fHistJetsCorrPtArea_";
216         histname += i;
217         fHistJetsCorrPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 30, 0, 3);
218         fHistJetsCorrPtArea[i]->GetXaxis()->SetTitle("p_{T}^{corr} [GeV/c]");
219         fHistJetsCorrPtArea[i]->GetYaxis()->SetTitle("area");
220         fOutput->Add(fHistJetsCorrPtArea[i]);
221       }
222     }
223   }
224
225   Int_t nbins[] = {150,100,100,100,150};
226   Double_t xmin[] = {  0,-0.7,             0, 0,   0};
227   Double_t xmax[] = {150, 0.7,TMath::TwoPi(), 1, 150};
228   fHistJet1 = new THnSparseF("Jets1Collection","Jets1Collection",5,nbins,xmin,xmax);
229   fOutput->Add(fHistJet1);
230   fHistJet1m = new THnSparseF("Jets1CollectionMatched","Jets1Collection",5,nbins,xmin,xmax);
231   fOutput->Add(fHistJet1m);
232   fHistJet1nm = new THnSparseF("Jets1CollectionNotMatched","Jets1Collection",5,nbins,xmin,xmax);
233   fOutput->Add(fHistJet1nm);
234   fHistJet2 = new THnSparseF("Jets2Collection","Jets2Collection",5,nbins,xmin,xmax);
235   fOutput->Add(fHistJet2);
236   
237   Int_t nbins2[] = {150,100,100,100,150,100,100,100,100};
238   Double_t xmin2[] = {0,-0.7,0,0,0,-0.7,0,0,0};
239   Double_t xmax2[] = {150,0.7,6.28,1,150,0.7,6.28,1,0.2};
240   fHistJet1to2 = new THnSparseF("Jets1to2Collection","Jets1to2Collection",9,nbins2,xmin2,xmax2);
241   fOutput->Add(fHistJet1to2);
242   
243   PostData(1, fOutput); // Post data for ALL output slots > 0 here.
244 }
245
246 //________________________________________________________________________
247 Bool_t AliAnalysisTaskDcalDijetPerf::FillHistograms()
248 {
249   // Fill histograms.
250
251   if (fTracksCont) {
252     AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0)); 
253     while(track) {
254       fHistTracksPt[fCentBin]->Fill(track->Pt());
255       fHistTracksEtaPhi[fCentBin]->Fill(track->Eta(),track->Phi());
256       track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
257     }
258   }
259   
260   if (fCaloClustersCont) {
261     AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0); 
262     while(cluster) {
263       TLorentzVector nPart;
264       cluster->GetMomentum(nPart, fVertex);
265       fHistClustersPt[fCentBin]->Fill(nPart.Pt());
266
267       cluster = fCaloClustersCont->GetNextAcceptCluster();
268     }
269   }
270
271     int N1 = 0;
272   if (fJetsCont) {
273     AliEmcalJet *jet = fJetsCont->GetNextAcceptJet(0); 
274     while(jet) {
275         Float_t NEFpT = jet->Pt()*jet->NEF();
276         N1++;
277         //cout<<"loop 1 jet 1 has label, pt,eta,phi,NEF = "<<jet->GetLabel()<<" "<<jet->Pt()<<" "<<jet->Eta()<<" "<<jet->Phi()<<" "<<jet->NEF()<<" and NEFpT "<<NEFpT<<endl;
278       fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());
279       fHistJetsPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
280       Float_t ptLeading = fJetsCont->GetLeadingHadronPt(jet);
281       fHistJetsPtLeadHad[fCentBin]->Fill(jet->Pt(), ptLeading);
282         
283         //110 degrees in the azimuthal angle |eta|<0.7
284         //EMCal Tower 0.0143 x 0.0143
285         //16x16 =  0.2288 x 0.2288 -> R = 0.1144
286         
287         Double_t jetarray[] = {jet->Pt(),jet->Eta(),jet->Phi(),jet->NEF(),NEFpT};
288         //cout<<"Filling "<<jet->Pt()<<" "<<jet->Eta()<<" "<<jet->Phi()<<" "<<jet->NEF()<<endl;
289         fHistJet1->Fill(jetarray);
290       if (fHistJetsCorrPtArea[fCentBin]) {
291         Float_t corrPt = jet->Pt() - fJetsCont->GetRhoVal() * jet->Area();
292         fHistJetsCorrPtArea[fCentBin]->Fill(corrPt, jet->Area());
293       }
294       jet = fJetsCont->GetNextAcceptJet();
295     }
296     
297     jet = fJetsCont->GetLeadingJet();
298     if(jet) fHistLeadingJetPt[fCentBin]->Fill(jet->Pt());
299   }
300    // cout<<"DONE LOOP 1"<<endl;
301     int N2 = 0;
302     if(fJetsCont2){
303         //cout<<"We have a 2nd collection!!"<<endl;
304         AliEmcalJet *jet = fJetsCont2->GetNextAcceptJet(0);
305         while(jet){
306             Float_t NEFpT = jet->Pt()*jet->NEF();
307             //cout<<"loop 2 jet 2 has label, pt,eta,phi,NEF = "<<jet->GetLabel()<<" "<<jet->Pt()<<" "<<jet->Eta()<<" "<<jet->Phi()<<" "<<jet->NEF()<<endl;
308             N2++;
309             Double_t jetarray[] = {jet->Pt(),jet->Eta(),jet->Phi(),jet->NEF(),NEFpT};
310             //cout<<"Filling "<<jet->Pt()<<" "<<jet->Eta()<<" "<<jet->Phi()<<" "<<jet->NEF()<<endl;
311             fHistJet2->Fill(jetarray);
312           //  cout<<" we have a jet! wiht pt = "<<jet->Pt()<<endl;
313             jet = fJetsCont2->GetNextAcceptJet();
314         }
315     }
316     //<<"DONE LOOP 2"<<endl;
317     
318     //cout<<" There are "<<fJetsCont->GetNJets()<<" cont1 jets and "<<fJetsCont2->GetNJets()<<" cont2 jets"<<endl;
319
320     int N1N2 = 0;
321     int N1N2m = 0;
322    if (fJetsCont&&fJetsCont2) {
323          AliEmcalJet *jet1 = fJetsCont->GetNextAcceptJet(0);
324          AliEmcalJet *jet2 = fJetsCont2->GetNextAcceptJet(0);
325          while(jet1){
326              bool ismatched = false;
327              Float_t NEFpT1 = jet1->Pt()*jet1->NEF();
328              Double_t jetarray1[] = {jet1->Pt(),jet1->Eta(),jet1->Phi(),jet1->NEF(),NEFpT1};
329              while(jet2){
330                  N1N2++;
331                  //cout<<"jet 1 has label, pt,eta,phi,NEF = "<<jet1->GetLabel()<<" "<<jet1->Pt()<<" "<<jet1->Eta()<<" "<<jet1->Phi()<<" "<<jet1->NEF()<<endl;
332                  //<<"jet 2 has lable pt,eta,phi,NEF = "<<jet1->GetLabel()<<" "<<jet2->Pt()<<" "<<jet2->Eta()<<" "<<jet2->Phi()<<" "<<jet2->NEF()<<endl;
333                  Double_t deta = jet1->Eta()-jet2->Eta();
334                  Double_t dphi = RelativePhi(jet1->Phi(),jet2->Phi());
335                  Double_t deta2 = deta*deta;
336                  Double_t dphi2 = dphi*dphi;
337                  Double_t dR = pow(deta2+dphi2,0.5);
338                  //cout<<"dR is "<<dR<<endl;
339                  Double_t jetarray[] = {jet1->Pt(),jet1->Eta(),jet1->Phi(),jet1->NEF(),jet2->Pt(),jet2->Eta(),jet2->Phi(),jet2->NEF(),dR};
340                  if (dR<0.2){
341                      N1N2m++;
342                      fHistJet1to2->Fill(jetarray);
343                      ismatched = true;
344                  }
345                  jet2 = fJetsCont2->GetNextAcceptJet();
346              }
347              if (ismatched)
348                  fHistJet1m->Fill(jetarray1);
349              else
350                  fHistJet1nm->Fill(jetarray1);
351              jet1 = fJetsCont->GetNextAcceptJet();
352              jet2 = fJetsCont2->GetNextAcceptJet(0);
353          }
354      }
355
356   return kTRUE;
357 }
358
359 //________________________________________________________________________
360 Float_t AliAnalysisTaskDcalDijetPerf:: RelativePhi(Double_t mphi,Double_t vphi) const
361 {
362     if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
363     else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
364     if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
365     else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
366     double dphi = mphi-vphi;
367     if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
368     else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
369     
370     return dphi;//dphi in [-Pi, Pi]
371 }
372
373
374 //________________________________________________________________________
375 void AliAnalysisTaskDcalDijetPerf::ExecOnce() {
376
377   AliAnalysisTaskEmcalJet::ExecOnce();
378
379   if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;
380   if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
381   if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
382
383 }
384
385 //________________________________________________________________________
386 Bool_t AliAnalysisTaskDcalDijetPerf::Run()
387 {
388   // Run analysis code here, if needed. It will be executed before FillHistograms().
389
390   return kTRUE;  // If return kFALSE FillHistogram() will NOT be executed.
391 }
392
393 //________________________________________________________________________
394 void AliAnalysisTaskDcalDijetPerf::Terminate(Option_t *) 
395 {
396   // Called once at the end of the analysis.
397 }