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),
102 fReclusterizer(kCAAlgo),
103 fTriggerSelectionBits(AliVEvent::kAny),
104 fTriggerSelectionString(
""),
105 fUseDownscaleWeight(false),
111 fFillStructGlob(true)
114 DefineOutput(2, TTree::Class());
126 clusterenergybinning(200, 0., 200),
127 timebinning(1000, -500., 500.),
128 m02binning(100, 0., 1.),
129 ncellbinning(101, -0.5, 100.5);
131 fQAHistos->
CreateTH2(
"hClusterConstE",
"EMCAL cluster energy vs jet pt; p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
132 fQAHistos->
CreateTH2(
"hClusterConstTime",
"EMCAL cluster time vs. jet pt; p_{t, jet} (GeV/c); t_{cl} (ns)", jetptbinning, timebinning);
133 fQAHistos->
CreateTH2(
"hClusterConstM02",
"EMCAL cluster M02 vs. jet pt; p{t, jet} (GeV/c); M02", jetptbinning, m02binning);
134 fQAHistos->
CreateTH2(
"hClusterConstNcell",
"EMCAL cluster ncell vs. jet pt; p{t, jet} (GeV/c); Number of cells", jetptbinning, ncellbinning);
137 #ifdef EXPERIMENTAL_JETCONSTITUENTS
138 fQAHistos->
CreateTH2(
"hChargedConstituentPt",
"charged constituent pt vs jet pt (via constituent map); p_{t,jet} (GeV/c); p_{t,ch} (GeV/c)", jetptbinning, clusterenergybinning);
139 fQAHistos->
CreateTH2(
"hChargedIndexPt",
"charged constituent pt vs jet pt (via index map); p_{t, jet} (GeV/c); p_{t, ch} (GeV/c)", jetptbinning, clusterenergybinning);
141 fQAHistos->
CreateTH2(
"hClusterConstituentEDefault",
"cluster constituent default energy vs. jet pt (va constituent map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
142 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);
143 fQAHistos->
CreateTH2(
"hClusterConstituentEHC",
"cluster constituent hadronic-corrected energy vs. jet pt (va constituent map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
144 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);
145 fQAHistos->
CreateTH2(
"hClusterIndexEHC",
"cluster constituent hadronic-corrected energy vs. jet pt (via index map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
150 TString treename = this->GetOutputSlot(2)->GetContainer()->GetName();
153 varnames[0] =
"Radius";
154 varnames[1] =
"EventWeight";
155 varnames[2] =
"PtJetRec";
156 varnames[3] =
"PtJetSim";
157 varnames[4] =
"EJetRec";
158 varnames[5] =
"EJetSim";
159 varnames[6] =
"RhoPtRec";
160 varnames[7] =
"RhoPtSim";
161 varnames[8] =
"RhoMassRec";
162 varnames[9] =
"RhoMassSim";
163 varnames[10] =
"AreaRec";
164 varnames[11] =
"AreaSim";
165 varnames[12] =
"NEFRec";
166 varnames[13] =
"NEFSim";
167 varnames[14] =
"MassRec";
168 varnames[15] =
"MassSim";
169 varnames[16] =
"ZgMeasured";
170 varnames[17] =
"ZgTrue";
171 varnames[18] =
"RgMeasured";
172 varnames[19] =
"RgTrue";
173 varnames[20] =
"MgMeasured";
174 varnames[21] =
"MgTrue";
175 varnames[22] =
"PtgMeasured";
176 varnames[23] =
"PtgTrue";
177 varnames[24] =
"MugMeasured";
178 varnames[25] =
"MugTrue";
179 varnames[26] =
"OneSubjettinessMeasured";
180 varnames[27] =
"OneSubjettinessTrue";
181 varnames[28] =
"TwoSubjettinessMeasured";
182 varnames[29] =
"TwoSubjettinessTrue";
183 varnames[30] =
"AngularityMeasured";
184 varnames[31] =
"AngularityTrue";
185 varnames[32] =
"PtDMeasured";
186 varnames[33] =
"PtDTrue";
187 varnames[34] =
"NCharged";
188 varnames[35] =
"NNeutral";
189 varnames[36] =
"NConstTrue";
190 varnames[37] =
"NDroppedMeasured";
191 varnames[38] =
"NDroppedTrue";
193 for(
int ib = 0; ib <
kTNVar; ib++){
209 std::cout <<
"Adding branch " << branchname << std::endl;
229 TString rhoTagData = datajets ? TString::Format(
"R%02d", static_cast<Int_t>(datajets->
GetJetRadius() * 10.)) :
"",
230 rhoTagMC = mcjets ? TString::Format(
"R%02d", static_cast<Int_t>(mcjets->
GetJetRadius() * 10.)) :
"";
236 AliDebugStream(2) <<
"Found rho parameter for reconstructed pt: " << (rhoPtRec ?
"yes" :
"no") <<
", value: " << (rhoPtRec ? rhoPtRec->GetVal() : 0.) << std::endl;
237 AliDebugStream(2) <<
"Found rho parameter for sim pt: " << (rhoPtSim ?
"yes" :
"no") <<
", value: " << (rhoPtSim ? rhoPtSim->GetVal() : 0.) << std::endl;
238 AliDebugStream(2) <<
"Found rho parameter for reconstructed Mass: " << (rhoMassRec ?
"yes" :
"no") <<
", value: " << (rhoMassRec ? rhoMassRec->GetVal() : 0.) << std::endl;
239 AliDebugStream(2) <<
"Found rho parameter for sim Mass: " << (rhoMassSim ?
"yes" :
"no") <<
", value: " << (rhoMassSim ? rhoMassSim->GetVal() : 0.) << std::endl;
241 AliDebugStream(1) <<
"Inspecting jet radius " << (datajets ? datajets->
GetJetRadius() : mcjets->
GetJetRadius()) << std::endl;
259 AliDebugStream(1) <<
"Found trigger decision object: " << (mctrigger ?
"yes" :
"no") << std::endl;
262 AliErrorStream() <<
"Trigger decision container not found in event - not possible to select EMCAL triggers" << std::endl;
271 if(rhoPtRec) rhoparameters[0] = rhoPtRec->GetVal();
272 if(rhoPtSim) rhoparameters[1] = rhoPtSim->GetVal();
273 if(rhoMassRec) rhoparameters[2] = rhoMassRec->GetVal();
274 if(rhoMassSim) rhoparameters[3] = rhoMassSim->GetVal();
286 nsubjettinessSettings.
fBeta = 1.;
287 nsubjettinessSettings.
fRadius = 0.4;
290 AliDebugStream(1) <<
"In data jets branch: found " << datajets->
GetNJets() <<
" jets, " << datajets->
GetNAcceptedJets() <<
" were accepted\n";
291 AliDebugStream(1) <<
"Having MC information: " << (mcjets ? TString::Format(
"yes, with %d jets", mcjets->
GetNJets()) :
"no") << std::endl;
293 AliDebugStream(1) <<
"In MC jets branch: found " << mcjets->
GetNJets() <<
" jets, " << mcjets->
GetNAcceptedJets() <<
" were accepted\n";
295 for(
auto jet : datajets->
accepted()) {
296 double pt = jet->Pt(), pz = jet->Pz(), E = jet->E(), M = TMath::Sqrt(E*E - pt*pt - pz*pz);
297 AliDebugStream(2) <<
"Next jet: pt:" << jet->Pt() <<
", E: " << E <<
", pz: " << pz <<
", M(self): " << M <<
"M(fj)" << jet->M() << std::endl;
302 AliDebugStream(2) <<
"Not found associated jet" << std::endl;
311 FillTree(datajets->
GetJetRadius(), weight, jet, associatedJet, &(structureData.
fSoftDrop), &(structureMC.fSoftDrop), &(structureData.
fNsubjettiness), &(structureMC.fNsubjettiness), angularity, ptd, rhoparameters);
313 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
315 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
323 FillTree(datajets->
GetJetRadius(), weight, jet,
nullptr, &(structure.
fSoftDrop),
nullptr, &(structure.
fNsubjettiness),
nullptr, angularity, ptd, rhoparameters);
325 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
327 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
334 AliDebugStream(1) <<
"In MC pure jet branch: found " << mcjets->
GetNJets() <<
" jets, " << mcjets->
GetNAcceptedJets() <<
" were accepted\n";
340 ptd[2] = {0.,
MakePtD(*mcjet, particles,
nullptr)};
341 FillTree(mcjets->
GetJetRadius(), weight,
nullptr, mcjet,
nullptr, &(structure.
fSoftDrop),
nullptr, &(structure.
fNsubjettiness), angularity, ptd, rhoparameters);
343 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
345 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
411 if(dataSubjettiness) {
437 const int kClusterOffset = 30000;
438 std::vector<fastjet::PseudoJet> constituents;
440 AliDebugStream(2) <<
"Make new jet substrucutre for " << (isMC ?
"MC" :
"data") <<
" jet: Number of tracks " << jet.
GetNumberOfTracks() <<
", clusters " << jet.
GetNumberOfClusters() << std::endl;
442 auto track = jet.
TrackAt(itrk, tracks->GetArray());
443 fastjet::PseudoJet constituentTrack(track->Px(), track->Py(), track->Pz(), track->E());
444 constituentTrack.set_user_index(jet.
TrackAt(itrk));
445 constituents.push_back(constituentTrack);
450 auto cluster = jet.
ClusterAt(icl, clusters->GetArray());
451 TLorentzVector clustervec;
453 fastjet::PseudoJet constituentCluster(clustervec.Px(), clustervec.Py(), clustervec.Pz(), cluster->GetHadCorrEnergy());
454 constituentCluster.set_user_index(jet.
ClusterAt(icl) + kClusterOffset);
455 constituents.push_back(constituentCluster);
459 AliDebugStream(3) <<
"Found " << constituents.size() <<
" constituents for jet with pt=" << jet.
Pt() <<
" GeV/c" << std::endl;
460 if(!constituents.size())
463 fastjet::JetDefinition jetdef(fastjet::antikt_algorithm, jetradius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
464 std::vector<fastjet::PseudoJet> outputjets;
466 fastjet::ClusterSequence jetfinder(constituents, jetdef);
467 outputjets = jetfinder.inclusive_jets(0);
470 }
catch (fastjet::Error &e) {
471 AliErrorStream() <<
" FJ Exception caught: " << e.message() << std::endl;
474 AliErrorStream() <<
"Softdrop exception caught: " << e.
what() << std::endl;
480 fastjet::contrib::SoftDrop softdropAlgorithm(cutparameters.
fBeta, cutparameters.
fZ);
481 softdropAlgorithm.set_verbose_structure(kTRUE);
482 std::unique_ptr<fastjet::contrib::Recluster> reclusterizer(
new fastjet::contrib::Recluster(cutparameters.
fRecluserAlgo, 1,
true));
483 softdropAlgorithm.set_reclustering(kTRUE, reclusterizer.get());
484 AliDebugStream(4) <<
"Jet has " << jet.constituents().size() <<
" constituents" << std::endl;
485 auto groomed = softdropAlgorithm(jet);
487 auto softdropstruct = groomed.structure_of<fastjet::contrib::SoftDrop>();
491 softdropstruct.delta_R(),
494 softdropstruct.dropped_count()});
496 }
catch(std::bad_cast &e) {
503 fastjet::contrib::Nsubjettiness (1,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedCutoffMeasure(cut.
fBeta, cut.
fRadius, 1e100)).result(jet),
504 fastjet::contrib::Nsubjettiness (2,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedCutoffMeasure(cut.
fBeta, cut.
fRadius, 1e100)).result(jet)
512 TVector3 jetvec(jet.
Px(), jet.
Py(), jet.
Pz());
516 auto track = jet.
TrackAt(itrk, tracks->GetArray());
518 AliErrorStream() <<
"Associated constituent particle / track not found\n";
521 TVector3 trackvec(track->Px(), track->Py(), track->Pz());
523 num += track->Pt() * trackvec.DrEtaPhi(jetvec);
529 auto clust = jet.
ClusterAt(icl, clusters->GetArray());
531 AliErrorStream() <<
"Associated constituent cluster not found\n";
534 TLorentzVector clusterp;
537 num += clusterp.Pt() * clusterp.Vect().DrEtaPhi(jetvec);
538 den += clusterp.Pt();
550 auto trk = jet.
TrackAt(itrk, particles->GetArray());
552 AliErrorStream() <<
"Associated constituent particle / track not found\n";
555 num += trk->Pt() * trk->Pt();
561 auto clust = jet.
ClusterAt(icl, clusters->GetArray());
563 AliErrorStream() <<
"Associated constituent cluster not found\n";
566 TLorentzVector clusterp;
568 num += clusterp.Pt() * clusterp.Pt();
569 den += clusterp.Pt();
572 return TMath::Sqrt(num)/den;
577 auto clust = jet->
ClusterAt(icl, clusters->GetArray());
578 AliDebugStream(3) <<
"cluster time " << clust->GetTOF() << std::endl;
584 #ifdef EXPERIMENTAL_JETCONSTITUENTS
590 #ifdef EXPERIMENTAL_JETCONSTITUENTS
593 auto part = jet->
TrackAt(itrk, cont->GetArray());
598 AliDebugStream(2) <<
"Jet: Number of particle constituents: " << jet->
GetParticleConstituents().GetEntriesFast() << std::endl;
601 AliDebugStream(3) <<
"Found particle constituent with pt " << part->
Pt() <<
", from VParticle " << part->GetParticle()->Pt() << std::endl;
606 AliDebugStream(2) <<
"Jet: Number of cluster constituents: " << jet->
GetClusterConstituents().GetEntriesFast() << std::endl;
609 AliDebugStream(3) <<
"Found cluster constituent with energy " << clust->
E() <<
" using energy definition " <<
static_cast<int>(clust->GetDefaultEnergyType()) << std::endl;
611 fQAHistos->
FillTH2(
"hClusterConstituentENLC", jet->
Pt(), clust->GetCluster()->GetNonLinCorrEnergy());
612 fQAHistos->
FillTH2(
"hClusterConstituentEHC", jet->
Pt(), clust->GetCluster()->GetHadCorrEnergy());
618 return branchname.Contains(
"Sim") || branchname.Contains(
"True");
622 return branchname.Contains(
"Rho");
626 return branchname.Contains(
"Mass");
630 return branchname.Contains(
"gMeasured") || branchname.Contains(
"gTrue") || branchname.Contains(
"NDropped");
634 return branchname.Contains(
"Subjettiness");
638 return branchname.Contains(
"Angularity") || branchname.Contains(
"PtD");
645 AliInputEventHandler *inputhandler =
static_cast<AliInputEventHandler *
>(mgr->GetInputEventHandler());
647 if(inputhandler->IsA() == AliAODInputHandler::Class()){
648 std::cout <<
"Analysing AOD events\n";
651 std::cout <<
"Analysing ESD events\n";
656 mgr->AddTask(treemaker);
662 particles->SetMinPt(0.);
671 mcjets->SetName(
"mcjets");
679 std::cout <<
"Track container name: " << tracks->GetName() << std::endl;
680 tracks->SetMinPt(0.15);
684 std::cout <<
"Using full or neutral jets ..." << std::endl;
686 std::cout <<
"Cluster container name: " << clusters->GetName() << std::endl;
690 std::cout <<
"Using charged jets ... " << std::endl;
700 datajets->SetName(
"datajets");
707 TString triggerstring(trigger);
708 if(triggerstring.Contains(
"INT7")) {
710 }
else if(triggerstring.Contains(
"EJ1")) {
713 }
else if(triggerstring.Contains(
"EJ2")) {
720 TString outputfile = mgr->GetCommonFileName();
721 outputfile += TString::Format(
":JetSubstructure_R%02d_%s",
int(jetradius * 10.), trigger);
722 mgr->ConnectInput(treemaker, 0, mgr->GetCommonInputContainer());
723 mgr->ConnectOutput(treemaker, 1, mgr->CreateContainer(
"JetSubstructureHistos_" + TString::Format(
"R%0d_",
int(jetradius * 10.)) + trigger, AliEmcalList::Class(), AliAnalysisManager::kOutputContainer, outputfile));
724 mgr->ConnectOutput(treemaker, 2, mgr->CreateContainer(
"JetSubstuctureTree_" + TString::Format(
"R%0d_",
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.
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.
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.