18 #include <TClonesArray.h>
22 #include <THnSparse.h>
25 #include <Riostream.h>
29 #include <AliVEventHandler.h>
30 #include <AliAnalysisManager.h>
34 #include "AliCentrality.h"
35 #include "AliVCluster.h"
36 #include "AliVParticle.h"
37 #include "AliVTrack.h"
39 #include "AliEMCALGeometry.h"
40 #include "AliEMCALGeoParams.h"
41 #include "AliESDtrack.h"
42 #include "AliAODTrack.h"
43 #include "AliAODMCParticle.h"
47 #include "AliMCEvent.h"
48 #include "AliGenPythiaEventHeader.h"
49 #include "AliAODMCHeader.h"
50 #include "AliPHOSGeometry.h"
51 #include "AliOADBContainer.h"
66 fSeparateEMCalDCal(kTRUE),
70 fGeneratorLevelName(),
81 fNPtRelDiffHistBins(0),
82 fPtRelDiffHistBins(0),
85 f1OverPtResHistBins(0),
86 fN1OverPtResHistBins(0),
90 fParticlesPhysPrim(0),
92 fHistManager(
"AliAnalysisTaskPWGJEQA"),
97 fRejectOutlierEvents(kFALSE),
113 fCellEnergyCut(0.05),
116 fSeparateEMCalDCal(kTRUE),
120 fGeneratorLevelName(),
122 fDetectorLevelName(),
131 fNPtRelDiffHistBins(0),
132 fPtRelDiffHistBins(0),
135 f1OverPtResHistBins(0),
136 fN1OverPtResHistBins(0),
137 fNIntegerHistBins(0),
140 fParticlesPhysPrim(0),
141 fParticlesMatched(0),
147 fRejectOutlierEvents(kFALSE),
182 while ((obj = next())) {
207 histname = TString::Format(
"%s/fHistCellEnergy",
fCaloCellsName.Data());
208 title = histname +
";#it{E}_{cell} (GeV);counts";
211 histname = TString::Format(
"%s/fProfCellAbsIdEnergy",
fCaloCellsName.Data());
212 title = histname +
";cell absId;<#it{E}_{cell}> (GeV)";
215 histname = TString::Format(
"%s/fHistCellTime",
fCaloCellsName.Data());
216 title = histname +
";#it{t}_{cell} (s);counts";
219 histname = TString::Format(
"%s/fProfCellAbsIdTime",
fCaloCellsName.Data());
220 title = histname +
";cell absId;<#it{t}_{cell}> (s)";
229 AliEmcalContainer* cont = 0;
235 while ((cont = static_cast<AliEmcalContainer*>(nextClusColl()))) {
237 histname = TString::Format(
"%s/fHistClusterRejectionReason", cont->GetArrayName().Data());
238 title = histname +
";Rejection reason;#it{E}_{clus} (GeV/);counts";
242 const Int_t nEmcalSM = 20;
243 for (
Int_t sm = 0; sm < nEmcalSM; sm++) {
244 histname = TString::Format(
"%s/BySM/hEmcalClusEnergy_SM%d", cont->GetArrayName().Data(), sm);
245 title = histname +
";#it{E}_{cluster} (GeV);counts";
249 for (
Int_t sm = 0; sm < 6; sm++) {
250 histname = TString::Format(
"%s/BySM/hPhosClusEnergy_SM%d", cont->GetArrayName().Data(), sm);
251 title = histname +
";#it{E}_{cluster} (GeV);counts";
263 title[dim] =
"Centrality %";
270 title[dim] =
"#it{E}_{clus} (GeV)";
271 nbins[dim] = nPtBins/2;
285 max[dim] = 2*TMath::Pi();
288 title[dim] =
"cluster type";
294 TString thnname = TString::Format(
"%s/clusterObservables", cont->GetArrayName().Data());
296 for (
Int_t i = 0; i < dim; i++) {
297 hn->GetAxis(i)->SetTitle(title[i]);
309 while ((jets = static_cast<AliJetContainer*>(nextJetColl()))) {
321 axisTitle[dim] =
"Centrality (%)";
328 axisTitle[dim] =
"#eta_{jet}";
329 nbins[dim] = nPtBins/10;
334 axisTitle[dim] =
"#phi_{jet} (rad)";
335 nbins[dim] = nPtBins/10*3;
337 max[dim] = 2*TMath::Pi();
340 axisTitle[dim] =
"#it{p}_{T} (GeV/#it{c})";
341 nbins[dim] = nPtBins/2;
347 axisTitle[dim] =
"#it{p}_{T}^{corr} (GeV/#it{c})";
348 nbins[dim] = nPtBins/2;
355 axisTitle[dim] =
"NEF";
356 nbins[dim] = nPtBins/20;
363 axisTitle[dim] =
"No. of constituents";
370 axisTitle[dim] =
"No. of constituents";
377 axisTitle[dim] =
"#it{p}_{T,particle}^{leading} (GeV/#it{c})";
378 nbins[dim] = nPtBins/10*3;
383 TString thnname = TString::Format(
"%s/fHistJetObservables", jets->GetArrayName().Data());
385 for (
Int_t i = 0; i < dim; i++) {
386 hn->GetAxis(i)->SetTitle(axisTitle[i]);
392 histname = TString::Format(
"%s/fHistJetRejectionReason", jets->GetArrayName().Data());
393 title = histname +
";Rejection reason;#it{p}_{T,jet} (GeV/#it{c});counts";
398 histname = TString::Format(
"%s/fHistRhoVsCent", jets->GetArrayName().Data());
399 title = histname +
";Centrality (%);#rho (GeV/#it{c});counts";
417 axistitle[dim] =
"Centrality %";
425 axistitle[dim] =
"No. of tracks";
438 axistitle[dim] =
"#it{p}_{T,track}^{leading} (GeV/c)";
439 nbins[dim] = nPtBins/2;
446 axistitle[dim] =
"No. of clusters";
461 axistitle[dim] =
"#it{E}_{EMCal cluster}^{leading} (GeV)";
462 nbins[dim] = nPtBins/2;
467 axistitle[dim] =
"#it{E}_{DCal cluster}^{leading} (GeV)";
468 nbins[dim] = nPtBins/2;
473 axistitle[dim] =
"#it{E}_{PHOS cluster}^{leading} (GeV)";
474 nbins[dim] = nPtBins/2;
480 axistitle[dim] =
"#it{E}_{cluster}^{leading} (GeV)";
481 nbins[dim] = nPtBins/2;
489 for (
Int_t i = 0; i < dim; i++)
490 hn->GetAxis(i)->SetTitle(axistitle[i]);
494 TString title = histname +
";#it{p}_{T,hard} (GeV/c);counts";
498 hTrials->GetXaxis()->SetBinLabel(1,
"#sum{ntrials}");
501 hxsection->GetXaxis()->SetBinLabel(1,
"<#sigma>");
574 title[dim] =
"Centrality %";
580 title[dim] =
"#it{p}_{T} (GeV/#it{c})";
595 title[dim] =
"track type";
600 title[dim] =
"#sigma(#it{p}_{T}) / #it{p}_{T}";
605 fTracks =
new THnSparseF(
"tracks",
"tracks",dim,nbins);
606 for (
Int_t i = 0; i < dim; i++) {
607 fTracks->GetAxis(i)->SetTitle(title[i]);
608 fTracks->SetBinEdges(i, binEdges[i]);
624 title[dim] =
"Centrality %";
630 title[dim] =
"#it{p}_{T} (GeV/#it{c})";
645 title[dim] =
"Findable";
651 for (
Int_t i = 0; i < dim; i++) {
668 title[dim] =
"Centrality %";
674 title[dim] =
"#it{p}_{T}^{gen} (GeV/#it{c})";
679 title[dim] =
"#eta^{gen}";
684 title[dim] =
"#phi^{gen}";
689 title[dim] =
"#it{p}_{T}^{det} (GeV/#it{c})";
694 title[dim] =
"#eta^{det}";
699 title[dim] =
"#phi^{det}";
704 title[dim] =
"(#it{p}_{T}^{gen} - #it{p}_{T}^{det}) / #it{p}_{T}^{gen}";
709 title[dim] =
"track type";
715 for (
Int_t i = 0; i < dim; i++) {
736 Int_t runNum = InputEvent()->GetRunNumber();
738 fPHOSGeo = AliPHOSGeometry::GetInstance(
"IHEP");
740 fPHOSGeo = AliPHOSGeometry::GetInstance(
"Run2");
743 AliOADBContainer geomContainer(
"phosGeo");
744 geomContainer.InitFromFile(
"$ALICE_PHYSICS/OADB/PHOS/PHOSMCGeometry.root",
"PHOSMCRotationMatrixes");
745 TObjArray* matrixes = (
TObjArray*)geomContainer.GetObject(runNum,
"PHOSRotationMatrixes");
746 for(
Int_t mod=0; mod<6; mod++) {
747 if(!matrixes->At(mod))
continue;
748 fPHOSGeo->SetMisalMatrix(((TGeoHMatrix*)matrixes->At(mod)),mod);
749 printf(
".........Adding Matrix(%d), geo=%p\n",mod,
fPHOSGeo);
750 ((TGeoHMatrix*)matrixes->At(mod))->
Print();
762 AliGenPythiaEventHeader* pygen;
764 pygen =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
767 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
769 for (
UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
770 pygen =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
784 Int_t nTriggerJets = pygen->NTriggerJets();
786 for (
Int_t ijet = 0; ijet< nTriggerJets; ijet++) {
787 pygen->TriggerJet(ijet, tmpjet);
788 jet.SetPxPyPzE(tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3]);
813 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
815 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
823 TFile *curfile = tree->GetCurrentFile();
825 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
830 if (chain) tree = chain->GetTree();
864 track = trackIterator.second;
871 AliESDtrack *esdTrack =
dynamic_cast<AliESDtrack*
>(track);
872 if (esdTrack) sigma = TMath::Sqrt(esdTrack->GetSigma1Pt2());
876 AliAODTrack *aodtrack =
dynamic_cast<AliAODTrack*
>(track);
877 if(!aodtrack) AliFatal(
"Not a standard AOD");
879 AliExternalTrackParam exParam;
883 aodtrack->GetCovMatrix(cov);
885 aodtrack->PxPyPz(pxpypz);
887 aodtrack->GetXYZ(xyz);
888 Short_t sign = aodtrack->Charge();
889 exParam.Set(xyz,pxpypz,cov,sign);
891 sigma = TMath::Sqrt(exParam.GetSigma1Pt2());
895 Int_t label = TMath::Abs(track->GetLabel());
898 if (label==0 || track->GetGeneratorIndex() == 0) mcGen = 0;
905 if (part->GetGeneratorIndex() == 0) {
906 Int_t pdg = TMath::Abs(part->PdgCode());
908 if (pdg == 211 || pdg == 2212 || pdg == 321 || pdg == 11 || pdg == 13) {
916 AliError(Form(
"Track %d has type %d not recognized!",
fDetectorLevel->GetCurrentID(), type));
921 AliAODMCParticle* part;
923 part = partIterator.second;
928 if (part->GetGeneratorIndex() == 0) mcGen = 0;
930 Int_t pdg = TMath::Abs(part->PdgCode());
932 if (pdg == 211 || pdg == 2212 || pdg == 321 || pdg == 11 || pdg == 13) findable = 1;
950 for (
Int_t pos = 0; pos < ncells; pos++) {
974 while ((clusters = static_cast<AliClusterContainer*>(nextClusColl()))) {
979 UInt_t rejectionReason = 0;
980 if (!clusters->
AcceptCluster(it.current_index(), rejectionReason)) {
981 histname = TString::Format(
"%s/fHistClusterRejectionReason", clusters->GetArrayName().Data());
982 fHistManager.
FillTH2(histname, clusters->GetRejectionReasonBitPosition(rejectionReason), it->first.E());
988 if (it->second->IsEMCAL()) {
989 Double_t phi = it->first.Phi_0_2pi();
993 }
else if (isDcal == 1) {
1000 Int_t sm =
fGeom->GetSuperModuleNumber(it->second->GetCellAbsId(0));
1001 if (sm >=0 && sm < 20) {
1002 histname = TString::Format(
"%s/BySM/hEmcalClusEnergy_SM%d", clusters->GetArrayName().Data(), sm);
1006 AliError(Form(
"Supermodule %d does not exist!", sm));
1009 }
else if (it->second->GetType() == AliVCluster::kPHOSNeutral){
1017 fPHOSGeo->AbsToRelNumbering(it->second->GetCellAbsId(0), relid);
1018 Int_t sm = relid[0];
1019 if (sm >=0 && sm < 6) {
1020 histname = TString::Format(
"%s/BySM/hPhosClusEnergy_SM%d", clusters->GetArrayName().Data(), sm);
1024 AliError(Form(
"Supermodule %d does not exist!", sm));
1030 histname = TString::Format(
"%s/clusterObservables", clusters->GetArrayName().Data());
1032 if (!histClusterObservables)
return;
1033 for (
Int_t i = 0; i < histClusterObservables->GetNdimensions(); i++) {
1034 TString title(histClusterObservables->GetAxis(i)->GetTitle());
1035 if (
title==
"Centrality %")
1036 contents[i] =
fCent;
1037 else if (
title==
"#it{E}_{clus} (GeV)")
1038 contents[i] = it->first.E();
1039 else if (
title==
"#eta")
1040 contents[i] = it->first.Eta();
1041 else if (
title==
"#phi")
1042 contents[i] = it->first.Phi_0_2pi();
1043 else if (
title==
"cluster type")
1044 contents[i] = clusType;
1046 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1048 histClusterObservables->Fill(contents);
1060 while ((jets = static_cast<AliJetContainer*>(nextJetColl()))) {
1064 histname = TString::Format(
"%s/fHistRhoVsCent", jets->GetArrayName().Data());
1068 for (
auto jet : jets->
all()) {
1070 UInt_t rejectionReason = 0;
1071 if (!jets->
AcceptJet(jet, rejectionReason)) {
1072 histname = TString::Format(
"%s/fHistJetRejectionReason", jets->GetArrayName().Data());
1073 fHistManager.
FillTH2(histname.Data(), jets->GetRejectionReasonBitPosition(rejectionReason), jet->Pt());
1078 Float_t corrPt = jet->Pt() - rhoVal * jet->Area();
1080 TLorentzVector leadPart;
1084 histname = TString::Format(
"%s/fHistJetObservables", jets->GetArrayName().Data());
1086 if (!histJetObservables)
return;
1087 for (
Int_t i = 0; i < histJetObservables->GetNdimensions(); i++) {
1088 TString title(histJetObservables->GetAxis(i)->GetTitle());
1089 if (
title==
"Centrality (%)")
1090 contents[i] =
fCent;
1091 else if (
title==
"#eta_{jet}")
1092 contents[i] = jet->Eta();
1093 else if (
title==
"#phi_{jet} (rad)")
1094 contents[i] = jet->Phi_0_2pi();
1095 else if (
title==
"#it{p}_{T} (GeV/#it{c})")
1096 contents[i] = jet->Pt();
1097 else if (
title==
"#it{p}_{T}^{MC} (GeV/#it{c})")
1098 contents[i] = jet->MCPt();
1099 else if (
title==
"#it{p}_{T}^{corr} (GeV/#it{c})")
1100 contents[i] = corrPt;
1101 else if (
title==
"NEF")
1102 contents[i] = jet->NEF();
1103 else if (
title==
"No. of constituents")
1104 contents[i] = jet->GetNumberOfConstituents();
1105 else if (
title==
"#it{p}_{T,particle}^{leading} (GeV/#it{c})")
1106 contents[i] = ptLeading;
1108 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1110 histJetObservables->Fill(contents);
1120 for (
Int_t i = 0; i < 3; i++) {
1132 for (
Int_t i = 0; i < 3; i++) {
1138 for (
Int_t i = 0; i < histEventQA->GetNdimensions(); i++) {
1140 if (
title==
"Centrality %")
1141 contents[i] = eventQA.
fCent;
1142 else if (
title==
"No. of tracks")
1144 else if (
title==
"No. of clusters")
1145 contents[i] = globalNclusters;
1146 else if (
title==
"#it{p}_{T,track}^{leading} (GeV/c)")
1148 else if (
title==
"#it{E}_{cluster}^{leading} (GeV)")
1149 contents[i] = globalMaxCluster.E();
1150 else if (
title==
"#it{E}_{EMCal cluster}^{leading} (GeV)")
1152 else if (
title==
"#it{E}_{DCal cluster}^{leading} (GeV)")
1154 else if (
title==
"#it{E}_{PHOS cluster}^{leading} (GeV)")
1157 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1160 histEventQA->Fill(contents);
1170 Double_t sigma1OverPt, Byte_t trackType)
1174 for (
Int_t i = 0; i <
fTracks->GetNdimensions(); i++) {
1176 if (
title==
"Centrality %")
1178 else if (
title==
"#it{p}_{T} (GeV/#it{c})")
1179 contents[i] = trackPt;
1180 else if (
title==
"#eta")
1181 contents[i] = trackEta;
1182 else if (
title==
"#phi")
1183 contents[i] = trackPhi;
1184 else if (
title==
"#sigma(1/#it{p}_{T}) (GeV/#it{c})^{-1}")
1185 contents[i] = sigma1OverPt;
1186 else if (
title==
"#sigma(#it{p}_{T}) / #it{p}_{T}")
1187 contents[i] = sigma1OverPt*trackPt;
1188 else if (
title==
"track type")
1189 contents[i] = trackType;
1191 AliWarning(Form(
"Unable to fill dimension %s of histogram %s!",
title.Data(),
fTracks->GetName()));
1204 if (
title==
"Centrality %")
1206 else if (
title==
"#it{p}_{T} (GeV/#it{c})")
1207 contents[i] = partPt;
1208 else if (
title==
"#eta")
1209 contents[i] = partEta;
1210 else if (
title==
"#phi")
1211 contents[i] = partPhi;
1212 else if (
title==
"Findable")
1213 contents[i] = findable;
1215 AliWarning(Form(
"Unable to fill dimension %s of histogram %s!",
title.Data(),
fParticlesPhysPrim->GetName()));
1229 if (
title==
"Centrality %")
1231 else if (
title==
"#it{p}_{T}^{gen} (GeV/#it{c})")
1232 contents[i] = partPt;
1233 else if (
title==
"#eta^{gen}")
1234 contents[i] = partEta;
1235 else if (
title==
"#phi^{gen}")
1236 contents[i] = partPhi;
1237 else if (
title==
"#it{p}_{T}^{det} (GeV/#it{c})")
1238 contents[i] = trackPt;
1239 else if (
title==
"#eta^{det}")
1240 contents[i] = trackEta;
1241 else if (
title==
"#phi^{det}")
1242 contents[i] = trackPhi;
1243 else if (
title==
"(#it{p}_{T}^{gen} - #it{p}_{T}^{det}) / #it{p}_{T}^{gen}")
1244 contents[i] = (partPt - trackPt) / partPt;
1245 else if (
title==
"(#it{p}_{T}^{gen} - #it{p}_{T}^{det}) / #it{p}_{T}^{det}")
1246 contents[i] = (partPt - trackPt) / trackPt;
1247 else if (
title==
"track type")
1250 AliWarning(Form(
"Unable to fill dimension %s of histogram %s!",
title.Data(),
fParticlesMatched->GetName()));
void FillCellHistograms()
void AllocateMatchedParticlesTHnSparse()
Bool_t fDoEmcalQA
Set whether to enable cell/cluster QA.
Double_t * fEtaHistBins
number of eta bins
Double_t * fPtResHistBins
number of 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
pt bins
Int_t fN1OverPtResHistBins
1/pt res bins
Float_t fPtBinWidth
Histogram pt bin width.
Int_t fNPtResHistBins
pt relative difference bins
AliTrackContainer * fDetectorLevel
generator level container
Int_t fNPhiHistBins
eta 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.
THnSparse * fTracks
! phos geometry
Bool_t fGeneralHistograms
whether or not it should fill some general histograms
THistManager fHistManager
primary particles matched to detector level tracks
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()
THnSparse * fParticlesPhysPrim
all tracks
TObjArray fParticleCollArray
particle/track collection array
void FillClusterHistograms()
Double_t * fPtHistBins
number of 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
integer bins
void FillDetectorLevelTHnSparse(Double_t cent, Double_t trackEta, Double_t trackPhi, Double_t trackPt, Double_t sigma1OverPt, Byte_t trackType)
Bool_t fSeparateEMCalDCal
Separate EMCal from DCal in QA plots.
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
number of 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
detector level container
TString fCaloCellsName
name of calo cell collection
Int_t fNIntegerHistBins
number of 1/pt res bins
Double_t * f1OverPtResHistBins
pt res 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
phi bins
Double_t * fIntegerHistBins
number of 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 for track histograms.
AliTrackContainer * GetTrackContainer(Int_t i=0) const
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
Double_t * fCentHistBins
number of cent bins
THnSparse * fParticlesMatched
all physical primary particles
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
cent bins
void AllocateGeneratorLevelTHnSparse()
Container for jet within the EMCAL jet framework.
Double_t * fPhiHistBins
number of 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