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