]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetTriggerQA.cxx
updates trigger QA
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalJetTriggerQA.cxx
CommitLineData
0531c107 1//
2// Jet trigger QA analysis task.
3//
4// Author: M.Verweij
5
6#include <TClonesArray.h>
7#include <TH1F.h>
8#include <TH2F.h>
9#include <TH3F.h>
10#include <THnSparse.h>
11#include <TList.h>
12#include <TLorentzVector.h>
13
14#include "AliVCluster.h"
15#include "AliVTrack.h"
16#include "AliEmcalJet.h"
17#include "AliRhoParameter.h"
18#include "AliLog.h"
0531c107 19#include "AliEmcalParticle.h"
20#include "AliAODCaloTrigger.h"
21#include "AliEMCALGeometry.h"
22#include "AliVCaloCells.h"
9e5eee5d 23#include "AliJetContainer.h"
24#include "AliClusterContainer.h"
698f34d8 25#include "AliParticleContainer.h"
584095b1 26#include "AliEmcalTriggerPatchInfo.h"
27#include "AliAODHeader.h"
a29bc208 28#include "AliPicoTrack.h"
0531c107 29
30#include "AliAnalysisTaskEmcalJetTriggerQA.h"
31
32ClassImp(AliAnalysisTaskEmcalJetTriggerQA)
33
34//________________________________________________________________________
35AliAnalysisTaskEmcalJetTriggerQA::AliAnalysisTaskEmcalJetTriggerQA() :
9239b066 36 AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalJetTriggerQA", kTRUE),
0531c107 37 fDebug(kFALSE),
0531c107 38 fTriggerClass(""),
9e5eee5d 39 fContainerFull(0),
40 fContainerCharged(1),
0531c107 41 fMaxPatchEnergy(0),
42 fTriggerType(-1),
43 fNFastOR(16),
44 fhNEvents(0),
2fa783ab 45 fHistRhovsCentFull(0),
46 fHistRhovsCentCharged(0),
698f34d8 47 fh3PtEtaPhiTracks(0),
a29bc208
CL
48 fh3PtEtaPhiTracksOnEmcal(0),
49 fh3PtEtaPhiTracksProp(0),
2d9ab573 50 fh2CentPtJetFull(0),
51 fh2CentPtJetCharged(0),
0531c107 52 fh3PtEtaPhiJetFull(0),
53 fh3PtEtaPhiJetCharged(0),
54 fh2NJetsPtFull(0),
55 fh2NJetsPtCharged(0),
56 fh3PtEtaAreaJetFull(0),
57 fh3PtEtaAreaJetCharged(0),
58 fh2PtNConstituentsCharged(0),
59 fh2PtNConstituents(0),
60 fh2PtMeanPtConstituentsCharged(0),
61 fh2PtMeanPtConstituentsNeutral(0),
62 fh2PtNEF(0),
3c709670 63 fh3NEFEtaPhi(0),
64 fh2NEFNConstituentsCharged(0),
65 fh2NEFNConstituentsNeutral(0),
0531c107 66 fh2Ptz(0),
3c709670 67 fh2PtzCharged(0),
0531c107 68 fh2PtLeadJet1VsLeadJet2(0),
69 fh3EEtaPhiCluster(0),
70 fh3PtLeadJet1VsPatchEnergy(0),
71 fh3PtLeadJet2VsPatchEnergy(0),
584095b1 72 fh3PatchEnergyEtaPhiCenterJ1(0),
73 fh3PatchEnergyEtaPhiCenterJ2(0),
698f34d8
CL
74 fh3PatchEnergyEtaPhiCenterJ1J2(0),
75 fh3PatchADCEnergyEtaPhiCenterJ1(0),
76 fh3PatchADCEnergyEtaPhiCenterJ2(0),
77 fh3PatchADCEnergyEtaPhiCenterJ1J2(0),
0714a353 78 fh2CellEnergyVsTime(0),
fd08af98 79 fh3EClusELeadingCellVsTime(0),
8d875525 80 fh3JetReacCent(0)
0531c107 81{
82 // Default constructor.
83
0531c107 84 SetMakeGeneralHistograms(kTRUE);
85}
86
87//________________________________________________________________________
88AliAnalysisTaskEmcalJetTriggerQA::AliAnalysisTaskEmcalJetTriggerQA(const char *name) :
9239b066 89 AliAnalysisTaskEmcalJet(name, kTRUE),
0531c107 90 fDebug(kFALSE),
0531c107 91 fTriggerClass(""),
9e5eee5d 92 fContainerFull(0),
93 fContainerCharged(1),
0531c107 94 fMaxPatchEnergy(0),
95 fTriggerType(-1),
96 fNFastOR(16),
97 fhNEvents(0),
2fa783ab 98 fHistRhovsCentFull(0),
99 fHistRhovsCentCharged(0),
698f34d8 100 fh3PtEtaPhiTracks(0),
a29bc208
CL
101 fh3PtEtaPhiTracksOnEmcal(0),
102 fh3PtEtaPhiTracksProp(0),
2d9ab573 103 fh2CentPtJetFull(0),
104 fh2CentPtJetCharged(0),
0531c107 105 fh3PtEtaPhiJetFull(0),
106 fh3PtEtaPhiJetCharged(0),
107 fh2NJetsPtFull(0),
108 fh2NJetsPtCharged(0),
109 fh3PtEtaAreaJetFull(0),
110 fh3PtEtaAreaJetCharged(0),
111 fh2PtNConstituentsCharged(0),
112 fh2PtNConstituents(0),
113 fh2PtMeanPtConstituentsCharged(0),
114 fh2PtMeanPtConstituentsNeutral(0),
115 fh2PtNEF(0),
3c709670 116 fh3NEFEtaPhi(0),
117 fh2NEFNConstituentsCharged(0),
118 fh2NEFNConstituentsNeutral(0),
0531c107 119 fh2Ptz(0),
3c709670 120 fh2PtzCharged(0),
0531c107 121 fh2PtLeadJet1VsLeadJet2(0),
122 fh3EEtaPhiCluster(0),
123 fh3PtLeadJet1VsPatchEnergy(0),
124 fh3PtLeadJet2VsPatchEnergy(0),
584095b1 125 fh3PatchEnergyEtaPhiCenterJ1(0),
126 fh3PatchEnergyEtaPhiCenterJ2(0),
698f34d8
CL
127 fh3PatchEnergyEtaPhiCenterJ1J2(0),
128 fh3PatchADCEnergyEtaPhiCenterJ1(0),
129 fh3PatchADCEnergyEtaPhiCenterJ2(0),
130 fh3PatchADCEnergyEtaPhiCenterJ1J2(0),
0714a353 131 fh2CellEnergyVsTime(0),
fd08af98 132 fh3EClusELeadingCellVsTime(0),
8d875525 133 fh3JetReacCent(0)
0531c107 134{
135 // Standard constructor.
136
137 SetMakeGeneralHistograms(kTRUE);
138}
139
140//________________________________________________________________________
141AliAnalysisTaskEmcalJetTriggerQA::~AliAnalysisTaskEmcalJetTriggerQA()
142{
143 // Destructor.
fd08af98 144 if (fOutput) {
145 delete fOutput; // delete output object list
146 fOutput = 0;
147 }
148
0531c107 149}
150
0531c107 151//________________________________________________________________________
152Bool_t AliAnalysisTaskEmcalJetTriggerQA::SelectEvent() {
153 //
154 // Decide if event should be selected for analysis
155 //
156
0531c107 157 fhNEvents->Fill(3.5);
158
159 if(!fTriggerClass.IsNull()) {
160 //Check if requested trigger was fired
8a468ef1 161 TString trigType1 = "J1";
162 TString trigType2 = "J2";
163 if(fTriggerClass.Contains("G")) {
164 trigType1 = "G1";
165 trigType1 = "G2";
166 }
167
0531c107 168 TString firedTrigClass = InputEvent()->GetFiredTriggerClasses();
8a468ef1 169 if(fTriggerClass.Contains(trigType1.Data()) && fTriggerClass.Contains(trigType2.Data())) { //if events with J1&&J2 are requested
170 if(!firedTrigClass.Contains(trigType1.Data()) || !firedTrigClass.Contains(trigType2.Data()) ) //check if both are fired
698f34d8 171 return kFALSE;
24f63577 172 }
2dba7c4c
MV
173 else {
174 if(!firedTrigClass.Contains(fTriggerClass))
175 return kFALSE;
8a468ef1 176 else if(fTriggerClass.Contains(trigType1.Data()) && firedTrigClass.Contains(trigType2.Data())) //if J2 is requested also add triggers which have J1&&J2. Reject if J1 is requested and J2 is fired
2dba7c4c
MV
177 return kFALSE;
178 }
0531c107 179 }
0531c107 180 fhNEvents->Fill(1.5);
181
182 return kTRUE;
0531c107 183}
184
185//________________________________________________________________________
2d9ab573 186void AliAnalysisTaskEmcalJetTriggerQA::FillTriggerPatchHistos() {
0531c107 187
2dba7c4c 188 //Fill trigger patch histos for main trigger
0531c107 189
584095b1 190 AliEmcalTriggerPatchInfo *patch = GetMainTriggerPatch();
191 if(patch) {
192 fMaxPatchEnergy = patch->GetPatchE();
698f34d8 193 Double_t patchADCGeV = patch->GetADCAmpGeVRough();
2dba7c4c 194 if(patch->IsJetLow() && !patch->IsJetHigh()) { //main patch only fired low threshold trigger
584095b1 195 fh3PatchEnergyEtaPhiCenterJ2->Fill(patch->GetPatchE(),patch->GetEtaGeo(),patch->GetPhiGeo());
698f34d8
CL
196 fh3PatchADCEnergyEtaPhiCenterJ2->Fill(patchADCGeV,patch->GetEtaGeo(),patch->GetPhiGeo());
197 }
2dba7c4c 198 else if(patch->IsJetHigh() && !patch->IsJetLow()) { //main patch only fired high threshold trigger - should never happen
584095b1 199 fh3PatchEnergyEtaPhiCenterJ1->Fill(patch->GetPatchE(),patch->GetEtaGeo(),patch->GetPhiGeo());
698f34d8
CL
200 fh3PatchADCEnergyEtaPhiCenterJ1->Fill(patchADCGeV,patch->GetEtaGeo(),patch->GetPhiGeo());
201 }
2dba7c4c 202 else if(patch->IsJetHigh() && patch->IsJetLow()) { //main patch fired both triggers
698f34d8
CL
203 fh3PatchEnergyEtaPhiCenterJ1J2->Fill(patch->GetPatchE(),patch->GetEtaGeo(),patch->GetPhiGeo());
204 fh3PatchADCEnergyEtaPhiCenterJ1J2->Fill(patchADCGeV,patch->GetEtaGeo(),patch->GetPhiGeo());
205 }
584095b1 206 }
0531c107 207}
208
0531c107 209//________________________________________________________________________
210void AliAnalysisTaskEmcalJetTriggerQA::UserCreateOutputObjects()
211{
212 // Create user output.
213
9239b066 214 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
0531c107 215
216 Bool_t oldStatus = TH1::AddDirectoryStatus();
217 TH1::AddDirectory(kFALSE);
218
219 fhNEvents = new TH1F("fhNEvents","fhNEvents;selection;N_{evt}",5,0,5);
220 fOutput->Add(fhNEvents);
221
2fa783ab 222 fHistRhovsCentFull = new TH2F("fHistRhovsCentFull", "fHistRhovsCentFull", 101, -1, 100, 300, 0., 300.);
223 fHistRhovsCentFull->GetXaxis()->SetTitle("Centrality (%)");
224 fHistRhovsCentFull->GetYaxis()->SetTitle("s#rho_{ch} (GeV/c * rad^{-1})");
225 fOutput->Add(fHistRhovsCentFull);
226
227 fHistRhovsCentCharged = new TH2F("fHistRhovsCentCharged", "fHistRhovsCentCharged", 101, -1, 100, 300, 0., 300.);
228 fHistRhovsCentCharged->GetXaxis()->SetTitle("Centrality (%)");
229 fHistRhovsCentCharged->GetYaxis()->SetTitle("#rho_{ch} (GeV/c * rad^{-1})");
230 fOutput->Add(fHistRhovsCentCharged);
fd08af98 231
2d9ab573 232 Int_t fgkNCentBins = 21;
fd08af98 233 Float_t kMinCent = 0.;
2d9ab573 234 Float_t kMaxCent = 105.;
fd08af98 235 Double_t *binsCent = new Double_t[fgkNCentBins+1];
236 for(Int_t i=0; i<=fgkNCentBins; i++) binsCent[i]=(Double_t)kMinCent + (kMaxCent-kMinCent)/fgkNCentBins*(Double_t)i ;
8d875525 237 binsCent[fgkNCentBins-1] = 100.5;
238 binsCent[fgkNCentBins] = 101.5;
fd08af98 239
240 Int_t fgkNdEPBins = 18*8;
241 Float_t kMindEP = 0.;
242 Float_t kMaxdEP = 1.*TMath::Pi()/2.;
243 Double_t *binsdEP = new Double_t[fgkNdEPBins+1];
244 for(Int_t i=0; i<=fgkNdEPBins; i++) binsdEP[i]=(Double_t)kMindEP + (kMaxdEP-kMindEP)/fgkNdEPBins*(Double_t)i ;
2fa783ab 245
8e49a788 246 Int_t fgkNPtBins = 200;
247 Float_t kMinPt = -50.;
584095b1 248 Float_t kMaxPt = 150.;
249 Double_t *binsPt = new Double_t[fgkNPtBins+1];
250 for(Int_t i=0; i<=fgkNPtBins; i++) binsPt[i]=(Double_t)kMinPt + (kMaxPt-kMinPt)/fgkNPtBins*(Double_t)i ;
251
2dba7c4c 252 Int_t fgkNPhiBins = 18*8;
584095b1 253 Float_t kMinPhi = 0.;
254 Float_t kMaxPhi = 2.*TMath::Pi();
255 Double_t *binsPhi = new Double_t[fgkNPhiBins+1];
256 for(Int_t i=0; i<=fgkNPhiBins; i++) binsPhi[i]=(Double_t)kMinPhi + (kMaxPhi-kMinPhi)/fgkNPhiBins*(Double_t)i ;
257
258 Int_t fgkNEtaBins = 100;
259 Float_t fgkEtaMin = -1.;
260 Float_t fgkEtaMax = 1.;
261 Double_t *binsEta=new Double_t[fgkNEtaBins+1];
262 for(Int_t i=0; i<=fgkNEtaBins; i++) binsEta[i]=(Double_t)fgkEtaMin + (fgkEtaMax-fgkEtaMin)/fgkNEtaBins*(Double_t)i ;
263
264 Int_t fgkNAreaBins = 100;
265 Float_t kMinArea = 0.;
266 Float_t kMaxArea = 1.;
267 Double_t *binsArea = new Double_t[fgkNAreaBins+1];
268 for(Int_t i=0; i<=fgkNAreaBins; i++) binsArea[i]=(Double_t)kMinArea + (kMaxArea-kMinArea)/fgkNAreaBins*(Double_t)i ;
269
270 Int_t fgkNConstBins = 100;
271 Float_t kMinConst = 0.;
272 Float_t kMaxConst = 100.;
273 Double_t *binsConst = new Double_t[fgkNConstBins+1];
274 for(Int_t i=0; i<=fgkNConstBins; i++) binsConst[i]=(Double_t)kMinConst + (kMaxConst-kMinConst)/fgkNConstBins*(Double_t)i ;
275
6c90d6c8 276 Int_t fgkNMeanPtBins = 100;
584095b1 277 Float_t kMinMeanPt = 0.;
278 Float_t kMaxMeanPt = 20.;
279 Double_t *binsMeanPt = new Double_t[fgkNMeanPtBins+1];
280 for(Int_t i=0; i<=fgkNMeanPtBins; i++) binsMeanPt[i]=(Double_t)kMinMeanPt + (kMaxMeanPt-kMinMeanPt)/fgkNMeanPtBins*(Double_t)i ;
281
282 Int_t fgkNNEFBins = 101;
283 Float_t kMinNEF = 0.;
284 Float_t kMaxNEF = 1.01;
285 Double_t *binsNEF = new Double_t[fgkNNEFBins+1];
286 for(Int_t i=0; i<=fgkNNEFBins; i++) binsNEF[i]=(Double_t)kMinNEF + (kMaxNEF-kMinNEF)/fgkNNEFBins*(Double_t)i ;
287
288 Int_t fgkNzBins = 101;
289 Float_t kMinz = 0.;
290 Float_t kMaxz = 1.01;
291 Double_t *binsz = new Double_t[fgkNzBins+1];
292 for(Int_t i=0; i<=fgkNzBins; i++) binsz[i]=(Double_t)kMinz + (kMaxz-kMinz)/fgkNzBins*(Double_t)i ;
293
294 Int_t fgkNJetTypeBins = 2;
295 Float_t kMinJetType = -0.5;
296 Float_t kMaxJetType = 1.5;
297 Double_t *binsJetType = new Double_t[fgkNJetTypeBins+1];
298 for(Int_t i=0; i<=fgkNJetTypeBins; i++) binsJetType[i]=(Double_t)kMinJetType + (kMaxJetType-kMinJetType)/fgkNJetTypeBins*(Double_t)i ;
299
1e2a9888 300 Int_t fgkNTimeBins = 100;
301 Float_t kMinTime = -200.;
302 Float_t kMaxTime = 200;
584095b1 303 Double_t *binsTime = new Double_t[fgkNTimeBins+1];
304 for(Int_t i=0; i<=fgkNTimeBins; i++) binsTime[i]=(Double_t)kMinTime + (kMaxTime-kMinTime)/fgkNTimeBins*(Double_t)i ;
305
306 Double_t enBinEdges[3][2];
307 enBinEdges[0][0] = 1.; //10 bins
308 enBinEdges[0][1] = 0.1;
309 enBinEdges[1][0] = 5.; //8 bins
310 enBinEdges[1][1] = 0.5;
311 enBinEdges[2][0] = 100.;//95 bins
312 enBinEdges[2][1] = 1.;
313
314 const Float_t enmin1 = 0;
315 const Float_t enmax1 = enBinEdges[0][0];
316 const Float_t enmin2 = enmax1 ;
317 const Float_t enmax2 = enBinEdges[1][0];
318 const Float_t enmin3 = enmax2 ;
319 const Float_t enmax3 = enBinEdges[2][0];//fgkEnMax;
320 const Int_t nbin11 = (int)((enmax1-enmin1)/enBinEdges[0][1]);
321 const Int_t nbin12 = (int)((enmax2-enmin2)/enBinEdges[1][1])+nbin11;
322 const Int_t nbin13 = (int)((enmax3-enmin3)/enBinEdges[2][1])+nbin12;
323
324 Int_t fgkNEnBins=nbin13;
325 Double_t *binsEn=new Double_t[fgkNEnBins+1];
326 for(Int_t i=0; i<=fgkNEnBins; i++) {
327 if(i<=nbin11) binsEn[i]=(Double_t)enmin1 + (enmax1-enmin1)/nbin11*(Double_t)i ;
328 if(i<=nbin12 && i>nbin11) binsEn[i]=(Double_t)enmin2 + (enmax2-enmin2)/(nbin12-nbin11)*((Double_t)i-(Double_t)nbin11) ;
329 if(i<=nbin13 && i>nbin12) binsEn[i]=(Double_t)enmin3 + (enmax3-enmin3)/(nbin13-nbin12)*((Double_t)i-(Double_t)nbin12) ;
330 }
331
698f34d8
CL
332 fh3PtEtaPhiTracks = new TH3F("fh3PtEtaPhiTracks","fh3PtEtaPhiTracks;#it{p}_{T}^{track};#eta;#varphi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
333 fOutput->Add(fh3PtEtaPhiTracks);
584095b1 334
a29bc208
CL
335 fh3PtEtaPhiTracksOnEmcal = new TH3F("fh3PtEtaPhiTracksOnEmcal","fh3PtEtaPhiTracksOnEmcal;#it{p}_{T}^{track};#eta;#varphi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
336 fOutput->Add(fh3PtEtaPhiTracksOnEmcal);
337
338 fh3PtEtaPhiTracksProp = new TH3F("fh3PtEtaPhiTracksProp","fh3PtEtaPhiTracksProp;#it{p}_{T}^{track};#eta;#varphi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
339 fOutput->Add(fh3PtEtaPhiTracksProp);
340
2d9ab573 341 fh2CentPtJetFull = new TH2F("fh2CentPtJetFull","fh2CentPtJetFull;cent;#it{p}_{T}^{jet}",fgkNCentBins,binsCent,fgkNPtBins,binsPt);
342 fOutput->Add(fh2CentPtJetFull);
343
344 fh2CentPtJetCharged = new TH2F("fh2CentPtJetCharged","fh2CentPtJetCharged;cent;#it{p}_{T}^{jet}",fgkNCentBins,binsCent,fgkNPtBins,binsPt);
345 fOutput->Add(fh2CentPtJetCharged);
346
584095b1 347 fh3PtEtaPhiJetFull = new TH3F("fh3PtEtaPhiJetFull","fh3PtEtaPhiJetFull;#it{p}_{T}^{jet};#eta;#varphi",fgkNPtBins,binsPt,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
0531c107 348 fOutput->Add(fh3PtEtaPhiJetFull);
349
584095b1 350 fh3PtEtaPhiJetCharged = new TH3F("fh3PtEtaPhiJetCharged","fh3PtEtaPhiJetCharged;#it{p}_{T}^{jet};#eta;#varphi",fgkNPtBins,binsPt,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
0531c107 351 fOutput->Add(fh3PtEtaPhiJetCharged);
352
584095b1 353 fh2NJetsPtFull = new TH2F("fh2NJetsPtFull","fh2NJetsPtFull;N_{jets};#it{p}_{T}^{jet}",20,-0.5,19.5,fgkNPtBins,binsPt);
0531c107 354 fOutput->Add(fh2NJetsPtFull);
355
584095b1 356 fh2NJetsPtCharged = new TH2F("fh2NJetsPtCharged","fh2NJetsPtCharged;N_{jets};#it{p}_{T}^{jet}",20,-0.5,19.5,fgkNPtBins,binsPt);
0531c107 357 fOutput->Add(fh2NJetsPtCharged);
358
584095b1 359 fh3PtEtaAreaJetFull = new TH3F("fh3PtEtaAreaJetFull","fh3PtEtaAreaJetFull;#it{p}_{T}^{jet};#eta;A",fgkNPtBins,binsPt,fgkNEtaBins,binsEta,fgkNAreaBins,binsArea);
0531c107 360 fOutput->Add(fh3PtEtaAreaJetFull);
361
584095b1 362 fh3PtEtaAreaJetCharged = new TH3F("fh3PtEtaAreaJetCharged","fh3PtEtaAreaJetCharged;#it{p}_{T}^{jet};#eta;A",fgkNPtBins,binsPt,fgkNEtaBins,binsEta,fgkNAreaBins,binsArea);
0531c107 363 fOutput->Add(fh3PtEtaAreaJetCharged);
364
584095b1 365 fh2PtNConstituentsCharged = new TH2F("fh2PtNConstituentsCharged","fh2PtNConstituentsCharged;#it{p}_{T}^{jet};N_{charged constituents}",fgkNPtBins,binsPt,fgkNConstBins,binsConst);
0531c107 366 fOutput->Add(fh2PtNConstituentsCharged);
367
584095b1 368 fh2PtNConstituents = new TH2F("fh2PtNConstituents","fh2PtNConstituents;#it{p}_{T}^{jet};N_{constituents}",fgkNPtBins,binsPt,fgkNConstBins,binsConst);
0531c107 369 fOutput->Add(fh2PtNConstituents);
370
584095b1 371 fh2PtMeanPtConstituentsCharged = new TH2F("fh2PtMeanPtConstituentsCharged","fh2PtMeanPtConstituentsCharged;#it{p}_{T}^{jet};charged #langle #it{p}_{T} #rangle",fgkNPtBins,binsPt,fgkNMeanPtBins,binsMeanPt);
0531c107 372 fOutput->Add(fh2PtMeanPtConstituentsCharged);
373
584095b1 374 fh2PtMeanPtConstituentsNeutral = new TH2F("fh2PtMeanPtConstituentsNeutral","fh2PtMeanPtConstituentsNeutral;#it{p}_{T}^{jet};neutral langle #it{p}_{T} #rangle",fgkNPtBins,binsPt,fgkNMeanPtBins,binsMeanPt);
0531c107 375 fOutput->Add(fh2PtMeanPtConstituentsNeutral);
376
584095b1 377 fh2PtNEF = new TH2F("fh2PtNEF","fh2PtNEF;#it{p}_{T}^{jet};NEF",fgkNPtBins,binsPt,fgkNNEFBins,binsNEF);
0531c107 378 fOutput->Add(fh2PtNEF);
379
584095b1 380 fh3NEFEtaPhi = new TH3F("fh3NEFEtaPhi","fh3NEFEtaPhi;NEF;#eta;#varphi",fgkNNEFBins,binsNEF,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
3c709670 381 fOutput->Add(fh3NEFEtaPhi);
382
584095b1 383 fh2NEFNConstituentsCharged = new TH2F("fh2NEFNConstituentsCharged","fh2NEFNConstituentsCharged;NEF;N_{charged constituents}",fgkNNEFBins,binsNEF,fgkNConstBins,binsConst);
3c709670 384 fOutput->Add(fh2NEFNConstituentsCharged);
385
584095b1 386 fh2NEFNConstituentsNeutral = new TH2F("fh2NEFNConstituentsNeutral","fh2NEFNConstituentsNeutral;NEF;N_{clusters}",fgkNNEFBins,binsNEF,fgkNConstBins,binsConst);
3c709670 387 fOutput->Add(fh2NEFNConstituentsNeutral);
388
584095b1 389 fh2Ptz = new TH2F("fh2Ptz","fh2Ptz;#it{p}_{T}^{jet};z=p_{t,trk}^{proj}/p_{jet}",fgkNPtBins,binsPt,fgkNzBins,binsz);
0531c107 390 fOutput->Add(fh2Ptz);
391
584095b1 392 fh2PtzCharged = new TH2F("fh2PtzCharged","fh2Ptz;#it{p}_{T}^{ch jet};z=p_{t,trk}^{proj}/p_{ch jet}",fgkNPtBins,binsPt,fgkNzBins,binsz);
3c709670 393 fOutput->Add(fh2PtzCharged);
394
584095b1 395 fh2PtLeadJet1VsLeadJet2 = new TH2F("fh2PtLeadJet1VsLeadJet2","fh2PtLeadJet1VsLeadJet2;#it{p}_{T}^{jet 1};#it{p}_{T}^{jet 2}",fgkNPtBins,binsPt,fgkNPtBins,binsPt);
0531c107 396 fOutput->Add(fh2PtLeadJet1VsLeadJet2);
397
584095b1 398 fh3EEtaPhiCluster = new TH3F("fh3EEtaPhiCluster","fh3EEtaPhiCluster;E_{clus};#eta;#phi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
0531c107 399 fOutput->Add(fh3EEtaPhiCluster);
400
584095b1 401 fh3PtLeadJet1VsPatchEnergy = new TH3F("fh3PtLeadJet1VsPatchEnergy","fh3PtLeadJet1VsPatchEnergy;#it{p}_{T}^{jet 1};Amplitude_{patch};trig type",fgkNPtBins,binsPt,fgkNPtBins,binsPt,fgkNJetTypeBins,binsJetType);
0531c107 402 fOutput->Add(fh3PtLeadJet1VsPatchEnergy);
584095b1 403 fh3PtLeadJet2VsPatchEnergy = new TH3F("fh3PtLeadJet2VsPatchEnergy","fh3PtLeadJet2VsPatchEnergy;#it{p}_{T}^{jet 1};Amplitude_{patch};trig type",fgkNPtBins,binsPt,fgkNPtBins,binsPt,fgkNJetTypeBins,binsJetType);
0531c107 404 fOutput->Add(fh3PtLeadJet2VsPatchEnergy);
405
2dba7c4c 406 fh3PatchEnergyEtaPhiCenterJ1 = new TH3F("fh3PatchEnergyEtaPhiCenterJ1","fh3PatchEnergyEtaPhiCenterJ1;E_{patch};#eta;#phi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
584095b1 407 fOutput->Add(fh3PatchEnergyEtaPhiCenterJ1);
408
2dba7c4c 409 fh3PatchEnergyEtaPhiCenterJ2 = new TH3F("fh3PatchEnergyEtaPhiCenterJ2","fh3PatchEnergyEtaPhiCenterJ2;E_{patch};#eta;#phi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
584095b1 410 fOutput->Add(fh3PatchEnergyEtaPhiCenterJ2);
0531c107 411
2dba7c4c 412 fh3PatchEnergyEtaPhiCenterJ1J2 = new TH3F("fh3PatchEnergyEtaPhiCenterJ1J2","fh3PatchEnergyEtaPhiCenterJ1J2;E_{patch};#eta;#phi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
698f34d8
CL
413 fOutput->Add(fh3PatchEnergyEtaPhiCenterJ1J2);
414
2dba7c4c 415 fh3PatchADCEnergyEtaPhiCenterJ1 = new TH3F("fh3PatchADCEnergyEtaPhiCenterJ1","fh3PatchADCEnergyEtaPhiCenterJ1;E_{ADC,patch};#eta;#phi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
698f34d8
CL
416 fOutput->Add(fh3PatchADCEnergyEtaPhiCenterJ1);
417
2dba7c4c 418 fh3PatchADCEnergyEtaPhiCenterJ2 = new TH3F("fh3PatchADCEnergyEtaPhiCenterJ2","fh3PatchADCEnergyEtaPhiCenterJ2;E_{ADC,patch};#eta;#phi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
698f34d8
CL
419 fOutput->Add(fh3PatchADCEnergyEtaPhiCenterJ2);
420
2dba7c4c 421 fh3PatchADCEnergyEtaPhiCenterJ1J2 = new TH3F("fh3PatchADCEnergyEtaPhiCenterJ1J2","fh3PatchADCEnergyEtaPhiCenterJ1J2;E_{ADC,patch};#eta;#phi",fgkNEnBins,binsEn,fgkNEtaBins,binsEta,fgkNPhiBins,binsPhi);
698f34d8
CL
422 fOutput->Add(fh3PatchADCEnergyEtaPhiCenterJ1J2);
423
584095b1 424 fh2CellEnergyVsTime = new TH2F("fh2CellEnergyVsTime","fh2CellEnergyVsTime;E_{cell};time",fgkNEnBins,binsEn,fgkNTimeBins,binsTime);
992189ac 425 fOutput->Add(fh2CellEnergyVsTime);
426
584095b1 427 fh3EClusELeadingCellVsTime = new TH3F("fh3EClusELeadingCellVsTime","fh3EClusELeadingCellVsTime;E_{cluster};E_{leading cell};time_{leading cell}",fgkNEnBins,binsEn,fgkNEnBins,binsEn,fgkNTimeBins,binsTime);
0714a353 428 fOutput->Add(fh3EClusELeadingCellVsTime);
fd08af98 429
430 fh3JetReacCent = new TH3F("fh3JetReacCent","fh3JetReacCent;E_{Jet};Centrality;dEP",fgkNEnBins,binsEn,fgkNCentBins,binsCent,fgkNdEPBins,binsdEP);
431 fOutput->Add(fh3JetReacCent);
432
0531c107 433 // =========== Switch on Sumw2 for all histos ===========
434 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
435 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
436 if (h1){
437 h1->Sumw2();
438 continue;
439 }
440 TH2 *h2 = dynamic_cast<TH2*>(fOutput->At(i));
441 if (h2){
442 h2->Sumw2();
443 continue;
444 }
445 TH3 *h3 = dynamic_cast<TH3*>(fOutput->At(i));
446 if (h3){
447 h3->Sumw2();
448 continue;
449 }
450 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
451 if(hn)hn->Sumw2();
452 }
453
454 TH1::AddDirectory(oldStatus);
455
456 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
584095b1 457
fd08af98 458 if(binsCent) delete [] binsCent;
459 if(binsdEP) delete [] binsdEP;
584095b1 460 if(binsEn) delete [] binsEn;
461 if(binsPt) delete [] binsPt;
462 if(binsPhi) delete [] binsPhi;
463 if(binsEta) delete [] binsEta;
464 if(binsArea) delete [] binsArea;
465 if(binsConst) delete [] binsConst;
466 if(binsMeanPt) delete [] binsMeanPt;
467 if(binsNEF) delete [] binsNEF;
468 if(binsz) delete [] binsz;
469 if(binsJetType) delete [] binsJetType;
470 if(binsTime) delete [] binsTime;
471
0531c107 472}
473
474//________________________________________________________________________
475Bool_t AliAnalysisTaskEmcalJetTriggerQA::FillHistograms()
476{
477 // Fill histograms.
9e5eee5d 478
2dba7c4c 479 //Tracks
698f34d8
CL
480 AliParticleContainer *partCont = GetParticleContainer(0);
481 if (partCont) {
a29bc208 482 Int_t i = 0;
a29bc208 483 AliPicoTrack *track = dynamic_cast<AliPicoTrack*>(partCont->GetNextAcceptParticle(0));
698f34d8 484 while(track) {
1e2a9888 485 Double_t trkphi = track->Phi()*TMath::RadToDeg();
486 fh3PtEtaPhiTracks->Fill(track->Pt(),track->Eta(),track->Phi());
2dba7c4c 487 fh3PtEtaPhiTracksOnEmcal->Fill(track->GetTrackPtOnEMCal(),track->GetTrackEtaOnEMCal(),track->GetTrackPhiOnEMCal());
1e2a9888 488 if(track->IsEMCAL()) {
489 i++;
1e2a9888 490 if(TMath::Abs(track->Eta())<0.9 && trkphi > 10 && trkphi < 250 )
491 fh3PtEtaPhiTracksProp->Fill(track->Pt(),track->Eta(),track->Phi());
492 }
a29bc208 493 track = dynamic_cast<AliPicoTrack*>(partCont->GetNextAcceptParticle());
698f34d8
CL
494 }
495 }
496
2dba7c4c 497 //Clusters
0714a353 498 AliClusterContainer *clusCont = GetClusterContainer(0);
9e5eee5d 499 if (clusCont) {
500 Int_t nclusters = clusCont->GetNClusters();
0531c107 501 for (Int_t ic = 0; ic < nclusters; ic++) {
9e5eee5d 502 AliVCluster *cluster = static_cast<AliVCluster*>(clusCont->GetCluster(ic));
0531c107 503 if (!cluster) {
0714a353 504 AliDebug(2,Form("Could not receive cluster %d", ic));
0531c107 505 continue;
506 }
9e5eee5d 507 if (!cluster->IsEMCAL()) {
0714a353 508 AliDebug(2,Form("%s: Cluster is not emcal",GetName()));
9e5eee5d 509 continue;
510 }
0531c107 511
512 TLorentzVector lp;
513 cluster->GetMomentum(lp, const_cast<Double_t*>(fVertex));
0531c107 514 fh3EEtaPhiCluster->Fill(lp.E(),lp.Eta(),lp.Phi());
0714a353 515 if(fCaloCells) {
516 Double_t leadCellE = GetEnergyLeadingCell(cluster);
8e49a788 517 Double_t leadCellT = cluster->GetTOF();
0714a353 518 fh3EClusELeadingCellVsTime->Fill(lp.E(),leadCellE,leadCellT*1e9);
519 }
0531c107 520 }
521 }
522
2d9ab573 523 //Cells
992189ac 524 if(fCaloCells) {
525 const Short_t nCells = fCaloCells->GetNumberOfCells();
526
527 for(Int_t iCell=0; iCell<nCells; ++iCell) {
528 Short_t cellId = fCaloCells->GetCellNumber(iCell);
529 Double_t cellE = fCaloCells->GetCellAmplitude(cellId);
530 Double_t cellT = fCaloCells->GetCellTime(cellId);
531
532 AliDebug(2,Form("cell energy = %f time = %f",cellE,cellT*1e9));
533 fh2CellEnergyVsTime->Fill(cellE,cellT*1e9);
992189ac 534 }
992189ac 535 }
536
2fa783ab 537 //Jets
0531c107 538 Double_t ptLeadJet1 = 0.;
539 Double_t ptLeadJet2 = 0.;
2fa783ab 540
541 fHistRhovsCentFull->Fill(fCent,GetRhoVal(fContainerFull));
542 fHistRhovsCentCharged->Fill(fCent,GetRhoVal(fContainerCharged));
0531c107 543
544 TArrayI *nJetsArr = new TArrayI(fh2NJetsPtFull->GetNbinsY()+1);
545 nJetsArr->Reset(0);
546 nJetsArr->Set(fh2NJetsPtFull->GetNbinsY()+1);
547
9e5eee5d 548 if (GetJetContainer(fContainerFull)) {
549 const Int_t njets = GetNJets(fContainerFull);
0531c107 550 for (Int_t ij = 0; ij < njets; ij++) {
551
9e5eee5d 552 AliEmcalJet* jet = GetAcceptJetFromArray(ij,fContainerFull);
553 if (!jet)
554 continue; //jet not selected
2d9ab573 555
8e49a788 556 Double_t jetPt = jet->Pt() - GetRhoVal(fContainerFull)*jet->Area();
2d9ab573 557 if(jetPt>ptLeadJet1) ptLeadJet1=jetPt;
558
559 Double_t dEPJetFull = RelativeEP(jet->Phi() , fEPV0);
fd08af98 560 fh3JetReacCent->Fill(jet->E(),fCent,dEPJetFull);
fd08af98 561
2d9ab573 562 fh2CentPtJetFull->Fill(fCent,jetPt);
0531c107 563 fh3PtEtaPhiJetFull->Fill(jetPt,jet->Eta(),jet->Phi());
564 fh3PtEtaAreaJetFull->Fill(jetPt,jet->Eta(),jet->Area());
2d9ab573 565
0531c107 566 //count jets above certain pT threshold
567 Int_t ptbin = fh2NJetsPtFull->GetYaxis()->FindBin(jetPt);
568 for(Int_t iptbin = ptbin; iptbin<=fh2NJetsPtFull->GetNbinsY(); iptbin++)
569 nJetsArr->AddAt(nJetsArr->At(iptbin)+1,iptbin);
570
571 fh2PtNConstituentsCharged->Fill(jetPt,jet->GetNumberOfTracks());
572 fh2PtNConstituents->Fill(jetPt,jet->GetNumberOfConstituents());
0531c107 573 fh2PtNEF->Fill(jetPt,jet->NEF());
3c709670 574 fh3NEFEtaPhi->Fill(jet->NEF(),jet->Eta(),jet->Phi());
575 fh2NEFNConstituentsCharged->Fill(jet->NEF(),jet->GetNumberOfTracks());
576 fh2NEFNConstituentsNeutral->Fill(jet->NEF(),jet->GetNumberOfClusters());
0531c107 577
578 AliVParticle *vp;
579 Double_t sumPtCh = 0.;
580 for(Int_t icc=0; icc<jet->GetNumberOfTracks(); icc++) {
581 vp = static_cast<AliVParticle*>(jet->TrackAt(icc, fTracks));
582 if(!vp) continue;
583 fh2Ptz->Fill(jetPt,GetZ(vp,jet));
0531c107 584 sumPtCh+=vp->Pt();
0531c107 585 }
586
587 if(jet->GetNumberOfTracks()>0)
588 fh2PtMeanPtConstituentsCharged->Fill(jetPt,sumPtCh/(double)(jet->GetNumberOfTracks()) );
589
0531c107 590 AliVCluster *vc = 0x0;
591 Double_t sumPtNe = 0.;
9e5eee5d 592 if (clusCont) {
593 for(Int_t icc=0; icc<jet->GetNumberOfClusters(); icc++) {
594 vc = static_cast<AliVCluster*>(clusCont->GetCluster(icc));
595 if(!vc) continue;
9e5eee5d 596 TLorentzVector lp;
597 vc->GetMomentum(lp, const_cast<Double_t*>(fVertex));
598 sumPtNe+=lp.Pt();
9e5eee5d 599 }
0531c107 600
9e5eee5d 601 if(jet->GetNumberOfClusters()>0)
602 fh2PtMeanPtConstituentsNeutral->Fill(jetPt,sumPtNe/(double)(jet->GetNumberOfClusters()) );
0531c107 603 }
0531c107 604 } //full jet loop
605
606 for(Int_t i=1; i<=fh2NJetsPtFull->GetNbinsY(); i++) {
607 Int_t nJetsInEvent = nJetsArr->At(i);
608 fh2NJetsPtFull->Fill(nJetsInEvent,fh2NJetsPtFull->GetYaxis()->GetBinCenter(i));
609 }
0531c107 610 }
611
612 //Reset array to zero to also count charged jets
613 nJetsArr->Reset(0);
614
615 //Loop over charged jets
9e5eee5d 616 if (GetJetContainer(fContainerCharged)) {
617 const Int_t njets = GetNJets(fContainerCharged);
618 for (Int_t ij = 0; ij < njets; ij++) {
0531c107 619
9e5eee5d 620 AliEmcalJet* jet = GetAcceptJetFromArray(ij,fContainerCharged);
621 if (!jet)
622 continue; //jet not selected
0531c107 623
8612dfc8 624 Double_t jetPt = jet->Pt() - GetRhoVal(fContainerCharged)*jet->Area();
0531c107 625 if(jetPt>ptLeadJet2) ptLeadJet2=jetPt;
8d875525 626 fh2CentPtJetCharged->Fill(fCent,jetPt);
0531c107 627 fh3PtEtaPhiJetCharged->Fill(jetPt,jet->Eta(),jet->Phi());
628 fh3PtEtaAreaJetCharged->Fill(jetPt,jet->Eta(),jet->Area());
3c709670 629
630 AliVParticle *vp;
631 for(Int_t icc=0; icc<jet->GetNumberOfTracks(); icc++) {
632 vp = static_cast<AliVParticle*>(jet->TrackAt(icc, fTracks));
633 if(!vp) continue;
634 fh2PtzCharged->Fill(jetPt,GetZ(vp,jet));
635 }
0531c107 636
637 //count jets above certain pT threshold
638 Int_t ptbin = fh2NJetsPtCharged->GetYaxis()->FindBin(jetPt);
639 for(Int_t iptbin = ptbin; iptbin<=fh2NJetsPtCharged->GetNbinsY(); iptbin++)
640 nJetsArr->AddAt(nJetsArr->At(iptbin)+1,iptbin);
641
642 }//ch jet loop
643 for(Int_t i=1; i<=fh2NJetsPtCharged->GetNbinsY(); i++) {
644 Int_t nJetsInEvent = nJetsArr->At(i);
645 fh2NJetsPtCharged->Fill(nJetsInEvent,fh2NJetsPtCharged->GetYaxis()->GetBinCenter(i));
646 }
647 }
648
9e5eee5d 649 if(GetJetContainer(fContainerFull) && GetJetContainer(fContainerCharged)) {
0531c107 650 fh2PtLeadJet1VsLeadJet2->Fill(ptLeadJet1,ptLeadJet2);
651 }
652
653 fh3PtLeadJet1VsPatchEnergy->Fill(ptLeadJet1,fMaxPatchEnergy,fTriggerType);
654 fh3PtLeadJet2VsPatchEnergy->Fill(ptLeadJet2,fMaxPatchEnergy,fTriggerType);
655
656 if(nJetsArr) delete nJetsArr;
657
658 return kTRUE;
659}
660
661//________________________________________________________________________
662Bool_t AliAnalysisTaskEmcalJetTriggerQA::Run()
663{
664 // Run analysis code here, if needed. It will be executed before FillHistograms().
665
666 //Check if event is selected (vertex & pile-up)
667 if(!SelectEvent())
668 return kFALSE;
669
698f34d8 670 if(fTriggerPatchInfo)
2d9ab573 671 FillTriggerPatchHistos();
0531c107 672
673 return kTRUE; // If return kFALSE FillHistogram() will NOT be executed.
674}
675
676//_______________________________________________________________________
677void AliAnalysisTaskEmcalJetTriggerQA::Terminate(Option_t *)
678{
679 // Called once at the end of the analysis.
680}
681//________________________________________________________________________
682Double_t AliAnalysisTaskEmcalJetTriggerQA::GetZ(const AliVParticle *trk, const AliEmcalJet *jet) const
683{
684 // Get Z of constituent trk
0531c107 685 return GetZ(trk->Px(),trk->Py(),trk->Pz(),jet->Px(),jet->Py(),jet->Pz());
686}
687
688//________________________________________________________________________
689Double_t AliAnalysisTaskEmcalJetTriggerQA::GetZ(const Double_t trkPx, const Double_t trkPy, const Double_t trkPz, const Double_t jetPx, const Double_t jetPy, const Double_t jetPz) const
690{
691 //
692 // Get the z of a constituent inside of a jet
693 //
0531c107 694 Double_t pJetSq = jetPx*jetPx+jetPy*jetPy+jetPz*jetPz;
0531c107 695 if(pJetSq>0.)
696 return (trkPx*jetPx+trkPy*jetPy+trkPz*jetPz)/pJetSq;
697 else {
698 AliWarning(Form("%s: strange, pjet*pjet seems to be zero pJetSq: %f",GetName(), pJetSq));
699 return 0;
700 }
701}
0714a353 702
703//________________________________________________________________________
704Int_t AliAnalysisTaskEmcalJetTriggerQA::GetLeadingCellId(const AliVCluster *clus) const
705{
706 //Get energy of leading cell in cluster
707
708 if(!fCaloCells)
709 return -1;
710
711 Double_t emax = -1.;
712 Int_t iCellAbsIdMax = -1;
713 Int_t nCells = clus->GetNCells();
714 for(Int_t i = 0; i<nCells; i++) {
715 Int_t absId = clus->GetCellAbsId(i);
716 Double_t cellE = fCaloCells->GetCellAmplitude(absId);
717 if(cellE>emax) {
718 emax = cellE;
719 iCellAbsIdMax = absId;
720 }
721 }
722
723 return iCellAbsIdMax;
724}
725
726//________________________________________________________________________
727Double_t AliAnalysisTaskEmcalJetTriggerQA::GetEnergyLeadingCell(const AliVCluster *clus) const
728{
729 //Get energy of leading cell in cluster
730 if(!fCaloCells)
731 return -1.;
732
733 Int_t absID = GetLeadingCellId(clus);
734 if(absID>-1)
735 return fCaloCells->GetCellAmplitude(absID);
736 else
737 return -1.;
0714a353 738}
698f34d8
CL
739
740//________________________________________________________________________
741Double_t AliAnalysisTaskEmcalJetTriggerQA::GetECross(Int_t absID) const {
742
743 //Get Ecross = sum of energy of neighbouring cells (using uncalibrated energy)
744
745 if(!fCaloCells)
746 return -1.;
747
748 Double_t ecross = -1.;
749
750 Int_t absID1 = -1;
751 Int_t absID2 = -1;
752 Int_t absID3 = -1;
753 Int_t absID4 = -1;
754
755 Int_t imod = -1, iphi =-1, ieta=-1,iTower = -1, iIphi = -1, iIeta = -1;
756 fGeom->GetCellIndex(absID,imod,iTower,iIphi,iIeta);
757 fGeom->GetCellPhiEtaIndexInSModule(imod,iTower,iIphi, iIeta,iphi,ieta);
758
759 if( iphi < AliEMCALGeoParams::fgkEMCALRows-1)
760 absID1 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi+1, ieta);
761 if( iphi > 0 )
762 absID2 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi-1, ieta);
763
764 if( ieta == AliEMCALGeoParams::fgkEMCALCols-1 && !(imod%2) ) {
765 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod+1, iphi, 0);
766 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta-1);
767 }
768 else if( ieta == 0 && imod%2 ) {
769 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta+1);
770 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod-1, iphi, AliEMCALGeoParams::fgkEMCALCols-1);
771 }
772 else {
773 if( ieta < AliEMCALGeoParams::fgkEMCALCols-1 )
774 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta+1);
775 if( ieta > 0 )
776 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta-1);
777 }
778
779 Double_t ecell1 = fCaloCells->GetCellAmplitude(absID1);
780 Double_t ecell2 = fCaloCells->GetCellAmplitude(absID2);
781 Double_t ecell3 = fCaloCells->GetCellAmplitude(absID3);
782 Double_t ecell4 = fCaloCells->GetCellAmplitude(absID4);
783
784 ecross = ecell1+ecell2+ecell3+ecell4;
785
786 return ecross;
787}
fd08af98 788
789//_________________________________________________________________________
2d9ab573 790Float_t AliAnalysisTaskEmcalJetTriggerQA::RelativeEP(Double_t objAng, Double_t EPAng) const
791{
792 // function to calculate angle between object and EP in the 1st quadrant (0,Pi/2)
793 Double_t dphi = EPAng - objAng;
794
795 // ran into trouble with a few dEP<-Pi so trying this...
796 if( dphi<-1*TMath::Pi() )
797 dphi = dphi + 1*TMath::Pi();
798 if( dphi>1*TMath::Pi())
799 dphi = dphi - 1*TMath::Pi();
800
801 if( (dphi>0) && (dphi<1*TMath::Pi()/2) ){
802 // Do nothing! we are in quadrant 1
803 }else if( (dphi>1*TMath::Pi()/2) && (dphi<1*TMath::Pi()) ){
804 dphi = 1*TMath::Pi() - dphi;
805 }else if( (dphi<0) && (dphi>-1*TMath::Pi()/2) ){
806 dphi = fabs(dphi);
807 }else if( (dphi<-1*TMath::Pi()/2) && (dphi>-1*TMath::Pi()) ){
808 dphi = dphi + 1*TMath::Pi();
809 }
fd08af98 810
2d9ab573 811 return dphi; // dphi in [0, Pi/2]
812}