18 #include <TClonesArray.h> 24 #include <AliVCluster.h> 25 #include <AliVEvent.h> 26 #include <AliVParticle.h> 27 #include <AliEMCALGeometry.h> 29 #include <AliAnalysisManager.h> 30 #include <AliVEventHandler.h> 31 #include <AliMultiInputEventHandler.h> 75 fTrackEfficiencyOnlyForEmbedding(kFALSE),
76 fTrackEfficiencyFunction(
nullptr),
77 fApplyArtificialTrackingEfficiency(kFALSE),
80 fFillConstituents(kTRUE),
85 fEnableAliBasicParticleCompatibility(kFALSE),
89 fFastJetWrapper(
"AliEmcalJetTask",
"AliEmcalJetTask"),
90 fClusterContainerIndexMap(),
91 fParticleContainerIndexMap()
150 Error(
"AddUtility",
"Jet utility %s already connected.", utility->GetName());
167 while ((utility=static_cast<AliEmcalJetUtility*>(next()))) utility->
Init();
225 if (n == 0)
return kFALSE;
242 AliError(
"No tracks or clusters, returning.");
248 AliDebug(2,Form(
"Jet type = %d",
fJetType));
253 while ((tracks = static_cast<AliParticleContainer*>(nextPartColl()))) {
254 AliDebug(2,Form(
"Tracks from collection %d: '%s'. Embedded: %i, nTracks: %i", iColl-1, tracks->GetName(), tracks->GetIsEmbedding(), tracks->
GetNParticles()));
263 if (trackEfficiency < rnd) {
264 AliDebug(2,Form(
"Track %d rejected due to artificial tracking inefficiency", it.current_index()));
270 AliDebug(2,Form(
"Track %d accepted (label = %d, pt = %f, eta = %f, phi = %f, E = %f, m = %f, px = %f, py = %f, pz = %f)", it.current_index(), it->second->GetLabel(), it->first.Pt(), it->first.Eta(), it->first.Phi(), it->first.E(), it->first.M(), it->first.Px(), it->first.Py(), it->first.Pz()));
280 while ((clusters = static_cast<AliClusterContainer*>(nextClusColl()))) {
281 AliDebug(2,Form(
"Clusters from collection %d: '%s'. Embedded: %i, nClusters: %i", iColl-1, clusters->GetName(), clusters->GetIsEmbedding(), clusters->
GetNClusters()));
284 AliDebug(2,Form(
"Cluster %d accepted (label = %d, energy = %.3f)", it.current_index(), it->second->GetLabel(), it->first.E()));
311 static Int_t indexes[9999] = {-1};
314 AliDebug(1,Form(
"%d jets found", (
Int_t)jets_incl.size()));
315 for (
UInt_t ijet = 0, jetCount = 0; ijet < jets_incl.size(); ++ijet) {
316 Int_t ij = indexes[ijet];
319 if (jets_incl[ij].perp() <
fMinJetPt)
continue;
326 AliEmcalJet(jets_incl[ij].perp(), jets_incl[ij].eta(), jets_incl[ij].phi(), jets_incl[ij].m());
341 if ((jet->
Phi() >
fGeom->GetArm1PhiMin() * TMath::DegToRad()) &&
342 (jet->
Phi() <
fGeom->GetArm1PhiMax() * TMath::DegToRad()) &&
343 (jet->
Eta() >
fGeom->GetArm1EtaMin()) &&
344 (jet->
Eta() <
fGeom->GetArm1EtaMax()))
350 AliDebug(2,Form(
"Added jet n. %d, pt = %f, area = %f, constituents = %d", jetCount, jet->
Pt(), jet->
Area(), jet->
GetNumberOfConstituents()));
372 for (
Int_t i = 0; i < n; i++)
373 pt[i] = array[i].perp();
375 TMath::Sort(n, pt, indexes);
392 AliError(Form(
"%s: fTrackEfficiencyFunction was already loaded! Do not apply multiple artificial track efficiencies.", GetName()));
406 std::cout << GetName() <<
": Name of the jet container: " <<
fJetsName << std::endl;
407 std::cout <<
"Use this name in order to connect jet containers in your task to connect to the collection of jets found by this jet finder" << std::endl;
409 std::cout <<
"Found particle container with name " << partcont->GetName() << std::endl;
411 std::cout <<
"Not particle container found for task" << std::endl;
414 std::cout <<
"Found cluster container with name " << clustcont->GetName() << std::endl;
416 std::cout <<
"Not cluster container found for task" << std::endl;
420 if (!(InputEvent()->FindListObject(
fJetsName))) {
421 fJets =
new TClonesArray(
"AliEmcalJet");
423 ::Info(
"AliEmcalJetTask::ExecOnce",
"Jet collection with name '%s' has been added to the event.",
fJetsName.Data());
424 InputEvent()->AddObject(
fJets);
427 AliError(Form(
"%s: Object with name %s already in event! Returning", GetName(),
fJetsName.Data()));
465 std::vector<fastjet::PseudoJet>& constituents_unsub,
Int_t flag,
TString particlesSubName)
479 TClonesArray * particles_sub = 0;
486 for (
UInt_t ic = 0; ic < constituents.size(); ++ic) {
489 uid = constituents[ic].user_index();
492 if (constituents[ic].perp()<1.e-10) {
496 uid = constituents[ic].user_index();
499 AliError(
"correspondence between un/subtracted constituent not found");
504 AliDebug(3,Form(
"Processing constituent %d", uid));
508 Double_t gphi = constituents[ic].phi();
509 if (gphi < 0) gphi += TMath::TwoPi();
510 gphi *= TMath::RadToDeg();
511 Double_t geta = constituents[ic].eta();
512 if ((gphi >
fGeom->GetArm1PhiMin()) && (gphi < fGeom->GetArm1PhiMax()) &&
513 (geta >
fGeom->GetArm1EtaMin()) && (geta < fGeom->GetArm1EtaMax()))
518 constituents[ic].py(),
519 constituents[ic].pz(),
520 constituents[ic].e());
526 AliDebug(3,Form(
"Constituent %d is a track from collection %d and with ID %d", uid, iColl, tid));
529 AliError(Form(
"Could not find particle container %d",iColl));
534 AliError(Form(
"Could not find track %d",tid));
544 if (t->Charge() == 0) {
549 if (cPt > maxNe) maxNe = cPt;
552 if (cPt > maxCh) maxCh = cPt;
557 if (TMath::Abs(t->GetLabel()) >
fMinMCLabel) mcpt += cPt;
561 if (cPhi < 0) cPhi += TMath::TwoPi();
562 cPhi *= TMath::RadToDeg();
563 if ((cPhi >
fGeom->GetArm1PhiMin()) && (cPhi < fGeom->GetArm1PhiMax()) &&
564 (cEta >
fGeom->GetArm1EtaMin()) && (cEta < fGeom->GetArm1EtaMax())) {
570 if (flag == 0 || particlesSubName ==
"") {
576 particles_sub = partCont->GetArray();
578 Int_t part_sub_id = particles_sub->GetEntriesFast();
580 part_sub->
SetPtEtaPhiM(constituents[ic].perp(),constituents[ic].eta(),constituents[ic].phi(),constituents[ic].m());
590 AliDebug(3,Form(
"Constituent %d is a cluster from collection %d and with ID %d", uid, iColl, cid));
603 Double_t pvec[3] = {nP.Px(), nP.Py(), nP.Pz()};
607 if (cPt > maxNe) maxNe = cPt;
610 if (TMath::Abs(c->GetLabel()) >
fMinMCLabel) mcpt += c->GetMCEnergyFraction() > 1e-6 ? cPt * c->GetMCEnergyFraction() : cPt;
613 if (cPhi<0) cPhi += TMath::TwoPi();
614 cPhi *= TMath::RadToDeg();
615 if ((cPhi >
fGeom->GetArm1PhiMin()) && (cPhi < fGeom->GetArm1PhiMax()) &&
616 (cEta >
fGeom->GetArm1EtaMin()) && (cEta < fGeom->GetArm1EtaMax())) {
622 if (flag == 0 || particlesSubName ==
"") {
628 particles_sub = clusCont->GetArray();
630 Int_t part_sub_id = particles_sub->GetEntriesFast();
632 part_sub->
SetPtEtaPhiM(constituents[ic].perp(),constituents[ic].eta(),constituents[ic].phi(),constituents[ic].m());
640 AliError(Form(
"%s: No logical way to end up here (uid = %d).", GetName(), uid));
647 jet->
SetNEF(neutralE / jet->
E());
669 AliFatal(
"Jet finder task is locked! Changing properties is not allowed.");
687 fOfflineTriggerMask = offlineTriggerMask;
690 AliWarning(
"Manually setting the event selection for jet finders is not allowed! Using trigger=old_trigger | your_trigger");
691 fOfflineTriggerMask = fOfflineTriggerMask | offlineTriggerMask;
706 while ((tracks = static_cast<AliParticleContainer*>(nextPartColl()))) {
721 while ((clusters = static_cast<AliClusterContainer*>(nextClusColl()))) {
736 while ((clusters = static_cast<AliClusterContainer*>(nextClusColl()))) {
751 while ((tracks = static_cast<AliParticleContainer*>(nextPartColl()))) {
767 while ((tracks = static_cast<AliParticleContainer*>(nextPartColl()))) {
782 return fastjet::kt_algorithm;
784 return fastjet::antikt_algorithm;
786 return fastjet::cambridge_algorithm;
788 return fastjet::genkt_algorithm;
790 return fastjet::cambridge_for_passive_algorithm;
792 return fastjet::genkt_for_passive_algorithm;
794 return fastjet::plugin_algorithm;
796 return fastjet::undefined_jet_algorithm;
799 ::Error(
"AliEmcalJetTask::ConvertToFJAlgo",
"Jet algorithm %d not recognized!!!", algo);
800 return fastjet::undefined_jet_algorithm;
814 return fastjet::E_scheme;
817 return fastjet::pt_scheme;
820 return fastjet::pt2_scheme;
823 return fastjet::Et_scheme;
826 return fastjet::Et2_scheme;
829 return fastjet::BIpt_scheme;
832 return fastjet::BIpt2_scheme;
835 return fastjet::external_scheme;
838 ::Error(
"AliEmcalJetTask::ConvertToFJRecoScheme",
"Recombination scheme %d not recognized!!!", reco);
839 return fastjet::external_scheme;
854 if( eta < 0.9 && eta > -0.9 ) {
857 if (eta < 0.9 - r && eta > -0.9 + r)
893 return jetAcceptanceType;
901 if (!
fGeom)
return kFALSE;
903 if ( eta < fGeom->GetArm1EtaMax() - r && eta >
fGeom->GetArm1EtaMin() + r ) {
905 if ( phi < 3.135 - r && phi > 1.405 + r )
909 if ( phi < fGeom->GetEMCALPhiMax() * TMath::DegToRad() - r && phi >
fGeom->GetArm1PhiMin() * TMath::DegToRad() + r)
922 if (!
fGeom)
return kFALSE;
923 if (eta < fGeom->GetArm1EtaMax() - r && eta >
fGeom->GetArm1EtaMin() + r ) {
924 if ( phi < fGeom->GetDCALPhiMax() * TMath::DegToRad() - r && phi >
fGeom->GetDCALPhiMin() * TMath::DegToRad() + r)
938 if (!
fGeom)
return kFALSE;
940 if (eta < fGeom->GetArm1EtaMax() - r && eta >
fGeom->GetArm1EtaMin() + r) {
941 if ( phi < fGeom->GetDCALPhiMax() * TMath::DegToRad() - r && phi >
fGeom->GetDCALPhiMin() * TMath::DegToRad() + r) {
943 if (TMath::Abs(eta) >
fGeom->GetDCALInnerExtandedEta() + r) {
947 if (phi >
fGeom->GetEMCGeometry()->GetDCALStandardPhiMax() * TMath::DegToRad())
969 if (eta < etaMax - r && eta > etaMin + r ) {
970 if (phi < phiMax * TMath::DegToRad() - r && phi > phiMin * TMath::DegToRad() + r)
984 if (fname.BeginsWith(
"alien://")) {
985 TGrid::Connect(
"alien://");
988 TFile*
file = TFile::Open(path.data());
990 if (!file || file->IsZombie()) {
991 AliErrorStream() <<
"Could not open artificial track efficiency function file\n";
995 TF1* trackEff =
dynamic_cast<TF1*
>(file->Get(name.data()));
998 AliInfoStream() << Form(
"Artificial track efficiency function %s loaded from file %s.", name.data(), path.data()) <<
"\n";
1001 AliErrorStream() << Form(
"Artificial track efficiency function %s not found in file %s.", name.data(), path.data()) <<
"\n";
1041 ::Error(
"AddTaskEmcalJet",
"No analysis manager to connect to.");
1046 AliVEventHandler* handler = mgr->GetInputEventHandler();
1048 ::Error(
"AddTaskEmcalJet",
"This task requires an input event handler");
1054 if (handler->InheritsFrom(
"AliESDInputHandler")) {
1057 else if (handler->InheritsFrom(
"AliAODInputHandler")) {
1068 if (trackName ==
"usedefault") {
1069 if (dataType ==
kESD) {
1070 trackName =
"Tracks";
1072 else if (dataType ==
kAOD) {
1073 trackName =
"tracks";
1080 if (clusName ==
"usedefault") {
1081 if (dataType ==
kESD) {
1082 clusName =
"CaloClusters";
1084 else if (dataType ==
kAOD) {
1085 clusName =
"caloClusters";
1093 if (trackName ==
"mcparticles") {
1095 partCont = mcpartCont;
1097 else if (trackName ==
"tracks" || trackName ==
"Tracks") {
1099 partCont = trackCont;
1101 else if (!trackName.IsNull()) {
1107 if (!clusName.IsNull()) {
1128 Printf(
"Jet task name: %s", name.Data());
1131 if (mgrTask)
return mgrTask;
1149 mgr->AddTask(jetTask);
1152 AliAnalysisDataContainer* cinput = mgr->GetCommonInputContainer();
1153 mgr->ConnectInput(jetTask, 0, cinput);
Bool_t fTrackEfficiencyOnlyForEmbedding
Apply aritificial tracking inefficiency only for embedded tracks.
void SetMaxNeutralPt(Double32_t t)
void SetJetsName(const char *n)
void SetRecombScheme(ERecoScheme_t scheme)
fastjet::PseudoJet GetJetAreaVector(UInt_t idx) const
TObjArray fClusterCollArray
cluster collection array
void AddTrackAt(Int_t track, Int_t idx)
void SetParticlePtCut(Double_t cut)
TClonesArray * fJets
!jet collection
Bool_t fIsEmcPart
!=true if emcal particles are given as input (for clusters)
void SetEtaRange(Double_t emi, Double_t ema)
Bool_t fIsInit
!=true if already initialized
DCal acceptance – spans entire rectangular region in eta-phi (including most of PHOS) ...
void AdoptParticleContainer(AliParticleContainer *cont)
const AliClusterIterableMomentumContainer accepted_momentum() const
Base task in the EMCAL framework.
bidirectional stl iterator over the EMCAL iterable container
Double_t fJetEtaMin
minimum eta to keep jet in output
EJetType_t fJetType
jet type (full, charged, neutral)
Bool_t IsJetInEmcal(Double_t eta, Double_t phi, Double_t r)
Int_t GetNParticles() const
Container with name, TClonesArray and cuts for particles.
Bool_t fApplyArtificialTrackingEfficiency
Flag to apply artificial tracking efficiency.
void AddClusterAt(Int_t clus, Int_t idx)
AliEmcalJetUtility * AddUtility(AliEmcalJetUtility *utility)
Bool_t fFillGhost
=true ghost particles will be filled in AliEmcalJet obj
Declaration of class AliTLorentzVector.
virtual void ProcessJet(AliEmcalJet *jet, Int_t ij, AliFJWrapper &fjw)=0
void SetJetType(EJetType_t t)
void ExecuteUtilities(AliEmcalJet *jet, Int_t ij)
Full acceptance, i.e. no acceptance cut applied – left to user.
void SetMaxRap(Double_t maxrap)
virtual void Terminate(AliFJWrapper &fjw)=0
void SetMinJetPt(Double_t j)
void SetAreaE(Double_t a)
AliEmcalContainerIndexMap< AliParticleContainer, AliVParticle > fParticleContainerIndexMap
! Mapping between index and particle containers
ERecoScheme_t fRecombScheme
recombination scheme used by fastjet
void SetRecombScheme(const fastjet::RecombinationScheme &scheme)
Bool_t fFillConstituents
If true jet consituents will be filled to the AliEmcalJet.
Double_t fTrackEfficiency
artificial tracking inefficiency (0...1)
void SetJetAlgo(EJetAlgo_t a)
virtual ~AliEmcalJetTask()
static FJRecoScheme ConvertToFJRecoScheme(ERecoScheme_t reco)
int GlobalIndexFromLocalIndex(const U *inputObject, const int localIndex) const
General jet finder task implementing a wrapper for FastJet.
static TString GenerateJetName(EJetType_t jetType, EJetAlgo_t jetAlgo, ERecoScheme_t recoScheme, Double_t radius, AliParticleContainer *partCont, AliClusterContainer *clusCont, TString tag)
UShort_t GetNumberOfConstituents() const
Container for particles within the EMCAL framework.
Bool_t fIsPSelSet
!=true if physics selection was set
Int_t GetDefaultClusterEnergy() const
void LoadTrackEfficiencyFunction(const std::string &path, const std::string &name)
void AdoptClusterContainer(AliClusterContainer *cont)
TObjArray fParticleCollArray
particle/track collection array
void AddParticleConstituent(const AliVParticle *const part, Bool_t isFromEmbeddedEvent, UInt_t globalIndex)
Add new particle (track / mc particle) constituent to the given jet Note: this will append the consti...
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
TPC fiducial acceptance (each eta edge narrowed by jet R)
Bool_t fLocked
true if lock is set
const std::vector< fastjet::PseudoJet > & GetInclusiveJets() const
void SetJetAcceptanceType(UInt_t type)
Double_t fJetPhiMin
minimum phi to keep jet in output
UInt_t FindJetAcceptanceType(Double_t eta, Double_t phi, Double_t r)
Bool_t fEnableAliBasicParticleCompatibility
Flag to allow compatibility with AliBasicParticle constituents.
Bool_t IsJetInDcal(Double_t eta, Double_t phi, Double_t r)
Double_t GetJetArea(UInt_t idx) const
AliEMCALGeometry * fGeom
!emcal geometry
PHOS fiducial acceptance (each eta, phi edge narrowed by jet R)
void AddClusterConstituent(const AliVCluster *const clust, AliVCluster::VCluUserDefEnergy_t endef, Double_t *pvec, Bool_t isFromEmbeddedEvent, UInt_t globalIndex)
Add new cluster constituent to the given jet Note: this will append the constituent. No sorting according to particle is done.
Double_t Phi_0_2pi() const
TString fJetsTag
tag of jet collection (usually = "Jets")
void SetLegacyMode(Bool_t mode)
virtual AliVParticle * GetParticle(Int_t i=-1) const
TObjArray * fUtilities
jet utilities (gen subtractor, constituent subtractor etc.)
void SetPtEtaPhiM(Double_t pt, Double_t eta, Double_t phi, Double_t m)
void SetAlgorithm(const fastjet::JetAlgorithm &algor)
TF1 * fTrackEfficiencyFunction
Function that describes the artificial tracking efficiency to be applied on top of the nominal tracki...
static const AliEmcalContainerIndexMap< TClonesArray, AliVCluster > & GetEmcalContainerIndexMap()
Get the EMCal container utils associated with particle containers.
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
AliEmcalContainerIndexMap< AliClusterContainer, AliVCluster > fClusterContainerIndexMap
! Mapping between index and cluster containers
Int_t GetNClusters() const
Double_t Phi_0_2pi() const
Double_t fJetEtaMax
maximum eta to keep jet in output
Double_t fGhostArea
ghost area
void SetMaxChargedPt(Double32_t t)
virtual void Clear(const Option_t *="")
void SetNEF(Double_t nef)
Bool_t GetSortedArray(Int_t indexes[], std::vector< fastjet::PseudoJet > array) const
void AddGhost(const Double_t dPx, const Double_t dPy, const Double_t dPz, const Double_t dE)
AliVCluster * GetCluster(Int_t i) const
Bool_t IsJetInDcalOnly(Double_t eta, Double_t phi, Double_t r)
virtual void Prepare(AliFJWrapper &fjw)=0
Int_t fMinMCLabel
minimum MC label value for the tracks/clusters being considered MC particles
void SetJetTask(AliEmcalJetTask *jetTask)
void SetMinJetClusE(Double_t min)
void SelectCollisionCandidates(UInt_t offlineTriggerMask=AliVEvent::kMB)
void SetGhostArea(Double_t gharea)
void SetGhostArea(Double_t gharea)
EJetAlgo_t fJetAlgo
jet algorithm (kt, akt, etc)
void SetNumberOfCharged(Int_t n)
Double_t fJetPhiMax
maximum phi to keep jet in output
std::vector< fastjet::PseudoJet > GetJetConstituents(UInt_t idx) const
void SetAreaEta(Double_t a)
static FJJetAlgo ConvertToFJAlgo(EJetAlgo_t algo)
void SetParticleEtaLimits(Double_t min, Double_t max)
const std::vector< fastjet::PseudoJet > & GetInputVectors() const
Double_t fMaxBinPt
max pt in histograms
void SetMinJetTrackPt(Double_t min)
Double_t fMinJetArea
min area to keep jet in output
TString fJetsName
!name of jet collection
void SetFillGhost(Bool_t b=kTRUE)
Double_t fMinJetPt
min jet pt to keep jet in output
const AliParticleIterableMomentumContainer accepted_momentum() const
TRandom3 fRandom
! Random number generator for artificial tracking efficiency
TFile * file
TList with histograms for a given trigger.
void CopyMappingFrom(const AliEmcalContainerIndexMap< U2, V > &map, U *cont)
void FillJetConstituents(AliEmcalJet *jet, std::vector< fastjet::PseudoJet > &constituents, std::vector< fastjet::PseudoJet > &constituents_sub, Int_t flag=0, TString particlesSubName="")
Bool_t GetMomentum(TLorentzVector &mom, const AliVCluster *vc, Double_t mass) const
Represent a jet reconstructed using the EMCal jet framework.
void SetNumberOfTracks(Int_t n)
virtual void ExecOnce()
Perform steps needed to initialize the analysis.
Double_t fRadius
jet radius
Bool_t fLegacyMode
!=true to enable FJ 2.x behavior
void SetClusPtCut(Double_t cut)
Int_t fRunNumber
!run number (triggering RunChanged()
virtual void AddInputVector(Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index=-99999)
void SetMinJetClusPt(Double_t min)
DCal fiducial acceptance (each eta, phi edge narrowed by jet R)
void SetPhiRange(Double_t pmi, Double_t pma)
EDataType_t
Switch for the data type.
DCal acceptance – spans ONLY DCal (no PHOS or gap)
void SetClusECut(Double_t cut)
void SetDefaultClusterEnergy(Int_t d)
void SetAreaPhi(Double_t a)
virtual void InitEvent(AliFJWrapper &fjw)=0
void SetAreaType(const fastjet::AreaType &atype)
void SetParticlePhiLimits(Double_t min, Double_t max)
void SetPtEmc(Double_t pt)
Container structure for EMCAL clusters.
DCal fiducial acceptance (each eta, phi edge narrowed by jet R)
Container for MC-true particles within the EMCAL framework.
EMCal fiducial acceptance (each eta, phi edge narrowed by jet R)
static AliEmcalJetTask * AddTaskEmcalJet(const TString nTracks="usedefault", const TString nClusters="usedefault", const AliJetContainer::EJetAlgo_t jetAlgo=AliJetContainer::antikt_algorithm, const Double_t radius=0.4, const AliJetContainer::EJetType_t jetType=AliJetContainer::kFullJet, const Double_t minTrPt=0.15, const Double_t minClPt=0.30, const Double_t ghostArea=0.005, const AliJetContainer::ERecoScheme_t reco=AliJetContainer::pt_scheme, const TString tag="Jet", const Double_t minJetPt=0., const Bool_t lockTask=kTRUE, const Bool_t bFillGhosts=kFALSE)
void SetCharge(EChargeCut_t c)
Container for jet within the EMCAL jet framework.
void SetRadius(Double_t r)
AliFJWrapper fFastJetWrapper
!fastjet wrapper
void TerminateUtilities()
void SetNumberOfClusters(Int_t n)
Bool_t IsJetInPhos(Double_t eta, Double_t phi, Double_t r)
void SetAxisInEmcal(Bool_t b)
static const AliEmcalContainerIndexMap< TClonesArray, AliVParticle > & GetEmcalContainerIndexMap()
Get the EMCal container utils associated with particle containers.
static const Int_t fgkConstIndexShift
!contituent index shift
void SetAreaEmc(Double_t a)
void SetClusHadCorrEnergyCut(Double_t cut)
void SetNumberOfNeutrals(Int_t n)