// $Id$
//
-// General QA task (S.Aiola).
-//
+// General QA task.
//
+// Author: S.Aiola
#include <TChain.h>
#include <TClonesArray.h>
//________________________________________________________________________
AliAnalysisTaskSAQA::AliAnalysisTaskSAQA() :
- AliAnalysisTaskEmcalJet("AliAnalysisTaskSAQA"),
+ AliAnalysisTaskEmcalJet("AliAnalysisTaskSAQA", kTRUE),
fCellEnergyCut(0.1),
- fDoEoverP(kFALSE),
+ fDoTrigger(kFALSE),
fTrgClusName("ClustersL1GAMMAFEE"),
fTrgClusters(0),
fHistCentrality(0),
fHistClustersEnergy(0),
fHistClusPhiEta(0),
fHistJetsPhiEta(0),
- fHistJetsPtArea(0),
- fHistEoverP(0),
fHistCellsEnergy(0),
fHistChVSneCells(0),
fHistChVSneClus(0),
}
for (Int_t i = 0; i < 4; i++) {
+ fHistJetsPtNonBias[i] = 0;
fHistJetsPtTrack[i] = 0;
fHistJetsPtClus[i] = 0;
fHistJetsPt[i] = 0;
+ fHistJetsPtArea[i] = 0;
+ fHistJetsPtAreaNonBias[i] = 0;
}
}
//________________________________________________________________________
AliAnalysisTaskSAQA::AliAnalysisTaskSAQA(const char *name) :
- AliAnalysisTaskEmcalJet(name),
+ AliAnalysisTaskEmcalJet(name, kTRUE),
fCellEnergyCut(0.1),
- fDoEoverP(kFALSE),
+ fDoTrigger(kFALSE),
fTrgClusName("ClustersL1GAMMAFEE"),
fTrgClusters(0),
fHistCentrality(0),
fHistClustersEnergy(0),
fHistClusPhiEta(0),
fHistJetsPhiEta(0),
- fHistJetsPtArea(0),
- fHistEoverP(0),
fHistCellsEnergy(0),
fHistChVSneCells(0),
fHistChVSneClus(0),
}
for (Int_t i = 0; i < 4; i++) {
+ fHistJetsPtNonBias[i] = 0;
fHistJetsPtTrack[i] = 0;
fHistJetsPtClus[i] = 0;
fHistJetsPt[i] = 0;
+ fHistJetsPtArea[i] = 0;
+ fHistJetsPtAreaNonBias[i] = 0;
}
}
fHistClusCent->GetYaxis()->SetTitle("No. of clusters");
fOutput->Add(fHistClusCent);
- fHistMaxL1FastORCent = new TH2F("fHistMaxL1FastORCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
- fHistMaxL1FastORCent->GetXaxis()->SetTitle("Centrality [%]");
- fHistMaxL1FastORCent->GetYaxis()->SetTitle("Maximum L1 FastOR");
- fOutput->Add(fHistMaxL1FastORCent);
-
- fHistMaxL1ClusCent = new TH2F("fHistMaxL1ClusCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
- fHistMaxL1ClusCent->GetXaxis()->SetTitle("Centrality [%]");
- fHistMaxL1ClusCent->GetYaxis()->SetTitle("Maximum L1 trigger cluster");
- fOutput->Add(fHistMaxL1ClusCent);
-
- fHistMaxL1ThrCent = new TH2F("fHistMaxL1ThrCent","fHistMaxL1ThrCent", 100, 0, 100, 250, 0, 250);
- fHistMaxL1ThrCent->GetXaxis()->SetTitle("Centrality [%]");
- fHistMaxL1ThrCent->GetYaxis()->SetTitle("Maximum L1 threshold");
- fOutput->Add(fHistMaxL1ThrCent);
+ if (fDoTrigger) {
+ fHistMaxL1FastORCent = new TH2F("fHistMaxL1FastORCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
+ fHistMaxL1FastORCent->GetXaxis()->SetTitle("Centrality [%]");
+ fHistMaxL1FastORCent->GetYaxis()->SetTitle("Maximum L1 FastOR");
+ fOutput->Add(fHistMaxL1FastORCent);
+
+ fHistMaxL1ClusCent = new TH2F("fHistMaxL1ClusCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
+ fHistMaxL1ClusCent->GetXaxis()->SetTitle("Centrality [%]");
+ fHistMaxL1ClusCent->GetYaxis()->SetTitle("Maximum L1 trigger cluster");
+ fOutput->Add(fHistMaxL1ClusCent);
+
+ fHistMaxL1ThrCent = new TH2F("fHistMaxL1ThrCent","fHistMaxL1ThrCent", 100, 0, 100, 250, 0, 250);
+ fHistMaxL1ThrCent->GetXaxis()->SetTitle("Centrality [%]");
+ fHistMaxL1ThrCent->GetYaxis()->SetTitle("Maximum L1 threshold");
+ fOutput->Add(fHistMaxL1ThrCent);
+ }
}
fHistTracksPt = new TH1F("fHistTracksPt","p_{T} spectrum of reconstructed tracks", fNbins, fMinBinPt, fMaxBinPt);
fHistClusPhiEta->GetYaxis()->SetTitle("#phi");
fOutput->Add(fHistClusPhiEta);
}
-
- fHistJetsPhiEta = new TH2F("fHistJetsPhiEta","Phi-Eta distribution of jets", 80, -2, 2, 128, 0, 6.4);
- fHistJetsPhiEta->GetXaxis()->SetTitle("#eta");
- fHistJetsPhiEta->GetYaxis()->SetTitle("#phi");
- fOutput->Add(fHistJetsPhiEta);
-
- fHistJetsPtArea = new TH2F("fHistJetsPtArea","p_{T} vs. area of reconstructed jets", fNbins, fMinBinPt, fMaxBinPt, 20, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
- fHistJetsPtArea->GetXaxis()->SetTitle("p_{T} [GeV/c]");
- fHistJetsPtArea->GetYaxis()->SetTitle("area");
- fOutput->Add(fHistJetsPtArea);
if (fAnaType == kEMCAL) {
- if (fDoEoverP) {
- fHistEoverP = new TH2F("fHistEoverP","E/P vs. E", fNbins, fMinBinPt, fMaxBinPt, fNbins, 0, 10);
- fHistEoverP->GetXaxis()->SetTitle("E [GeV]");
- fHistEoverP->GetYaxis()->SetTitle("E/P [c]");
- fOutput->Add(fHistEoverP);
- }
fHistCellsEnergy = new TH1F("fHistCellsEnergy","Energy spectrum of cells", fNbins, fMinBinPt, fMaxBinPt);
fHistCellsEnergy->GetXaxis()->SetTitle("E [GeV]");
fHistCellsEnergy->GetYaxis()->SetTitle("counts");
fOutput->Add(fHistCellsEnergy);
- fHistChVSneCells = new TH2F("fHistChVSneCells","Charged energy vs. neutral (cells) energy", fNbins, fMinBinPt * 4, fMaxBinPt * 4, fNbins, fMinBinPt * 4, fMaxBinPt * 4);
+ fHistChVSneCells = new TH2F("fHistChVSneCells","Charged energy vs. neutral (cells) energy",
+ fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
fHistChVSneCells->GetXaxis()->SetTitle("E [GeV]");
fHistChVSneCells->GetYaxis()->SetTitle("P [GeV/c]");
fOutput->Add(fHistChVSneCells);
- fHistChVSneClus = new TH2F("fHistChVSneClus","Charged energy vs. neutral (clusters) energy", fNbins, fMinBinPt * 4, fMaxBinPt * 4, fNbins, fMinBinPt * 4, fMaxBinPt * 4);
+ fHistChVSneClus = new TH2F("fHistChVSneClus","Charged energy vs. neutral (clusters) energy",
+ fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
fHistChVSneClus->GetXaxis()->SetTitle("E [GeV]");
fHistChVSneClus->GetYaxis()->SetTitle("P [GeV/c]");
fOutput->Add(fHistChVSneClus);
- fHistChVSneCorrCells = new TH2F("fHistChVSneCorrCells","Charged energy vs. neutral (corrected cells) energy", fNbins, fMinBinPt * 4, fMaxBinPt * 4, fNbins, fMinBinPt * 4, fMaxBinPt * 4);
+ fHistChVSneCorrCells = new TH2F("fHistChVSneCorrCells","Charged energy vs. neutral (corrected cells) energy",
+ fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, fNbins * 2.5, fMinBinPt , fMaxBinPt * 2.5);
fHistChVSneCorrCells->GetXaxis()->SetTitle("E [GeV]");
fHistChVSneCorrCells->GetYaxis()->SetTitle("P [GeV/c]");
fOutput->Add(fHistChVSneCorrCells);
fHistTrackPhi[4]->SetLineColor(kBlack);
fHistTrackEta[4]->SetLineColor(kBlack);
- TString histname;
+ if (!fJetsName.IsNull()) {
- for (Int_t i = 0; i < 4; i++) {
- if (fAnaType == kEMCAL) {
- histname = "fHistJetsPtClus_";
+ fHistJetsPhiEta = new TH2F("fHistJetsPhiEta","Phi-Eta distribution of jets", 80, -2, 2, 128, 0, 6.4);
+ fHistJetsPhiEta->GetXaxis()->SetTitle("#eta");
+ fHistJetsPhiEta->GetYaxis()->SetTitle("#phi");
+ fOutput->Add(fHistJetsPhiEta);
+
+ TString histname;
+
+ for (Int_t i = 0; i < 4; i++) {
+ histname = "fHistJetsPtNonBias_";
histname += i;
- fHistJetsPtClus[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
- fHistJetsPtClus[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
- fHistJetsPtClus[i]->GetYaxis()->SetTitle("counts");
- fOutput->Add(fHistJetsPtClus[i]);
- }
+ fHistJetsPtNonBias[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
+ fHistJetsPtNonBias[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
+ fHistJetsPtNonBias[i]->GetYaxis()->SetTitle("counts");
+ fOutput->Add(fHistJetsPtNonBias[i]);
- histname = "fHistJetsPtTrack_";
- histname += i;
- fHistJetsPtTrack[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
- fHistJetsPtTrack[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
- fHistJetsPtTrack[i]->GetYaxis()->SetTitle("counts");
- fOutput->Add(fHistJetsPtTrack[i]);
-
- histname = "fHistJetsPt_";
- histname += i;
- fHistJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
- fHistJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
- fHistJetsPt[i]->GetYaxis()->SetTitle("counts");
- fOutput->Add(fHistJetsPt[i]);
+ histname = "fHistJetsPtTrack_";
+ histname += i;
+ fHistJetsPtTrack[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
+ fHistJetsPtTrack[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
+ fHistJetsPtTrack[i]->GetYaxis()->SetTitle("counts");
+ fOutput->Add(fHistJetsPtTrack[i]);
+
+ if (fAnaType == kEMCAL) {
+ histname = "fHistJetsPtClus_";
+ histname += i;
+ fHistJetsPtClus[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
+ fHistJetsPtClus[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
+ fHistJetsPtClus[i]->GetYaxis()->SetTitle("counts");
+ fOutput->Add(fHistJetsPtClus[i]);
+ }
+
+ histname = "fHistJetsPt_";
+ histname += i;
+ fHistJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5);
+ fHistJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
+ fHistJetsPt[i]->GetYaxis()->SetTitle("counts");
+ fOutput->Add(fHistJetsPt[i]);
+
+ histname = "fHistJetsPtAreaNonBias_";
+ histname += i;
+ fHistJetsPtAreaNonBias[i] = new TH2F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, 20, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
+ fHistJetsPtAreaNonBias[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
+ fHistJetsPtAreaNonBias[i]->GetYaxis()->SetTitle("area");
+ fOutput->Add(fHistJetsPtAreaNonBias[i]);
+
+ histname = "fHistJetsPtArea_";
+ histname += i;
+ fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins * 2.5, fMinBinPt, fMaxBinPt * 2.5, 20, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
+ fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
+ fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
+ fOutput->Add(fHistJetsPtArea[i]);
+ }
}
PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
//________________________________________________________________________
Bool_t AliAnalysisTaskSAQA::RetrieveEventObjects()
{
- if(!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
+ // Retrieve event objects.
+
+ if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
return kFALSE;
- if (strcmp(fTrgClusName,"")) {
+ if (!fTrgClusName.IsNull() && fDoTrigger && !fTrgClusters) {
fTrgClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTrgClusName));
if (!fTrgClusters) {
- AliWarning(Form("Could not retrieve trigger clusters!"));
+ AliError(Form("%s: Could not retrieve trigger clusters %s!", GetName(), fTrgClusName.Data()));
+ return kFALSE;
+ }
+ else {
+ TClass *cl = fTrgClusters->GetClass();
+ if (!cl->GetBaseClass("AliVCluster") && !cl->GetBaseClass("AliEmcalParticle")) {
+ AliError(Form("%s: Collection %s does not contain AliVCluster nor AliEmcalParticle objects!", GetName(), fTrgClusName.Data()));
+ fTrgClusters = 0;
+ return kFALSE;
+ }
}
}
//________________________________________________________________________
Bool_t AliAnalysisTaskSAQA::FillHistograms()
{
+ // Fill histograms.
+
fHistCentrality->Fill(fCent);
if (fTracks)
fHistTracksCent->Fill(fCent, fTracks->GetEntriesFast());
fHistChVSneClus->Fill(clusSum, trackSum);
fHistChVSneCorrCells->Fill(cellCutSum, trackSum);
- Float_t maxTrgClus = DoTriggerClusLoop();
- fHistMaxL1ClusCent->Fill(fCent, maxTrgClus);
+ if (fDoTrigger) {
+ Float_t maxTrgClus = DoTriggerClusLoop();
+ fHistMaxL1ClusCent->Fill(fCent, maxTrgClus);
- Int_t maxL1amp = -1;
- Int_t maxL1thr = -1;
+ Int_t maxL1amp = -1;
+ Int_t maxL1thr = -1;
- DoTriggerPrimitives(maxL1amp, maxL1thr);
-
- if (maxL1amp > -1)
- fHistMaxL1FastORCent->Fill(fCent, maxL1amp);
-
- if (maxL1thr > -1)
- fHistMaxL1ThrCent->Fill(fCent, maxL1thr);
+ DoTriggerPrimitives(maxL1amp, maxL1thr);
+
+ if (maxL1amp > -1)
+ fHistMaxL1FastORCent->Fill(fCent, maxL1amp);
+
+ if (maxL1thr > -1)
+ fHistMaxL1ThrCent->Fill(fCent, maxL1thr);
+ }
}
return kTRUE;
//________________________________________________________________________
void AliAnalysisTaskSAQA::DoCellLoop(Float_t &sum, Float_t &sum_cut)
{
+ // Do cell loop.
+
AliVCaloCells *cells = InputEvent()->GetEMCALCells();
if (!cells)
return;
- Int_t ncells = cells->GetNumberOfCells();
+ const Int_t ncells = cells->GetNumberOfCells();
for (Int_t pos = 0; pos < ncells; pos++) {
-
Float_t amp = cells->GetAmplitude(pos);
-
fHistCellsEnergy->Fill(amp);
-
sum += amp;
-
if (amp < fCellEnergyCut)
continue;
-
sum_cut += amp;
-
}
}
//________________________________________________________________________
Float_t AliAnalysisTaskSAQA::DoClusterLoop()
{
+ // Do cluster loop.
+
if (!fCaloClusters)
return 0;
Int_t nclusters = fCaloClusters->GetEntriesFast();
for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
- AliVCluster* cluster = dynamic_cast<AliVCluster*>(fCaloClusters->At(iClusters));
+ AliVCluster* cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
if (!cluster) {
AliError(Form("Could not receive cluster %d", iClusters));
continue;
}
-
- if (!(cluster->IsEMCAL())) continue;
- if (!AcceptCluster(cluster, kTRUE)) continue;
+ if (!AcceptCluster(cluster, kTRUE))
+ continue;
fHistClustersEnergy->Fill(cluster->E());
TVector3 clusVec(pos);
fHistClusPhiEta->Fill(clusVec.Eta(), clusVec.Phi());
- } //cluster loop
+ }
return sum;
}
//________________________________________________________________________
Float_t AliAnalysisTaskSAQA::DoTrackLoop()
{
+ // Do track loop.
+
if (!fTracks)
return 0;
Float_t sum = 0;
- // Track loop
Int_t ntracks = fTracks->GetEntriesFast();
Int_t nclusters = 0;
if (fCaloClusters)
nclusters = fCaloClusters->GetEntriesFast();
- for(Int_t i = 0; i < ntracks; i++) {
+ for (Int_t i = 0; i < ntracks; i++) {
- AliVTrack* track = dynamic_cast<AliVTrack*>(fTracks->At(i)); // pointer to reconstructed to track
- if(!track) {
+ AliVParticle* track = static_cast<AliVParticle*>(fTracks->At(i)); // pointer to reconstructed to track
+
+ if (!track) {
AliError(Form("Could not retrieve track %d",i));
continue;
}
-
- if (!AcceptTrack(track, kTRUE)) continue;
+ AliVTrack* vtrack = dynamic_cast<AliVTrack*>(track);
+
+ if (vtrack && !AcceptTrack(vtrack, kTRUE))
+ continue;
+
fHistTracksPt->Fill(track->Pt());
sum += track->P();
Int_t label = track->GetLabel();
fHistTrPhiEta->Fill(track->Eta(), track->Phi());
- fHistTrEmcPhiEta->Fill(track->GetTrackEtaOnEMCal(), track->GetTrackPhiOnEMCal());
fHistTrackEta[4]->Fill(track->Eta());
fHistTrackPhi[4]->Fill(track->Phi());
fHistTrackPhi[label]->Fill(track->Phi());
}
- if (!fDoEoverP)
+ if (!vtrack)
continue;
- Int_t clId = track->GetEMCALcluster();
- if (clId > -1 && clId < nclusters && fCaloClusters) {
- AliVCluster* cluster = dynamic_cast<AliVCluster*>(fCaloClusters->At(i));
- if (cluster) {
- fHistEoverP->Fill(cluster->E(), cluster->E() / track->P());
- }
- }
+ fHistTrEmcPhiEta->Fill(vtrack->GetTrackEtaOnEMCal(), vtrack->GetTrackPhiOnEMCal());
}
return sum;
//________________________________________________________________________
void AliAnalysisTaskSAQA::DoJetLoop()
{
+ // Do jet loop.
+
if (!fJets)
return;
for (Int_t ij = 0; ij < njets; ij++) {
- AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(ij));
+ AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(ij));
if (!jet) {
AliError(Form("Could not receive jet %d", ij));
if (!AcceptJet(jet, kFALSE))
continue;
- fHistJetsPt[fCentBin]->Fill(jet->Pt());
+ fHistJetsPtNonBias[fCentBin]->Fill(jet->Pt());
+ fHistJetsPtAreaNonBias[fCentBin]->Fill(jet->Pt(), jet->Area());
if (jet->MaxTrackPt() > fPtBiasJetTrack)
fHistJetsPtTrack[fCentBin]->Fill(jet->Pt());
if (fAnaType == kEMCAL && jet->MaxClusterPt() > fPtBiasJetClus)
fHistJetsPtClus[fCentBin]->Fill(jet->Pt());
- fHistJetsPtArea->Fill(jet->Pt(), jet->Area());
+ if (!AcceptBiasJet(jet))
+ continue;
+
+ fHistJetsPt[fCentBin]->Fill(jet->Pt());
+ fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());
+
fHistJetsPhiEta->Fill(jet->Eta(), jet->Phi());
}
}
//________________________________________________________________________
Float_t AliAnalysisTaskSAQA::DoTriggerClusLoop()
{
+ // Do trigger cluster loop.
+
if (!fTrgClusters)
return 0;
Float_t maxTrgClus = 0;
for (Int_t iClusters = 0; iClusters < ntrgclusters; iClusters++) {
- AliVCluster* cluster = dynamic_cast<AliVCluster*>(fTrgClusters->At(iClusters));
+ AliVCluster* cluster = static_cast<AliVCluster*>(fTrgClusters->At(iClusters));
if (!cluster) {
AliError(Form("Could not receive cluster %d", iClusters));
continue;
//________________________________________________________________________
void AliAnalysisTaskSAQA::DoTriggerPrimitives(Int_t &maxL1amp, Int_t &maxL1thr)
{
+ // Do trigger primitives loop.
+
AliVCaloTrigger *triggers = InputEvent()->GetCaloTrigger("EMCAL");
if (!triggers || triggers->GetEntries() == 0)