32 #include <fastjet/ClusterSequence.hh>
33 #include <fastjet/contrib/Nsubjettiness.hh>
34 #include <fastjet/contrib/SoftDrop.hh>
39 #include "AliAODInputHandler.h"
40 #include "AliAnalysisManager.h"
50 #include "AliVCluster.h"
51 #include "AliVParticle.h"
57 namespace EmcalTriggerJets {
59 AliAnalysisTaskEmcalJetSubstructureTree::AliAnalysisTaskEmcalJetSubstructureTree() :
64 fReclusterizer(kCAAlgo),
65 fTriggerSelectionBits(AliVEvent::kAny),
66 fTriggerSelectionString(
"")
76 fReclusterizer(kCAAlgo),
77 fTriggerSelectionBits(AliVEvent::kAny),
78 fTriggerSelectionString(
"")
81 DefineOutput(2, TTree::Class());
94 varnames[0] =
"Radius";
95 varnames[1] =
"EventWeight";
96 varnames[2] =
"PtJetRec";
97 varnames[3] =
"PtJetSim";
98 varnames[4] =
"AreaRec";
99 varnames[5] =
"AreaSim";
100 varnames[6] =
"NEFRec";
101 varnames[7] =
"NEFSim";
102 varnames[8] =
"MassRec";
103 varnames[9] =
"MassSim";
104 varnames[10] =
"ZgMeasured";
105 varnames[11] =
"ZgTrue";
106 varnames[12] =
"RgMeasured";
107 varnames[13] =
"RgTrue";
108 varnames[14] =
"MgMeasured";
109 varnames[15] =
"MgTrue";
110 varnames[16] =
"PtgMeasured";
111 varnames[17] =
"PtgTrue";
112 varnames[18] =
"OneSubjettinessMeasured";
113 varnames[19] =
"OneSubjettinessTrue";
114 varnames[20] =
"TwoSubjettinessMeasured";
115 varnames[21] =
"TwoSubjettinessTrue";
116 varnames[22] =
"NCharged";
117 varnames[23] =
"NNeutral";
118 varnames[24] =
"NConstTrue";
119 varnames[25] =
"NDroppedMeasured";
120 varnames[26] =
"NDroppedTrue";
122 for(
int ib = 0; ib <
kTNVar; ib++){
157 nsubjettinessSettings.
fBeta = 1.;
158 nsubjettinessSettings.
fRadius = 0.4;
160 if(mcjets && !datajets) {
162 for(
auto jet : mcjets->
accepted()) {
167 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
173 for(
auto jet : datajets->
accepted()) {
176 if(!associatedJet)
continue;
182 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
189 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
262 if(dataSubjettiness) {
283 const int kClusterOffset = 30000;
284 std::vector<fastjet::PseudoJet> constituents;
286 AliVTrack *track =
static_cast<AliVTrack *
>(jet.
TrackAt(itrk, tracks->GetArray()));
287 fastjet::PseudoJet constituentTrack(track->Px(), track->Py(), track->Pz(), track->E());
288 constituentTrack.set_user_index(jet.
TrackAt(itrk));
289 constituents.push_back(constituentTrack);
293 AliVCluster *cluster = jet.
ClusterAt(icl, clusters->GetArray());
294 TLorentzVector clustervec;
295 cluster->GetMomentum(clustervec,
fVertex);
296 fastjet::PseudoJet constituentCluster(clustervec.Px(), clustervec.Py(), clustervec.Pz(), cluster->GetHadCorrEnergy());
297 constituentCluster.set_user_index(jet.
ClusterAt(icl) + kClusterOffset);
298 constituents.push_back(constituentCluster);
302 fastjet::JetDefinition jetdef(fastjet::antikt_algorithm, jetradius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
303 std::vector<fastjet::PseudoJet> outputjets;
305 fastjet::ClusterSequence jetfinder(constituents, jetdef);
306 outputjets = jetfinder.inclusive_jets(0);
309 }
catch (fastjet::Error &e) {
310 AliErrorStream() <<
" FJ Exception caught: " << e.message() << std::endl;
316 fastjet::contrib::SoftDrop softdropAlgorithm(cutparameters.
fBeta, cutparameters.
fZ);
317 softdropAlgorithm.set_verbose_structure(kTRUE);
318 std::unique_ptr<fastjet::contrib::Recluster> reclusterizer(
new fastjet::contrib::Recluster(cutparameters.
fRecluserAlgo, 1,
true));
319 softdropAlgorithm.set_reclustering(kTRUE, reclusterizer.get());
320 fastjet::PseudoJet groomed = softdropAlgorithm(jet);
323 groomed.structure_of<fastjet::contrib::SoftDrop>().delta_R(),
324 groomed.structure_of<fastjet::contrib::SoftDrop>().mu(),
326 groomed.structure_of<fastjet::contrib::SoftDrop>().dropped_count()});
332 fastjet::contrib::Nsubjettiness (1,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(cut.
fBeta,cut.
fRadius)).result(jet),
333 fastjet::contrib::Nsubjettiness (2,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(cut.
fBeta,cut.
fRadius)).result(jet)
342 AliInputEventHandler *inputhandler =
static_cast<AliInputEventHandler *
>(mgr->GetInputEventHandler());
344 if(inputhandler->IsA() == AliAODInputHandler::Class()) isAOD = kTRUE;
348 mgr->AddTask(treemaker);
363 mcjets->SetName(
"mcjets");
369 tracks->SetMinPt(0.15);
371 clusters->SetMinE(0.3);
380 datajets->SetName(
"datajets");
386 TString triggerstring(trigger);
387 if(triggerstring.Contains(
"INT7")) {
389 }
else if(triggerstring.Contains(
"EJ1")) {
392 }
else if(triggerstring.Contains(
"EJ2")) {
399 TString outputfile = mgr->GetCommonFileName();
400 outputfile += TString::Format(
":JetSubstructure_R%02d_%s",
int(jetradius * 10.), trigger);
401 mgr->ConnectInput(treemaker, 0, mgr->GetCommonInputContainer());
402 mgr->ConnectOutput(treemaker, 1, mgr->CreateContainer(
"JetSubstructureHistos_" + TString::Format(
"R%0d_",
int(jetradius * 10.)) + trigger, AliEmcalList::Class(), AliAnalysisManager::kOutputContainer, outputfile));
403 mgr->ConnectOutput(treemaker, 2, mgr->CreateContainer(
"JetSubstuctureTree_" + TString::Format(
"R%0d_",
int(jetradius * 10.)) + trigger, TTree::Class(), AliAnalysisManager::kOutputContainer, Form(
"JetSubstructureTree_%s.root", trigger)));
TTree * fJetSubstructureTree
! Tree with jet substructure information
Double_t fBeta
Cut on Beta.
void SetTriggerString(TString triggerstring)
AliJetContainer * GetJetContainer(Int_t i=0) const
Double_t fRg
Groomed jet radius.
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
AliEmcalJet * MatchedJet() const
Int_t ClusterAt(Int_t idx) const
TString fTriggerSelectionString
Trigger selection string.
Tree with jet substructure information.
AliSoftDropParameters fSoftDrop
AliJetContainer * AddJetContainer(const char *n, TString defaultCutType, Float_t jetRadius=0.4)
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.
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 TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
Double_t fTwoSubjettiness
2-subjettiness
AliSoftdropDefinition fSoftdropSettings
UShort_t GetNumberOfClusters() const
void SetJetPtCut(Float_t cut)
void FillTree(double r, double weight, const AliEmcalJet *datajet, const AliEmcalJet *mcjet, AliSoftDropParameters *dataSoftdrop, AliSoftDropParameters *mcsoftdrop, AliNSubjettinessParameters *dataSubjettiness, AliNSubjettinessParameters *mcSubjettiness)
Int_t fNDropped
Number of dropped subjets.
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.
virtual ~AliAnalysisTaskEmcalJetSubstructureTree()
AliMCParticleContainer * AddMCParticleContainer(const char *n)
Create new container for MC particles and attach it to the task.
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Double_t fSDZCut
Soft drop z-cut.
ClassImp(AliAnalysisTaskDeltaPt) AliAnalysisTaskDeltaPt
void SetTriggerBits(UInt_t triggersel)
Double_t fSDBetaCut
Soft drop beta cut.
Float_t GetJetRadius() const
AliEmcalList * fOutput
!output list
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)
Base task in the EMCAL jet framework.
static AliAnalysisTaskEmcalJetSubstructureTree * AddEmcalJetSubstructureTreeMaker(Bool_t isMC, Bool_t isData, Double_t jetradius, const char *name)
Represent a jet reconstructed using the EMCal jet framework.
AliSoftDropParameters MakeSoftDropParameters(const fastjet::PseudoJet &jet, const AliSoftdropDefinition &cut) const
void UserCreateOutputObjects()
Main initialization function on the worker.
AliAnalysisTaskEmcalJetSubstructureTree()
const AliJetIterableContainer accepted() const
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)
UInt_t fTriggerSelectionBits
Trigger selection bits.
static TString ClusterContainerNameFactory(Bool_t isAOD)
Get name of the default cluster container.
static TString TrackContainerNameFactory(Bool_t isAOD)
Get name of the default track container.