1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
20 //_________________________________________________________________________
21 // Class for Filling JetFinder Plots
23 //*-- Author: Mark Horner (LBL/UCT)
29 #include "AliEMCALJetFinderPlots.h"
31 ClassImp(AliEMCALJetFinderPlots)
33 AliEMCALJetFinderPlots::AliEMCALJetFinderPlots()
35 // Constructor to initialise variables
36 fInitialised = kFALSE;
41 fhFragmFcn=0;// = new TH1F("hFragmFcn","Fragmentation Function",100,0,1);
42 fhPartonFragmFcn=0;// = new TH1F("hPartonFragmFcn","Fragmentation Function",100,0,1);
43 fhPartonJT=0;// = new TH1F("hPartonJT","Track Momentum Perpendicular to Parton Axis",100,0.,10.);
44 fhPartonPL=0;// = new TH1F("hPartonPL","Track Momentum Parallel to Parton Axis ",100,0.,100.);
45 fhJetJT=0;// = new TH1F("hJetJT","Track Momentum Perpendicular to Jet Axis",100,0.,10.);
46 fhJetPL=0;// = new TH1F("hJetPL","Track Momentum Parallel to Jet Axis ",100,0.,100.);
47 fhJetEt=0;// = new TH1F("hJetEt","E_{T}^{reco}",250,0.,250.);
48 fhJetEta=0;// = new TH1F("hJetEta","#eta_{jet}^{reco}",180,-0.9,0.9);
49 fhJetPhi=0;// = new TH1F("hJetPhi","#phi_{jet}^{reco}",62,0.,3.1);
50 fhPartonEta=0;// = new TH1F("hPartonEta","#eta_{Parton}",180,-0.9,0.9);
51 fhPartonPhi=0;// = new TH1F("hPartonPhi","#phi_{Parton}",62,0.,3.1);
52 fhEtaDiff=0;// = new TH1F("hEtaDiff","#eta_{jet}^{reco}-#eta_{jet}^{input}",100,-0.5,0.5);
53 fhPhiDiff=0;// = new TH1F("hPhiDiff","#phi_{jet}^{reco}-#phi_{jet}^{input}",100,-0.5,0.5);
54 fhNJets=0;// = new TH1F("hNJets","N Reconstructed jets",11,-0.5,10.5);
57 fhFragmFcn2=0; // ("hFragmFcn2","Fragmentation Function",100,0,1);
58 fhPartonFragmFcn2=0;// ("hFragmFcn2","Parton Fragmentation Function",100,0,1);
59 fhPartonJT2=0; // ("hPartonJT2","Track Momentum Perpendicular to Parton Axis",100,0.,10.);
60 fhPartonPL2=0; // ("hPartonPL2","Track Momentum Parallel to Parton Axis ",100,0.,100.);
61 fhJetJT2=0; // ("hJetJT2","Track Momentum Perpendicular to Jet Axis",100,0.,10.);
62 fhJetPL2=0; // ("hJetPL2","Track Momentum Parallel to Jet Axis ",100,0.,100.);
63 fhJetEt2=0; // ("hJetEt2","E_{T}^{reco}",250,0.,250.);
64 fhJetEta2=0; // ("hJetEta2","#eta_{jet}^{reco}",180,-0.9,0.9);
65 fhJetPhi2=0; // ("hJetPhi2","#phi_{jet}^{reco}",62,0.,3.1);
66 fhPartonEta2=0; // ("hPartonEta2","#eta_{Parton}",180,-0.9,0.9);
67 fhPartonPhi2=0; // ("hPartonPhi2","#phi_{Parton}",62,0.,3.1);
68 fhEtaDiff2=0; // ("hEtaDiff2","#eta_{jet}^{reco}-#eta_{jet}^{input}",100,-0.5,0.5);
69 fhPhiDiff2=0; // ("hPhiDiff2","#phi_{jet}^{reco}-#phi_{jet}^{input}",100,-0.5,0.5);
70 fhEtaPhiSpread2=0; // ("hEtaPhiSpread2","#eta - #phi Distribution
71 //of Reconstructed Jets",192,-0.7,0.7,288,pi/3,pi);
72 fhNJets2=0; // ("hNJets2","N Reconstructed jets",11,-0.5,10.5);
73 fhJetEtSecond2=0; //("hJetEtSecond2","E_{T}^{reco}",250,0.,250.);
74 fhJetEtRatio2=0; //("hJetEtRatio2","Ratio of Second Highest to Highest",100,0,1);
75 fhEtaPhiDist2=0; //("hEtaPhiDist2","Angular Distance Between First and Second",100,0,3);
77 // TH2F *fhInputOutput; //("hJetEtRatio2","Ratio of Second Highest to Highest",100,0,1);
79 fhRecoBinPt=0; // ("fhRecoBinPt","Reconstructed Pt Distribution",100,0,1);
80 fhRecoBinPartonPt=0; // ("fhRecoBinPartonPt","Input Pt Distribution",100,0,1);
81 fhRecoBinJetEt=0; // ("fhRecoJetEt","E_{T}^{reco}",250,0.,250.);
82 fhRecoBinInputJetEt=0; // ("fhRecoInputJetEt","E_{T}^{reco}",250,0.,250.);
83 fhJetPT =0;// new TH1F("hJetPT","P_{T} Distribution",200,0,200);
84 fhPartonPT =0;// new TH1F("hPartonPT","Parton P_{T} Distribution",200,0,1);
85 fhJetPT2 =0;// new TH1F("hJetPT","P_{T} Distribution",200,0,200);
86 fhPartonPT2 =0;// new TH1F("hPartonPT","Parton P_{T} Distribution",200,0,1);
87 fhRecoBinFragmFcn =0;//new TH1F("fhRecoBinFragmFcn","Reconstructed Frag. Fcn",100,0,1);
88 fhRecoBinPartonFragmFcn =0;// new TH1F("fhRecoBinPartonFragmFcn","Input Bin Fragm Fcn Distribution",100,0,1);
89 fhJetInvE=0;// = new TH1F("fhJetInvE","#frac{1}{E_{R}}",100,0,1);
90 fhJetInvE2=0;// = new TH1F("fhJetInvE","#frac{1}{E_{R}}",100,0,1);
96 void AliEMCALJetFinderPlots::InitPlots()
98 //========================= CASE 1 =======================================
99 fhFragmFcn = new TH1F("hFragmFcn","Fragmentation Function",100,0,1);
101 fhJetPT = new TH1F("hJetPT","P_{T} Distribution",200,0,200);
103 fhPartonPT = new TH1F("hPartonPT","Parton P_{T} Distribution",200,0,1);
105 fhPartonFragmFcn = new TH1F("hPartonFragmFcn","Parton Fragmentation Function",100,0,1);
106 fhPartonFragmFcn->Sumw2();
107 fhPartonJT = new TH1F("hPartonJT","Track Momentum Perpendicular to Parton Axis",100,0.,10.);
109 fhPartonPL = new TH1F("hPartonPL","Track Momentum Parallel to Parton Axis ",100,0.,100.);
111 fhJetJT = new TH1F("hJetJT","Track Momentum Perpendicular to Jet Axis",100,0.,10.);
113 fhJetPL = new TH1F("hJetPL","Track Momentum Parallel to Jet Axis ",100,0.,100.);
115 fhJetEt = new TH1F("hJetEt","E_{T}^{reco}",250,0.,250.);
117 fhJetEta = new TH1F("hJetEta","#eta_{jet}^{reco}",180,-0.9,0.9);
119 fhJetPhi = new TH1F("hJetPhi","#phi_{jet}^{reco}",62,0.,3.1);
121 fhPartonEta = new TH1F("hPartonEta","#eta_{Parton}",180,-0.9,0.9);
122 fhPartonEta->Sumw2();
123 fhPartonPhi = new TH1F("hPartonPhi","#phi_{Parton}",62,0.,3.1);
124 fhPartonPhi->Sumw2();
125 fhEtaDiff = new TH1F("hEtaDiff","#eta_{jet}^{reco}-#eta_{jet}^{input}",100,-0.5,0.5);
127 fhPhiDiff = new TH1F("hPhiDiff","#phi_{jet}^{reco}-#phi_{jet}^{input}",100,-0.5,0.5);
129 fhNJets = new TH1F("hNJets","N Reconstructed jets",11,-0.5,10.5);
131 fhEtaPhiSpread = new TH2F("hEtaPhiSpread","#eta - #phi Distribution of Reconstructed Jets",100,-0.5,0.5,100,-0.5,0.5);
132 fhEtaPhiSpread->Sumw2();
133 fhNJets->SetXTitle("N_{jets}^{reco}/event");
134 fhNJets->SetYTitle("N_{events}");
137 fhJetEt->SetFillColor(16);
138 fhJetEt->SetXTitle("E_{T}^{reco}");
140 fhJetEta->SetFillColor(16);
141 fhJetEta->SetXTitle("#eta_{jet}^{reco}");
143 fhJetPhi->SetFillColor(16);
144 fhJetPhi->SetXTitle("#phi_{jet}^{reco}");
146 fhPartonEta->SetFillColor(16);
147 fhPartonEta->SetXTitle("#eta_{parton}");
149 fhPartonPhi->SetFillColor(16);
150 fhPartonPhi->SetXTitle("#phi_{parton}");
152 fhPartonPL->SetXTitle("p (GeV/c)");
153 fhPartonJT->SetXTitle("p (GeV/c)");
155 fhPartonFragmFcn->SetXTitle("Z = p_{T}^{Chg}/E_{T}^{parton}");
157 //Jet component properties
159 fhJetPL->SetXTitle("p (GeV/c)");
160 fhJetJT->SetXTitle("p (GeV/c)");
161 fhFragmFcn->SetXTitle("Z = p_{T}^{Chg}/E_{T}^{reco}");
162 fhPartonFragmFcn->SetXTitle("Z = p_{T}^{Chg}/E_{T}^{reco}");
164 fhEtaDiff->SetXTitle("#eta_{jet}^{reco}-#eta_{jet}^{input}");
165 fhPhiDiff->SetXTitle("#phi_{jet}^{reco}-#phi_{jet}^{input}");
166 fhEtaPhiSpread->SetXTitle("#eta");
167 fhEtaPhiSpread->SetYTitle("#phi");
169 //======================= CASE 2 ======================================
172 fhFragmFcn2 = new TH1F("hFragmFcn2","Fragmentation Function",100,0,1);
173 fhFragmFcn2->Sumw2();
174 fhJetPT2 = new TH1F("hJetPT2","P_{T} Distribution",200,0,200);
176 fhPartonPT2 = new TH1F("hPartonPT2","Parton P_{T} Distribution",200,0,1);
177 fhPartonPT2->Sumw2();
178 fhPartonFragmFcn2 = new TH1F("hPartonFragmFcn2","Parton Fragmentation Function",100,0,1);
179 fhPartonFragmFcn2->Sumw2();
180 fhPartonJT2 = new TH1F("hPartonJT2","Track Momentum Perpendicular to Parton Axis",100,0.,10.);
181 fhPartonJT2->Sumw2();
182 fhPartonPL2 = new TH1F("hPartonPL2","Track Momentum Parallel to Parton Axis ",100,0.,100.);
183 fhPartonPL2->Sumw2();
184 fhJetJT2 = new TH1F("hJetJT2","Track Momentum Perpendicular to Jet Axis",100,0.,10.);
186 fhJetPL2 = new TH1F("hJetPL2","Track Momentum Parallel to Jet Axis ",100,0.,100.);
188 fhJetEt2 = new TH1F("hJetEt2","E_{T}^{reco}",250,0.,250.);
190 fhJetEta2 = new TH1F("hJetEta2","#eta_{jet}^{reco}",180,-0.9,0.9);
192 fhJetPhi2 = new TH1F("hJetPhi2","#phi_{jet}^{reco}",62,0.,3.1);
194 fhPartonEta2 = new TH1F("hPartonEta2","#eta_{Parton}",180,-0.9,0.9);
195 fhPartonEta2->Sumw2();
196 fhPartonPhi2 = new TH1F("hPartonPhi2","#phi_{Parton}",62,0.,3.1);
197 fhPartonPhi2->Sumw2();
198 fhEtaDiff2 = new TH1F("hEtaDiff2","#eta_{jet}^{reco}-#eta_{jet}^{input}",100,-0.5,0.5);
200 fhPhiDiff2 = new TH1F("hPhiDiff2","#phi_{jet}^{reco}-#phi_{jet}^{input}",100,-0.5,0.5);
202 fhEtaPhiSpread2 = new TH2F("hEtaPhiSpread2","#eta - #phi Distribution of Reconstructed Jets",100,-0.5,0.5,100,-0.5,0.5);
203 fhEtaPhiSpread2->Sumw2();
204 fhNJets2 = new TH1F("hNJets2","N Reconstructed jets",11,-0.5,10.5);
206 fhJetEtSecond2 = new TH1F("hJetEtSecond2","E_{T}^{reco}",250,0.,250.);
207 fhJetEtSecond2->Sumw2();
208 fhJetEtRatio2 = new TH1F("hJetEtRatio2","Ratio of Second Highest to Highest",100,0,1);
209 fhJetEtRatio2->Sumw2();
210 fhEtaPhiDist2 = new TH1F("hEtaPhiDist2","Angular Distance Between First and Second",100,0,3);
211 fhEtaPhiDist2->Sumw2();
213 fhInputOutput= new TH2F("hInputOutput","Input and Reconstruction Correlations;Input;Output",200,0,200,200,0,200); //("hJetEtRatio2","Ratio of Second Highest to Highest",100,0,1);
215 //============================== Reconstruction Bin Comparison ============================================
217 fhRecoBinPt =new TH1F("fhRecoBinPt","Reconstructed Pt Distribution",200,0,200);
218 fhRecoBinPt->Sumw2();
219 fhRecoBinPartonPt = new TH1F("fhRecoBinPartonPt","Input Pt Distribution",200,0,200);
220 fhRecoBinPartonPt->Sumw2();
221 fhRecoBinFragmFcn =new TH1F("fhRecoBinFragmFcn","Reconstructed Frag. Fcn",100,0,1);
222 fhRecoBinFragmFcn->Sumw2();
223 fhRecoBinPartonFragmFcn = new TH1F("fhRecoBinPartonFragmFcn","Input Bin Fragm Fcn Distribution",100,0,1);
224 fhRecoBinPartonFragmFcn->Sumw2();
225 fhRecoBinJetEt = new TH1F("fhRecoJetEt","E_{T}^{reco}",250,0.,250.);
226 fhRecoBinJetEt->Sumw2();
227 fhRecoBinInputJetEt = new TH1F("fhRecoInputJetEt","E_{T}^{reco}",250,0.,250.);
228 fhRecoBinInputJetEt->Sumw2();
231 fhJetInvE = new TH1F("fhJetInvE","#frac{1}{E_{R}}",100,0,1);
233 fhJetInvE2 = new TH1F("fhJetInvE2","#frac{1}{E_{R}}",100,0,1);
238 fInitialised = kTRUE;
242 AliEMCALJetFinderPlots::~AliEMCALJetFinderPlots()
244 // To ensure that all requested memory is returned
245 delete fhFragmFcn;// = new TH1F("hFragmFcn","Fragmentation Function",100,0,1);
246 delete fhPartonFragmFcn;// = new TH1F("hFragmFcn","Fragmentation Function",100,0,1);
247 delete fhPartonJT;// = new TH1F("hPartonJT","Track Momentum Perpendicular to Parton Axis",100,0.,10.);
248 delete fhPartonPL;// = new TH1F("hPartonPL","Track Momentum Parallel to Parton Axis ",100,0.,100.);
249 delete fhJetJT;// = new TH1F("hJetJT","Track Momentum Perpendicular to Jet Axis",100,0.,10.);
250 delete fhJetPL;// = new TH1F("hJetPL","Track Momentum Parallel to Jet Axis ",100,0.,100.);
251 delete fhJetEt;// = new TH1F("hJetEt","E_{T}^{reco}",250,0.,250.);
252 delete fhJetEta;// = new TH1F("hJetEta","#eta_{jet}^{reco}",180,-0.9,0.9);
253 delete fhJetPhi;// = new TH1F("hJetPhi","#phi_{jet}^{reco}",62,0.,3.1);
254 delete fhPartonEta;// = new TH1F("hPartonEta","#eta_{Parton}",180,-0.9,0.9);
255 delete fhPartonPhi;// = new TH1F("hPartonPhi","#phi_{Parton}",62,0.,3.1);
256 delete fhEtaDiff;// = new TH1F("hEtaDiff","#eta_{jet}^{reco}-#eta_{jet}^{input}",100,-0.5,0.5);
257 delete fhPhiDiff;// = new TH1F("hPhiDiff","#phi_{jet}^{reco}-#phi_{jet}^{input}",100,-0.5,0.5);
258 delete fhNJets;// = new TH1F("hNJets","N Reconstructed jets",11,-0.5,10.5);
259 delete fhEtaPhiSpread;
261 delete fhFragmFcn2; // ("hFragmFcn2","Fragmentation Function",100,0,1);
262 delete fhPartonFragmFcn2;// ("hFragmFcn2","Parton Fragmentation Function",100,0,1);
263 delete fhPartonJT2; // ("hPartonJT2","Track Momentum Perpendicular to Parton Axis",100,0.,10.);
264 delete fhPartonPL2; // ("hPartonPL2","Track Momentum Parallel to Parton Axis ",100,0.,100.);
265 delete fhJetJT2; // ("hJetJT2","Track Momentum Perpendicular to Jet Axis",100,0.,10.);
266 delete fhJetPL2; // ("hJetPL2","Track Momentum Parallel to Jet Axis ",100,0.,100.);
267 delete fhJetEt2; // ("hJetEt2","E_{T}^{reco}",250,0.,250.);
268 delete fhJetEta2; // ("hJetEta2","#eta_{jet}^{reco}",180,-0.9,0.9);
269 delete fhJetPhi2; // ("hJetPhi2","#phi_{jet}^{reco}",62,0.,3.1);
270 delete fhPartonEta2; // ("hPartonEta2","#eta_{Parton}",180,-0.9,0.9);
271 delete fhPartonPhi2; // ("hPartonPhi2","#phi_{Parton}",62,0.,3.1);
272 delete fhEtaDiff2; // ("hEtaDiff2","#eta_{jet}^{reco}-#eta_{jet}^{input}",100,-0.5,0.5);
273 delete fhPhiDiff2; // ("hPhiDiff2","#phi_{jet}^{reco}-#phi_{jet}^{input}",100,-0.5,0.5);
274 delete fhEtaPhiSpread2; // ("hEtaPhiSpread2","#eta - #phi Distribution
275 //of Reconstructed Jets",192,-0.7,0.7,288,pi/3,pi);
276 delete fhNJets2; // ("hNJets2","N Reconstructed jets",11,-0.5,10.5);
277 delete fhJetEtSecond2; //("hJetEtSecond2","E_{T}^{reco}",250,0.,250.);
278 delete fhJetEtRatio2; //("hJetEtRatio2","Ratio of Second Highest to Highest",100,0,1);
279 delete fhEtaPhiDist2; //("hEtaPhiDist2","Angular Distance Between First and Second",100,0,3);
281 delete fhRecoBinPt; // ("fhRecoBinPt","Reconstructed Pt Distribution",100,0,1);
282 delete fhRecoBinPartonPt; // ("fhRecoBinPartonPt","Input Pt Distribution",100,0,1);
283 delete fhRecoBinJetEt; // ("fhRecoJetEt","E_{T}^{reco}",250,0.,250.);
284 delete fhRecoBinInputJetEt; // ("fhRecoInputJetEt","E_{T}^{reco}",250,0.,250.);
286 delete fhJetPT ;// new TH1F("hJetPT","P_{T} Distribution",200,0,200);
287 delete fhPartonPT ;// new TH1F("hPartonPT","Parton P_{T} Distribution",200,0,1);
288 delete fhJetPT2 ;// new TH1F("hJetPT","P_{T} Distribution",200,0,200);
289 delete fhPartonPT2 ;// new TH1F("hPartonPT","Parton P_{T} Distribution",200,0,1);
290 delete fhRecoBinFragmFcn;//new TH1F("fhRecoBinFragmFcn","Reconstructed Frag. Fcn",100,0,1);
291 delete fhRecoBinPartonFragmFcn;// new TH1F("fhRecoBinPartonFragmFcn","Input Bin Fragm Fcn Distribution",100,0,1);
292 delete fhJetInvE;// = new TH1F("fhJetInvE","#frac{1}{E_{R}}",100,0,1);
293 delete fhJetInvE2;// = new TH1F("fhJetInvE","#frac{1}{E_{R}}",100,0,1);
297 void AliEMCALJetFinderPlots::FillFromOutput(AliEMCALJetFinderOutput* output)
299 // Fill histograms from an output object
300 if (!fInitialised) InitPlots();
302 if (!fOutput) return;
303 fhNJets->Fill(fOutput->GetNJets());
304 Bool_t doesJetMeetBinCriteria = 0;
305 AliEMCALJet* jethighest=0;
306 AliEMCALJet* jetsecond=0;
307 // Find Highest and Second Highest Jet
308 // (NB!!!!!!!) Pointing into the EMCAL!!!!!!
310 // =========================== All cases ===================================
313 // I will make a little array of jet indices for which jets are in
314 // the EMCAL then my counter can loop from 0 below - but it will
315 // be the index of the array of applicable jets
320 for (Int_t appc=0;appc<fOutput->GetNJets();appc++)
321 { // Check all jets for applicability
322 Float_t eta = fOutput->GetJet(appc)->Eta();
323 Float_t phi = fOutput->GetJet(appc)->Phi();
324 if (eta > -0.7 && eta < 0.7 && phi > 1./3.*TMath::Pi() && phi < TMath::Pi())
325 { // Then jet is applicable
326 appjet[numappjet]=appc;
334 Float_t theta = 2.0*atan(exp(-fOutput->GetParton(0)->Eta()));
335 Float_t et = fOutput->GetParton(0)->Energy() * TMath::Sin(theta);
336 if (fOutput->GetNJets()>1)
338 for (Int_t counter = 0; counter<numappjet;counter++)
342 jethighest = fOutput->GetJet(appjet[0]);
343 jetsecond = fOutput->GetJet(appjet[1]);
347 Float_t energyhighest = jethighest->Energy();
348 Float_t energysecond = jetsecond->Energy();
350 if ((fOutput->GetJet(appjet[counter]))->Energy()>energyhighest)
352 jetsecond=jethighest;
353 jethighest=fOutput->GetJet(appjet[counter]);
354 }else if ((fOutput->GetJet(appjet[counter]))->Energy()>energysecond)
356 jetsecond=fOutput->GetJet(appjet[counter]);
363 Float_t eta = fOutput->GetJet(0)->Eta();
364 Float_t phi = fOutput->GetJet(0)->Phi();
365 if (eta > -0.7 && eta < 0.7 && phi > 1./3.*TMath::Pi() && phi < TMath::Pi())
366 { // Then jet is applicable
367 jethighest=fOutput->GetJet(0);
371 Error("FillFromOutput","There is only one jet and it isn't in the area of applicability");
375 if ( 95.0 < jethighest->Energy() && jethighest->Energy() < 105.0 )
377 doesJetMeetBinCriteria = 1;
378 fhRecoBinJetEt->Fill(jethighest->Energy());
379 fhRecoBinInputJetEt->Fill(et);
381 fhInputOutput->Fill(et,jethighest->Energy());
387 //========================= CASE 2 ===========================
388 Int_t nPartons = fOutput->GetNPartons();
389 fhNJets2->Fill(fOutput->GetNJets());
390 AliEMCALParton* parton;
392 // End finding highest and second highest and continue
393 fhJetEt2->Fill(jethighest->Energy());
394 fhJetInvE2->Fill(1.0/jethighest->Energy());
395 fhJetEta2->Fill(jethighest->Eta() );
396 fhJetPhi2->Fill(jethighest->Phi() );
397 if (nPartons ==0) return;
398 parton = fOutput->GetParton(0);
400 fhPartonEta2->Fill( parton->Eta() );
401 fhPartonPhi2->Fill( parton->Phi() );
403 //hJetEtDiff->Fill( jet->Energy() - parton->Energy() );
404 fhEtaDiff2->Fill( jethighest->Eta() - parton->Eta() );
405 fhPhiDiff2->Fill( jethighest->Phi() - parton->Phi() );
406 fhEtaPhiSpread2->Fill(jethighest->Eta()-parton->Eta(),jethighest->Phi() - parton->Phi());
407 fhJetEtSecond2->Fill(jetsecond->Energy());
408 fhJetEtRatio2->Fill(jetsecond->Energy()/jethighest->Energy());
409 fhEtaPhiDist2->Fill( TMath::Sqrt((jethighest->Eta() - jetsecond->Eta())*(jethighest->Eta() - jetsecond->Eta())
410 + (jethighest->Phi() - jetsecond->Phi())*(jethighest->Phi() - jetsecond->Phi()) ));
412 Float_t *pt,*phi,*eta;
414 pt = new Float_t[parton->GetNTracks()];
415 eta = new Float_t[parton->GetNTracks()];
416 phi = new Float_t[parton->GetNTracks()];
417 pdg = new Int_t[parton->GetNTracks()];*/
426 parton->GetTrackList(pt,eta,phi,pdg);
427 for(Int_t iT=0; iT< parton->GetNTracks() ; iT++ )
429 if ( (eta[iT]-parton->Eta())*(eta[iT]-parton->Eta())+
430 (phi[iT]-parton->Phi())*(phi[iT]-parton->Phi()) >fConeRadius * fConeRadius ) continue;
431 Double_t tt = 2.0*atan(exp(-eta[iT])); // These names are short to make the equation manageable
432 Double_t rt = 2.0*atan(exp(-parton->Eta()));
433 Double_t ctt = cos(tt);
434 Double_t crt = cos(rt);
435 Double_t stt = sin(tt);
436 Double_t srt = sin(rt);
437 Double_t ctp = cos(phi[iT]);
438 Double_t crp = cos(parton->Phi());
439 Double_t stp = sin(phi[iT]);
440 Double_t srp = sin(parton->Phi());
441 //Double_t alpha = acos(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt);
443 if (TMath::Abs(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt) > 0.9990)
448 alpha = TMath::ACos(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt);
450 Double_t correctp = pt[iT]/stt;
451 fhPartonPL2->Fill( correctp*cos(alpha));
452 if ( (parton->Eta()-eta[iT])*(parton->Eta()-eta[iT]) +
453 (parton->Phi()-phi[iT])*(parton->Phi()-phi[iT]) < 0.2*0.2 )
454 fhPartonJT2->Fill( correctp*sin(alpha));
455 fhPartonPT2->Fill(correctp*sin(tt));
456 if (fNominalEnergy == 0.0) {
457 fhPartonFragmFcn2->Fill( correctp*sin(tt)/parton->Energy() );
460 fhPartonFragmFcn2->Fill(correctp*sin(tt)/fNominalEnergy);
462 if (doesJetMeetBinCriteria)
464 fhRecoBinPartonPt->Fill(correctp*sin(tt)); // ("fhRecoBinPt","Reconstructed Pt Distribution",100,0,1);
469 pt = new Float_t[jet->NTracks()];
470 eta = new Float_t[jet->NTracks()];
471 phi = new Float_t[jet->NTracks()];
472 pdg = new Int_t[jet->NTracks()];*/
473 jethighest->TrackList(pt,eta,phi,pdg);
474 for(Int_t iT=0; iT< jethighest->NTracks() ; iT++ )
476 Double_t tt = 2.0*atan(exp(-eta[iT])); // These names are short to make the equation manageable
477 Double_t rt = 2.0*atan(exp(-jethighest->Eta()));
478 Double_t ctt = cos(tt);
479 Double_t crt = cos(rt);
480 Double_t stt = sin(tt);
481 Double_t srt = sin(rt);
482 Double_t ctp = cos(phi[iT]);
483 Double_t crp = cos(jethighest->Phi());
484 Double_t stp = sin(phi[iT]);
485 Double_t srp = sin(jethighest->Phi());
486 // Double_t alpha = acos(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt);
488 if (TMath::Abs(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt) > 0.9990)
493 alpha = TMath::ACos(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt);
495 Double_t correctp = pt[iT]/stt;
496 fhJetPL2->Fill( correctp*cos(alpha));
497 if ( (jethighest->Eta()-eta[iT])*(jethighest->Eta()-eta[iT]) +
498 (jethighest->Phi()-phi[iT])*(jethighest->Phi()-phi[iT]) < 0.2*0.2 )
499 fhJetJT2->Fill( correctp*sin(alpha));
500 fhJetPT2->Fill(correctp*sin(tt));
501 if (fNominalEnergy==0.0){
502 fhFragmFcn2->Fill( correctp*sin(tt)/jethighest->Energy() );
505 fhFragmFcn2->Fill( correctp*sin(tt)/fNominalEnergy );
507 if (doesJetMeetBinCriteria)
509 fhRecoBinPt->Fill(correctp*sin(tt)); // ("fhRecoBinPt","Reconstructed Pt Distribution",100,0,1);
517 //========================= CASE 1 ===========================
518 Int_t nPartons = fOutput->GetNPartons();
519 if (fOutput->GetNJets()!=1) return;
520 AliEMCALParton* parton;
522 jet = jethighest;//fOutput->GetJet(0);
523 fhJetEt->Fill(jet->Energy());
524 fhJetInvE->Fill(1.0/jethighest->Energy());
525 fhJetEta->Fill(jet->Eta() );
526 fhJetPhi->Fill(jet->Phi() );
527 if (nPartons ==0) return;
528 parton = fOutput->GetParton(0);
530 fhPartonEta->Fill( parton->Eta() );
531 fhPartonPhi->Fill( parton->Phi() );
533 //hJetEtDiff->Fill( jet->Energy() - parton->Energy() );
534 fhEtaDiff->Fill( jet->Eta() - parton->Eta() );
535 fhPhiDiff->Fill( jet->Phi() - parton->Phi() );
536 fhEtaPhiSpread->Fill(jet->Eta()-parton->Eta(),jet->Phi() - parton->Phi());
538 Float_t *pt,*phi,*eta;
540 pt = new Float_t[parton->GetNTracks()];
541 eta = new Float_t[parton->GetNTracks()];
542 phi = new Float_t[parton->GetNTracks()];
543 pdg = new Int_t[parton->GetNTracks()];*/
552 parton->GetTrackList(pt,eta,phi,pdg);
553 for(Int_t iT=0; iT< parton->GetNTracks() ; iT++ )
555 if ( (eta[iT]-parton->Eta())*(eta[iT]-parton->Eta())+
556 (phi[iT]-parton->Phi())*(phi[iT]-parton->Phi()) >fConeRadius * fConeRadius ) continue;
557 Double_t tt = 2.0*atan(exp(-eta[iT])); // These names are short to make the equation manageable
558 Double_t rt = 2.0*atan(exp(-parton->Eta()));
559 Double_t ctt = cos(tt);
560 Double_t crt = cos(rt);
561 Double_t stt = sin(tt);
562 Double_t srt = sin(rt);
563 Double_t ctp = cos(phi[iT]);
564 Double_t crp = cos(parton->Phi());
565 Double_t stp = sin(phi[iT]);
566 Double_t srp = sin(parton->Phi());
567 // Double_t alpha = acos(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt);
569 if (TMath::Abs(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt) > 0.9990)
574 alpha = TMath::ACos(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt); }
575 Double_t correctp = pt[iT]/stt;
576 fhPartonPL->Fill( correctp*cos(alpha));
577 if ( (parton->Eta()-eta[iT])*(parton->Eta()-eta[iT]) +
578 (parton->Phi()-phi[iT])*(parton->Phi()-phi[iT]) < 0.2*0.2 )
579 fhPartonJT->Fill( correctp*sin(alpha));
580 if (fNominalEnergy == 0.0) {
581 fhPartonFragmFcn->Fill( correctp*sin(tt)/parton->Energy() );
582 fhPartonPT->Fill(correctp*sin(tt));
585 fhPartonFragmFcn->Fill(correctp*sin(tt)/fNominalEnergy);
587 if (doesJetMeetBinCriteria)
589 fhRecoBinPartonPt->Fill(correctp*sin(tt)); // ("fhRecoBinPt","Reconstructed Pt Distribution",100,0,1);
594 pt = new Float_t[jet->NTracks()];
595 eta = new Float_t[jet->NTracks()];
596 phi = new Float_t[jet->NTracks()];
597 pdg = new Int_t[jet->NTracks()];*/
598 jet->TrackList(pt,eta,phi,pdg);
599 for(Int_t iT=0; iT< jet->NTracks() ; iT++ )
601 Double_t tt = 2.0*atan(exp(-eta[iT])); // These names are short to make the equation manageable
602 Double_t rt = 2.0*atan(exp(-jet->Eta()));
603 Double_t ctt = cos(tt);
604 Double_t crt = cos(rt);
605 Double_t stt = sin(tt);
606 Double_t srt = sin(rt);
607 Double_t ctp = cos(phi[iT]);
608 Double_t crp = cos(jet->Phi());
609 Double_t stp = sin(phi[iT]);
610 Double_t srp = sin(jet->Phi());
611 //Info("plots","acos(%1.16f)\nstt=%f\npt=%f",crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt,stt,pt[iT]);
612 //Info("plots","diff to 1 %f",1.0-crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt);
614 if (TMath::Abs(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt) > 0.9990)
619 alpha = TMath::ACos(crp*ctp*srt*stt+srp*stp*srt*stt+crt*ctt);
621 Double_t correctp = pt[iT]/stt;
622 fhJetPL->Fill( correctp*cos(alpha));
623 if ( (jet->Eta()-eta[iT])*(jet->Eta()-eta[iT]) +
624 (jet->Phi()-phi[iT])*(jet->Phi()-phi[iT]) < 0.2*0.2 )
625 fhJetJT->Fill( correctp*sin(alpha));
626 fhJetPT->Fill(correctp*sin(tt));
627 if (fNominalEnergy==0.0){
628 fhFragmFcn->Fill( correctp*sin(tt)/jet->Energy() ); // This is the jet fragmentation function
631 fhFragmFcn->Fill( correctp*sin(tt)/fNominalEnergy );
633 if (doesJetMeetBinCriteria)
635 fhRecoBinPt->Fill(correctp*sin(tt)); // ("fhRecoBinPt","Reconstructed Pt Distribution",100,0,1);