33 #include <fastjet/ClusterSequence.hh>
34 #include <fastjet/contrib/Nsubjettiness.hh>
35 #include <fastjet/contrib/SoftDrop.hh>
39 #include <TLorentzVector.h>
44 #include "AliAODEvent.h"
45 #include "AliAODInputHandler.h"
46 #include "AliAnalysisManager.h"
47 #include "AliAnalysisDataSlot.h"
48 #include "AliAnalysisDataContainer.h"
61 #include "AliVCluster.h"
62 #include "AliVParticle.h"
64 #ifdef EXPERIMENTAL_JETCONSTITUENTS
74 namespace EmcalTriggerJets {
82 fReclusterizer(kCAAlgo),
83 fTriggerSelectionBits(AliVEvent::kAny),
84 fTriggerSelectionString(
""),
85 fUseDownscaleWeight(false),
87 fFillAcceptance(true),
103 fReclusterizer(kCAAlgo),
104 fTriggerSelectionBits(AliVEvent::kAny),
105 fTriggerSelectionString(
""),
106 fUseDownscaleWeight(false),
108 fFillAcceptance(true),
113 fFillStructGlob(true)
116 DefineOutput(2, TTree::Class());
128 clusterenergybinning(200, 0., 200),
129 timebinning(1000, -500., 500.),
130 m02binning(100, 0., 1.),
131 ncellbinning(101, -0.5, 100.5);
133 fQAHistos->
CreateTH2(
"hClusterConstE",
"EMCAL cluster energy vs jet pt; p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
134 fQAHistos->
CreateTH2(
"hClusterConstTime",
"EMCAL cluster time vs. jet pt; p_{t, jet} (GeV/c); t_{cl} (ns)", jetptbinning, timebinning);
135 fQAHistos->
CreateTH2(
"hClusterConstM02",
"EMCAL cluster M02 vs. jet pt; p{t, jet} (GeV/c); M02", jetptbinning, m02binning);
136 fQAHistos->
CreateTH2(
"hClusterConstNcell",
"EMCAL cluster ncell vs. jet pt; p{t, jet} (GeV/c); Number of cells", jetptbinning, ncellbinning);
139 #ifdef EXPERIMENTAL_JETCONSTITUENTS
140 fQAHistos->
CreateTH2(
"hChargedConstituentPt",
"charged constituent pt vs jet pt (via constituent map); p_{t,jet} (GeV/c); p_{t,ch} (GeV/c)", jetptbinning, clusterenergybinning);
141 fQAHistos->
CreateTH2(
"hChargedIndexPt",
"charged constituent pt vs jet pt (via index map); p_{t, jet} (GeV/c); p_{t, ch} (GeV/c)", jetptbinning, clusterenergybinning);
143 fQAHistos->
CreateTH2(
"hClusterConstituentEDefault",
"cluster constituent default energy vs. jet pt (va constituent map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
144 fQAHistos->
CreateTH2(
"hClusterConstituentENLC",
"cluster constituent non-linearity-corrected energy vs. jet pt (va constituent map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
145 fQAHistos->
CreateTH2(
"hClusterConstituentEHC",
"cluster constituent hadronic-corrected energy vs. jet pt (va constituent map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
146 fQAHistos->
CreateTH2(
"hClusterIndexENLC",
"cluster constituent non-linearity-corrected energy vs. jet pt (via index map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
147 fQAHistos->
CreateTH2(
"hClusterIndexEHC",
"cluster constituent hadronic-corrected energy vs. jet pt (via index map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
152 TString treename = this->GetOutputSlot(2)->GetContainer()->GetName();
155 varnames[0] =
"Radius";
156 varnames[1] =
"EventWeight";
157 varnames[2] =
"PtJetRec";
158 varnames[3] =
"PtJetSim";
159 varnames[4] =
"EJetRec";
160 varnames[5] =
"EJetSim";
161 varnames[6] =
"EtaRec";
162 varnames[7] =
"EtaSim";
163 varnames[8] =
"PhiRec";
164 varnames[9] =
"PhiSim";
165 varnames[10] =
"RhoPtRec";
166 varnames[11] =
"RhoPtSim";
167 varnames[12] =
"RhoMassRec";
168 varnames[13] =
"RhoMassSim";
169 varnames[14] =
"AreaRec";
170 varnames[15] =
"AreaSim";
171 varnames[16] =
"NEFRec";
172 varnames[17] =
"NEFSim";
173 varnames[18] =
"MassRec";
174 varnames[19] =
"MassSim";
175 varnames[20] =
"ZgMeasured";
176 varnames[21] =
"ZgTrue";
177 varnames[22] =
"RgMeasured";
178 varnames[23] =
"RgTrue";
179 varnames[24] =
"MgMeasured";
180 varnames[25] =
"MgTrue";
181 varnames[26] =
"PtgMeasured";
182 varnames[27] =
"PtgTrue";
183 varnames[28] =
"MugMeasured";
184 varnames[29] =
"MugTrue";
185 varnames[30] =
"OneSubjettinessMeasured";
186 varnames[31] =
"OneSubjettinessTrue";
187 varnames[32] =
"TwoSubjettinessMeasured";
188 varnames[33] =
"TwoSubjettinessTrue";
189 varnames[34] =
"AngularityMeasured";
190 varnames[35] =
"AngularityTrue";
191 varnames[36] =
"PtDMeasured";
192 varnames[37] =
"PtDTrue";
193 varnames[38] =
"NCharged";
194 varnames[39] =
"NNeutral";
195 varnames[40] =
"NConstTrue";
196 varnames[41] =
"NDroppedMeasured";
197 varnames[42] =
"NDroppedTrue";
199 for(
int ib = 0; ib <
kTNVar; ib++){
216 std::cout <<
"Adding branch " << branchname << std::endl;
236 TString rhoTagData = datajets ? TString::Format(
"R%02d", static_cast<Int_t>(datajets->
GetJetRadius() * 10.)) :
"",
237 rhoTagMC = mcjets ? TString::Format(
"R%02d", static_cast<Int_t>(mcjets->
GetJetRadius() * 10.)) :
"";
243 AliDebugStream(2) <<
"Found rho parameter for reconstructed pt: " << (rhoPtRec ?
"yes" :
"no") <<
", value: " << (rhoPtRec ? rhoPtRec->GetVal() : 0.) << std::endl;
244 AliDebugStream(2) <<
"Found rho parameter for sim pt: " << (rhoPtSim ?
"yes" :
"no") <<
", value: " << (rhoPtSim ? rhoPtSim->GetVal() : 0.) << std::endl;
245 AliDebugStream(2) <<
"Found rho parameter for reconstructed Mass: " << (rhoMassRec ?
"yes" :
"no") <<
", value: " << (rhoMassRec ? rhoMassRec->GetVal() : 0.) << std::endl;
246 AliDebugStream(2) <<
"Found rho parameter for sim Mass: " << (rhoMassSim ?
"yes" :
"no") <<
", value: " << (rhoMassSim ? rhoMassSim->GetVal() : 0.) << std::endl;
248 AliDebugStream(1) <<
"Inspecting jet radius " << (datajets ? datajets->
GetJetRadius() : mcjets->
GetJetRadius()) << std::endl;
266 AliDebugStream(1) <<
"Found trigger decision object: " << (mctrigger ?
"yes" :
"no") << std::endl;
269 AliErrorStream() <<
"Trigger decision container not found in event - not possible to select EMCAL triggers" << std::endl;
278 if(rhoPtRec) rhoparameters[0] = rhoPtRec->GetVal();
279 if(rhoPtSim) rhoparameters[1] = rhoPtSim->GetVal();
280 if(rhoMassRec) rhoparameters[2] = rhoMassRec->GetVal();
281 if(rhoMassSim) rhoparameters[3] = rhoMassSim->GetVal();
293 nsubjettinessSettings.
fBeta = 1.;
294 nsubjettinessSettings.
fRadius = 0.4;
297 AliDebugStream(1) <<
"In data jets branch: found " << datajets->
GetNJets() <<
" jets, " << datajets->
GetNAcceptedJets() <<
" were accepted\n";
298 AliDebugStream(1) <<
"Having MC information: " << (mcjets ? TString::Format(
"yes, with %d jets", mcjets->
GetNJets()) :
"no") << std::endl;
300 AliDebugStream(1) <<
"In MC jets branch: found " << mcjets->
GetNJets() <<
" jets, " << mcjets->
GetNAcceptedJets() <<
" were accepted\n";
302 for(
auto jet : datajets->
accepted()) {
303 double pt = jet->Pt(), pz = jet->Pz(), E = jet->E(), M = TMath::Sqrt(E*E - pt*pt - pz*pz);
304 AliDebugStream(2) <<
"Next jet: pt:" << jet->Pt() <<
", E: " << E <<
", pz: " << pz <<
", M(self): " << M <<
"M(fj)" << jet->M() << std::endl;
309 AliDebugStream(2) <<
"Not found associated jet" << std::endl;
318 FillTree(datajets->
GetJetRadius(), weight, jet, associatedJet, &(structureData.
fSoftDrop), &(structureMC.fSoftDrop), &(structureData.
fNsubjettiness), &(structureMC.fNsubjettiness), angularity, ptd, rhoparameters);
320 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
322 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
330 FillTree(datajets->
GetJetRadius(), weight, jet,
nullptr, &(structure.
fSoftDrop),
nullptr, &(structure.
fNsubjettiness),
nullptr, angularity, ptd, rhoparameters);
332 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
334 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
341 AliDebugStream(1) <<
"In MC pure jet branch: found " << mcjets->
GetNJets() <<
" jets, " << mcjets->
GetNAcceptedJets() <<
" were accepted\n";
347 ptd[2] = {0.,
MakePtD(*mcjet, particles,
nullptr)};
348 FillTree(mcjets->
GetJetRadius(), weight,
nullptr, mcjet,
nullptr, &(structure.
fSoftDrop),
nullptr, &(structure.
fNsubjettiness), angularity, ptd, rhoparameters);
350 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
352 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
426 if(dataSubjettiness) {
452 const int kClusterOffset = 30000;
453 std::vector<fastjet::PseudoJet> constituents;
455 AliDebugStream(2) <<
"Make new jet substrucutre for " << (isMC ?
"MC" :
"data") <<
" jet: Number of tracks " << jet.
GetNumberOfTracks() <<
", clusters " << jet.
GetNumberOfClusters() << std::endl;
457 auto track = jet.
TrackAt(itrk, tracks->GetArray());
458 fastjet::PseudoJet constituentTrack(track->Px(), track->Py(), track->Pz(), track->E());
459 constituentTrack.set_user_index(jet.
TrackAt(itrk));
460 constituents.push_back(constituentTrack);
465 auto cluster = jet.
ClusterAt(icl, clusters->GetArray());
466 TLorentzVector clustervec;
468 fastjet::PseudoJet constituentCluster(clustervec.Px(), clustervec.Py(), clustervec.Pz(), cluster->GetHadCorrEnergy());
469 constituentCluster.set_user_index(jet.
ClusterAt(icl) + kClusterOffset);
470 constituents.push_back(constituentCluster);
474 AliDebugStream(3) <<
"Found " << constituents.size() <<
" constituents for jet with pt=" << jet.
Pt() <<
" GeV/c" << std::endl;
475 if(!constituents.size())
478 fastjet::JetDefinition jetdef(fastjet::antikt_algorithm, jetradius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
479 std::vector<fastjet::PseudoJet> outputjets;
481 fastjet::ClusterSequence jetfinder(constituents, jetdef);
482 outputjets = jetfinder.inclusive_jets(0);
485 }
catch (fastjet::Error &e) {
486 AliErrorStream() <<
" FJ Exception caught: " << e.message() << std::endl;
489 AliErrorStream() <<
"Softdrop exception caught: " << e.
what() << std::endl;
495 fastjet::contrib::SoftDrop softdropAlgorithm(cutparameters.
fBeta, cutparameters.
fZ);
496 softdropAlgorithm.set_verbose_structure(kTRUE);
497 std::unique_ptr<fastjet::contrib::Recluster> reclusterizer(
new fastjet::contrib::Recluster(cutparameters.
fRecluserAlgo, 1,
true));
498 softdropAlgorithm.set_reclustering(kTRUE, reclusterizer.get());
499 AliDebugStream(4) <<
"Jet has " << jet.constituents().size() <<
" constituents" << std::endl;
500 auto groomed = softdropAlgorithm(jet);
502 auto softdropstruct = groomed.structure_of<fastjet::contrib::SoftDrop>();
506 softdropstruct.delta_R(),
509 softdropstruct.dropped_count()});
511 }
catch(std::bad_cast &e) {
518 fastjet::contrib::Nsubjettiness (1,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedCutoffMeasure(cut.
fBeta, cut.
fRadius, 1e100)).result(jet),
519 fastjet::contrib::Nsubjettiness (2,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedCutoffMeasure(cut.
fBeta, cut.
fRadius, 1e100)).result(jet)
527 TVector3 jetvec(jet.
Px(), jet.
Py(), jet.
Pz());
531 auto track = jet.
TrackAt(itrk, tracks->GetArray());
533 AliErrorStream() <<
"Associated constituent particle / track not found\n";
536 TVector3 trackvec(track->Px(), track->Py(), track->Pz());
538 num += track->Pt() * trackvec.DrEtaPhi(jetvec);
544 auto clust = jet.
ClusterAt(icl, clusters->GetArray());
546 AliErrorStream() <<
"Associated constituent cluster not found\n";
549 TLorentzVector clusterp;
552 num += clusterp.Pt() * clusterp.Vect().DrEtaPhi(jetvec);
553 den += clusterp.Pt();
565 auto trk = jet.
TrackAt(itrk, particles->GetArray());
567 AliErrorStream() <<
"Associated constituent particle / track not found\n";
570 num += trk->Pt() * trk->Pt();
576 auto clust = jet.
ClusterAt(icl, clusters->GetArray());
578 AliErrorStream() <<
"Associated constituent cluster not found\n";
581 TLorentzVector clusterp;
583 num += clusterp.Pt() * clusterp.Pt();
584 den += clusterp.Pt();
587 return TMath::Sqrt(num)/den;
592 auto clust = jet->
ClusterAt(icl, clusters->GetArray());
593 AliDebugStream(3) <<
"cluster time " << clust->GetTOF() << std::endl;
599 #ifdef EXPERIMENTAL_JETCONSTITUENTS
605 #ifdef EXPERIMENTAL_JETCONSTITUENTS
608 auto part = jet->
TrackAt(itrk, cont->GetArray());
613 AliDebugStream(2) <<
"Jet: Number of particle constituents: " << jet->
GetParticleConstituents().GetEntriesFast() << std::endl;
616 AliDebugStream(3) <<
"Found particle constituent with pt " << part->
Pt() <<
", from VParticle " << part->GetParticle()->Pt() << std::endl;
621 AliDebugStream(2) <<
"Jet: Number of cluster constituents: " << jet->
GetClusterConstituents().GetEntriesFast() << std::endl;
624 AliDebugStream(3) <<
"Found cluster constituent with energy " << clust->
E() <<
" using energy definition " <<
static_cast<int>(clust->GetDefaultEnergyType()) << std::endl;
626 fQAHistos->
FillTH2(
"hClusterConstituentENLC", jet->
Pt(), clust->GetCluster()->GetNonLinCorrEnergy());
627 fQAHistos->
FillTH2(
"hClusterConstituentEHC", jet->
Pt(), clust->GetCluster()->GetHadCorrEnergy());
633 return branchname.Contains(
"Sim") || branchname.Contains(
"True");
637 return branchname.Contains(
"Eta") || branchname.Contains(
"Phi");
641 return branchname.Contains(
"Rho");
645 return branchname.Contains(
"Mass");
649 return branchname.Contains(
"gMeasured") || branchname.Contains(
"gTrue") || branchname.Contains(
"NDropped");
653 return branchname.Contains(
"Subjettiness");
657 return branchname.Contains(
"Angularity") || branchname.Contains(
"PtD");
664 AliInputEventHandler *inputhandler =
static_cast<AliInputEventHandler *
>(mgr->GetInputEventHandler());
666 if(inputhandler->IsA() == AliAODInputHandler::Class()){
667 std::cout <<
"Analysing AOD events\n";
670 std::cout <<
"Analysing ESD events\n";
675 mgr->AddTask(treemaker);
681 particles->SetMinPt(0.);
690 mcjets->SetName(
"mcjets");
698 std::cout <<
"Track container name: " << tracks->GetName() << std::endl;
699 tracks->SetMinPt(0.15);
703 std::cout <<
"Using full or neutral jets ..." << std::endl;
705 std::cout <<
"Cluster container name: " << clusters->GetName() << std::endl;
709 std::cout <<
"Using charged jets ... " << std::endl;
719 datajets->SetName(
"datajets");
726 TString triggerstring(trigger);
727 if(triggerstring.Contains(
"INT7")) {
729 }
else if(triggerstring.Contains(
"EJ1")) {
732 }
else if(triggerstring.Contains(
"EJ2")) {
739 TString outputfile = mgr->GetCommonFileName();
740 outputfile += TString::Format(
":JetSubstructure_R%02d_%s",
int(jetradius * 10.), trigger);
741 mgr->ConnectInput(treemaker, 0, mgr->GetCommonInputContainer());
742 mgr->ConnectOutput(treemaker, 1, mgr->CreateContainer(
"JetSubstructureHistos_" + TString::Format(
"R%02d_",
int(jetradius * 10.)) + trigger, AliEmcalList::Class(), AliAnalysisManager::kOutputContainer, outputfile));
743 mgr->ConnectOutput(treemaker, 2, mgr->CreateContainer(
"JetSubstructureTree_" + TString::Format(
"R%02d_",
int(jetradius * 10.)) + trigger, TTree::Class(), AliAnalysisManager::kOutputContainer, mgr->GetCommonFileName()));
TTree * fJetSubstructureTree
! Tree with jet substructure information
bool IsSoftdropBranch(const TString &branchname) const
Bool_t fFillStructGlob
Fill other substructure variables.
Bool_t fFillSoftDrop
Fill soft drop parameters.
Double_t fBeta
Cut on Beta.
bool IsEventSelected(const char *name) const
Checks whether the events is selected for a given trigger type.
Bool_t fFillPart
Fill particle level information.
static AliAnalysisTaskEmcalJetSubstructureTree * AddEmcalJetSubstructureTreeMaker(Bool_t isMC, Bool_t isData, Double_t jetradius, AliJetContainer::EJetType_t jettype, AliJetContainer::ERecoScheme_t recombinationScheme, const char *name)
void SetTriggerString(TString triggerstring)
Class creating a linear binning, used in the histogram manager.
Double_t MakePtD(const AliEmcalJet &jet, const AliParticleContainer *const particles, const AliClusterContainer *const clusters) const
AliEmcalJet * ClosestJet() const
AliJetContainer * GetJetContainer(Int_t i=0) const
Double_t fRg
Groomed jet radius.
virtual double E() const
Access to constituent energy.
static AliEmcalDownscaleFactorsOCDB * Instance()
virtual void UserCreateOutputObjects()
AliNSubjettinessDefinition fSubjettinessSettings
Container with name, TClonesArray and cuts for particles.
void SetUseAliAnaUtils(Bool_t b, Bool_t bRejPilup=kTRUE)
AliJetSubstructureData MakeJetSubstructure(const AliEmcalJet &jet, double jetradius, const AliParticleContainer *tracks, const AliClusterContainer *clusters, const AliJetSubstructureSettings &settings) const
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
void SetRun(int runnumber)
Double_t fMug
Mass Drop parameter.
Int_t ClusterAt(Int_t idx) const
TString fTriggerSelectionString
Trigger selection string.
Tree with jet substructure information.
Bool_t fFillNSub
Fill N-subjettiness.
AliSoftDropParameters fSoftDrop
AliJetContainer * AddJetContainer(const char *n, TString defaultCutType, Float_t jetRadius=0.4)
const std::vector< PWG::JETFW::AliEmcalParticleJetConstituent > & GetParticleConstituents() const
Get container with particle (track / MC particle) constituents.
Structure for results from the soft drop algorithm.
Double_t fZg
Groomed jet z.
virtual bool Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
Double_t GetDownscaleFactorForTriggerClass(const TString &trigger) const
void SetVzRange(Double_t min, Double_t max)
Double_t fPtg
Groomed jet pt.
Double_t fMg
Groomed jet mass.
AliClusterContainer * AddClusterContainer(const char *n)
Create new cluster container and attach it to the task.
Double_t fJetTreeData[kTNVar]
Variable storage for the jet tree.
fastjet::JetAlgorithm fRecluserAlgo
Reclusterization algorithm.
UShort_t GetNumberOfConstituents() const
Container for particles within the EMCAL framework.
Int_t GetDefaultClusterEnergy() const
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
TPC fiducial acceptance (each eta edge narrowed by jet R)
Double_t fTwoSubjettiness
2-subjettiness
bool IsMassBranch(const TString &branchname) const
AliRhoParameter * GetRhoFromEvent(const char *name)
AliSoftdropDefinition fSoftdropSettings
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
Create a new TH2 within the container.
UShort_t GetNumberOfClusters() const
void SetJetPtCut(Float_t cut)
THashList * GetListOfHistograms() const
Get the list of histograms.
Bool_t fFillMass
Fill jet mass.
Bool_t fFillRho
Fill rho parameters.
Int_t fNDropped
Number of dropped subjets.
bool IsPartBranch(const TString &branchname) const
AliNSubjettinessParameters MakeNsubjettinessParameters(const fastjet::PseudoJet &jet, const AliNSubjettinessDefinition &cut) const
Double_t fOneSubjettiness
1-subjettiness
Definition for the algorithm obtaining the softdrop parameters.
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
bool IsStructbranch(const TString &branchname) const
virtual const char * what() const
virtual ~AliAnalysisTaskEmcalJetSubstructureTree()
Bool_t fUseDownscaleWeight
Use 1/downscale as weight.
virtual void RunChanged(Int_t newrun)
Process tasks relevant when a file with a different run number is processed.
AliMCParticleContainer * AddMCParticleContainer(const char *n)
Create new container for MC particles and attach it to the task.
Double_t MakeAngularity(const AliEmcalJet &jet, const AliParticleContainer *tracks, const AliClusterContainer *clusters) const
Implementation of a jet constituent for constituent clusters.
bool IsAcceptanceBranch(const TString &branchname) const
Container for trigger decision object.
THistManager * fQAHistos
! QA histos
Double_t fSDZCut
Soft drop z-cut.
void SetTriggerBits(UInt_t triggersel)
Double_t fSDBetaCut
Soft drop beta cut.
void DoConstituentQA(const AliEmcalJet *jet, const AliParticleContainer *tracks, const AliClusterContainer *clusters)
Float_t GetJetRadius() const
const std::vector< PWG::JETFW::AliEmcalClusterJetConstituent > & GetClusterConstituents() const
Get container with cluster constituents.
virtual double Pt() const
Access to transverse momentum.
AliEmcalList * fOutput
!output list
void LinkOutputBranch(const TString &branchname, Double_t *datalocation)
Reclusterizer_t fReclusterizer
Reclusterizer method.
Double_t fVertex[3]
!event vertex
AliTrackContainer * AddTrackContainer(const char *n)
Create new track container and attach it to the task.
Bool_t fFillAcceptance
Fill acceptance (eta-phi)
AliTrackContainer * GetTrackContainer(Int_t i=0) const
void SetMakeGeneralHistograms(Bool_t g)
bool IsRhoBranch(const TString &branchname) const
Base task in the EMCAL jet framework.
void FillTree(double r, double weight, const AliEmcalJet *datajet, const AliEmcalJet *mcjet, AliSoftDropParameters *dataSoftdrop, AliSoftDropParameters *mcsoftdrop, AliNSubjettinessParameters *dataSubjettiness, AliNSubjettinessParameters *mcSubjettiness, Double_t *angularity, Double_t *ptd, Double_t *rhoparameters)
Represent a jet reconstructed using the EMCal jet framework.
Container class for histograms.
AliSoftDropParameters MakeSoftDropParameters(const fastjet::PseudoJet &jet, const AliSoftdropDefinition &cut) const
void UserCreateOutputObjects()
Main initialization function on the worker.
AliAnalysisTaskEmcalJetSubstructureTree()
const AliJetIterableContainer accepted() const
void SetDefaultClusterEnergy(Int_t d)
Container structure for EMCAL clusters.
EMCal fiducial acceptance (each eta, phi edge narrowed by jet R)
Container for jet within the EMCAL jet framework.
AliNSubjettinessParameters fNsubjettiness
TList * OpenFile(const char *fname)
bool IsNSubjettinessBranch(const TString &branchname) const
void SetClusHadCorrEnergyCut(Double_t cut)
UInt_t fTriggerSelectionBits
Trigger selection bits.
static TString TrackContainerNameFactory(Bool_t isAOD)
Get name of the default track container.
static TString ClusterContainerNameFactory(Bool_t isAOD)
Get name of the default cluster container.