ATLAS Offline Software
Loading...
Searching...
No Matches
TriggerLists.py
Go to the documentation of this file.
1# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2from TriggerMenuMT.TriggerAPI.TriggerAPI import TriggerAPI
3from TriggerMenuMT.TriggerAPI.TriggerEnums import TriggerPeriod, TriggerType
4from DerivationFrameworkPhys.TriggerListsHelper import getTapisSession
5from AthenaConfiguration.AutoConfigFlags import GetFileMD
6from AthenaConfiguration.Enums import LHCPeriod
7import re
8from AthenaCommon.Logging import logging
9log = logging.getLogger('DAODJetEtMissTriggerList')
10
11# jet triggers (single Jets, prescaled and unprescaled)
12def 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)
24def 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
36def 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)
42def 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
54def 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)
60def 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)
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.
90def 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
STL class.