Porting by-vertex jet reconstruction and related derivation code from 21.2 to main
This merge request is a main port of the by-vertex reconstruction of pileup jets and a dedicated pileup jet derivation (JETM7) which was originally developed by @sschramm in Rel21.2. The branch was therefore started by cherry-picking relevant commits from 21.2 and building on top of that.
Many thanks to @delsart and @sschramm for their invaluable help in both the implementation and code review.
The physics validation of the by-vertex reconstruction in Rel.24 is underway and was presented at the 2023 Hadronic Calibration Workshop.
Below is a non-exhaustive list of changes in this merge request:
- Creating copies of neutral PFOs for each vertex in
JetConstituentModSequence, necessary for by-vertex jet reconstruction - Modify
PseudoJetGetterto facilitate the conversion of jet constituents into PseudoJets for by-vertex reco - Refactor
JetClustererand create a new algorithmJetClustererByVertexto cluster jets for each vertex interpretation - Add
OriginVertexattribute for by-vertex jets - Configure various jet-related tools with optional flags to allow using the
OriginVertexinstead of a fixed vertex. These includeGlobalSequentialCorrection,JetTrackSumMomentTools,JetVertexFractionTool,JetVertexTaggerTool,ChargedHadronSubtractionToolandCorrectPFOTool - Adding support for new AntiKt4EMPFlowByVertexJets container in .py files
- Adding a new derivation (JETM7) that schedules the by-vertex jets
- Misc: rewritten type-related (FlowElement vs PFO) but largely duplicated code using templates and constexpr-if
The MR should not affect the standard jet reconstruction, however only a few jet containers were explicitly checked during development to ensure no changes: AntiKt4EMPFlowJets and AntiKt4EMPFlowNoPtCutJets