]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/EMCALJetTasks/UserTasks/AliAnalysisTaskSAQA.cxx
4ade9ae745de130639f5bef461f2cac377458ea4
[u/mrichter/AliRoot.git] / PWGGA / EMCALJetTasks / UserTasks / AliAnalysisTaskSAQA.cxx
1 // $Id$
2 //
3 // General QA task.
4 //
5 // Author: S.Aiola
6
7 #include <TChain.h>
8 #include <TClonesArray.h>
9 #include <TH1F.h>
10 #include <TH2F.h>
11 #include <TH3F.h>
12 #include <TList.h>
13 #include <TLorentzVector.h>
14
15 #include "AliAnalysisManager.h"
16 #include "AliCentrality.h"
17 #include "AliVCluster.h"
18 #include "AliVParticle.h"
19 #include "AliVTrack.h"
20 #include "AliEmcalJet.h"
21 #include "AliVEventHandler.h"
22 #include "AliLog.h"
23
24 #include "AliAnalysisTaskSAQA.h"
25
26 ClassImp(AliAnalysisTaskSAQA)
27
28 //________________________________________________________________________
29 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA() : 
30   AliAnalysisTaskEmcalJet("AliAnalysisTaskSAQA", kTRUE),
31   fCellEnergyCut(0.1),
32   fDoTrigger(kFALSE),
33   fTrgClusName("ClustersL1GAMMAFEE"),
34   fTrgClusters(0),
35   fHistCentrality(0),
36   fHistTracksCent(0),
37   fHistClusCent(0),
38   fHistMaxL1FastORCent(0),
39   fHistMaxL1ClusCent(0),
40   fHistMaxL1ThrCent(0),
41   fHistTracksPt(0),
42   fHistTrPhiEta(0),
43   fHistTrEmcPhiEta(0),
44   fHistClusPhiEtaEnergy(0),
45   fHistNCellsEnergy(0),
46   fHistCellsEnergy(0),
47   fHistChVSneCells(0),
48   fHistChVSneClus(0),
49   fHistChVSneCorrCells(0)
50 {
51   // Default constructor.
52
53   for (Int_t i = 0; i < 5; i++) {
54     fHistTrackPhi[i] = 0;
55     fHistTrackEta[i] = 0;
56   }
57
58   for (Int_t i = 0; i < 4; i++) {
59     fHistJetsPhiEtaPt[i] = 0;
60     fHistJetsPtNonBias[i] = 0;
61     fHistJetsPtTrack[i] = 0;
62     fHistJetsPtClus[i] = 0;
63     fHistJetsPt[i] = 0;
64     fHistJetsPtArea[i] = 0;
65     fHistJetsPtAreaNonBias[i] = 0;
66   }
67 }
68
69 //________________________________________________________________________
70 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA(const char *name) : 
71   AliAnalysisTaskEmcalJet(name, kTRUE),
72   fCellEnergyCut(0.1),
73   fDoTrigger(kFALSE),
74   fTrgClusName("ClustersL1GAMMAFEE"),
75   fTrgClusters(0),
76   fHistCentrality(0),
77   fHistTracksCent(0),
78   fHistClusCent(0),
79   fHistMaxL1FastORCent(0),
80   fHistMaxL1ClusCent(0),
81   fHistMaxL1ThrCent(0),
82   fHistTracksPt(0),
83   fHistTrPhiEta(0),
84   fHistTrEmcPhiEta(0),
85   fHistClusPhiEtaEnergy(0),
86   fHistNCellsEnergy(0),
87   fHistCellsEnergy(0),
88   fHistChVSneCells(0),
89   fHistChVSneClus(0),
90   fHistChVSneCorrCells(0)
91 {
92   // Standard constructor.
93
94   for (Int_t i = 0; i < 5; i++) {
95     fHistTrackPhi[i] = 0;
96     fHistTrackEta[i] = 0;
97   }
98
99   for (Int_t i = 0; i < 4; i++) {
100     fHistJetsPhiEtaPt[i] = 0;
101     fHistJetsPtNonBias[i] = 0;
102     fHistJetsPtTrack[i] = 0;
103     fHistJetsPtClus[i] = 0;
104     fHistJetsPt[i] = 0;
105     fHistJetsPtArea[i] = 0;
106     fHistJetsPtAreaNonBias[i] = 0;
107   }
108 }
109
110 //________________________________________________________________________
111 AliAnalysisTaskSAQA::~AliAnalysisTaskSAQA()
112 {
113   // Destructor
114 }
115
116 //________________________________________________________________________
117 void AliAnalysisTaskSAQA::UserCreateOutputObjects()
118 {
119   // Create histograms
120
121   OpenFile(1);
122   fOutput = new TList();
123   fOutput->SetOwner();
124
125   fHistCentrality = new TH1F("fHistCentrality","Event centrality distribution", 100, 0, 100);
126   fHistCentrality->GetXaxis()->SetTitle("Centrality (%)");
127   fHistCentrality->GetYaxis()->SetTitle("counts");
128   fOutput->Add(fHistCentrality);
129
130   fHistTracksCent = new TH2F("fHistTracksCent","Tracks vs. centrality", 100, 0, 100, fNbins, 0, 4000);
131   fHistTracksCent->GetXaxis()->SetTitle("Centrality (%)");
132   fHistTracksCent->GetYaxis()->SetTitle("No. of tracks");
133   fOutput->Add(fHistTracksCent);
134
135   if (fAnaType == kEMCAL) {
136     fHistClusCent = new TH2F("fHistClusCent","Clusters vs. centrality", 100, 0, 100, fNbins, 0, 2000);
137     fHistClusCent->GetXaxis()->SetTitle("Centrality (%)");
138     fHistClusCent->GetYaxis()->SetTitle("No. of clusters");
139     fOutput->Add(fHistClusCent);
140     
141     if (fDoTrigger) {
142       fHistMaxL1FastORCent = new TH2F("fHistMaxL1FastORCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
143       fHistMaxL1FastORCent->GetXaxis()->SetTitle("Centrality [%]");
144       fHistMaxL1FastORCent->GetYaxis()->SetTitle("Maximum L1 FastOR");
145       fOutput->Add(fHistMaxL1FastORCent);
146       
147       fHistMaxL1ClusCent = new TH2F("fHistMaxL1ClusCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
148       fHistMaxL1ClusCent->GetXaxis()->SetTitle("Centrality [%]");
149       fHistMaxL1ClusCent->GetYaxis()->SetTitle("Maximum L1 trigger cluster");
150       fOutput->Add(fHistMaxL1ClusCent);
151       
152       fHistMaxL1ThrCent = new TH2F("fHistMaxL1ThrCent","fHistMaxL1ThrCent", 100, 0, 100, 250, 0, 250);
153       fHistMaxL1ThrCent->GetXaxis()->SetTitle("Centrality [%]");
154       fHistMaxL1ThrCent->GetYaxis()->SetTitle("Maximum L1 threshold");
155       fOutput->Add(fHistMaxL1ThrCent);
156     }
157   }
158
159   fHistTracksPt = new TH1F("fHistTracksPt","p_{T} spectrum of reconstructed tracks", fNbins, fMinBinPt, fMaxBinPt);
160   fHistTracksPt->GetXaxis()->SetTitle("p_{T} [GeV/c]");
161   fHistTracksPt->GetYaxis()->SetTitle("counts");
162   fOutput->Add(fHistTracksPt);
163        
164   fHistTrPhiEta = new TH2F("fHistTrPhiEta","Phi-Eta distribution of tracks", 80, -2, 2, 128, 0, 6.4);
165   fHistTrPhiEta->GetXaxis()->SetTitle("#eta");
166   fHistTrPhiEta->GetYaxis()->SetTitle("#phi");
167   fOutput->Add(fHistTrPhiEta);
168
169   fHistTrEmcPhiEta = new TH2F("fHistTrEmcPhiEta","Phi-Eta emcal distribution of tracks", 80, -2, 2, 128, 0, 6.4);
170   fHistTrEmcPhiEta->GetXaxis()->SetTitle("#eta");
171   fHistTrEmcPhiEta->GetYaxis()->SetTitle("#phi");
172   fOutput->Add(fHistTrEmcPhiEta);
173
174   if (fAnaType == kEMCAL) {
175     fHistClusPhiEtaEnergy = new TH3F("fHistClusPhiEtaEnergy","Phi-Eta-Energy distribution of clusters", fNbins, fMinBinPt, fMaxBinPt, 80, -2, 2, 128, 0, 6.4);
176     fHistClusPhiEtaEnergy->GetXaxis()->SetTitle("E [GeV]");
177     fHistClusPhiEtaEnergy->GetYaxis()->SetTitle("#eta");
178     fHistClusPhiEtaEnergy->GetZaxis()->SetTitle("#phi");
179     fOutput->Add(fHistClusPhiEtaEnergy);
180
181     fHistNCellsEnergy = new TH2F("fHistNCellsEnergy","Number of cells vs. energy of clusters", fNbins, fMinBinPt, fMaxBinPt, 30, 0, 30);
182     fHistNCellsEnergy->GetXaxis()->SetTitle("E [GeV]");
183     fHistNCellsEnergy->GetYaxis()->SetTitle("N_{cells}");
184     fOutput->Add(fHistNCellsEnergy);
185   }
186
187   if (fAnaType == kEMCAL) {
188    
189     fHistCellsEnergy = new TH1F("fHistCellsEnergy","Energy spectrum of cells", fNbins, fMinBinPt, fMaxBinPt);
190     fHistCellsEnergy->GetXaxis()->SetTitle("E [GeV]");
191     fHistCellsEnergy->GetYaxis()->SetTitle("counts");
192     fOutput->Add(fHistCellsEnergy);
193     
194     fHistChVSneCells = new TH2F("fHistChVSneCells","Charged energy vs. neutral (cells) energy", 
195                                 fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
196     fHistChVSneCells->GetXaxis()->SetTitle("E [GeV]");
197     fHistChVSneCells->GetYaxis()->SetTitle("P [GeV/c]");
198     fOutput->Add(fHistChVSneCells);
199     
200     fHistChVSneClus = new TH2F("fHistChVSneClus","Charged energy vs. neutral (clusters) energy", 
201                                fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
202     fHistChVSneClus->GetXaxis()->SetTitle("E [GeV]");
203     fHistChVSneClus->GetYaxis()->SetTitle("P [GeV/c]");
204     fOutput->Add(fHistChVSneClus);
205     
206     fHistChVSneCorrCells = new TH2F("fHistChVSneCorrCells","Charged energy vs. neutral (corrected cells) energy", 
207                                     fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, fNbins * 2.5, fMinBinPt , fMaxBinPt * 2.5);
208     fHistChVSneCorrCells->GetXaxis()->SetTitle("E [GeV]");
209     fHistChVSneCorrCells->GetYaxis()->SetTitle("P [GeV/c]");
210     fOutput->Add(fHistChVSneCorrCells);
211   }
212  
213   for (Int_t i = 0; i < 5; i++) {
214     TString histnamephi("fHistTrackPhi_");
215     histnamephi += i;
216     fHistTrackPhi[i] = new TH1F(histnamephi.Data(),histnamephi.Data(), 128, 0, 6.4);
217     fHistTrackPhi[i]->GetXaxis()->SetTitle("Phi");
218     fOutput->Add(fHistTrackPhi[i]);
219
220     TString histnameeta("fHistTrackEta_");
221     histnameeta += i;
222     fHistTrackEta[i] = new TH1F(histnameeta.Data(),histnameeta.Data(), 100, -2, 2);
223     fHistTrackEta[i]->GetXaxis()->SetTitle("Eta");
224     fOutput->Add(fHistTrackEta[i]);
225   }
226   
227   fHistTrackPhi[0]->SetLineColor(kRed);
228   fHistTrackEta[0]->SetLineColor(kRed);
229   fHistTrackPhi[1]->SetLineColor(kBlue);
230   fHistTrackEta[1]->SetLineColor(kBlue);
231   fHistTrackPhi[2]->SetLineColor(kGreen);
232   fHistTrackEta[2]->SetLineColor(kGreen);
233   fHistTrackPhi[3]->SetLineColor(kOrange);
234   fHistTrackEta[3]->SetLineColor(kOrange);
235   fHistTrackPhi[4]->SetLineColor(kBlack);
236   fHistTrackEta[4]->SetLineColor(kBlack);
237
238   if (!fJetsName.IsNull()) {
239
240     TString histname;
241
242     for (Int_t i = 0; i < 4; i++) {
243       histname = "fHistJetsPhiEtaPt_";
244       histname += i;
245       fHistJetsPhiEtaPt[i] = new TH3F(histname.Data(), histname.Data(), 80, -2, 2, 128, 0, 6.4, fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
246       fHistJetsPhiEtaPt[i]->GetXaxis()->SetTitle("#eta");
247       fHistJetsPhiEtaPt[i]->GetYaxis()->SetTitle("#phi");
248       fHistJetsPhiEtaPt[i]->GetZaxis()->SetTitle("p_{T} [GeV/c]");
249       fOutput->Add(fHistJetsPhiEtaPt[i]);
250
251       histname = "fHistJetsPtNonBias_";
252       histname += i;
253       fHistJetsPtNonBias[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
254       fHistJetsPtNonBias[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
255       fHistJetsPtNonBias[i]->GetYaxis()->SetTitle("counts");
256       fOutput->Add(fHistJetsPtNonBias[i]);
257
258       histname = "fHistJetsPtTrack_";
259       histname += i;
260       fHistJetsPtTrack[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
261       fHistJetsPtTrack[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
262       fHistJetsPtTrack[i]->GetYaxis()->SetTitle("counts");
263       fOutput->Add(fHistJetsPtTrack[i]);
264
265       if (fAnaType == kEMCAL) {
266         histname = "fHistJetsPtClus_";
267         histname += i;
268         fHistJetsPtClus[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
269         fHistJetsPtClus[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
270         fHistJetsPtClus[i]->GetYaxis()->SetTitle("counts");
271         fOutput->Add(fHistJetsPtClus[i]);
272       }
273
274       histname = "fHistJetsPt_";
275       histname += i;
276       fHistJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
277       fHistJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
278       fHistJetsPt[i]->GetYaxis()->SetTitle("counts");
279       fOutput->Add(fHistJetsPt[i]);
280
281       histname = "fHistJetsPtAreaNonBias_";
282       histname += i;
283       fHistJetsPtAreaNonBias[i] = new TH2F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, 20, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
284       fHistJetsPtAreaNonBias[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
285       fHistJetsPtAreaNonBias[i]->GetYaxis()->SetTitle("area");
286       fOutput->Add(fHistJetsPtAreaNonBias[i]);
287
288       histname = "fHistJetsPtArea_";
289       histname += i;
290       fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, 20, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
291       fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
292       fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
293       fOutput->Add(fHistJetsPtArea[i]);
294     }
295   }
296
297   PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
298 }
299
300 //________________________________________________________________________
301 Bool_t AliAnalysisTaskSAQA::RetrieveEventObjects()
302 {
303   // Retrieve event objects.
304
305   if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
306     return kFALSE;
307
308   if (!fTrgClusName.IsNull() && fDoTrigger && !fTrgClusters) {
309     fTrgClusters =  dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTrgClusName));
310     if (!fTrgClusters) {
311       AliError(Form("%s: Could not retrieve trigger clusters %s!", GetName(), fTrgClusName.Data())); 
312       return kFALSE;
313     }
314     else {
315       TClass *cl = fTrgClusters->GetClass();
316       if (!cl->GetBaseClass("AliVCluster") && !cl->GetBaseClass("AliEmcalParticle")) {
317         AliError(Form("%s: Collection %s does not contain AliVCluster nor AliEmcalParticle objects!", GetName(), fTrgClusName.Data())); 
318         fTrgClusters = 0;
319         return kFALSE;
320       }
321     }
322   }
323
324   return kTRUE;
325 }
326
327 //________________________________________________________________________
328 Bool_t AliAnalysisTaskSAQA::FillHistograms()
329 {
330   // Fill histograms.
331
332   fHistCentrality->Fill(fCent);
333   if (fTracks)
334     fHistTracksCent->Fill(fCent, fTracks->GetEntriesFast());
335   if (fCaloClusters)
336     fHistClusCent->Fill(fCent, fCaloClusters->GetEntriesFast());
337
338   Float_t trackSum = DoTrackLoop();
339
340   DoJetLoop();
341
342   if (fAnaType == kEMCAL) {
343     Float_t clusSum = DoClusterLoop();
344
345     Float_t cellSum = 0, cellCutSum = 0;
346     
347     DoCellLoop(cellSum, cellCutSum);
348     
349     fHistChVSneCells->Fill(cellSum, trackSum);
350     fHistChVSneClus->Fill(clusSum, trackSum);
351     fHistChVSneCorrCells->Fill(cellCutSum, trackSum);
352
353     if (fDoTrigger) {
354       Float_t maxTrgClus = DoTriggerClusLoop();
355       fHistMaxL1ClusCent->Fill(fCent, maxTrgClus);
356     
357       Int_t maxL1amp = -1;
358       Int_t maxL1thr = -1;
359     
360       DoTriggerPrimitives(maxL1amp, maxL1thr);
361       
362       if (maxL1amp > -1) 
363         fHistMaxL1FastORCent->Fill(fCent, maxL1amp);
364       
365       if (maxL1thr > -1) 
366         fHistMaxL1ThrCent->Fill(fCent, maxL1thr);
367     }
368   }
369
370   return kTRUE;
371 }
372
373 //________________________________________________________________________
374 void AliAnalysisTaskSAQA::DoCellLoop(Float_t &sum, Float_t &sum_cut)
375 {
376   // Do cell loop.
377
378   AliVCaloCells *cells = InputEvent()->GetEMCALCells();
379
380   if (!cells)
381     return;
382
383   const Int_t ncells = cells->GetNumberOfCells();
384
385   for (Int_t pos = 0; pos < ncells; pos++) {
386     Float_t amp = cells->GetAmplitude(pos);
387     fHistCellsEnergy->Fill(amp);
388     sum += amp;
389     if (amp < fCellEnergyCut)
390       continue;
391     sum_cut += amp;
392   } 
393 }
394
395 //________________________________________________________________________
396 Float_t AliAnalysisTaskSAQA::DoClusterLoop()
397 {
398   // Do cluster loop.
399
400   if (!fCaloClusters)
401     return 0;
402
403   Float_t sum = 0;
404
405   // Cluster loop
406   Int_t nclusters =  fCaloClusters->GetEntriesFast();
407
408   for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
409     AliVCluster* cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
410     if (!cluster) {
411       AliError(Form("Could not receive cluster %d", iClusters));
412       continue;
413     }  
414
415     if (!AcceptCluster(cluster, kTRUE))
416       continue;
417
418     sum += cluster->E();
419
420     TLorentzVector nPart;
421     cluster->GetMomentum(nPart, fVertex);
422
423     fHistClusPhiEtaEnergy->Fill(cluster->E(), nPart.Eta(), nPart.Phi());
424     fHistNCellsEnergy->Fill(cluster->E(), cluster->GetNCells());
425   }
426
427   return sum;
428 }
429
430 //________________________________________________________________________
431 Float_t AliAnalysisTaskSAQA::DoTrackLoop()
432 {
433   // Do track loop.
434
435   if (!fTracks)
436     return 0;
437
438   Float_t sum = 0;
439
440   Int_t ntracks = fTracks->GetEntriesFast();
441   Int_t nclusters = 0;
442   if (fCaloClusters)
443     nclusters = fCaloClusters->GetEntriesFast();
444
445   for (Int_t i = 0; i < ntracks; i++) {
446
447     AliVParticle* track = static_cast<AliVParticle*>(fTracks->At(i)); // pointer to reconstructed to track  
448
449     if (!track) {
450       AliError(Form("Could not retrieve track %d",i)); 
451       continue; 
452     }
453
454     AliVTrack* vtrack = dynamic_cast<AliVTrack*>(track); 
455     
456     if (vtrack && !AcceptTrack(vtrack, kTRUE)) 
457       continue;
458     
459     fHistTracksPt->Fill(track->Pt());
460
461     sum += track->P();
462
463     Int_t label = track->GetLabel();
464       
465     fHistTrPhiEta->Fill(track->Eta(), track->Phi());
466     
467     fHistTrackEta[4]->Fill(track->Eta());
468     fHistTrackPhi[4]->Fill(track->Phi());
469
470     if (label >= 0 && label < 4) {
471       fHistTrackEta[label]->Fill(track->Eta());
472       fHistTrackPhi[label]->Fill(track->Phi());
473     }
474
475     if (!vtrack)
476       continue;
477
478     fHistTrEmcPhiEta->Fill(vtrack->GetTrackEtaOnEMCal(), vtrack->GetTrackPhiOnEMCal());
479   }
480   
481   return sum;
482 }
483
484 //________________________________________________________________________
485 void AliAnalysisTaskSAQA::DoJetLoop()
486 {
487   // Do jet loop.
488
489   if (!fJets)
490     return;
491
492   Int_t njets = fJets->GetEntriesFast();
493
494   for (Int_t ij = 0; ij < njets; ij++) {
495
496     AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(ij));
497
498     if (!jet) {
499       AliError(Form("Could not receive jet %d", ij));
500       continue;
501     }  
502
503     if (!AcceptJet(jet, kFALSE))
504       continue;
505
506     fHistJetsPtNonBias[fCentBin]->Fill(jet->Pt());
507     fHistJetsPtAreaNonBias[fCentBin]->Fill(jet->Pt(), jet->Area());
508
509     if (jet->MaxTrackPt() > fPtBiasJetTrack)
510       fHistJetsPtTrack[fCentBin]->Fill(jet->Pt());
511     
512     if (fAnaType == kEMCAL && jet->MaxClusterPt() > fPtBiasJetClus)
513       fHistJetsPtClus[fCentBin]->Fill(jet->Pt());
514     
515     if (!AcceptBiasJet(jet))
516       continue;
517
518     fHistJetsPt[fCentBin]->Fill(jet->Pt());
519     fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());
520
521     fHistJetsPhiEtaPt[fCentBin]->Fill(jet->Eta(), jet->Phi(), jet->Pt());
522   }
523 }
524
525 //________________________________________________________________________
526 Float_t AliAnalysisTaskSAQA::DoTriggerClusLoop()
527 {
528   // Do trigger cluster loop.
529
530   if (!fTrgClusters)
531     return 0;
532
533   Int_t ntrgclusters = fTrgClusters->GetEntriesFast();
534   Float_t maxTrgClus = 0;
535
536   for (Int_t iClusters = 0; iClusters < ntrgclusters; iClusters++) {
537     AliVCluster* cluster = static_cast<AliVCluster*>(fTrgClusters->At(iClusters));
538     if (!cluster) {
539       AliError(Form("Could not receive cluster %d", iClusters));
540       continue;
541     }  
542     
543     if (!(cluster->IsEMCAL())) continue;
544
545     if (cluster->E() > maxTrgClus)
546       maxTrgClus = cluster->E();
547
548   }
549   return maxTrgClus;
550 }
551
552 //________________________________________________________________________
553 void AliAnalysisTaskSAQA::DoTriggerPrimitives(Int_t &maxL1amp, Int_t &maxL1thr)
554 {
555   // Do trigger primitives loop.
556
557   AliVCaloTrigger *triggers = InputEvent()->GetCaloTrigger("EMCAL");
558
559   if (!triggers || triggers->GetEntries() == 0)
560     return;
561     
562   triggers->Reset();
563   Int_t L1amp = 0;
564   Int_t L1thr = 0;
565   maxL1amp = -1;
566   maxL1thr = -1;
567
568   while (triggers->Next()) {
569     triggers->GetL1TimeSum(L1amp);
570     if (maxL1amp < L1amp) 
571       maxL1amp = L1amp;
572
573     triggers->GetL1Threshold(L1thr);
574     if (maxL1thr < L1thr) 
575       maxL1thr = L1thr;
576   }
577 }
578
579 //________________________________________________________________________
580 void AliAnalysisTaskSAQA::Terminate(Option_t *) 
581 {
582   // Called once at the end of the analysis.
583 }