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() :
62 fJetSubstructureInfo(),
65 fReclusterizer(kCAAlgo),
66 fTriggerSelectionBits(AliVEvent::kAny),
67 fTriggerSelectionString(
"")
74 fJetSubstructureInfo(),
77 fReclusterizer(kCAAlgo),
78 fTriggerSelectionBits(AliVEvent::kAny),
79 fTriggerSelectionString(
"")
92 std::stringstream leaflist;
109 <<
"fOneSubjettinessMeasured:"
110 <<
"fOneSubjettinessTrue:"
111 <<
"fTwoSubjettinessMeasured:"
112 <<
"fTwoSubjettinessTrue:"
116 <<
"fNDroppedMeasured:"
118 std::string leafstring = leaflist.str();
119 printf(
"branch string: %s\n", leafstring.c_str());
153 nsubjettinessSettings.
fBeta = 1.;
154 nsubjettinessSettings.
fRadius = 0.4;
156 if(mcjets && !datajets) {
158 for(
auto jet : mcjets->
accepted()) {
163 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
169 for(
auto jet : datajets->
accepted()) {
172 if(!associatedJet)
continue;
178 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
185 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
254 if(dataSubjettiness) {
275 const int kClusterOffset = 30000;
276 std::vector<fastjet::PseudoJet> constituents;
278 AliVTrack *track =
static_cast<AliVTrack *
>(jet.
TrackAt(itrk, tracks->GetArray()));
279 fastjet::PseudoJet constituentTrack(track->Px(), track->Py(), track->Pz(), track->E());
280 constituentTrack.set_user_index(jet.
TrackAt(itrk));
281 constituents.push_back(constituentTrack);
285 AliVCluster *cluster = jet.
ClusterAt(icl, clusters->GetArray());
286 TLorentzVector clustervec;
287 cluster->GetMomentum(clustervec,
fVertex);
288 fastjet::PseudoJet constituentCluster(clustervec.Px(), clustervec.Py(), clustervec.Pz(), cluster->GetHadCorrEnergy());
289 constituentCluster.set_user_index(jet.
ClusterAt(icl) + kClusterOffset);
290 constituents.push_back(constituentCluster);
294 fastjet::JetDefinition jetdef(fastjet::antikt_algorithm, jetradius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
295 std::vector<fastjet::PseudoJet> outputjets;
297 fastjet::ClusterSequence jetfinder(constituents, jetdef);
298 outputjets = jetfinder.inclusive_jets(0);
301 }
catch (fastjet::Error &e) {
302 AliErrorStream() <<
" FJ Exception caught: " << e.message() << std::endl;
308 fastjet::contrib::SoftDrop softdropAlgorithm(cutparameters.
fBeta, cutparameters.
fZ);
309 softdropAlgorithm.set_verbose_structure(kTRUE);
310 std::unique_ptr<fastjet::contrib::Recluster> reclusterizer(
new fastjet::contrib::Recluster(cutparameters.
fRecluserAlgo, 1,
true));
311 softdropAlgorithm.set_reclustering(kTRUE, reclusterizer.get());
312 fastjet::PseudoJet groomed = softdropAlgorithm(jet);
315 groomed.structure_of<fastjet::contrib::SoftDrop>().delta_R(),
316 groomed.structure_of<fastjet::contrib::SoftDrop>().mu(),
318 groomed.structure_of<fastjet::contrib::SoftDrop>().dropped_count()});
324 fastjet::contrib::Nsubjettiness (1,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(cut.
fBeta,cut.
fRadius)).result(jet),
325 fastjet::contrib::Nsubjettiness (2,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(cut.
fBeta,cut.
fRadius)).result(jet)
334 AliInputEventHandler *inputhandler =
static_cast<AliInputEventHandler *
>(mgr->GetInputEventHandler());
336 if(inputhandler->IsA() == AliAODInputHandler::Class()) isAOD = kTRUE;
340 mgr->AddTask(treemaker);
355 mcjets->SetName(
"mcjets");
361 tracks->SetMinPt(0.15);
363 clusters->SetMinE(0.3);
372 datajets->SetName(
"datajets");
378 TString triggerstring(trigger);
379 if(triggerstring.Contains(
"INT7")) {
381 }
else if(triggerstring.Contains(
"EJ1")) {
384 }
else if(triggerstring.Contains(
"EJ2")) {
391 TString outputfile = mgr->GetCommonFileName();
392 outputfile += TString::Format(
":JetSubstructure_R%02d_%s",
int(jetradius * 10.), trigger);
393 mgr->ConnectInput(treemaker, 0, mgr->GetCommonInputContainer());
394 mgr->ConnectOutput(treemaker, 1, mgr->CreateContainer(
"JetSubstructure_" + TString::Format(
"R%0d_",
int(jetradius * 10.)) + trigger, AliEmcalList::Class(), AliAnalysisManager::kOutputContainer, outputfile));
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.
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
Double_t fTwoSubjettinessMeasured
Double_t fTwoSubjettinessTrue
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.
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
AliJetSubstructureInfo fJetSubstructureInfo
! Jet Substructure information to be filled in the tree
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Double_t fOneSubjettinessTrue
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)
Double_t fOneSubjettinessMeasured
Container for jet within the EMCAL jet framework.
AliNSubjettinessParameters fNsubjettiness
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.