HLT seeding is carried out by the HLTSeeding.cxx
algorithm, this is a multi-step process with inputs supplied in the form of L1 Trigger Objects (TOBs
), L1 thresholds, L1 trigger decisions from the CTP, and HLT prescales.
The seeding process outputs multiple TrigRoiDescriptor
collections of HLT ROIs which are created centred on their L1 TOB
counterparts with extents in (η, φ, z) which are customisable per signature, and multiple DecisionContainer
collections of DecisionObjects
each of which is tracking the HLT chains which are active on a specific TOB
. These DecisionContainer
collections form the initial seeding layer of the HLT navigation graph from which HLT step-wise processing may commence.
More details on each stage of the seeding process are provided below.
In Run 3 the L1 trigger decision from the CTP is decoded from the output of the Region of Interest Builder (RoIB
). This is, however, a legacy structure and as of 2025 the RoIB
is no longer used to communicate any TOBs
from L1Calo or L1Muon to the HLT, its sole remaining purpose is to communicate the CTP bits. By Run 4 it is expected that a new xAOD
CTP collection created directly from the CTP ROB
will be used to provide the CTP bits for L1 decoding.
A CTPUnpacking
tool is used to generate a set of seeded HLT chains based on each chain’s L1 seeding item(s). For chains aliased to multiple items, a logical or is taken over the items. Chains with no L1 item (aliased as L1All
) are considered to always be seeded.
By default the HLT seeding is based on the final Trigger After Veto (TAV
) decision from the CTP. But it may optionally via flags be based instead on the Trigger Before (L1) Prescale (TBP
) decision, or the L1 seeding may optionally be skipped entirely with every HLT chain then considered to always be seeded.
The set of L1 seeded chains is next split into a set of active chains (which will run) and a set of prescaled chains (which will not run) by a PrescalingTool
.
HLT prescales are supplied as conditions data to the prescaling tool which generates Boolean prescale decisions based on each activated chain’s floating point HLT prescale value using a pseudo-random number generator which is seeded by the event’s timestamp.
Chains which share a common L1 seed and which are in a common HLT group with each other which contains the string "CPS"
(Coherent Prescale) are prescaled separately, per CPS
group. The lowest prescale over all chains in each CPS
group is factored out and applied coherently to the whole group. This lets a number of prescaled performance-oriented chains all activate in unison which each other. This mechanism is implemented for CPU efficiency, it allows the set of chains in the CPS
group to make common use of shared reconstruction to (e.g.) lower pT thresholds in select events.
A permanent record is kept of chains which were not executed due to having failed their HLT prescale check. This isPrescaled
bit can be accessed later from the Trigger Decision Tool.
TOBs
from L1 are processed via xAODRoIUnpacker
tool instances with the majority of the logic in the base class and with templated abstraction over the different C++ types of the different incoming TOB
collections from the L1Calo and L1Muon systems.
As illustrated below, additional ThresholdTools
are required to have run upstream when the TOB
collections were initially decoded into xAOD
format. Each threshold tool decorates each TOB
with a uint64_t
decoration called "thresholdPatterns"
. This large integer is a bit-map which flags the thresholds defined by the L1 menu that are passed by each TOB
. An example threshold could be eEM26M
, this threshold is defined for TOBs
from the eFEX
system and combines pT and object-identification requirements. The raw decoded TOBs
do not otherwise explicitly list which thresholds they passed in the L1 hardware, hence this information must be recomputed here in software using this standardised format for subsequent use in the HLT seeding.
Each instance of the xAODRoIUnpacker
creates its initial DecisionContainer
HLT navigation collection and populates it with one DecisionObject
per TOB
. This DecisionObject
is linked to the TOB
as "InitialRecRoI"
and linked to a newly created HLT RoI descriptor as "InitialRoI"
.
HLT chains which passed the above L1 seeding and HLT prescale checks are activated on each newly created DecisionObject
based the chain’s l1SeedThresholds
as defined in the HLT menu. This is cross-referenced against the corresponding bit-index in the "thresholdPatterns"
bit-map for each TOB
.
For multi-leg HLT chains, the seeding happens on a per-leg basis, with leg-specific DecisionIDs
being inserted instead of the chain’s DecisionID
.
For example, the primary (so, without HLT prescale) chain HLT_g25_medium_L1eEM18L_mu24_L1MU14FCH
is defined with l1SeedThresholds=['eEM18L','MU14FCH']
. Hence in L1_MU14FCH
seeded events, the per-leg DecisionID
: leg000_HLT_g25_medium_L1eEM18L_mu24_L1MU14FCH
is activated on all DecisionObjects
corresponding to eFEX
TOBs
which satisfy the eEM18L
threshold. And similarly leg001_HLT_g25_medium_L1eEM18L_mu24_L1MU14FCH
is activated on all Muon
TOBs
which satisfy the MU14FCH
threshold.
For use by probe-legs, a parallel probe DecisionContainer
is created with a parallel set of TOBs
. A chain’s l1SeedThresholds
array may specify a "PROBE"
prefix before an entry, this should mirror a "_probe_"
identifier in the corresponding HLT leg. This separation at the HLT seeding stage is required to properly isolate the TOBs
which should only be processed/reconstructed by the later probe stages of the HLT processing (typically dependent on some other tag leg having passed).
A separate tool instance is used for all “full-scan” chains or chain-legs; this includes all MET, jet and b-jet legs, in addition to all noalg
chains, and all other calibration or special-case HLT chains which do not seed from any specific type of L1 ROI
. This tool works similarly to the ROI
case above; it outputs a single DecisionObject
which is linked to a HLT TrigRoiDescriptor
which is flagged as being full-scan. All chains or chain-legs seeding from the FSNOSEED
threshold are activated on this DecisionObject
, with no additional threshold checks being performed (as there are none in this case).
Following from the ROI unpacking, all L1 activated chains which pass the HLT prescale check are now flagged as active either for the whole chain or for each individual leg of a multi-leg chain in each DecisionObject
which corresponds to a TOB
from L1 which satisfies the chain’s or chain-leg’s L1 Seed Threshold requirement.
HLT seeding is now complete, the output DecisionContainers
of DecisionObjects
are consumed by the Filter algorithms in the first step of the HLT processing.