ATLAS Offline Software
Loading...
Searching...
No Matches
TrigBtagEmulationToolConfig Namespace Reference

Functions

ComponentAccumulator jetManagerToolCfg (flags, str name, **kwargs)
ComponentAccumulator jetPFlowCNTManagerToolCfg (flags, **kwargs)
ComponentAccumulator jetEMTopoPRESELManagerToolCfg (flags, **kwargs)
ComponentAccumulator jetHLTCNTManagerToolCfg (flags, **kwargs)
ComponentAccumulator jetSplitManagerToolCfg (flags, **kwargs)
ComponentAccumulator jetGSCManagerToolCfg (flags, **kwargs)
ComponentAccumulator TrigBtagEmulationToolCfg (flags, list toBeEmulatedTriggers, str InputChain_EMTopo='', str InputJetContainer_EMTopo='', str InputJetContainer_EMTopoPresel='', str InputJetContainer_PFlow='', str InputJetContainer_PFlowPresel='', str InputJetContainer_a4tcemsubjesJet='', str InputJetContainer_SplitJet='', str InputJetContainer_GSCJet='', **kwargs)
ComponentAccumulator TrigBtagValidationTestCfg (flags, **kwargs)

Function Documentation

◆ jetEMTopoPRESELManagerToolCfg()

ComponentAccumulator TrigBtagEmulationToolConfig.jetEMTopoPRESELManagerToolCfg ( flags,
** kwargs )

Definition at line 28 of file TrigBtagEmulationToolConfig.py.

29 **kwargs) -> ComponentAccumulator:
30 kwargs.setdefault('JetContainerName', 'HLT_AntiKt4EMTopoJets_subjesIS')
31 return jetManagerToolCfg(flags,
32 name = "JM_EMTopo_PRESEL",
33 **kwargs)
34
35# Run2 HLT jet collection

◆ jetGSCManagerToolCfg()

ComponentAccumulator TrigBtagEmulationToolConfig.jetGSCManagerToolCfg ( flags,
** kwargs )

Definition at line 51 of file TrigBtagEmulationToolConfig.py.

52 **kwargs) -> ComponentAccumulator:
53 kwargs.setdefault('JetContainerName', 'HLT_xAOD__JetContainer_GSCJet')
54 return jetManagerToolCfg(flags,
55 name = "JM_GSC_CNT",
56 **kwargs)
57
58# Emulation Tool

◆ jetHLTCNTManagerToolCfg()

ComponentAccumulator TrigBtagEmulationToolConfig.jetHLTCNTManagerToolCfg ( flags,
** kwargs )

Definition at line 36 of file TrigBtagEmulationToolConfig.py.

37 **kwargs) -> ComponentAccumulator:
38 kwargs.setdefault('JetContainerName', 'HLT_xAOD__JetContainer_a4tcemsubjesJet')
39 return jetManagerToolCfg(flags,
40 name = "JM_a4tcemsubjes_CNT",
41 **kwargs)
42
43# Run2 jet collection with additional calibration

◆ jetManagerToolCfg()

ComponentAccumulator TrigBtagEmulationToolConfig.jetManagerToolCfg ( flags,
str name,
** kwargs )

Definition at line 9 of file TrigBtagEmulationToolConfig.py.

11 **kwargs) -> ComponentAccumulator:
12 assert isinstance(name, str), "JetManagerTool name must be a string"
13 acc = ComponentAccumulator()
14 kwargs.setdefault('BTaggingLink', 'btaggingLink')
15 kwargs.setdefault('LHCPeriod', 3 if flags.GeoModel.Run is LHCPeriod.Run3 else 2)
16 acc.setPrivateTools(CompFactory.Trig.JetManagerTool(name, **kwargs))
17 return acc
18
19# CNT

◆ jetPFlowCNTManagerToolCfg()

ComponentAccumulator TrigBtagEmulationToolConfig.jetPFlowCNTManagerToolCfg ( flags,
** kwargs )

Definition at line 20 of file TrigBtagEmulationToolConfig.py.

21 **kwargs) -> ComponentAccumulator:
22 kwargs.setdefault('JetContainerName', 'HLT_AntiKt4EMPFlowJets_subjesIS')
23 return jetManagerToolCfg(flags,
24 name = "JM_PFlow_CNT",
25 **kwargs)
26
27# PRESEL

◆ jetSplitManagerToolCfg()

ComponentAccumulator TrigBtagEmulationToolConfig.jetSplitManagerToolCfg ( flags,
** kwargs )

Definition at line 44 of file TrigBtagEmulationToolConfig.py.

45 **kwargs) -> ComponentAccumulator:
46 kwargs.setdefault('JetContainerName', 'HLT_xAOD__JetContainer_SplitJet')
47 return jetManagerToolCfg(flags,
48 name = "JM_Split_CNT",
49 **kwargs)
50

◆ TrigBtagEmulationToolCfg()

ComponentAccumulator TrigBtagEmulationToolConfig.TrigBtagEmulationToolCfg ( flags,
list toBeEmulatedTriggers,
str InputChain_EMTopo = '',
str InputJetContainer_EMTopo = '',
str InputJetContainer_EMTopoPresel = '',
str InputJetContainer_PFlow = '',
str InputJetContainer_PFlowPresel = '',
str InputJetContainer_a4tcemsubjesJet = '',
str InputJetContainer_SplitJet = '',
str InputJetContainer_GSCJet = '',
** kwargs )

Definition at line 59 of file TrigBtagEmulationToolConfig.py.

69 **kwargs) -> ComponentAccumulator:
70 assert isinstance(toBeEmulatedTriggers, list)
71 assert isinstance(InputChain_EMTopo, str)
72 assert isinstance(InputJetContainer_EMTopo, str)
73 assert isinstance(InputJetContainer_EMTopoPresel, str)
74 assert isinstance(InputJetContainer_PFlow, str)
75 assert isinstance(InputJetContainer_PFlowPresel, str)
76 assert isinstance(InputJetContainer_a4tcemsubjesJet, str)
77 assert isinstance(InputJetContainer_SplitJet, str)
78 assert isinstance(InputJetContainer_GSCJet, str)
79
80 from AthenaCommon.Logging import logging
81 log = logging.getLogger('TrigBtagEmulationToolCfg')
82
83 period = -1
84 if flags.GeoModel.Run is LHCPeriod.Run2:
85 period = 2
86 from Campaigns.Utils import Campaign, getMCCampaign
87 campaign = getMCCampaign(flags.Input.Files)
88 if len(InputJetContainer_a4tcemsubjesJet) == 0:
89 InputJetContainer_a4tcemsubjesJet = 'HLT_xAOD__JetContainer_a4tcemsubjesFS' if campaign == Campaign.MC20a or flags.Input.DataYear == 2016 else 'HLT_xAOD__JetContainer_a4tcemsubjesISFS'
90 if len(InputJetContainer_SplitJet) == 0:
91 InputJetContainer_SplitJet = 'HLT_xAOD__JetContainer_SplitJet'
92 if len(InputJetContainer_GSCJet) == 0:
93 if campaign != Campaign.MC20a and flags.Input.DataYear != 2016:
94 InputJetContainer_GSCJet = 'HLT_xAOD__JetContainer_GSCJet'
95 # check if btagging link exists for DAOD input
96 if "StreamAOD" not in flags.Input.ProcessingTags:
97 import PyUtils.PoolFile as PF
98 PF.PoolOpts.FAST_MODE = True
99 for fname in flags.Input.Files:
100 pool_file = PF.PoolFile(fname, verbose=False)
101 btag_link_exists = any("BTagBtagToJetAssociator" in d.name for d in pool_file.data)
102 if not btag_link_exists:
103 log.error(f"BTagBtagToJetAssociator not found in input file {fname}. Emulation of b-jet chains will be incorrect.")
104 elif flags.GeoModel.Run is LHCPeriod.Run3:
105 period = 3
106 if len(InputChain_EMTopo) == 0:
107 InputChain_EMTopo = 'HLT_j45_subjesgsc_ftf_L1J15'
108 if len(InputJetContainer_EMTopo) == 0:
109 InputJetContainer_EMTopo = 'HLT_AntiKt4EMTopoJets_subjesIS'
110 if len(InputJetContainer_EMTopoPresel) == 0:
111 InputJetContainer_EMTopoPresel = 'HLT_AntiKt4EMTopoJets_subjesIS'
112 if len(InputJetContainer_PFlow) == 0:
113 InputJetContainer_PFlow = 'HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf'
114 if len(InputJetContainer_PFlowPresel) == 0:
115 InputJetContainer_PFlowPresel = 'HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf'
116 else:
117 raise ValueError(f"Unsupported LHC Period {flags.GeoModel.Run}.")
118
119
120 chainDefinitions = {}
121 for chain in toBeEmulatedTriggers:
122 if period == 3:
123 from TriggerMenuMT.HLT.Config.Utility.DictFromChainName import dictFromChainName
124 from TriggerMenuMT.HLT.Config.Utility.ChainDefInMenu import ChainProp
125 chainDict = dictFromChainName(flags, chain)
126 chainParts = ['L1item:' + chainDict['L1item']]
127 for chainPart in chainDict['chainParts']:
128 # Gaudi::Property has limited support for nested structures, put everything in a long string and parse in C++
129 # and update TrigBtagEmulationChain::parseChainDefinition(...) accordingly
130 partDefinition = ''
131 partDefinition += 'L1threshold:' + chainPart['L1threshold']
132 partDefinition += '|name:' + chainPart['chainPartName']
133 partDefinition += '|multiplicity:' + chainPart['multiplicity']
134 partDefinition += '|threshold:' + chainPart['threshold']
135 partDefinition += '|etaRange:' + chainPart['etaRange']
136 partDefinition += '|jvt:' + (chainPart['jvt'] if chainPart['jvt'] else '-99999')
137 partDefinition += '|tagger:' + chainPart['bTag']
138 partDefinition += '|jetpresel:' + chainPart['trkpresel']
139 partDefinition += '|dijetmass:' + (chainPart['hypoScenario'][len('DJMASS'):] if ('DJMASS' in chainPart['hypoScenario']) else 'None')
140 partDefinition += '|isPFlow:' + ('True' if (chainPart['constitType'] == 'pf') else 'False')
141 partDefinition += '|isShared:' + ('True' if ('SHARED' in chainPart['chainPartName']) else 'False')
142 partDefinition += '|GSCthreshold:-99999'
143 chainParts.append(partDefinition)
144 chainName = chain.name if isinstance(chain, ChainProp) else chain
145 chainDefinitions[chainName] = chainParts
146 elif period == 2:
147 from ROOT.ChainNameParser import HLTChainInfo
148 chainInfo = HLTChainInfo(chain)
149 chainParts = ['L1item:' + chainInfo.l1Item()]
150 for legInfo in chainInfo:
151 eta = '0eta320'
152 tagger = ''
153 gscthreshold = '-99999'
154 for part in legInfo.legParts:
155 if part.startswith('b'):
156 tagger = part
157 elif 'eta' in part:
158 eta = part
159 elif part.startswith('gsc'):
160 gscthreshold = str(part)[3:]
161 partDefinition = ''
162 partDefinition += 'L1threshold:' + chainInfo.l1Item()
163 partDefinition += '|name:' + legInfo.legName()
164 partDefinition += '|multiplicity:' + str(legInfo.multiplicity)
165 partDefinition += '|threshold:' + str(legInfo.threshold)
166 partDefinition += '|etaRange:' + eta
167 partDefinition += '|jvt:-99999'
168 partDefinition += '|tagger:' + tagger
169 partDefinition += '|jetpresel:nopresel'
170 partDefinition += '|dijetmass:None' # TODO: add invm chain support
171 partDefinition += '|isPFlow:False'
172 partDefinition += '|isShared:False'
173 partDefinition += '|GSCthreshold:' + gscthreshold
174 chainParts.append(partDefinition)
175 chainDefinitions[chain] = chainParts
176
177
178
179 # Component Accumulator
180 acc = ComponentAccumulator()
181
182
183 tdt = acc.getPrimaryAndMerge(TrigDecisionToolCfg(flags))
184
185
186 kwargs.setdefault('EmulatedChainDefinitions', chainDefinitions)
187 kwargs.setdefault('TrigDecisionTool', tdt)
188 kwargs.setdefault('LHCPeriod', period)
189
190 if period == 3:
191 kwargs.setdefault('JM_PFlow_CNT' , acc.popToolsAndMerge(jetPFlowCNTManagerToolCfg(flags,
192 JetContainerName=InputJetContainer_PFlow)))
193
194 kwargs.setdefault('JM_EMTopo_PRESEL', acc.popToolsAndMerge(jetEMTopoPRESELManagerToolCfg(flags,
195 JetContainerName=InputJetContainer_EMTopoPresel)))
196 from TrigBjetHypo.TrigBjetBtagHypoTool import bTaggingWP
197 from TrigBjetHypo.TrigBjetBtagHypoTool import bbTaggingWP
198
199 working_points = { "newTagger" : 1.234 }
200 working_points.update(bTaggingWP)
201 working_points.update(bbTaggingWP)
202 kwargs.setdefault('FTD_Remapping',
203 {"DL1d20210519r22_pu" : "DL1dEMUL_pu",
204 "DL1d20210519r22_pc" : "DL1dEMUL_pc",
205 "DL1d20210519r22_pb" : "DL1dEMUL_pb"})
206
207 elif period == 2:
208 kwargs.setdefault('JM_a4tcemsubjes_CNT' , acc.popToolsAndMerge(jetHLTCNTManagerToolCfg(flags,
209 JetContainerName=InputJetContainer_a4tcemsubjesJet)))
210
211 kwargs.setdefault('JM_Split_CNT' , acc.popToolsAndMerge(jetSplitManagerToolCfg(flags,
212 JetContainerName=InputJetContainer_SplitJet)))
213
214 kwargs.setdefault('JM_GSC_CNT' , acc.popToolsAndMerge(jetGSCManagerToolCfg(flags,
215 JetContainerName=InputJetContainer_GSCJet)))
216 # Run2 taggers from https://twiki.cern.ch/twiki/bin/view/Atlas/OnlineBTaggingBenchmarks
217 working_points = {
218 "mv2c2040": 0.75,
219 "mv2c2050": 0.50,
220 "mv2c2060": -0.0224729,
221 "mv2c2070": -0.509032,
222 "mv2c2077": -0.764668,
223 "mv2c2085": -0.938441,
224 }
225 working_points.update({
226 "mv2c1040": 0.978,
227 "mv2c1050": 0.948,
228 "mv2c1060": 0.846,
229 "mv2c1070": 0.580,
230 "mv2c1077": 0.162,
231 "mv2c1085": -0.494
232 })
233
234 kwargs.setdefault('WorkingPoints', working_points)
235 acc.setPrivateTools(CompFactory.Trig.TrigBtagEmulationTool('TrigBtagEmulationTool', **kwargs))
236 return acc
237

◆ TrigBtagValidationTestCfg()

ComponentAccumulator TrigBtagEmulationToolConfig.TrigBtagValidationTestCfg ( flags,
** kwargs )

Definition at line 238 of file TrigBtagEmulationToolConfig.py.

239 **kwargs) -> ComponentAccumulator:
240 acc = ComponentAccumulator()
241 histSvc = CompFactory.THistSvc()
242 histSvc.Output += ["VALIDATION DATAFILE='validation.root' OPT='RECREATE'"]
243 acc.addService(histSvc)
244
245 options = {}
246 options['EmulatedChains'] = [chain if isinstance(chain, str) else chain.name for chain in kwargs['toBeEmulatedTriggers']]
247 options['TrigBtagEmulationTool'] = acc.popToolsAndMerge( TrigBtagEmulationToolCfg(flags,
248 **kwargs))
249
250 from TrigDecisionTool.TrigDecisionToolConfig import TrigDecisionToolCfg
251 tdt = acc.getPrimaryAndMerge(TrigDecisionToolCfg(flags))
252 options['TrigDecisionTool'] = tdt
253
254 acc.addEventAlgo( CompFactory.Trig.TrigBtagValidationTest('TrigBtagValidation', **options) )
255 return acc