Preselection step for tracking in jet chains (ATR-21839)
We want to have the option of applying a preselection to tracking algorithms running in HLT jet chains. This MR sets up a prototype preselection step with a j20 selection.
Instead of the previous organisation of all jet chains into a single step performing all reco and hypo operations, we envision having the following three chain structures (not including TLA, which could add an additional step on to the end of any of these):
- Calo-only jet full hypo -- single step
- Calo jet presel (step 1), followed by reconstruction with tracking into hypo (step 2)
- Topoclustering only with pass-through (step 1), followed by reconstruction with tracking into hypo (step 2)
As discussed with @tamartin, this demands some variations on the hypo alg configuration. The terminal hypoalg deciding the event (case 1 step 1, case 2/3 step 2) will create 1 DecisionObject per jet. The preselection and/or passthrough hypoalgs will create a single DecisionObject, which sets the first jet in the container as the feature (dummy), and also holds links labeled "preselJets" to all jets received by the hypoalg. This avoids making spurious links between the elements of two jet collections that do not have any unambiguous connections. This is controlled by a flag in the alg. The passthrough functionality needs more C++ work and is deferred for now.
To implement this, the changes break down as follows:
- Implemented preselection features in TrigJetHypoAlgMT (capability to create only one DecisionObject).
- Refactored helper functions in
JetRecoSequences.py
andJetMenuSequences.py
for creating jet sequences -- mainly to separate the topoclustering into a separate sequence and passing the cluster and track collections into the jet reconstruction sequences. - Expanded
JetChainConfiguration.py
to handle the various chain structures. - Removed
jetMenuHelper.py
as it no longer worked for this greater diversity of chain structures, and replaced this with a few internal functions infull_menu_cf.py
as it was used nowhere else. - For consistency, renamed
JetTLAConfiguration.py
toJetTLASequences.py
.
WIP: This runs the jet slice test successfully, but the full menu does not work, because MET chains that depend on the jet sequences need to be adapted to the new structure. Chiefly this requires:
- The MET code needs to adapt to some of the changed interfaces, including new return values and arguments
- MET chains relying on the tracking from jets (and jets with tracks/PFlow) need to adopt a 2-step structure as well, because we cannot schedule the same algs to run in different steps. @jburr, perhaps have a look starting with JetChainConfiguration and see if this sort of setup could easily be adapted to MET?
@jbossios FYI