The HLT Brief Intro

The Atlas trigger system has three levels L1,Level 1; L2, Level 2; and EF, the Event Filter. The HLT, High Level Trigger system, is the software based portion of the Atlas trigger system. It is composed of L2 and the EF. It completes the processing of events that activated the L1 trigger system. The trigger fires if an event passes the HLT.

In the HLT software chains are the objects that contain the criteria used by the trigger slices to determine if a trigger fires. The triggers fire based on whether chains are activated. Chains activate depending on the results of streams of algorithms (threads) that process each trigger ROI. This document covers briefly the processing that leads to the activation of trigger chains in the HLT.

Background Documentation


The Running of the HLT


After L1, the High Level Trigger system (HLT) pocesses the ROI's.

The HLT initially creates per ROI one TrigRoiDescriptor object; This object contains a unique identifier for the ROI(the RoiWord) and a 4 vector.

Next the HLT runs threads of Feature Extraction Algorithms which create trigger EDM objects(or features) for each ROI. The initial FEX algorithms draw data from the ROI seeded by L11; As the thread progresses the ROI expands drawing data from additional sections of the detector. The trigger EDM objects record the output of the trigger at each processing stage in the thread. The trigger objects are saved per event per ROI.

simpthread1a.jpg simpthread1b.jpg
Hypothesis(Hypo) algorithms are run on the trigger EDM objects. If the trigger objects fail the hypo algorithms the thread terminates.

A "branch" of the "trigger tree" corresponds to a stream of FEX algorithms and associated trigger objects. There may be multiple threads with different Hypo algorithms running through the same branch.

The stream of FEX algorithms in the branch will be run so long as at least one of the threads survives.

Branch is terminated( final FEX algorithms in branch not run) if all threads fail.

Different branches (and threads) of algorithms run in different types of ROI's. Which branches run is determined by the L1 threshold.

Examples of branches from full_no_prescale_14.2.25.1 Menu:
  • mubranch0.jpg
    • Beginning of one possible branch from a MU11 threshold run in an Muon ROI (Trigger EDM objects are not shown):
  • taubranch0.jpg
    • Beginning of one possible branch from a HA11I threshold run in a Tau ROI for L2 (Trigger EDM objects are not shown):


Before the run all trigger branches(and corresponding threads) are loaded from the trigger menu and read into configuration objects by the HLT config service. The trigger configuration and associated objects is saved once per run in the meta data of each data file(a.k.a. saved once per AOD, ESD, DPD file).

In the event for each ROI the trigger steering selects the branches corresponding to the L1 thresholds of that ROI; attaches these branches to the threshold; and runs the branches with their corresponding threads. The threads in the branches either run to completion or are terminated early by their Hypo algorithms.


Chains are activated if one or more sets of their required threads run to completion.

A chain may have the requirement that the same thread complete more than once in the event. Ex: the L2_2tau12 requires two completed tau threads in the event (a.k.a. there are two tau RoI's required for the chain). For chains with a requirement for multiple threads such as EF_tau20i_e15i (an electron/tau trigger chain) there is also the requirement that the threads (the electron thread and the tau thread) complete in different ROI's.

If a set of threads complete L2 the L2 chains are activated. If the set of threads completes through the event filter then the event filter and L2 chains activate.

Reading Trigger Results

The primary tool for reading the Trigger output is the Trigger Decision Tool TDT.

Additional information:

The following are brief basic examples of TDT functions for the release 15 version of the TDT.
In these examples, m_trigDec is the handle for the TrigDecisionTool.

Per Event

Returning Trigger Decision for a Chain


Returns true if chain "chainName" was passed by the event. "chainName" is a string of form "EF_foo" or "L2_bar".
Ex for "chainName": "L2_tau20i_medium", "L2_mu4_j10", "EF_tau20i_medium"

The code for the "isPassed" function of the TDT: TDT/DecisionAccess.h


Returning Trigger Objects Associated with a Chain

const Trig::FeatureContainer trigContainer m_trigDec->features(chainName, TrigDefs::Physics);
std::vector<Trig::Feature<trigType> > trigFeatures = trigContainer.get<trigType>("", TrigDefs::Physics);

Returns vector of all trigger EDM objects(features) of type "trigType" that could be associated with an active chain of label "chainName".

"trigType" is label of C++ trigger EDM object.
Ex for "trigType":

A feature object has an implicit converter to its corresponding trigger EDM object; therefore pointers to features of type "trigType" can be used in code as pointers to trigger EDM objects of type "trigType"*Exception

If more threads than the minimum set necessary to activate the chain passed the chain, features from all threads and therefor all ROI's that could have passed the chain are returned.

The code for the "features" function of the TDT:TDT/DecisionAccess.h
The code for the "get" function of Trig::FeatureContainer: TDT/FeatureContainer.h


For the purpose of accessing multiple chains a TDT ChainGroup is created. The configuration of the chain groups is preformed in the initialize functions of the algorithms before the loop over the event. Replacing the string object chainName with the configured ChainGroup object will return results for the group of chains instead of single chain.

const Trig::ChainGroup* m_chaingrp = m_trigDec->getChainGroup("chainNames");

Retrieves ChainGroup "m_chaingrp" for string "chainNames".
Ex of "chainNames"

  • "L1.*" - all L1 items("L1 chains")
  • "L2.*" - all L2 chains
  • "EF.*" - all EF chains * wildcard '*' functions in strings for "chainNames"
  • For more constructs of "chainNames" using wildcards: ChainGroup TWiki

Code for the "getChainGroup" function of the TDT: TDT/ChainGroupFunctions.h


  • Chains for the TDT have per event not per ROI scope.

  • L1 Items correspond for some functions of the TDT to L1 chains;
    •  const Trig::ChainGroup* m_L1chaingrp = m_trigDec->getChainGroup("L1.*")
      will return the a chain group with all L1 items.
    • However
      const Trig::FeatureContainer trigContainer m_trigDec->features(m_L1chaingrp, TrigDefs::Physics);
      std::vector<Trig::Feature<TrigRoiDescriptor> > trigFeatures = 
      trigContainer.get<TrigRoiDescriptor>("", TrigDefs::Physics);
      will not return features since true chains are only configured beginning at L2.
      const Trig::ChainGroup* m_L2chaingrp = m_trigDec->getChainGroup("L2.*")
      const Trig::FeatureContainer trigContainer = 
      m_trigDec->features(m_L2chaingrp, TrigDefs::Physics);
      std::vector<Trig::Feature<TrigRoiDescriptor> > trigFeatures = 
      trigContainer.get<TrigRoiDescriptor>("", TrigDefs::Physics);
      will return TrigRoiDescriptor objects.

  • Features actually map directly to Trigger Elements these are covered in HLTTriggerGlossaryEx. For advanced functions of the TDT knowledge of trigger elements is useful.

  • Multiple TDT features may map to the same trigger EDM object. Features returned from separate chains are (invariably) unique only if chains are inserted in a chaingroup prior to using the TDT methods.
    • Call
      const Trig::FeatureContainer trigContainerOfMedium = 
      m_trigDec->features("L2_tau20i_medium", TrigDefs::Physics);
      const Trig::FeatureContainer trigContainerOfTight = 
      m_trigDec->features("L2_tau20i_tight", TrigDefs::Physics);
      could return same trigger EDM object.
    • To verify uniqueness test pointers to trigger EDM objects using feature1<"trigType">->cptr() == feature2<"trigType">->cptr(); * Exception to rule that trigger EDM objects and TDT Feature objects are interchangeable - Verifying uniqueness using feature1<"trigType">==feature2<"trigType"> would not verify uniqueness of trigger EDM objects due to possibility of multiple features being associated with trigger EDM object.

Additional Information

The Trigger System

TriggerGlossary - basic version of trigger glossary (including HLT)
TriggerForDummies - Introduction to the trigger system - currently partially out of date
EventDataModel - Covers data output by the trigger
TriggeUserPages - Primary links for user documentation
AtlasTrigger - Primary page for trigger wiki links

L1 and Hardware

L1 Trigger Wiki
L1 Trigger Home Page
Technical Design Report

HLT Software

HLTGlossary - trigger glossary for the HLT - contains descriptions of HLT software objects
HLTExtendedGlossary - Extended version of the trigger glossary for the HLT - contains descriptions of HLT software objects
Sandbox version of the HLT Trigger Glossary with additional notes on software - NOT VERIFIED FOR ACCURACY

Accessing/Using Trigger Results

TriggerObjectMatching - match trigger objects to offline objects


Triggers from seedless ROI's - triggers that do not have a L1 ROI seed - exist. (a.k.a. MET)

-- PtacekE - 2009-09-11

Topic attachments
I Attachment History Action Size Date Who Comment
JPEGjpg mubranch0.jpg r2 r1 manage 74.6 K 2009-10-20 - 19:54 UnknownUser SingleBranchFromMuonThreshold
JPEGjpg multithread0.jpg r4 r3 r2 r1 manage 102.7 K 2009-10-21 - 12:07 UnknownUser SimpleBranchesForSingleThreshold
JPEGjpg multithread1complete.jpg r1 manage 86.8 K 2009-10-20 - 19:45 UnknownUser simple threads including hypos terminating all threads
JPEGjpg multithread1terminated.jpg r1 manage 85.4 K 2009-10-20 - 19:45 UnknownUser simple threads including hypos terminating 2 of 3
JPEGjpg simpthread0.jpg r3 r2 r1 manage 90.3 K 2009-10-21 - 12:06 UnknownUser Diagram of thread of Fex algoritms
JPEGjpg simpthread1a.jpg r3 r2 r1 manage 80.8 K 2009-10-21 - 12:07 UnknownUser SimpleThreadIncludingHypos
JPEGjpg simpthread1b.jpg r1 manage 35.6 K 2009-10-20 - 19:38 UnknownUser SimpleThreadIncludingTerminatedbyHypo
JPEGjpg taubranch0.jpg r2 r1 manage 70.2 K 2009-10-20 - 19:54 UnknownUser SingleBranchFromTauThreshold
Edit | Attach | Watch | Print version | History: r11 < r10 < r9 < r8 < r7 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r11 - 2009-10-21 - unknown
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    Sandbox All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
or Ideas, requests, problems regarding TWiki? use Discourse or Send feedback