1 // $Id: AliAnalysisTaskSAQA.cxx 56636 2012-05-22 22:51:12Z loizides $
3 // General QA task (S.Aiola).
8 #include <TClonesArray.h>
12 #include <TLorentzVector.h>
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"
23 #include "AliAnalysisTaskSAQA.h"
25 ClassImp(AliAnalysisTaskSAQA)
27 //________________________________________________________________________
28 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA() :
29 AliAnalysisTaskEmcal("AliAnalysisTaskSAQA"),
32 fTrgClusName("ClustersL1GAMMAFEE"),
37 fHistMaxL1FastORCent(0),
38 fHistMaxL1ClusCent(0),
42 fHistClustersEnergy(0),
51 fHistChVSneCorrCells(0)
53 // Default constructor.
55 for (Int_t i = 0; i < 5; i++) {
61 //________________________________________________________________________
62 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA(const char *name) :
63 AliAnalysisTaskEmcal(name),
66 fTrgClusName("ClustersL1GAMMAFEE"),
71 fHistMaxL1FastORCent(0),
72 fHistMaxL1ClusCent(0),
76 fHistClustersEnergy(0),
85 fHistChVSneCorrCells(0)
87 // Standard constructor.
89 for (Int_t i = 0; i < 5; i++) {
95 //________________________________________________________________________
96 AliAnalysisTaskSAQA::~AliAnalysisTaskSAQA()
101 //________________________________________________________________________
102 void AliAnalysisTaskSAQA::UserCreateOutputObjects()
107 fOutput = new TList();
108 fOutput->SetOwner(); // IMPORTANT!
110 fHistCentrality = new TH1F("fHistCentrality","Event centrality distribution", fNbins, 0, 100);
111 fHistCentrality->GetXaxis()->SetTitle("Centrality (%)");
112 fHistCentrality->GetYaxis()->SetTitle("counts");
113 fOutput->Add(fHistCentrality);
115 fHistTracksCent = new TH2F("fHistTracksCent","Tracks vs. centrality", fNbins, 0, 100, fNbins, 0, 4000);
116 fHistTracksCent->GetXaxis()->SetTitle("Centrality (%)");
117 fHistTracksCent->GetYaxis()->SetTitle("No. of tracks");
118 fOutput->Add(fHistTracksCent);
120 fHistClusCent = new TH2F("fHistClusCent","Clusters vs. centrality", fNbins, 0, 100, fNbins, 0, 2000);
121 fHistClusCent->GetXaxis()->SetTitle("Centrality (%)");
122 fHistClusCent->GetYaxis()->SetTitle("No. of clusters");
123 fOutput->Add(fHistClusCent);
125 fHistMaxL1FastORCent = new TH2F("fHistMaxL1FastORCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
126 fHistMaxL1FastORCent->GetXaxis()->SetTitle("Centrality [%]");
127 fHistMaxL1FastORCent->GetYaxis()->SetTitle("Maximum L1 FastOR");
128 fOutput->Add(fHistMaxL1FastORCent);
130 fHistMaxL1ClusCent = new TH2F("fHistMaxL1ClusCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
131 fHistMaxL1ClusCent->GetXaxis()->SetTitle("Centrality [%]");
132 fHistMaxL1ClusCent->GetYaxis()->SetTitle("Maximum L1 trigger cluster");
133 fOutput->Add(fHistMaxL1ClusCent);
135 fHistMaxL1ThrCent = new TH2F("fHistMaxL1ThrCent","fHistMaxL1ThrCent", 100, 0, 100, 250, 0, 250);
136 fHistMaxL1ThrCent->GetXaxis()->SetTitle("Centrality [%]");
137 fHistMaxL1ThrCent->GetYaxis()->SetTitle("Maximum L1 threshold");
138 fOutput->Add(fHistMaxL1ThrCent);
140 fHistTracksPt = new TH1F("fHistTracksPt","P_{T} spectrum of reconstructed tracks", fNbins, fMinPt, fMaxPt);
141 fHistTracksPt->GetXaxis()->SetTitle("P_{T} [GeV/c]");
142 fHistTracksPt->GetYaxis()->SetTitle("counts");
143 fOutput->Add(fHistTracksPt);
145 fHistTrPhiEta = new TH2F("fHistTrPhiEta","Phi-Eta distribution of tracks", 20, -2, 2, 32, 0, 6.4);
146 fHistTrPhiEta->GetXaxis()->SetTitle("#eta");
147 fHistTrPhiEta->GetYaxis()->SetTitle("#phi");
148 fOutput->Add(fHistTrPhiEta);
150 fHistClustersEnergy = new TH1F("fHistClustersEnergy","Energy spectrum of clusters", fNbins, fMinPt, fMaxPt);
151 fHistClustersEnergy->GetXaxis()->SetTitle("E [GeV]");
152 fHistClustersEnergy->GetYaxis()->SetTitle("counts");
153 fOutput->Add(fHistClustersEnergy);
155 fHistClusPhiEta = new TH2F("fHistClusPhiEta","Phi-Eta distribution of clusters", 20, -2, 2, 32, 0, 6.4);
156 fHistClusPhiEta->GetXaxis()->SetTitle("#eta");
157 fHistClusPhiEta->GetYaxis()->SetTitle("#phi");
158 fOutput->Add(fHistClusPhiEta);
160 fHistJetsPt = new TH1F("fHistJetsPt","P_{T} spectrum of reconstructed jets", fNbins, fMinPt, fMaxPt);
161 fHistJetsPt->GetXaxis()->SetTitle("P_{T} [GeV/c]");
162 fHistJetsPt->GetYaxis()->SetTitle("counts");
163 fOutput->Add(fHistJetsPt);
165 fHistJetsPhiEta = new TH2F("fHistJetsPhiEta","Phi-Eta distribution of jets", 20, -2, 2, 32, 0, 6.4);
166 fHistJetsPhiEta->GetXaxis()->SetTitle("#eta");
167 fHistJetsPhiEta->GetYaxis()->SetTitle("#phi");
168 fOutput->Add(fHistJetsPhiEta);
170 fHistJetsPtArea = new TH2F("fHistJetsPtArea","P_{T} vs. area of reconstructed jets", fNbins, fMinPt, fMaxPt, fNbins, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
171 fHistJetsPtArea->GetXaxis()->SetTitle("P_{T} [GeV/c]");
172 fHistJetsPtArea->GetYaxis()->SetTitle("area");
173 fOutput->Add(fHistJetsPtArea);
176 fHistEoverP = new TH2F("fHistEoverP","E/P vs. E", fNbins, fMinPt, fMaxPt, fNbins, 0, 10);
177 fHistEoverP->GetXaxis()->SetTitle("E [GeV]");
178 fHistEoverP->GetYaxis()->SetTitle("E/P [c]");
179 fOutput->Add(fHistEoverP);
182 fHistCellsEnergy = new TH1F("fHistCellsEnergy","Energy spectrum of cells", fNbins, fMinPt, fMaxPt);
183 fHistCellsEnergy->GetXaxis()->SetTitle("E [GeV]");
184 fHistCellsEnergy->GetYaxis()->SetTitle("counts");
185 fOutput->Add(fHistCellsEnergy);
187 fHistChVSneCells = new TH2F("fHistChVSneCells","Charged energy vs. neutral (cells) energy", fNbins, fMinPt * 4, fMaxPt * 4, fNbins, fMinPt * 4, fMaxPt * 4);
188 fHistChVSneCells->GetXaxis()->SetTitle("E [GeV]");
189 fHistChVSneCells->GetYaxis()->SetTitle("P [GeV/c]");
190 fOutput->Add(fHistChVSneCells);
192 fHistChVSneClus = new TH2F("fHistChVSneClus","Charged energy vs. neutral (clusters) energy", fNbins, fMinPt * 4, fMaxPt * 4, fNbins, fMinPt * 4, fMaxPt * 4);
193 fHistChVSneClus->GetXaxis()->SetTitle("E [GeV]");
194 fHistChVSneClus->GetYaxis()->SetTitle("P [GeV/c]");
195 fOutput->Add(fHistChVSneClus);
197 fHistChVSneCorrCells = new TH2F("fHistChVSneCorrCells","Charged energy vs. neutral (corrected cells) energy", fNbins, fMinPt * 4, fMaxPt * 4, fNbins, fMinPt * 4, fMaxPt * 4);
198 fHistChVSneCorrCells->GetXaxis()->SetTitle("E [GeV]");
199 fHistChVSneCorrCells->GetYaxis()->SetTitle("P [GeV/c]");
200 fOutput->Add(fHistChVSneCorrCells);
202 for (Int_t i = 0; i < 5; i++) {
203 TString histnamephi("fHistTrackPhi_");
205 fHistTrackPhi[i] = new TH1F(histnamephi.Data(),histnamephi.Data(), 128, 0, 6.4);
206 fHistTrackPhi[i]->GetXaxis()->SetTitle("Phi");
207 fOutput->Add(fHistTrackPhi[i]);
209 TString histnameeta("fHistTrackEta_");
211 fHistTrackEta[i] = new TH1F(histnameeta.Data(),histnameeta.Data(), 100, -2, 2);
212 fHistTrackEta[i]->GetXaxis()->SetTitle("Eta");
213 fOutput->Add(fHistTrackEta[i]);
216 fHistTrackPhi[0]->SetLineColor(kRed);
217 fHistTrackEta[0]->SetLineColor(kRed);
218 fHistTrackPhi[1]->SetLineColor(kBlue);
219 fHistTrackEta[1]->SetLineColor(kBlue);
220 fHistTrackPhi[2]->SetLineColor(kGreen);
221 fHistTrackEta[2]->SetLineColor(kGreen);
222 fHistTrackPhi[3]->SetLineColor(kOrange);
223 fHistTrackEta[3]->SetLineColor(kOrange);
224 fHistTrackPhi[4]->SetLineColor(kBlack);
225 fHistTrackEta[4]->SetLineColor(kBlack);
227 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
230 //________________________________________________________________________
231 void AliAnalysisTaskSAQA::RetrieveEventObjects()
233 AliAnalysisTaskEmcal::RetrieveEventObjects();
235 if (strcmp(fTrgClusName,"")) {
236 fTrgClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTrgClusName));
238 AliWarning(Form("Could not retrieve trigger clusters!"));
243 //________________________________________________________________________
244 void AliAnalysisTaskSAQA::FillHistograms()
246 fHistCentrality->Fill(fCent);
248 fHistTracksCent->Fill(fCent, fTracks->GetEntriesFast());
250 fHistClusCent->Fill(fCent, fCaloClusters->GetEntriesFast());
252 Float_t clusSum = DoClusterLoop();
254 Float_t trackSum = DoTrackLoop();
256 Float_t cellSum = 0, cellCutSum = 0;
257 DoCellLoop(cellSum, cellCutSum);
259 fHistChVSneCells->Fill(cellSum, trackSum);
260 fHistChVSneClus->Fill(clusSum, trackSum);
261 fHistChVSneCorrCells->Fill(cellCutSum, trackSum);
265 Float_t maxTrgClus = DoTriggerClusLoop();
266 fHistMaxL1ClusCent->Fill(fCent, maxTrgClus);
271 DoTriggerPrimitives(maxL1amp, maxL1thr);
274 fHistMaxL1FastORCent->Fill(fCent, maxL1amp);
277 fHistMaxL1ThrCent->Fill(fCent, maxL1thr);
280 //________________________________________________________________________
281 void AliAnalysisTaskSAQA::DoCellLoop(Float_t &sum, Float_t &sum_cut)
283 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
288 Int_t ncells = cells->GetNumberOfCells();
290 for (Int_t pos = 0; pos < ncells; pos++) {
292 Float_t amp = cells->GetAmplitude(pos);
294 fHistCellsEnergy->Fill(amp);
298 if (amp < fCellEnergyCut)
306 //________________________________________________________________________
307 Float_t AliAnalysisTaskSAQA::DoClusterLoop()
315 Int_t nclusters = fCaloClusters->GetEntriesFast();
317 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
318 AliVCluster* cluster = dynamic_cast<AliVCluster*>(fCaloClusters->At(iClusters));
320 AliError(Form("Could not receive cluster %d", iClusters));
324 if (!(cluster->IsEMCAL())) continue;
326 if (!AcceptCluster(cluster, kTRUE)) continue;
328 fHistClustersEnergy->Fill(cluster->E());
333 cluster->GetPosition(pos);
334 TVector3 clusVec(pos);
335 fHistClusPhiEta->Fill(clusVec.Eta(), clusVec.Phi());
342 //________________________________________________________________________
343 Float_t AliAnalysisTaskSAQA::DoTrackLoop()
351 Int_t ntracks = fTracks->GetEntriesFast();
354 nclusters = fCaloClusters->GetEntriesFast();
356 for(Int_t i = 0; i < ntracks; i++) {
358 AliVTrack* track = dynamic_cast<AliVTrack*>(fTracks->At(i)); // pointer to reconstructed to track
360 AliError(Form("Could not retrieve track %d",i));
364 if (!AcceptTrack(track, kTRUE)) continue;
366 fHistTracksPt->Fill(track->Pt());
370 Int_t label = track->GetLabel();
372 fHistTrPhiEta->Fill(track->Eta(), track->Phi());
374 fHistTrackEta[4]->Fill(track->Eta());
375 fHistTrackPhi[4]->Fill(track->Phi());
377 if (label >= 0 && label < 4) {
378 fHistTrackEta[label]->Fill(track->Eta());
379 fHistTrackPhi[label]->Fill(track->Phi());
385 Int_t clId = track->GetEMCALcluster();
386 if (clId > -1 && clId < nclusters && fCaloClusters) {
387 AliVCluster* cluster = dynamic_cast<AliVCluster*>(fCaloClusters->At(i));
389 fHistEoverP->Fill(cluster->E(), cluster->E() / track->P());
397 //________________________________________________________________________
398 void AliAnalysisTaskSAQA::DoJetLoop()
403 Int_t njets = fJets->GetEntriesFast();
405 for (Int_t ij = 0; ij < njets; ij++) {
407 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(ij));
410 AliError(Form("Could not receive jet %d", ij));
417 fHistJetsPt->Fill(jet->Pt());
418 fHistJetsPtArea->Fill(jet->Pt(), jet->Area());
419 fHistJetsPhiEta->Fill(jet->Eta(), jet->Phi());
423 //________________________________________________________________________
424 Float_t AliAnalysisTaskSAQA::DoTriggerClusLoop()
429 Int_t ntrgclusters = fTrgClusters->GetEntriesFast();
430 Float_t maxTrgClus = 0;
432 for (Int_t iClusters = 0; iClusters < ntrgclusters; iClusters++) {
433 AliVCluster* cluster = dynamic_cast<AliVCluster*>(fTrgClusters->At(iClusters));
435 AliError(Form("Could not receive cluster %d", iClusters));
439 if (!(cluster->IsEMCAL())) continue;
441 if (cluster->E() > maxTrgClus)
442 maxTrgClus = cluster->E();
448 //________________________________________________________________________
449 void AliAnalysisTaskSAQA::DoTriggerPrimitives(Int_t &maxL1amp, Int_t &maxL1thr)
451 AliVCaloTrigger *triggers = InputEvent()->GetCaloTrigger("EMCAL");
453 if (!triggers || triggers->GetEntries() == 0)
462 while (triggers->Next()) {
463 triggers->GetL1TimeSum(L1amp);
464 if (maxL1amp < L1amp)
467 triggers->GetL1Threshold(L1thr);
468 if (maxL1thr < L1thr)
473 //________________________________________________________________________
474 void AliAnalysisTaskSAQA::Terminate(Option_t *)
476 // Called once at the end of the analysis.