Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TriggerLists.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2 from TriggerMenuMT.TriggerAPI.TriggerAPI import TriggerAPI
3 from TriggerMenuMT.TriggerAPI.TriggerEnums import TriggerPeriod, TriggerType
4 from DerivationFrameworkPhys.TriggerListsHelper import getTapisSession
5 from AthenaConfiguration.AutoConfigFlags import GetFileMD
6 from AthenaConfiguration.Enums import LHCPeriod
7 import re
8 from AthenaCommon.Logging import logging
9 log = logging.getLogger('DAODJetEtMissTriggerList')
10 
11 # jet triggers (single Jets, prescaled and unprescaled)
12 def jetTrig(flags):
13  period2015tofuture = TriggerPeriod.y2015 | TriggerPeriod.y2016 | TriggerPeriod.y2017 | TriggerPeriod.y2018 | TriggerPeriod.future
14  period2017tofuture = TriggerPeriod.y2017 | TriggerPeriod.y2018 | TriggerPeriod.future
15  TriggerAPI.setConfigFlags(flags)
16  API_jetTrig = TriggerAPI.getActive(period2015tofuture, TriggerType.j_single)
17  # Large-radius multijet triggers
18  API_jetTrig += TriggerAPI.getActive(period2017tofuture,TriggerType.j_multi,matchPattern=".*_a10t_.*")
19  # Eta-intercalibration triggers (one central, one forward jet)
20  API_jetTrig += TriggerAPI.getActive(period2015tofuture,TriggerType.j_multi,matchPattern="HLT_j.*_320eta490")
21  return API_jetTrig
22 
23 # electron triggers (unprescaled)
24 def single_el_Trig(flags):
25  if flags.Trigger.EDMVersion <= 2:
26  TriggerAPI.setConfigFlags(flags)
27  allperiods = TriggerPeriod.y2015 | TriggerPeriod.y2016 | TriggerPeriod.y2017 | TriggerPeriod.y2018 | TriggerPeriod.future2e34
28  trigger_names = TriggerAPI.getLowestUnprescaledAnyPeriod(allperiods, triggerType=TriggerType.el, livefraction=0.8)
29  else:
30  session = getTapisSession(flags)
31  lf = 0.8 # Prescale weighted life fraction of the GRL's LBs
32  trigger_names = set()
33  trigger_names = list(session.getLowestUnprescaled(triggerType=TriggerType.el, livefraction=lf).union(trigger_names))
34  return trigger_names
35 
36 def multi_el_Trig(flags):
37  TriggerAPI.setConfigFlags(flags)
38  API_multiElTriggers = TriggerAPI.getLowestUnprescaled(TriggerPeriod.y2015, TriggerType.el_multi) + TriggerAPI.getLowestUnprescaled(TriggerPeriod.y2016, TriggerType.el_multi) + TriggerAPI.getLowestUnprescaled(TriggerPeriod.y2017, TriggerType.el_multi) + TriggerAPI.getLowestUnprescaled(TriggerPeriod.y2018, TriggerType.el_multi) + TriggerAPI.getLowestUnprescaled(TriggerPeriod.future, TriggerType.el_multi)
39  return API_multiElTriggers
40 
41 # single muon triggers (unprescaled)
42 def single_mu_Trig(flags):
43  if flags.Trigger.EDMVersion <= 2:
44  TriggerAPI.setConfigFlags(flags)
45  allperiods = TriggerPeriod.y2015 | TriggerPeriod.y2016 | TriggerPeriod.y2017 | TriggerPeriod.y2018 | TriggerPeriod.future2e34
46  trigger_names = TriggerAPI.getLowestUnprescaledAnyPeriod(allperiods, triggerType=TriggerType.mu, livefraction=0.8)
47  else:
48  session = getTapisSession(flags)
49  lf = 0.8 # Prescale weighted life fraction of the GRL's LBs
50  trigger_names = set()
51  trigger_names = list(session.getLowestUnprescaled(triggerType=TriggerType.mu, livefraction=lf).union(trigger_names))
52  return trigger_names
53 
54 def multi_mu_Trig(flags):
55  TriggerAPI.setConfigFlags(flags)
56  API_multiMuTriggers = TriggerAPI.getLowestUnprescaled(TriggerPeriod.y2015, TriggerType.mu_multi) + TriggerAPI.getLowestUnprescaled(TriggerPeriod.y2016, TriggerType.mu_multi) + TriggerAPI.getLowestUnprescaled(TriggerPeriod.y2017, TriggerType.mu_multi) + TriggerAPI.getLowestUnprescaled(TriggerPeriod.y2018, TriggerType.mu_multi) + TriggerAPI.getLowestUnprescaled(TriggerPeriod.future, TriggerType.mu_multi)
57  return API_multiMuTriggers
58 
59 # xe triggers (unprescaled)
60 def MET_Trig(flags):
61  if flags.Trigger.EDMVersion <= 2:
62  TriggerAPI.setConfigFlags(flags)
63  allperiods = TriggerPeriod.y2015 | TriggerPeriod.y2016 | TriggerPeriod.y2017 | TriggerPeriod.y2018 | TriggerPeriod.future2e34
64  trigger_names = TriggerAPI.getLowestUnprescaledAnyPeriod(allperiods, triggerType=TriggerType.xe, livefraction=0.8)
65  else:
66  session = getTapisSession(flags)
67  lf = 0.8 # Prescale weighted life fraction of the GRL's LBs
68  trigger_names = set()
69  trigger_names = list(session.getLowestUnprescaled(triggerType=TriggerType.xe, livefraction=lf).union(trigger_names))
70  return trigger_names
71 
72 # photon triggers (prescaled and unprescaled)
73 def single_photon_Trig(flags):
74  if flags.Trigger.EDMVersion <= 2:
75  TriggerAPI.setConfigFlags(flags)
76  allperiods = TriggerPeriod.y2015 | TriggerPeriod.y2016 | TriggerPeriod.y2017 | TriggerPeriod.y2018 | TriggerPeriod.future2e34
77  trigger_names = TriggerAPI.getActive(allperiods, triggerType=TriggerType.g, livefraction=0.8)
78  else:
79  session = getTapisSession(flags)
80  lf = 0.8 # Prescale weighted life fraction of the GRL's LBs
81  trigger_names = set()
82  trigger_names = list(session.getLowestUnprescaled(triggerType=TriggerType.g, livefraction=lf).union(trigger_names))
83  return trigger_names
84 
85 # get jet triggers
86 # Run 2: returns list returned by trigAPI
87 # Run 3: TrigAPI doesn't return complete list. Adds additional jet triggers from file metadata
88 # and filters out unnecessary chains - ATLJETMET-1717.
89 # Use this function until trigAPI works for Run 3.
90 def get_jetTrig(flags):
91 
92  trigger_list = jetTrig(flags)
93 
94  if flags.GeoModel.Run < LHCPeriod.Run3:
95  return trigger_list
96 
97  pattern = re.compile(r"HLT_\d*j\d+")
98  vetoes = ['PhysicsTLA', 'calratio', 'emergingPTF', 'dispjet', 'trackless', 'hitdvjet', 'bgn1', 'bgn2', 'bdl1', 'boffperf', 'xe', 'afprec', 'LArPEBHLT', 'TAU', 'XE', 'L1jLJ']
99 
100  # retrieve trigger list from input file metadata
101  # and add to trigger_list from trigAPI
102  metadata = GetFileMD(flags.Input.Files)
103  menu = metadata['TriggerMenu']
104  if not menu:
105  log.error("TriggerMenu could not be retrieved from file metadata.")
106  else:
107  HLTChainskey = 'HLTChains'
108  if HLTChainskey not in menu:
109  log.error("HLTChains could not be retrieved from file metadata.")
110  else:
111  md_hltchains = menu[HLTChainskey]
112  log.info(f"{len(md_hltchains)} HLT chains retrieved from file metadata")
113  trigger_list += md_hltchains
114 
115  filtered_j_chains = []
116  for chain in set(trigger_list):
117  if not pattern.match(chain): continue
118  if any(v in chain for v in vetoes): continue
119  filtered_j_chains.append(chain)
120 
121  return filtered_j_chains
python.AutoConfigFlags.GetFileMD
def GetFileMD(filenames, allowEmpty=True, maxLevel='peeker')
Definition: AutoConfigFlags.py:65
python.TriggerLists.MET_Trig
def MET_Trig(flags)
Definition: TriggerLists.py:60
python.TriggerLists.single_photon_Trig
def single_photon_Trig(flags)
Definition: TriggerLists.py:73
python.TriggerLists.single_mu_Trig
def single_mu_Trig(flags)
Definition: TriggerLists.py:42
python.TriggerLists.multi_el_Trig
def multi_el_Trig(flags)
Definition: TriggerLists.py:36
python.TriggerLists.jetTrig
def jetTrig(flags)
Definition: TriggerLists.py:12
python.TriggerLists.single_el_Trig
def single_el_Trig(flags)
Definition: TriggerLists.py:24
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
python.TriggerLists.get_jetTrig
def get_jetTrig(flags)
Definition: TriggerLists.py:90
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
python.TriggerLists.multi_mu_Trig
def multi_mu_Trig(flags)
Definition: TriggerLists.py:54
python.TriggerListsHelper.getTapisSession
def getTapisSession(flags)
Definition: TriggerListsHelper.py:32