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 AliAnalysisTaskEmcalJet("AliAnalysisTaskSAQA", kTRUE),
32 fTrgClusName("ClustersL1GAMMAFEE"),
37 fHistMaxL1FastORCent(0),
38 fHistMaxL1ClusCent(0),
43 fHistClustersEnergy(0),
49 fHistChVSneCorrCells(0)
51 // Default constructor.
53 for (Int_t i = 0; i < 5; i++) {
58 for (Int_t i = 0; i < 4; i++) {
59 fHistJetsPtNonBias[i] = 0;
60 fHistJetsPtTrack[i] = 0;
61 fHistJetsPtClus[i] = 0;
63 fHistJetsPtArea[i] = 0;
64 fHistJetsPtAreaNonBias[i] = 0;
68 //________________________________________________________________________
69 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA(const char *name) :
70 AliAnalysisTaskEmcalJet(name, kTRUE),
73 fTrgClusName("ClustersL1GAMMAFEE"),
78 fHistMaxL1FastORCent(0),
79 fHistMaxL1ClusCent(0),
84 fHistClustersEnergy(0),
90 fHistChVSneCorrCells(0)
92 // Standard constructor.
94 for (Int_t i = 0; i < 5; i++) {
99 for (Int_t i = 0; i < 4; i++) {
100 fHistJetsPtNonBias[i] = 0;
101 fHistJetsPtTrack[i] = 0;
102 fHistJetsPtClus[i] = 0;
104 fHistJetsPtArea[i] = 0;
105 fHistJetsPtAreaNonBias[i] = 0;
109 //________________________________________________________________________
110 AliAnalysisTaskSAQA::~AliAnalysisTaskSAQA()
115 //________________________________________________________________________
116 void AliAnalysisTaskSAQA::UserCreateOutputObjects()
121 fOutput = new TList();
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
190 if (fAnaType == kEMCAL) {
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);
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);
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);
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);
216 for (Int_t i = 0; i < 5; i++) {
217 TString histnamephi("fHistTrackPhi_");
219 fHistTrackPhi[i] = new TH1F(histnamephi.Data(),histnamephi.Data(), 128, 0, 6.4);
220 fHistTrackPhi[i]->GetXaxis()->SetTitle("Phi");
221 fOutput->Add(fHistTrackPhi[i]);
223 TString histnameeta("fHistTrackEta_");
225 fHistTrackEta[i] = new TH1F(histnameeta.Data(),histnameeta.Data(), 100, -2, 2);
226 fHistTrackEta[i]->GetXaxis()->SetTitle("Eta");
227 fOutput->Add(fHistTrackEta[i]);
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);
243 for (Int_t i = 0; i < 4; i++) {
244 histname = "fHistJetsPtNonBias_";
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]);
251 histname = "fHistJetsPtTrack_";
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]);
258 if (fAnaType == kEMCAL) {
259 histname = "fHistJetsPtClus_";
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]);
267 histname = "fHistJetsPt_";
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]);
274 histname = "fHistJetsPtAreaNonBias_";
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]);
281 histname = "fHistJetsPtArea_";
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]);
289 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
292 //________________________________________________________________________
293 Bool_t AliAnalysisTaskSAQA::RetrieveEventObjects()
295 // Retrieve event objects.
297 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
300 if (strcmp(fTrgClusName,"") && fDoTrigger) {
301 fTrgClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTrgClusName));
303 AliWarning(Form("Could not retrieve trigger clusters!"));
310 //________________________________________________________________________
311 Bool_t AliAnalysisTaskSAQA::FillHistograms()
315 fHistCentrality->Fill(fCent);
317 fHistTracksCent->Fill(fCent, fTracks->GetEntriesFast());
319 fHistClusCent->Fill(fCent, fCaloClusters->GetEntriesFast());
321 Float_t trackSum = DoTrackLoop();
325 if (fAnaType == kEMCAL) {
326 Float_t clusSum = DoClusterLoop();
328 Float_t cellSum = 0, cellCutSum = 0;
330 DoCellLoop(cellSum, cellCutSum);
332 fHistChVSneCells->Fill(cellSum, trackSum);
333 fHistChVSneClus->Fill(clusSum, trackSum);
334 fHistChVSneCorrCells->Fill(cellCutSum, trackSum);
337 Float_t maxTrgClus = DoTriggerClusLoop();
338 fHistMaxL1ClusCent->Fill(fCent, maxTrgClus);
343 DoTriggerPrimitives(maxL1amp, maxL1thr);
346 fHistMaxL1FastORCent->Fill(fCent, maxL1amp);
349 fHistMaxL1ThrCent->Fill(fCent, maxL1thr);
356 //________________________________________________________________________
357 void AliAnalysisTaskSAQA::DoCellLoop(Float_t &sum, Float_t &sum_cut)
361 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
366 const Int_t ncells = cells->GetNumberOfCells();
368 for (Int_t pos = 0; pos < ncells; pos++) {
369 Float_t amp = cells->GetAmplitude(pos);
370 fHistCellsEnergy->Fill(amp);
372 if (amp < fCellEnergyCut)
378 //________________________________________________________________________
379 Float_t AliAnalysisTaskSAQA::DoClusterLoop()
389 Int_t nclusters = fCaloClusters->GetEntriesFast();
391 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
392 AliVCluster* cluster = dynamic_cast<AliVCluster*>(fCaloClusters->At(iClusters));
394 AliError(Form("Could not receive cluster %d", iClusters));
398 if (!(cluster->IsEMCAL())) continue;
400 if (!AcceptCluster(cluster, kTRUE)) continue;
402 fHistClustersEnergy->Fill(cluster->E());
407 cluster->GetPosition(pos);
408 TVector3 clusVec(pos);
409 fHistClusPhiEta->Fill(clusVec.Eta(), clusVec.Phi());
416 //________________________________________________________________________
417 Float_t AliAnalysisTaskSAQA::DoTrackLoop()
427 Int_t ntracks = fTracks->GetEntriesFast();
430 nclusters = fCaloClusters->GetEntriesFast();
432 for (Int_t i = 0; i < ntracks; i++) {
434 AliVParticle* track = dynamic_cast<AliVParticle*>(fTracks->At(i)); // pointer to reconstructed to track
437 AliError(Form("Could not retrieve track %d",i));
441 AliVTrack* vtrack = dynamic_cast<AliVTrack*>(track);
443 if (vtrack && !AcceptTrack(vtrack, kTRUE))
446 fHistTracksPt->Fill(track->Pt());
450 Int_t label = track->GetLabel();
452 fHistTrPhiEta->Fill(track->Eta(), track->Phi());
454 fHistTrackEta[4]->Fill(track->Eta());
455 fHistTrackPhi[4]->Fill(track->Phi());
457 if (label >= 0 && label < 4) {
458 fHistTrackEta[label]->Fill(track->Eta());
459 fHistTrackPhi[label]->Fill(track->Phi());
465 fHistTrEmcPhiEta->Fill(vtrack->GetTrackEtaOnEMCal(), vtrack->GetTrackPhiOnEMCal());
471 //________________________________________________________________________
472 void AliAnalysisTaskSAQA::DoJetLoop()
479 Int_t njets = fJets->GetEntriesFast();
481 for (Int_t ij = 0; ij < njets; ij++) {
483 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(ij));
486 AliError(Form("Could not receive jet %d", ij));
490 if (!AcceptJet(jet, kFALSE))
493 fHistJetsPtNonBias[fCentBin]->Fill(jet->Pt());
494 fHistJetsPtAreaNonBias[fCentBin]->Fill(jet->Pt(), jet->Area());
496 if (jet->MaxTrackPt() > fPtBiasJetTrack)
497 fHistJetsPtTrack[fCentBin]->Fill(jet->Pt());
499 if (fAnaType == kEMCAL && jet->MaxClusterPt() > fPtBiasJetClus)
500 fHistJetsPtClus[fCentBin]->Fill(jet->Pt());
502 if (!AcceptBiasJet(jet))
505 fHistJetsPt[fCentBin]->Fill(jet->Pt());
506 fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());
508 fHistJetsPhiEta->Fill(jet->Eta(), jet->Phi());
512 //________________________________________________________________________
513 Float_t AliAnalysisTaskSAQA::DoTriggerClusLoop()
515 // Do trigger cluster loop.
520 Int_t ntrgclusters = fTrgClusters->GetEntriesFast();
521 Float_t maxTrgClus = 0;
523 for (Int_t iClusters = 0; iClusters < ntrgclusters; iClusters++) {
524 AliVCluster* cluster = dynamic_cast<AliVCluster*>(fTrgClusters->At(iClusters));
526 AliError(Form("Could not receive cluster %d", iClusters));
530 if (!(cluster->IsEMCAL())) continue;
532 if (cluster->E() > maxTrgClus)
533 maxTrgClus = cluster->E();
539 //________________________________________________________________________
540 void AliAnalysisTaskSAQA::DoTriggerPrimitives(Int_t &maxL1amp, Int_t &maxL1thr)
542 // Do trigger primitives loop.
544 AliVCaloTrigger *triggers = InputEvent()->GetCaloTrigger("EMCAL");
546 if (!triggers || triggers->GetEntries() == 0)
555 while (triggers->Next()) {
556 triggers->GetL1TimeSum(L1amp);
557 if (maxL1amp < L1amp)
560 triggers->GetL1Threshold(L1thr);
561 if (maxL1thr < L1thr)
566 //________________________________________________________________________
567 void AliAnalysisTaskSAQA::Terminate(Option_t *)
569 // Called once at the end of the analysis.