ATLAS Offline Software
Functions
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.

51 def jetGSCManagerToolCfg(flags,
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.

36 def jetHLTCNTManagerToolCfg(flags,
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.

9 def jetManagerToolCfg(flags,
10  name: str,
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.

44 def jetSplitManagerToolCfg(flags,
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.

59 def TrigBtagEmulationToolCfg(flags,
60  toBeEmulatedTriggers: list,
61  InputChain_EMTopo: str = '',
62  InputJetContainer_EMTopo: str = '',
63  InputJetContainer_EMTopoPresel: str = '',
64  InputJetContainer_PFlow: str = '',
65  InputJetContainer_PFlowPresel: str = '',
66  InputJetContainer_a4tcemsubjesJet: str = '',
67  InputJetContainer_SplitJet: str = '',
68  InputJetContainer_GSCJet: str = '',
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.

238 def TrigBtagValidationTestCfg(flags,
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
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
DictFromChainName.dictFromChainName
def dictFromChainName(flags, chainInfo)
Definition: DictFromChainName.py:652
TrigBtagEmulationToolConfig.jetHLTCNTManagerToolCfg
ComponentAccumulator jetHLTCNTManagerToolCfg(flags, **kwargs)
Definition: TrigBtagEmulationToolConfig.py:36
TrigBtagEmulationToolConfig.TrigBtagEmulationToolCfg
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)
Definition: TrigBtagEmulationToolConfig.py:59
TrigBtagEmulationToolConfig.jetEMTopoPRESELManagerToolCfg
ComponentAccumulator jetEMTopoPRESELManagerToolCfg(flags, **kwargs)
Definition: TrigBtagEmulationToolConfig.py:28
TrigBtagEmulationToolConfig.jetSplitManagerToolCfg
ComponentAccumulator jetSplitManagerToolCfg(flags, **kwargs)
Definition: TrigBtagEmulationToolConfig.py:44
python.TriggerInterface.TrigDecisionToolCfg
def TrigDecisionToolCfg(flags)
Definition: TriggerInterface.py:14
TrigBtagEmulationToolConfig.jetPFlowCNTManagerToolCfg
ComponentAccumulator jetPFlowCNTManagerToolCfg(flags, **kwargs)
Definition: TrigBtagEmulationToolConfig.py:20
TrigBtagEmulationToolConfig.jetGSCManagerToolCfg
ComponentAccumulator jetGSCManagerToolCfg(flags, **kwargs)
Definition: TrigBtagEmulationToolConfig.py:51
str
Definition: BTagTrackIpAccessor.cxx:11
TrigBtagEmulationToolConfig.TrigBtagValidationTestCfg
ComponentAccumulator TrigBtagValidationTestCfg(flags, **kwargs)
Definition: TrigBtagEmulationToolConfig.py:238
TrigBtagEmulationToolConfig.jetManagerToolCfg
ComponentAccumulator jetManagerToolCfg(flags, str name, **kwargs)
Definition: TrigBtagEmulationToolConfig.py:9
python.Utils.getMCCampaign
def getMCCampaign(files)
Definition: Tools/Campaigns/python/Utils.py:38