18 #include <TClonesArray.h>
21 #include <THnSparse.h>
24 #include <Riostream.h>
28 #include <AliVEventHandler.h>
29 #include <AliAnalysisManager.h>
33 #include "AliCentrality.h"
34 #include "AliVCluster.h"
35 #include "AliVParticle.h"
36 #include "AliVTrack.h"
38 #include "AliEMCALGeometry.h"
39 #include "AliEMCALGeoParams.h"
40 #include "AliESDtrack.h"
41 #include "AliAODTrack.h"
42 #include "AliAODMCParticle.h"
46 #include "AliMCEvent.h"
47 #include "AliGenPythiaEventHeader.h"
48 #include "AliAODMCHeader.h"
49 #include "AliPHOSGeometry.h"
50 #include "AliOADBContainer.h"
67 fGeneratorLevelName(),
78 fNPtRelDiffHistBins(0),
79 fPtRelDiffHistBins(0),
84 fHistManager(
"AliAnalysisTaskPWGJEQA"),
89 fRejectOutlierEvents(kFALSE),
105 fCellEnergyCut(0.05),
110 fGeneratorLevelName(),
112 fDetectorLevelName(),
121 fNPtRelDiffHistBins(0),
122 fPtRelDiffHistBins(0),
125 fNIntegerHistBins(0),
132 fRejectOutlierEvents(kFALSE),
167 while ((obj = next())) {
192 histname = TString::Format(
"%s/fHistCellEnergy",
fCaloCellsName.Data());
193 title = histname +
";#it{E}_{cell} (GeV);counts";
196 histname = TString::Format(
"%s/fProfCellAbsIdEnergy",
fCaloCellsName.Data());
197 title = histname +
";cell absId;<#it{E}_{cell}> (GeV)";
200 histname = TString::Format(
"%s/fHistCellTime",
fCaloCellsName.Data());
201 title = histname +
";#it{t}_{cell} (s);counts";
204 histname = TString::Format(
"%s/fProfCellAbsIdTime",
fCaloCellsName.Data());
205 title = histname +
";cell absId;<#it{t}_{cell}> (s)";
208 histname = TString::Format(
"%s/fHistCellEvsTime",
fCaloCellsName.Data());
209 title = histname +
";<#it{t}_{cell}> (s);<#it{E}_{cell}> (GeV)";
218 AliEmcalContainer* cont = 0;
224 while ((cont = static_cast<AliEmcalContainer*>(nextClusColl()))) {
226 histname = TString::Format(
"%s/fHistClusterRejectionReason", cont->GetArrayName().Data());
227 title = histname +
";Rejection reason;#it{E}_{clus} (GeV/);counts";
231 const Int_t nEmcalSM = 20;
232 for (
Int_t sm = 0; sm < nEmcalSM; sm++) {
233 histname = TString::Format(
"%s/BySM/hEmcalClusEnergy_SM%d", cont->GetArrayName().Data(), sm);
234 title = histname +
";#it{E}_{cluster} (GeV);counts";
238 for (
Int_t sm = 0; sm < 6; sm++) {
239 histname = TString::Format(
"%s/BySM/hPhosClusEnergy_SM%d", cont->GetArrayName().Data(), sm);
240 title = histname +
";#it{E}_{cluster} (GeV);counts";
253 title[dim] =
"Centrality %";
261 title[dim] =
"#it{E}_{clus} (GeV)";
282 title[dim] =
"cluster type";
289 TString thnname = TString::Format(
"%s/clusterObservables", cont->GetArrayName().Data());
291 for (
Int_t i = 0; i < dim; i++) {
292 hn->GetAxis(i)->SetTitle(title[i]);
293 hn->SetBinEdges(i, binEdges[i]);
303 while ((jets = static_cast<AliJetContainer*>(nextJetColl()))) {
316 axisTitle[dim] =
"Centrality (%)";
324 axisTitle[dim] =
"#eta_{jet}";
331 axisTitle[dim] =
"#phi_{jet} (rad)";
338 axisTitle[dim] =
"#it{p}_{T} (GeV/#it{c})";
339 nbins[dim] = TMath::CeilNint(
fMaxPt/3);
346 axisTitle[dim] =
"#it{p}_{T}^{corr} (GeV/#it{c})";
347 nbins[dim] = TMath::CeilNint(
fMaxPt/3);
348 min[dim] = -
fMaxPt/2 + 25;
354 axisTitle[dim] =
"#it{p}_{T,particle}^{leading} (GeV/#it{c})";
361 TString thnname = TString::Format(
"%s/fHistJetObservables", jets->GetArrayName().Data());
363 for (
Int_t i = 0; i < dim; i++) {
364 hn->GetAxis(i)->SetTitle(axisTitle[i]);
365 hn->SetBinEdges(i, binEdges[i]);
371 histname = TString::Format(
"%s/fHistJetRejectionReason", jets->GetArrayName().Data());
372 title = histname +
";Rejection reason;#it{p}_{T,jet} (GeV/#it{c});counts";
377 histname = TString::Format(
"%s/fHistRhoVsCent", jets->GetArrayName().Data());
378 title = histname +
";Centrality (%);#rho (GeV/#it{c});counts";
397 axistitle[dim] =
"Centrality %";
406 axistitle[dim] =
"No. of tracks";
410 max[dim] = 10000-0.5;
421 axistitle[dim] =
"#it{p}_{T,track}^{leading} (GeV/c)";
430 axistitle[dim] =
"No. of clusters";
446 axistitle[dim] =
"#it{E}_{cluster}^{leading} (GeV)";
455 for (
Int_t i = 0; i < dim; i++) {
456 hn->GetAxis(i)->SetTitle(axistitle[i]);
457 hn->SetBinEdges(i, binEdges[i]);
462 TString title = histname +
";#it{p}_{T,hard} (GeV/c);counts";
466 hTrials->GetXaxis()->SetBinLabel(1,
"#sum{ntrials}");
469 hxsection->GetXaxis()->SetBinLabel(1,
"<#sigma>");
487 title[dim] =
"Centrality %";
495 title[dim] =
"#it{p}_{T} (GeV/#it{c})";
516 title[dim] =
"track type";
523 title[dim] =
"#sigma(#it{p}_{T}) / #it{p}_{T}";
531 for (
Int_t i = 0; i < dim; i++) {
532 hn->GetAxis(i)->SetTitle(title[i]);
533 hn->SetBinEdges(i, binEdges[i]);
549 title[dim] =
"Centrality %";
557 title[dim] =
"#it{p}_{T} (GeV/#it{c})";
578 title[dim] =
"Findable";
586 for (
Int_t i = 0; i < dim; i++) {
587 hn->GetAxis(i)->SetTitle(title[i]);
588 hn->SetBinEdges(i, binEdges[i]);
603 title[dim] =
"Centrality %";
611 title[dim] =
"#it{p}_{T}^{gen} (GeV/#it{c})";
618 title[dim] =
"#eta^{gen}";
625 title[dim] =
"#phi^{gen}";
632 title[dim] =
"#it{p}_{T}^{det} (GeV/#it{c})";
639 title[dim] =
"#eta^{det}";
646 title[dim] =
"#phi^{det}";
653 title[dim] =
"(#it{p}_{T}^{gen} - #it{p}_{T}^{det}) / #it{p}_{T}^{gen}";
660 title[dim] =
"track type";
668 for (
Int_t i = 0; i < dim; i++) {
669 hn->GetAxis(i)->SetTitle(title[i]);
670 hn->SetBinEdges(i, binEdges[i]);
734 fPHOSGeo = AliPHOSGeometry::GetInstance();
736 AliInfo(
"Found instance of PHOS geometry!");
739 AliInfo(
"Creating PHOS geometry!");
740 Int_t runNum = InputEvent()->GetRunNumber();
742 fPHOSGeo = AliPHOSGeometry::GetInstance(
"IHEP");
744 fPHOSGeo = AliPHOSGeometry::GetInstance(
"Run2");
747 AliOADBContainer geomContainer(
"phosGeo");
748 geomContainer.InitFromFile(
"$ALICE_PHYSICS/OADB/PHOS/PHOSMCGeometry.root",
"PHOSMCRotationMatrixes");
749 TObjArray* matrixes = (
TObjArray*)geomContainer.GetObject(runNum,
"PHOSRotationMatrixes");
750 for(
Int_t mod=0; mod<6; mod++) {
751 if(!matrixes->At(mod))
continue;
752 fPHOSGeo->SetMisalMatrix(((TGeoHMatrix*)matrixes->At(mod)),mod);
753 printf(
".........Adding Matrix(%d), geo=%p\n",mod,
fPHOSGeo);
754 ((TGeoHMatrix*)matrixes->At(mod))->
Print();
768 AliGenPythiaEventHeader* pygen;
770 pygen =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
773 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
775 for (
UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
776 pygen =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
790 Int_t nTriggerJets = pygen->NTriggerJets();
792 for (
Int_t ijet = 0; ijet< nTriggerJets; ijet++) {
793 pygen->TriggerJet(ijet, tmpjet);
794 jet.SetPxPyPzE(tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3]);
820 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
822 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
830 TFile *curfile = tree->GetCurrentFile();
832 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
837 if (chain) tree = chain->GetTree();
871 track = trackIterator.second;
878 AliESDtrack *esdTrack =
dynamic_cast<AliESDtrack*
>(track);
879 if (esdTrack) sigma = TMath::Sqrt(esdTrack->GetSigma1Pt2());
883 AliAODTrack *aodtrack =
dynamic_cast<AliAODTrack*
>(track);
884 if(!aodtrack) AliFatal(
"Not a standard AOD");
886 AliExternalTrackParam exParam;
890 aodtrack->GetCovMatrix(cov);
892 aodtrack->PxPyPz(pxpypz);
894 aodtrack->GetXYZ(xyz);
895 Short_t sign = aodtrack->Charge();
896 exParam.Set(xyz,pxpypz,cov,sign);
898 sigma = TMath::Sqrt(exParam.GetSigma1Pt2());
902 Int_t label = TMath::Abs(track->GetLabel());
905 if (label==0 || track->GetGeneratorIndex() == 0) mcGen = 0;
912 if (part->GetGeneratorIndex() == 0) {
913 Int_t pdg = TMath::Abs(part->PdgCode());
915 if (pdg == 211 || pdg == 2212 || pdg == 321 || pdg == 11 || pdg == 13) {
923 AliError(Form(
"Track %d has type %d not recognized!",
fDetectorLevel->GetCurrentID(), type));
928 AliAODMCParticle* part;
930 part = partIterator.second;
935 if (part->GetGeneratorIndex() == 0) mcGen = 0;
937 Int_t pdg = TMath::Abs(part->PdgCode());
939 if (pdg == 211 || pdg == 2212 || pdg == 321 || pdg == 11 || pdg == 13) findable = 1;
958 for (
Int_t pos = 0; pos < ncells; pos++) {
984 while ((clusters = static_cast<AliClusterContainer*>(nextClusColl()))) {
989 UInt_t rejectionReason = 0;
990 if (!clusters->
AcceptCluster(it.current_index(), rejectionReason)) {
991 histname = TString::Format(
"%s/fHistClusterRejectionReason", clusters->GetArrayName().Data());
992 fHistManager.
FillTH2(histname, clusters->GetRejectionReasonBitPosition(rejectionReason), it->first.E());
998 if (it->second->IsEMCAL()) {
999 Double_t phi = it->first.Phi_0_2pi();
1003 }
else if (isDcal == 1) {
1010 Int_t sm =
fGeom->GetSuperModuleNumber(it->second->GetCellAbsId(0));
1011 if (sm >=0 && sm < 20) {
1012 histname = TString::Format(
"%s/BySM/hEmcalClusEnergy_SM%d", clusters->GetArrayName().Data(), sm);
1016 AliError(Form(
"Supermodule %d does not exist!", sm));
1019 }
else if (it->second->GetType() == AliVCluster::kPHOSNeutral){
1027 fPHOSGeo->AbsToRelNumbering(it->second->GetCellAbsId(0), relid);
1028 Int_t sm = relid[0];
1029 if (sm >=0 && sm < 6) {
1030 histname = TString::Format(
"%s/BySM/hPhosClusEnergy_SM%d", clusters->GetArrayName().Data(), sm);
1034 AliError(Form(
"Supermodule %d does not exist!", sm));
1040 histname = TString::Format(
"%s/clusterObservables", clusters->GetArrayName().Data());
1042 if (!histClusterObservables)
return;
1043 for (
Int_t i = 0; i < histClusterObservables->GetNdimensions(); i++) {
1044 TString title(histClusterObservables->GetAxis(i)->GetTitle());
1045 if (
title==
"Centrality %")
1046 contents[i] =
fCent;
1047 else if (
title==
"#it{E}_{clus} (GeV)")
1048 contents[i] = it->first.E();
1049 else if (
title==
"#eta")
1050 contents[i] = it->first.Eta();
1051 else if (
title==
"#phi")
1052 contents[i] = it->first.Phi_0_2pi();
1053 else if (
title==
"cluster type")
1054 contents[i] = clusType;
1056 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1058 histClusterObservables->Fill(contents);
1070 while ((jets = static_cast<AliJetContainer*>(nextJetColl()))) {
1074 histname = TString::Format(
"%s/fHistRhoVsCent", jets->GetArrayName().Data());
1078 for (
auto jet : jets->
all()) {
1080 UInt_t rejectionReason = 0;
1081 if (!jets->
AcceptJet(jet, rejectionReason)) {
1082 histname = TString::Format(
"%s/fHistJetRejectionReason", jets->GetArrayName().Data());
1083 fHistManager.
FillTH2(histname.Data(), jets->GetRejectionReasonBitPosition(rejectionReason), jet->Pt());
1088 Float_t corrPt = jet->Pt() - rhoVal * jet->Area();
1090 TLorentzVector leadPart;
1094 histname = TString::Format(
"%s/fHistJetObservables", jets->GetArrayName().Data());
1096 if (!histJetObservables)
return;
1097 for (
Int_t i = 0; i < histJetObservables->GetNdimensions(); i++) {
1098 TString title(histJetObservables->GetAxis(i)->GetTitle());
1099 if (
title==
"Centrality (%)")
1100 contents[i] =
fCent;
1101 else if (
title==
"#eta_{jet}")
1102 contents[i] = jet->Eta();
1103 else if (
title==
"#phi_{jet} (rad)")
1104 contents[i] = jet->Phi_0_2pi();
1105 else if (
title==
"#it{p}_{T} (GeV/#it{c})")
1106 contents[i] = jet->Pt();
1107 else if (
title==
"#it{p}_{T}^{MC} (GeV/#it{c})")
1108 contents[i] = jet->MCPt();
1109 else if (
title==
"#it{p}_{T}^{corr} (GeV/#it{c})")
1110 contents[i] = corrPt;
1111 else if (
title==
"#it{p}_{T,particle}^{leading} (GeV/#it{c})")
1112 contents[i] = ptLeading;
1114 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1116 histJetObservables->Fill(contents);
1126 for (
Int_t i = 0; i < 3; i++) {
1138 for (
Int_t i = 0; i < 3; i++) {
1144 for (
Int_t i = 0; i < histEventQA->GetNdimensions(); i++) {
1146 if (
title==
"Centrality %")
1147 contents[i] = eventQA.
fCent;
1148 else if (
title==
"No. of tracks")
1150 else if (
title==
"No. of clusters")
1151 contents[i] = globalNclusters;
1152 else if (
title==
"#it{p}_{T,track}^{leading} (GeV/c)")
1154 else if (
title==
"#it{E}_{cluster}^{leading} (GeV)")
1155 contents[i] = globalMaxCluster.E();
1157 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1160 histEventQA->Fill(contents);
1170 Double_t sigma1OverPt, Byte_t trackType)
1175 if (!thnTracks)
return;
1176 for (
Int_t i = 0; i < thnTracks->GetNdimensions(); i++) {
1178 if (
title==
"Centrality %")
1180 else if (
title==
"#it{p}_{T} (GeV/#it{c})")
1181 contents[i] = trackPt;
1182 else if (
title==
"#eta")
1183 contents[i] = trackEta;
1184 else if (
title==
"#phi")
1185 contents[i] = trackPhi;
1186 else if (
title==
"#sigma(1/#it{p}_{T}) (GeV/#it{c})^{-1}")
1187 contents[i] = sigma1OverPt;
1188 else if (
title==
"#sigma(#it{p}_{T}) / #it{p}_{T}")
1189 contents[i] = sigma1OverPt*trackPt;
1190 else if (
title==
"track type")
1191 contents[i] = trackType;
1193 AliWarning(Form(
"Unable to fill dimension %s of histogram %s!",
title.Data(), thnTracks->GetName()));
1196 thnTracks->Fill(contents);
1205 if (!thnTracks_PhysPrim)
return;
1206 for (
Int_t i = 0; i < thnTracks_PhysPrim->GetNdimensions(); i++) {
1207 TString title(thnTracks_PhysPrim->GetAxis(i)->GetTitle());
1208 if (
title==
"Centrality %")
1210 else if (
title==
"#it{p}_{T} (GeV/#it{c})")
1211 contents[i] = partPt;
1212 else if (
title==
"#eta")
1213 contents[i] = partEta;
1214 else if (
title==
"#phi")
1215 contents[i] = partPhi;
1216 else if (
title==
"Findable")
1217 contents[i] = findable;
1219 AliWarning(Form(
"Unable to fill dimension %s of histogram %s!",
title.Data(), thnTracks_PhysPrim->GetName()));
1222 thnTracks_PhysPrim->Fill(contents);
1232 if (!thnTracks_Matched)
return;
1233 for (
Int_t i = 0; i < thnTracks_Matched->GetNdimensions(); i++) {
1234 TString title(thnTracks_Matched->GetAxis(i)->GetTitle());
1235 if (
title==
"Centrality %")
1237 else if (
title==
"#it{p}_{T}^{gen} (GeV/#it{c})")
1238 contents[i] = partPt;
1239 else if (
title==
"#eta^{gen}")
1240 contents[i] = partEta;
1241 else if (
title==
"#phi^{gen}")
1242 contents[i] = partPhi;
1243 else if (
title==
"#it{p}_{T}^{det} (GeV/#it{c})")
1244 contents[i] = trackPt;
1245 else if (
title==
"#eta^{det}")
1246 contents[i] = trackEta;
1247 else if (
title==
"#phi^{det}")
1248 contents[i] = trackPhi;
1249 else if (
title==
"(#it{p}_{T}^{gen} - #it{p}_{T}^{det}) / #it{p}_{T}^{gen}")
1250 contents[i] = (partPt - trackPt) / partPt;
1251 else if (
title==
"(#it{p}_{T}^{gen} - #it{p}_{T}^{det}) / #it{p}_{T}^{det}")
1252 contents[i] = (partPt - trackPt) / trackPt;
1253 else if (
title==
"track type")
1256 AliWarning(Form(
"Unable to fill dimension %s of histogram %s!",
title.Data(), thnTracks_Matched->GetName()));
1259 thnTracks_Matched->Fill(contents);
void FillCellHistograms()
void AllocateMatchedParticlesTHnSparse()
Double_t * fEtaHistBins
! eta bins
Double_t * fPtResHistBins
! pt res bins
void Print(std::ostream &o, const char *name, Double_t dT, Double_t dVM, Double_t alldT, Double_t alldVM)
TObjArray fClusterCollArray
cluster collection array
Bool_t fDoEventQA
Set whether to enable event QA.
Double_t GetRhoVal() const
const TString & GetRhoName() const
Int_t fNEtaHistBins
! number of eta bins
Int_t fNPtResHistBins
! number of pt res bins
AliTrackContainer * fDetectorLevel
! detector level container
Int_t fNPhiHistBins
! number of phi bins
void AllocateEventQAHistograms()
Bool_t RetrieveEventObjects()
const AliMCParticleIterableMomentumContainer accepted_momentum() const
bidirectional stl iterator over the EMCAL iterable container
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Double_t fPtHard
!event pt hard
void AllocateJetHistograms()
AliAnalysisTaskPWGJEQA()
Default constructor for ROOT I/O purposes.
Bool_t fGeneralHistograms
whether or not it should fill some general histograms
THistManager fHistManager
Histogram manager.
Bool_t fRejectOutlierEvents
flag to reject pythia pt-hard jet outlier events
virtual Bool_t AcceptJet(Int_t i, UInt_t &rejectionReason) const
Int_t fNTotClusters[3]
!Total number of accepted clusters in current event (DCal/EMCal)
Bool_t RetrieveEventObjects()
AliTLorentzVector fMaxCluster[3]
TString fDetectorLevelName
detector level container name
AliTLorentzVector fMaxTrack
Bool_t fDoTrackQA
Set whether to enable track QA.
void FillTrackHistograms()
TObjArray fParticleCollArray
particle/track collection array
void FillClusterHistograms()
Double_t * fPtHistBins
! pt bins
void GetLeadingHadronMomentum(TLorentzVector &mom, const AliEmcalJet *jet) const
void AllocateDetectorLevelTHnSparse()
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
TObject * FindObject(const char *name) const
void FillEventQAHistograms()
void CreateTProfile(const char *name, const char *title, int nbinsX, double xmin, double xmax, Option_t *opt="")
THashList * GetListOfHistograms() const
Double_t GetLeadingHadronPt(const AliEmcalJet *jet) const
AliEMCALGeometry * fGeom
!emcal geometry
AliPHOSGeometry * fPHOSGeo
! phos geometry
void FillDetectorLevelTHnSparse(Double_t cent, Double_t trackEta, Double_t trackPhi, Double_t trackPt, Double_t sigma1OverPt, Byte_t trackType)
virtual AliAODMCParticle * GetAcceptMCParticleWithLabel(Int_t lab)
Int_t fNTotTracks
!Total number of accepted tracks in current event
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Float_t fCellEnergyCut
Energy cell cut.
BeamType fForceBeamType
forced beam type
virtual Bool_t AcceptCluster(Int_t i, UInt_t &rejectionReason) const
Double_t * fPtRelDiffHistBins
! pt relative difference bins
void AllocateClusterHistograms()
void FillProfile(const char *name, double x, double y, double weight=1.)
Declaration of class AliAnalysisTaskPWGJEQA.
Double_t fCent
!event centrality
Int_t fNPtHistBins
! number of pt bins
TString fCaloCellsName
name of calo cell collection
Int_t fNIntegerHistBins
! number of integer bins
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Bool_t PythiaInfoFromFile(const char *currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard)
TObjArray fJetCollArray
jet collection array
AliVCaloCells * fCaloCells
!cells
AliRhoParameter * GetRhoParameter()
Int_t fNCentHistBins
! number of cent bins
Double_t * fIntegerHistBins
! integer bins
const AliClusterIterableMomentumContainer all_momentum() const
void FillMatchedParticlesTHnSparse(Double_t cent, Double_t partEta, Double_t partPhi, Double_t partPt, Double_t trackEta, Double_t trackPhi, Double_t trackPt, Byte_t trackType)
void FillGeneratorLevelTHnSparse(Double_t cent, Double_t partEta, Double_t partPhi, Double_t partPt, Byte_t findable)
static Double_t * GenerateFixedBinArray(Int_t n, Double_t min, Double_t max)
void AllocateCellHistograms()
AliTLorentzVector fLeadingTrack
!Leading track in current event
Float_t GetJetRadius() const
void UserCreateOutputObjects()
AliEmcalList * fOutput
!output list
AliMCParticleContainer * GetMCParticleContainer(Int_t i=0) const
Char_t GetTrackType(const AliVTrack *track) const
Bool_t fIsEsd
!whether it's an ESD analysis
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
void GenerateHistoBins()
Generate histogram binning arrays.
AliTrackContainer * GetTrackContainer(Int_t i=0) const
Bool_t fDoCaloQA
Set whether to enable cell/cluster QA.
TH1 * fHistEventRejection
!book keep reasons for rejecting event
void SetMakeGeneralHistograms(Bool_t g)
This is a task used to do basic PWGJE QA on tracks, clusters, and jets. Based on code from Salvatore ...
Base task in the EMCAL jet framework.
Bool_t fIsPtHard
flag to enable pt-hard histos and make available outlier cut
const AliTrackIterableMomentumContainer accepted_momentum() const
Bool_t fDoJetQA
Set whether to enable jet QA.
TString fGeneratorLevelName
generator level container name
void SetRejectionReasonLabels(TAxis *axis)
void UserCreateOutputObjects()
Float_t fMaxPt
Histogram pt limit.
AliMCParticleContainer * fGeneratorLevel
! generator level container
Double_t * fCentHistBins
! cent bins
virtual ~AliAnalysisTaskPWGJEQA()
THnSparse * CreateTHnSparse(const char *name, const char *title, int ndim, const int *nbins, const double *min, const double *max, Option_t *opt="")
void AllocateTrackHistograms()
Container structure for EMCAL clusters.
Bool_t fNeedEmcalGeom
whether or not the task needs the emcal geometry
Int_t fNPtRelDiffHistBins
! number of pt relative difference bins
void AllocateGeneratorLevelTHnSparse()
Container for jet within the EMCAL jet framework.
Double_t * fPhiHistBins
! phi bins
AliTLorentzVector fLeadingCluster[3]
!Leading cluster in current event (EMCal/DCal)
const AliJetIterableContainer all() const
static Double_t fgkEMCalDCalPhiDivide
phi value used to distinguish between DCal and EMCal