35 #include <fastjet/ClusterSequence.hh> 36 #include <fastjet/contrib/Nsubjettiness.hh> 37 #include <fastjet/contrib/SoftDrop.hh> 41 #include <TLorentzVector.h> 43 #include <TObjString.h> 47 #include "AliAODEvent.h" 48 #include "AliAODInputHandler.h" 49 #include "AliAnalysisManager.h" 50 #include "AliAnalysisDataSlot.h" 51 #include "AliAnalysisDataContainer.h" 53 #include "AliCDBEntry.h" 54 #include "AliCDBManager.h" 67 #include "AliTriggerCluster.h" 68 #include "AliTriggerConfiguration.h" 69 #include "AliVCluster.h" 70 #include "AliVParticle.h" 72 #ifdef EXPERIMENTAL_JETCONSTITUENTS 100 fReclusterizer(kCAAlgo),
101 fTriggerSelectionBits(AliVEvent::kAny),
102 fTriggerSelectionString(
""),
103 fNameTriggerDecisionContainer(
"EmcalTriggerDecision"),
104 fUseTriggerSelectionForData(false),
105 fUseDownscaleWeight(false),
106 fUseChargedConstituents(true),
107 fUseNeutralConstituents(true),
112 fFillStructGlob(true)
146 DefineOutput(2, TTree::Class());
167 clusterenergybinning(200, 0., 200),
168 timebinning(1000, -500., 500.),
169 m02binning(100, 0., 1.),
170 ncellbinning(101, -0.5, 100.5);
173 fQAHistos->
CreateTH2(
"hClusterConstE",
"EMCAL cluster energy vs jet pt; p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
174 fQAHistos->
CreateTH2(
"hClusterConstTime",
"EMCAL cluster time vs. jet pt; p_{t, jet} (GeV/c); t_{cl} (ns)", jetptbinning, timebinning);
175 fQAHistos->
CreateTH2(
"hClusterConstM02",
"EMCAL cluster M02 vs. jet pt; p{t, jet} (GeV/c); M02", jetptbinning, m02binning);
176 fQAHistos->
CreateTH2(
"hClusterConstNcell",
"EMCAL cluster ncell vs. jet pt; p{t, jet} (GeV/c); Number of cells", jetptbinning, ncellbinning);
179 #ifdef EXPERIMENTAL_JETCONSTITUENTS 180 fQAHistos->
CreateTH2(
"hChargedConstituentPt",
"charged constituent pt vs jet pt (via constituent map); p_{t,jet} (GeV/c); p_{t,ch} (GeV/c)", jetptbinning, clusterenergybinning);
181 fQAHistos->
CreateTH2(
"hChargedIndexPt",
"charged constituent pt vs jet pt (via index map); p_{t, jet} (GeV/c); p_{t, ch} (GeV/c)", jetptbinning, clusterenergybinning);
183 fQAHistos->
CreateTH2(
"hClusterConstituentEDefault",
"cluster constituent default energy vs. jet pt (va constituent map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
184 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);
185 fQAHistos->
CreateTH2(
"hClusterConstituentEHC",
"cluster constituent hadronic-corrected energy vs. jet pt (va constituent map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
186 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);
187 fQAHistos->
CreateTH2(
"hClusterIndexEHC",
"cluster constituent hadronic-corrected energy vs. jet pt (via index map); p_{t, jet} (GeV/c); E_{cl} (GeV)", jetptbinning, clusterenergybinning);
188 fQAHistos->
CreateTH2(
"hLeadingChargedConstituentPt",
"Pt of the leading charged constituent in jet; p_{t,jet} (GeV/c); p_{t,ch} (GeV/c)", jetptbinning, clusterenergybinning);
189 fQAHistos->
CreateTH2(
"hLeadingClusterConstituentPt",
"Pt of the leading cluster constituent in jet; p_{t,jet} (GeV/c); p_{t,ch} (GeV/c)", jetptbinning, clusterenergybinning);
194 std::string treename = this->GetOutputSlot(2)->GetContainer()->GetName();
253 std::stringstream rhoTagData, rhoTagMC;
254 if(datajets) rhoTagData <<
"R" << std::setw(2) << std::setfill(
'0') <<
static_cast<Int_t>(datajets->
GetJetRadius() * 10.);
255 if(mcjets) rhoTagMC <<
"R" << std::setw(2) << std::setfill(
'0') <<
static_cast<Int_t>(mcjets->
GetJetRadius() * 10.);
258 std::string rhoSparseData =
"RhoSparse_Full_" + rhoTagData.str(), rhoSparseMC =
"RhoSparse_Full_" + rhoTagMC.str(),
259 rhoMassData =
"RhoMassSparse_Full_" + rhoTagData.str(), rhoMassMC =
"RhoMassSparse_Full_" + rhoTagMC.str();
264 AliDebugStream(2) <<
"Found rho parameter for reconstructed pt: " << (rhoPtRec ?
"yes" :
"no") <<
", value: " << (rhoPtRec ? rhoPtRec->GetVal() : 0.) << std::endl;
265 AliDebugStream(2) <<
"Found rho parameter for sim pt: " << (rhoPtSim ?
"yes" :
"no") <<
", value: " << (rhoPtSim ? rhoPtSim->GetVal() : 0.) << std::endl;
266 AliDebugStream(2) <<
"Found rho parameter for reconstructed Mass: " << (rhoMassRec ?
"yes" :
"no") <<
", value: " << (rhoMassRec ? rhoMassRec->GetVal() : 0.) << std::endl;
267 AliDebugStream(2) <<
"Found rho parameter for sim Mass: " << (rhoMassSim ?
"yes" :
"no") <<
", value: " << (rhoMassSim ? rhoMassSim->GetVal() : 0.) << std::endl;
269 rhoPtRec ? rhoPtRec->GetVal() : 0.,
270 rhoPtSim ? rhoPtSim->GetVal() : 0.,
271 rhoMassRec ? rhoMassRec->GetVal() : 0.,
272 rhoMassSim ? rhoMassSim->GetVal() : 0.
277 AliDebugStream(1) <<
"Inspecting jet radius " << (datajets ? datajets->
GetJetRadius() : mcjets->
GetJetRadius()) << std::endl;
290 AliDebugStream(1) <<
"Found trigger decision object: " << (trgselresult ?
"yes" :
"no") << std::endl;
292 AliErrorStream() <<
"Trigger decision container with name " <<
fNameTriggerDecisionContainer <<
" not found in event - not possible to select EMCAL triggers" << std::endl;
300 std::vector<std::string> clusternames;
302 for(
auto t : triggerinfos) {
303 if(std::find(clusternames.begin(), clusternames.end(), t.Triggercluster()) == clusternames.end()) clusternames.emplace_back(t.Triggercluster());
305 bool isCENT = (std::find(clusternames.begin(), clusternames.end(),
"CENT") != clusternames.end()),
306 isCENTNOTRD = (std::find(clusternames.begin(), clusternames.end(),
"CENTNOTRD") != clusternames.end()),
307 isCALO = (std::find(clusternames.begin(), clusternames.end(),
"CALO") != clusternames.end()),
308 isCALOFAST = (std::find(clusternames.begin(), clusternames.end(),
"CALOFAST") != clusternames.end());
317 AliDebugStream(1) <<
"Found trigger decision object: " << (mctrigger ?
"yes" :
"no") << std::endl;
319 AliErrorStream() <<
"Trigger decision container with name " <<
fNameTriggerDecisionContainer <<
" not found in event - not possible to select EMCAL triggers" << std::endl;
331 auto triggerstring =
MatchTrigger(selectionString.Data());
332 AliDebugStream(2) <<
"Getting downscale correction factor for trigger string " << triggerstring << std::endl;
335 AliDebugStream(1) <<
"Using downscale weight " << weight << std::endl;
352 nsubjettinessSettings.
fBeta = 1.;
353 nsubjettinessSettings.
fRadius = 0.4;
356 AliDebugStream(1) <<
"In data jets branch: found " << datajets->
GetNJets() <<
" jets, " << datajets->
GetNAcceptedJets() <<
" were accepted\n";
357 AliDebugStream(1) <<
"Having MC information: " << (mcjets ? TString::Format(
"yes, with %d jets", mcjets->
GetNJets()) :
"no") << std::endl;
359 AliDebugStream(1) <<
"In MC jets branch: found " << mcjets->
GetNJets() <<
" jets, " << mcjets->
GetNAcceptedJets() <<
" were accepted\n";
361 for(
auto jet : datajets->
accepted()) {
362 double pt = jet->Pt(), pz = jet->Pz(), E = jet->E(), M = TMath::Sqrt(E*E - pt*pt - pz*pz);
363 AliDebugStream(2) <<
"Next jet: pt:" << jet->Pt() <<
", E: " << E <<
", pz: " << pz <<
", M(self): " << M <<
"M(fj)" << jet->M() << std::endl;
368 AliDebugStream(2) <<
"Not found associated jet" << std::endl;
386 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
388 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
401 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
403 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
410 AliDebugStream(1) <<
"In MC pure jet branch: found " << mcjets->
GetNJets() <<
" jets, " << mcjets->
GetNAcceptedJets() <<
" were accepted\n";
421 AliErrorStream() <<
"Error in reclusterization - skipping jet" << std::endl;
423 AliErrorStream() <<
"Error in substructure observable - skipping jet" << std::endl;
433 AliCDBManager * cdb = AliCDBManager::Instance();
434 if(!fMCEvent && cdb){
436 AliCDBEntry *en = cdb->Get(
"GRP/CTP/Config");
437 AliTriggerConfiguration *trg =
static_cast<AliTriggerConfiguration *
>(en->GetObject());
438 std::vector<std::string> clusternames;
439 for(
auto c : trg->GetClusters()) {
440 AliTriggerCluster *clust =
static_cast<AliTriggerCluster *
>(
c);
441 std::string clustname = clust->GetName();
442 auto iscent = clustname.find(
"CENT") != std::string::npos, iscalo = clustname.find(
"CALO") != std::string::npos;
443 if(!(iscalo || iscent))
continue;
444 clusternames.emplace_back(clustname);
448 fLumiMonitor =
new TH1F(
"hLumiMonitor",
"Luminosity monitor", clusternames.size(), 0, clusternames.size());
450 for(
auto c : clusternames) {
451 fLumiMonitor->GetXaxis()->SetBinLabel(currentbin++,
c.data());
460 if(fInputEvent->GetFiredTriggerClasses().Contains(
"INT7")) {
462 auto int7trigger = trigger.IsTriggerClass(
"INT7");
463 auto bunchcrossing = trigger.BunchCrossing() ==
"B";
464 auto nopf = trigger.PastFutureProtection() ==
"NOPF";
465 AliDebugStream(4) <<
"Full name: " << trigger.ExpandClassName() <<
", INT7 trigger: " << (int7trigger ?
"Yes" :
"No") <<
", bunch crossing: " << (bunchcrossing ?
"Yes" :
"No") <<
", no past-future protection: " << (nopf ?
"Yes" :
"No") <<
", Cluster: " << trigger.Triggercluster() << std::endl;
466 if(int7trigger && bunchcrossing && nopf) {
467 double downscale = downscalefactors->GetDownscaleFactorForTriggerClass(trigger.ExpandClassName());
468 AliDebugStream(5) <<
"Using downscale " << downscale << std::endl;
469 fLumiMonitor->Fill(trigger.Triggercluster().data(), 1./downscale);
478 result.
fPt = TMath::Abs(jet.
Pt());
491 const int kClusterOffset = 30000;
492 std::vector<fastjet::PseudoJet> constituents;
494 AliDebugStream(2) <<
"Make new jet substrucutre for " << (isMC ?
"MC" :
"data") <<
" jet: Number of tracks " << jet.
GetNumberOfTracks() <<
", clusters " << jet.
GetNumberOfClusters() << std::endl;
497 auto track = jet.
TrackAt(itrk, tracks->GetArray());
500 fastjet::PseudoJet constituentTrack(track->Px(), track->Py(), track->Pz(), track->E());
501 constituentTrack.set_user_index(jet.
TrackAt(itrk));
502 constituents.push_back(constituentTrack);
508 auto cluster = jet.
ClusterAt(icl, clusters->GetArray());
509 TLorentzVector clustervec;
511 fastjet::PseudoJet constituentCluster(clustervec.Px(), clustervec.Py(), clustervec.Pz(), cluster->GetHadCorrEnergy());
512 constituentCluster.set_user_index(jet.
ClusterAt(icl) + kClusterOffset);
513 constituents.push_back(constituentCluster);
517 AliDebugStream(3) <<
"Found " << constituents.size() <<
" constituents for jet with pt=" << jet.
Pt() <<
" GeV/c" << std::endl;
518 if(!constituents.size()){
519 AliErrorStream() <<
"Jet has 0 constituents." << std::endl;
523 fastjet::JetDefinition jetdef(fastjet::antikt_algorithm, jetradius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
524 std::vector<fastjet::PseudoJet> outputjets;
526 fastjet::ClusterSequence jetfinder(constituents, jetdef);
527 outputjets = jetfinder.inclusive_jets(0);
530 }
catch (fastjet::Error &e) {
531 AliErrorStream() <<
" FJ Exception caught: " << e.message() << std::endl;
534 AliErrorStream() <<
"Softdrop exception caught: " << e.
what() << std::endl;
540 fastjet::contrib::SoftDrop softdropAlgorithm(cutparameters.
fBeta, cutparameters.
fZ);
541 softdropAlgorithm.set_verbose_structure(kTRUE);
542 std::unique_ptr<fastjet::contrib::Recluster> reclusterizer(
new fastjet::contrib::Recluster(cutparameters.
fRecluserAlgo, 1,
true));
543 softdropAlgorithm.set_reclustering(kTRUE, reclusterizer.get());
544 AliDebugStream(4) <<
"Jet has " << jet.constituents().size() <<
" constituents" << std::endl;
545 auto groomed = softdropAlgorithm(jet);
547 auto softdropstruct = groomed.structure_of<fastjet::contrib::SoftDrop>();
551 softdropstruct.delta_R(),
553 softdropstruct.delta_R(),
555 softdropstruct.dropped_count()});
557 }
catch(std::bad_cast &e) {
564 fastjet::contrib::Nsubjettiness (1,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedCutoffMeasure(cut.
fBeta, cut.
fRadius, 1e100)).result(jet),
565 fastjet::contrib::Nsubjettiness (2,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedCutoffMeasure(cut.
fBeta, cut.
fRadius, 1e100)).result(jet)
573 TVector3 jetvec(jet.
Px(), jet.
Py(), jet.
Pz());
578 auto track = jet.
TrackAt(itrk, tracks->GetArray());
580 AliErrorStream() <<
"Associated constituent particle / track not found\n";
585 TVector3 trackvec(track->Px(), track->Py(), track->Pz());
587 num += track->Pt() * trackvec.DrEtaPhi(jetvec);
593 auto clust = jet.
ClusterAt(icl, clusters->GetArray());
595 AliErrorStream() <<
"Associated constituent cluster not found\n";
598 TLorentzVector clusterp;
601 num += clusterp.Pt() * clusterp.Vect().DrEtaPhi(jetvec);
602 den += clusterp.Pt();
615 auto trk = jet.
TrackAt(itrk, particles->GetArray());
617 AliErrorStream() <<
"Associated constituent particle / track not found\n";
622 num += trk->Pt() * trk->Pt();
628 auto clust = jet.
ClusterAt(icl, clusters->GetArray());
630 AliErrorStream() <<
"Associated constituent cluster not found\n";
633 TLorentzVector clusterp;
635 num += clusterp.Pt() * clusterp.Pt();
636 den += clusterp.Pt();
639 return TMath::Sqrt(num)/den;
644 auto clust = jet->
ClusterAt(icl, clusters->GetArray());
645 AliDebugStream(3) <<
"cluster time " << clust->GetTOF() << std::endl;
651 #ifdef EXPERIMENTAL_JETCONSTITUENTS 657 #ifdef EXPERIMENTAL_JETCONSTITUENTS 660 auto part = jet->
TrackAt(itrk, cont->GetArray());
665 AliDebugStream(2) <<
"Jet: Number of particle constituents: " << jet->
GetParticleConstituents().size() << std::endl;
668 AliDebugStream(3) <<
"Found particle constituent with pt " << part.Pt() <<
", from VParticle " << part.GetParticle()->Pt() << std::endl;
673 AliDebugStream(2) <<
"Jet: Number of cluster constituents: " << jet->
GetClusterConstituents().size() << std::endl;
676 AliDebugStream(3) <<
"Found cluster constituent with energy " << clust.E() <<
" using energy definition " <<
static_cast<int>(clust.GetDefaultEnergyType()) << std::endl;
678 fQAHistos->
FillTH2(
"hClusterConstituentENLC", jet->
Pt(), clust.GetCluster()->GetNonLinCorrEnergy());
679 fQAHistos->
FillTH2(
"hClusterConstituentEHC", jet->
Pt(), clust.GetCluster()->GetHadCorrEnergy());
686 fQAHistos->
FillTH1(
"hLeadingClusterConstituentPt", jet->
Pt(), leadingcluster->GetCluster()->GetHadCorrEnergy());
689 fQAHistos->
FillTH1(
"hLeadingChargedConstituentPt", jet->
Pt(), leadingcharged->GetParticle()->Pt());
698 auto part = jet.
TrackAt(ipart, particles->GetArray());
700 if(part->Charge()) ncharged++;
712 std::vector<std::string> tokens;
714 std::stringstream decoder(fInputEvent->GetFiredTriggerClasses().Data());
715 while(std::getline(decoder, result,
' ')) tokens.emplace_back(result);
717 for(
auto t : tokens) {
718 if(t.find(triggertoken) != std::string::npos) {
728 const std::array<std::string, 8> kEMCALTriggers = {
729 "EJ1",
"EJ2",
"DJ1",
"DJ2",
"EG1",
"EG2",
"DG1",
"DG2" 731 bool isEMCAL =
false;
732 for(
auto emcaltrg : kEMCALTriggers) {
733 if(triggerstring.find(emcaltrg) != std::string::npos) {
745 AliInputEventHandler *inputhandler =
static_cast<AliInputEventHandler *
>(mgr->GetInputEventHandler());
747 if(inputhandler->IsA() == AliAODInputHandler::Class()){
748 std::cout <<
"Analysing AOD events\n";
751 std::cout <<
"Analysing ESD events\n";
755 std::stringstream taskname;
756 taskname <<
"JetSubstructureTreemaker_R" << std::setw(2) << std::setfill(
'0') << int(jetradius*10) << trigger;
758 mgr->AddTask(treemaker);
764 particles->SetMinPt(0.);
773 mcjets->SetName(
"mcjets");
781 std::cout <<
"Track container name: " << tracks->GetName() << std::endl;
782 tracks->SetMinPt(0.15);
786 std::cout <<
"Using full or neutral jets ..." << std::endl;
788 std::cout <<
"Cluster container name: " << clusters->GetName() << std::endl;
792 std::cout <<
"Using charged jets ... " << std::endl;
802 datajets->SetName(
"datajets");
809 std::string triggerstring(trigger);
810 if(triggerstring.find(
"INT7") != std::string::npos) {
812 }
else if(triggerstring.find(
"EJ1") != std::string::npos) {
815 }
else if(triggerstring.find(
"EJ2") != std::string::npos) {
818 }
else if(triggerstring.find(
"EG1") != std::string::npos) {
821 }
else if(triggerstring.find(
"EG2") != std::string::npos) {
827 std::string jettypestring;
832 default: jettypestring =
"Undef";
836 std::stringstream outputfile, histname, treename;
837 outputfile << mgr->GetCommonFileName() <<
":JetSubstructure_" << jettypestring <<
"_R" << std::setw(2) << std::setfill(
'0') << int(jetradius * 10.) <<
"_" << trigger;
838 histname <<
"JetSubstructureHistos_" << jettypestring <<
"_R" << std::setw(2) << std::setfill(
'0') << int(jetradius * 10.) <<
"_" << trigger;
839 treename <<
"JetSubstructureTree_" << jettypestring <<
"_R" << std::setw(2) << std::setfill(
'0') << int(jetradius * 10.) <<
"_" << trigger;
840 mgr->ConnectInput(treemaker, 0, mgr->GetCommonInputContainer());
841 mgr->ConnectOutput(treemaker, 1, mgr->CreateContainer(histname.str().data(), AliEmcalList::Class(), AliAnalysisManager::kOutputContainer, outputfile.str().data()));
842 mgr->ConnectOutput(treemaker, 2, mgr->CreateContainer(treename.str().data(), TTree::Class(), AliAnalysisManager::kOutputContainer, mgr->GetCommonFileName()));
848 LinkBranch(jettree, &fZg, Form(
"Zg%s", tag),
"D");
849 LinkBranch(jettree, &fRg, Form(
"Rg%s", tag),
"D");
850 LinkBranch(jettree, &fMg, Form(
"Mg%s", tag),
"D");
851 LinkBranch(jettree, &fPtg, Form(
"Ptg%s", tag),
"D");
852 LinkBranch(jettree, &fMug, Form(
"Mug%s", tag),
"D");
853 LinkBranch(jettree, &fDeltaR, Form(
"DeltaRg%s", tag),
"D");
854 LinkBranch(jettree, &fNDropped, Form(
"NDropped%s", tag),
"I");
858 LinkBranch(jettree, &fOneSubjettiness, Form(
"OneSubjettiness%s", tag),
"D");
859 LinkBranch(jettree, &fTwoSubjettiness, Form(
"TwoSubjettiness%s", tag),
"D");
863 LinkBranch(jettree, &fAngularity, Form(
"Angularity%s", tag),
"D");
864 LinkBranch(jettree, &fPtD, Form(
"PtD%s", tag),
"D");
868 LinkBranch(jettree, &fPt, Form(
"PtJet%s", tag),
"D");
869 LinkBranch(jettree, &fE, Form(
"EJet%s", tag),
"D");
870 LinkBranch(jettree, &fEta, Form(
"Eta%s", tag),
"D");
871 LinkBranch(jettree, &fPhi, Form(
"Phi%s", tag),
"D");
872 LinkBranch(jettree, &fArea, Form(
"Area%s", tag),
"D");
873 LinkBranch(jettree, &fMass, Form(
"Mass%s", tag),
"D");
874 LinkBranch(jettree, &fNEF, Form(
"NEF%s", tag),
"D");
875 LinkBranch(jettree, &fPt, Form(
"PtJet%s", tag),
"D");
876 LinkBranch(jettree, &fNCharged, Form(
"NCharged%s", tag),
"I");
877 LinkBranch(jettree, &fNNeutral, Form(
"NNeutral%s", tag),
"I");
881 LinkBranch(jettree, &fJetRadius,
"Radius",
"D");
882 LinkBranch(jettree, &fEventWeight,
"EventWeight",
"D");
883 LinkBranch(jettree, &fTriggerClusterIndex,
"TriggerClusterIndex",
"I");
885 std::string varnames[] = {
"RhoPtRec",
"RhoPtSim",
"RhoMassRec",
"RhoMassSim"};
886 for(
int i = 0; i < 4; i++){
887 LinkBranch(jettree, fRhoParamters + i, varnames[i].data(),
"D");
892 void LinkBranch(
TTree *jettree,
void *data,
const char *branchname,
const char *type) {
893 jettree->Branch(branchname, data, Form(
"%s/%s", branchname, type));
TTree * fJetSubstructureTree
! Tree with jet substructure information
void LinkJetTreeBranches(TTree *jettree, bool fillRho)
void LinkJetTreeBranches(TTree *jettree, const char *tag)
Bool_t fFillStructGlob
Fill other substructure variables.
Bool_t fFillSoftDrop
Fill soft drop parameters.
Double_t fBeta
Cut on Beta.
Bool_t fFillPart
Fill particle level information.
void LinkJetTreeBranches(TTree *jettree, const char *tag)
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
void LinkJetTreeBranches(TTree *jettree, const char *tag)
AliNSubjettinessParameters * fNSubTrue
! Data field for true n-subjettiness parameters in jet tree
virtual void UserCreateOutputObjects()
Int_t fNCharged
Number of charged constituents.
AliNSubjettinessDefinition fSubjettinessSettings
TH1 * fLumiMonitor
! Luminosity monitor
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
Double_t fEventWeight
event weight (downscale factor)
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
Int_t ClusterAt(Int_t idx) const
TString fTriggerSelectionString
Trigger selection string.
Tree with jet substructure information.
static AliEmcalDownscaleFactorsOCDB * Instance()
Double_t fJetRadius
jet radius
Bool_t fFillNSub
Fill N-subjettiness.
AliSoftDropParameters * fSoftDropMeasured
! Data field for measured soft drop parameters in jet tree
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.
Int_t fTriggerClusterIndex
Index of the trigger cluster (0 - CENT, 1 - CENTNOTRD)
Structure for results from the soft drop algorithm.
Double_t GetDownscaleFactorForTriggerClass(const TString &trigger) const
virtual void UserExecOnce()
Task initializations handled in user tasks.
const PWG::JETFW::AliEmcalParticleJetConstituent * GetLeadingParticleConstituent() const
Get the leading particle constituent.
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)
AliNSubjettinessParameters * fNSubMeasured
! Data field for measured n-subjettiness parameters in jet tree
static std::vector< PWG::EMCAL::Triggerinfo > DecodeTriggerString(const std::string &triggerstring)
Decoding trigger string.
AliClusterContainer * AddClusterContainer(const char *n)
Create new cluster container and attach it to the task.
fastjet::JetAlgorithm fRecluserAlgo
Reclusterization algorithm.
Container for particles within the EMCAL framework.
Int_t GetDefaultClusterEnergy() const
Int_t TrackAt(Int_t idx) const
void LinkJetTreeBranches(TTree *jettree, const char *tag)
UShort_t GetNumberOfTracks() const
AliJetKineParameters MakeJetKineParameters(const AliEmcalJet &jet) const
Double_t fNEF
Jet Neutral Energy Fraction.
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
Jet kinematic parameters.
TPC fiducial acceptance (each eta edge narrowed by jet R)
void SetRun(int runnumber)
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 fFillRho
Fill rho parameters.
static AliAnalysisTaskEmcalJetSubstructureTree * AddEmcalJetSubstructureTreeMaker(Bool_t isMC, Bool_t isData, Double_t jetradius, AliJetContainer::EJetType_t jettype, AliJetContainer::ERecoScheme_t recombinationScheme, Bool_t useDCAL, const char *name)
void LinkBranch(TTree *jettree, void *data, const char *branchname, const char *type)
Helper function linking struct members to branches in the jet substructure tree.
AliJetStructureParameters * fJetStructureTrue
! True jet substructure paramteres
AliNSubjettinessParameters MakeNsubjettinessParameters(const fastjet::PseudoJet &jet, const AliNSubjettinessDefinition &cut) const
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
Definition for the algorithm obtaining the softdrop parameters.
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
virtual const char * what() const
virtual ~AliAnalysisTaskEmcalJetSubstructureTree()
Bool_t fUseChargedConstituents
Use charged constituents.
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.
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
Double_t MakeAngularity(const AliEmcalJet &jet, const AliParticleContainer *tracks, const AliClusterContainer *clusters) const
std::string MatchTrigger(const std::string &triggerclass) const
Container for trigger decision object.
AliJetStructureParameters * fJetStructureMeasured
! Measured jet substructure parameters
THistManager * fQAHistos
! QA histos
bool IsSelectEmcalTriggers(const std::string &triggerstring) const
Double_t fSDZCut
Soft drop z-cut.
void SetTriggerBits(UInt_t triggersel)
Double_t fRhoParamters[4]
Rho parameters.
Double_t fSDBetaCut
Soft drop beta cut.
AliJetKineParameters * fKineRec
! Detector level jet kinematics
const PWG::JETFW::AliEmcalClusterJetConstituent * GetLeadingClusterConstituent() const
Get the leading cluster constituent.
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.
AliEmcalList * fOutput
!output list
AliJetKineParameters * fKineSim
! Particle level jet kinematics
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.
Represent a jet reconstructed using the EMCal jet framework.
Container class for histograms.
Global jet substructure paramters.
AliSoftDropParameters MakeSoftDropParameters(const fastjet::PseudoJet &jet, const AliSoftdropDefinition &cut) const
AliJetTreeGlobalParameters * fGlobalTreeParams
! Global jet tree parameters (same for all jets in event)
void UserCreateOutputObjects()
Main initialization function on the worker.
AliAnalysisTaskEmcalJetSubstructureTree()
DCal fiducial acceptance (each eta, phi edge narrowed by jet R)
const AliJetIterableContainer accepted() const
void SetDefaultClusterEnergy(Int_t d)
TString fNameTriggerDecisionContainer
Global trigger decision container.
Int_t fNNeutral
Number of neutral constituents.
bool SelectJet(const AliEmcalJet &jet, const AliParticleContainer *particles) const
AliSoftDropParameters * fSoftDropTrue
! Data field for true soft drop parameters in jet tree
Container structure for EMCAL clusters.
Container for MC-true particles within the EMCAL framework.
EMCal fiducial acceptance (each eta, phi edge narrowed by jet R)
Container for jet within the EMCAL jet framework.
AliNSubjettinessParameters fNsubjettiness
Bool_t fUseNeutralConstituents
Use neutral constituents.
Bool_t fUseTriggerSelectionForData
Use trigger selection on data (require trigger patch in addition to trigger selection string) ...
TList * OpenFile(const char *fname)
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.