ATLAS Offline Software
LVL1CaloMonitoringConfig.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 #
4 
6 
7  """
8  This class is designed to handle registering all of L1Calo's monitoring histograms and trees in a
9  coherent way. It will also generate the han config file for all the histograms.
10  """
11 
12 
13 
14  from collections import defaultdict
15  hanConfigs = {} # nested structure as required, keys will be either "dir XXX" or "hist YYY"
16  hanAlgConfigs = {}
17  hanThresholdConfigs = {}
18 
19  SIGNATURES = ["gJ","gLJ","gLJRho","gXEJWOJ","gTEJWOJ","gXENC","gTENC","gXERHO","gTERHO","jJ","jEM","jTAU","jXE","jTE","eTAU","eEM"]
20  HELPURL = "https://codimd.web.cern.ch/s/678H65Tk9"
21 
22  @staticmethod
23  def printHanConfig(filename="collisions_run.config"):
24  from contextlib import redirect_stdout
25  with open(filename,'w') as f:
26  with redirect_stdout(f):
27  # Note: common configs (see common dir in DataQualityConfiguration) provides following algorithms by default:
28  # algorithm All_Bins_Filled
29  # algorithm Histogram_Effective_Empty
30  # algorithm Histogram_Empty
31  # algorithm Histogram_Not_Empty
32  # algorithm No_OverFlows
33  # algorithm No_UnderFlows
34 
35  outputs = set()
36  def printConf(d,prefix=""):
37  for key,value in d.items():
38  if type(value)==dict:
39  print(prefix,key,"{")
40  if(key=="dir detail" or key=="dir Developer"):
41  print(prefix+" algorithm = GatherData") # define GatherData as default algo for all of these hists
42  printConf(value,prefix + " ")
43  print(prefix,"}")
44  else:
45  print(prefix,key,"=",value)
46  # save all output paths to add to output block
47  if key == "output": outputs.add(value)
48 
49  print("#inputs")
50  print("dir L1Calo {")
51  printConf(L1CaloMonitorCfgHelper.hanConfigs," ")
52  print("}")
53  print("#outputs")
54  print("output top_level {")
55  def printOutputs(d,prefix=""):
56  for key,value in d.items():
57  if(key.startswith("hist ")):
58  pass # do nothing
59  elif type(value)==dict:
60  print(prefix,key.replace("dir ","output "),"{")
61  printOutputs(value,prefix + " ")
62  print(prefix,"}")
63  print(" output L1Calo {")
64  printOutputs(L1CaloMonitorCfgHelper.hanConfigs," ")
65  print(" }")
66  print("}")
67  # include example of adding algorithms and thresholds
68  print("""
69 #algorithms
70 algorithm AnyNonZeroBinIsError {
71  # Use this algo if want error on any non-zero bin content
72  libname = libdqm_summaries.so
73  name = Bins_NotEqual_Threshold
74  BinThreshold = 0.
75  thresholds = th_AnyBinIsError
76 }
77 """)
78  for algName,algProps in L1CaloMonitorCfgHelper.hanAlgConfigs.items():
79  print(f"algorithm {algName} {{")
80  for propName,propVal in algProps.items():
81  print(f" {propName} = {propVal}")
82  print(" }")
83  print("""
84 #thresholds
85 thresholds th_AnyBinIsError {
86  limits NBins {
87  warning = 0
88  error = 1
89  }
90 }
91 """)
92  for threshName,threshProps in L1CaloMonitorCfgHelper.hanThresholdConfigs.items():
93  print(f"thresholds {threshName} {{")
94  for parName,parLims in threshProps.items():
95  print(f" limits {parName} {{")
96  for limName,limVal in parLims.items():
97  print(f" {limName} = {limVal}")
98  print(" }")
99  print("}")
100 
101 
102 
103  def __init__(self, flags, algClassOrObj = None, name = None, *args, **kwargs):
104  '''
105  Create the configuration helper.
106 
107  Arguments:
108  flags -- the configuration flag object
109  algClassOrObj -- the name you want to assign the family of algorithms
110  '''
111  from AthenaMonitoring import AthMonitorCfgHelper
112  self.helper = AthMonitorCfgHelper(flags,name)
113  self.alg = self.helper.addAlgorithm(algClassOrObj,name,*args, **kwargs) if algClassOrObj is not None else None
114  self.fillGroups = {}
115  self.dqEnv = flags.DQ.Environment # used to decide if should defineTree or not ...
116 
117  def defineDQAlgorithm(self,name,hanConfig,thresholdConfig=None):
118 
119  """
120 
121  :param name: name of algorithm
122  :param hanConfig: dict of algo properties
123  :param thresholdConfig: dict of thresholds, keys in form of ParName.level
124  :return:
125  """
126 
127  # note: this method will replace any existing alg definition
128 
129  thresNum = len(self.hanThresholdConfigs)
130  if thresholdConfig is not None:
131  hanConfig["thresholds"] = f"L1CaloThreshold{thresNum}"
132  threshDict = {}
133  for parName,limVals in thresholdConfig.items():
134  if len(limVals) != 2:
135  raise Exception("must specify two limits: warning and error")
136  if parName not in threshDict: threshDict[parName] = {}
137  threshDict[parName]["warning"] = limVals[0]
138  threshDict[parName]["error"] = limVals[1]
139  # see if any existing thresholds are identical, if so we can reuse
140  for threshName,thresh in self.hanThresholdConfigs.items():
141  if str(thresh)==str(threshDict):
142  threshDict = None
143  hanConfig["thresholds"] = threshName
144  break
145  if threshDict is not None: self.hanThresholdConfigs[hanConfig["thresholds"]] = threshDict
146  self.hanAlgConfigs[name] = hanConfig
147 
148  return
149 
150 
151  def defineHistogram(self,*args,fillGroup=None,hanConfig={},paths=[],**kwargs):
152  '''
153 
154  :param path:
155  :param fillGroup:
156  :param args:
157  :param kwargs:
158  :return:
159  '''
160 
161  if paths != []:
162  for path in paths:
163  # create a copy of the histogram in each of the extra locations
164  self.defineHistogram(*args,fillGroup=fillGroup,hanConfig=hanConfig,paths=[],path=path,**kwargs)
165  return None
166 
167  argsCopy = list(args) # need to convert tuple to list to convert it
168  if ";" not in args[0]:
169  argsCopy[0] += ";h_" + argsCopy[0].replace(":","_")
170 
171  if kwargs.get("path",None) is None:
172  # put in the Developer path, under the name of the algorithm
173  kwargs["path"] = "Developer/" + self.alg.name
174  elif kwargs["path"][-1] == '/':
175  kwargs["path"] = kwargs["path"][:-1] # strip trailing slash
176  # verify path obeys convention
177  splitPath = kwargs["path"].split("/")
178  if splitPath[0] not in ["Shifter","Expert","Developer"]:
179  raise Exception("Path of histogram invalid, does not start with one of the allowed audiences (Shifter,Expert,Developer)")
180 
181  # require a hanConfig not in Developer or a detail dir
182  if splitPath[0] != "Developer" and splitPath[-1] != "detail" and ("algorithm" not in hanConfig):
183  # will default to using GatherData as long as there is a description
184  if "description" not in hanConfig:
185  raise Exception("Must specify a hanConfig for a Shifter or Expert (non-detail) histogram")
186  else:
187  hanConfig["algorithm"] = "GatherData" # must have an algo, otherwise wont be valid han config
188 
189 
190  if fillGroup is None: fillGroup = self.alg.name + "_fillGroup"
191  if fillGroup not in self.fillGroups:
192  self.fillGroups[fillGroup] = self.helper.addGroup(self.alg,fillGroup,topPath="L1Calo")
193 
194  if "merge" not in kwargs and kwargs.get("type","") !="TEfficiency":
195  kwargs["merge"] = "merge" # ensures we don't get a warning about not specifying merge method
196  out = self.fillGroups[fillGroup].defineHistogram(*argsCopy,**kwargs)
197  histName = argsCopy[0].split(";")[-1]
198 
199  # add help link for all expert plots
200  if splitPath[0] == "Expert":
201  linkUrl = self.HELPURL + "#" + "".join(splitPath[1:]+[histName])
202  linkUrl = f"<a href=\"{linkUrl}\">Help</a>"
203  if "description" not in hanConfig: hanConfig["description"] = linkUrl
204  else: hanConfig["description"] += " - " + linkUrl
205 
206  splitPathWithHist = splitPath + [histName]
207  x = L1CaloMonitorCfgHelper.hanConfigs
208  for i,p in enumerate(splitPathWithHist):
209  key = ("dir " if i!=len(splitPathWithHist)-1 else "hist ") + p
210  if key not in x:
211  x[key] = {}
212  x = x[key]
213  hanConfig["output"] = "/".join(["L1Calo"]+splitPath)
214  x.update(hanConfig)
215 
216  return out
217 
218  def defineTree(self,*args,fillGroup=None,**kwargs):
219 
220  if ";" not in args[0]:
221  raise Exception("Must specify a tree name using ';name' suffix")
222  treeName = args[0].split(";")[-1]
223 
224  if "," in args[1]: # catch a subtle typo that can screw up monitoring
225  raise Exception("Should not have comma in list of branch names and types")
226 
227  if kwargs.get("path",None) is None:
228  # put in the Developer path, under the name of the algorithm
229  kwargs["path"] = "Developer/" + self.alg.name
230 
231  # verify path obeys convention
232  splitPath = kwargs["path"].split("/")
233  if splitPath[0] not in ["Developer"]:
234  raise Exception("Path of tree invalid, must be in the audience=Developer directory")
235 
236 
237  if fillGroup is None: fillGroup = self.alg.name + "_fillGroup"
238  if fillGroup not in self.fillGroups:
239  self.fillGroups[fillGroup] = self.helper.addGroup(self.alg,fillGroup,topPath="L1Calo")
240 
241  # always define a histogram to go with the tree, which will indicate how many entries there are
242  # this also ensures we satisfy the requirement that every fillGroup has an object defined
243  # (in the cases of running online/tier0 the defineTrees are blocked, but we still need a hist then)
244  histName = "h_" + treeName + "_entries"
245  argsCopy = list(args)
246  argsCopy[0] = argsCopy[0].replace(";"+treeName,";"+histName)
247  kwargsCopy = dict(kwargs)
248  kwargsCopy["title"] = f"Number of Entries in {treeName} TTree" + ";" + ";".join(kwargsCopy.get("title","").split(";")[1:])
249  kwargsCopy["opt"] = ['kCanRebin']
250  kwargsCopy["merge"] = "merge"
251  is2d = (kwargsCopy["title"].count(";")>1)
252  self.defineHistogram(argsCopy[0],type="TH2I" if is2d else "TH1I",xbins=1,xmin=0,xmax=1,ybins=1 if is2d else None,ymin=0,ymax=1,fillGroup=fillGroup,**kwargsCopy)
253  if not any([x in self.dqEnv for x in ['tier0','online']]):
254  out = self.fillGroups[fillGroup].defineTree(*args,**kwargs)
255  else:
256  out = None
257  return out
258 
259  def result(self):
260  return self.helper.result()
261 
262 
264  '''Function to call l1calo DQ monitoring algorithms'''
265  from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
266  from AthenaConfiguration.Enums import Format
267  import logging
268 
269  # local printing
270  local_logger = logging.getLogger('AthenaMonitoringCfg')
271  info = local_logger.info
272  info('In LVL1CaloMonitoringConfig')
273 
274  result = ComponentAccumulator()
275 
276  # If we're not putting trigger objects in event store, can't monitor them
277  if not flags.Trigger.Online.isPartition:
278  if not flags.DQ.triggerDataAvailable:
279  return result
280 
281  isData = not flags.Input.isMC
282 
283  # check if validation requested
284  validation=flags.DQ.Steering.LVL1Calo.doValidation
285 
286  # monitoring algorithm configs
287  # do not run on MC or RAW->ESD(tier0), or AOD-only
288  if not validation and isData and flags.DQ.Environment not in ('tier0Raw', 'AOD'):
289 
290  from TrigT1CaloMonitoring.PprMonitorAlgorithm import PprMonitoringConfig
291  from TrigT1CaloMonitoring.JepJemMonitorAlgorithm import JepJemMonitoringConfig
292 
293  # Use metadata to check Run3 compatible trigger info is available
294  from AthenaConfiguration.AutoConfigFlags import GetFileMD
295  md = GetFileMD(flags.Input.Files)
296  inputContainsRun3FormatConfigMetadata = ("metadata_items" in md and any(('TriggerMenuJson' in key) for key in md["metadata_items"].keys()))
297  result.merge(PprMonitoringConfig(flags))
298  result.merge(JepJemMonitoringConfig(flags))
299  if flags.Input.Format is not Format.POOL or inputContainsRun3FormatConfigMetadata:
300  # L1 menu available in the POOL file
301  from TrigT1CaloMonitoring.CpmMonitorAlgorithm import CpmMonitoringConfig
302  from TrigT1CaloMonitoring.CpmSimMonitorAlgorithm import CpmSimMonitoringConfig
303  from TrigT1CaloMonitoring.JepCmxMonitorAlgorithm import JepCmxMonitoringConfig
304  from TrigT1CaloMonitoring.OverviewMonitorAlgorithm import OverviewMonitoringConfig
305  from TrigT1CaloMonitoring.PPMSimBSMonitorAlgorithm import PPMSimBSMonitoringConfig
306 
307  result.merge(CpmMonitoringConfig(flags))
308  result.merge(CpmSimMonitoringConfig(flags))
309  result.merge(JepCmxMonitoringConfig(flags))
310  result.merge(PPMSimBSMonitoringConfig(flags))
311  result.merge(OverviewMonitoringConfig(flags))
312 
313  if flags.Input.TriggerStream == "physics_Mistimed":
314  from TrigT1CaloMonitoring.MistimedStreamMonitorAlgorithm import MistimedStreamMonitorConfig
315  result.merge(MistimedStreamMonitorConfig(flags))
316 
317  # For running on bytestream data
318  if flags.Input.Format is Format.BS:
319  from TrigT1CaloByteStream.LVL1CaloRun2ByteStreamConfig import LVL1CaloRun2ReadBSCfg
320  result.merge(LVL1CaloRun2ReadBSCfg(flags))
321 
322  # Phase 1 monitoring
323  if flags.Trigger.enableL1CaloPhase1 and flags.Input.Format is not Format.POOL:
324  #efex monitoring
325  from TrigT1CaloMonitoring.EfexMonitorAlgorithm import EfexMonitoringConfig
326  EfexMonitorCfg = EfexMonitoringConfig(flags)
327  result.merge(EfexMonitorCfg)
328 
329  # Need to pass the algorithm to the histogram booking
330  EfexMonAlg = result.getEventAlgo('EfexMonAlg')
331  from TrigT1CaloMonitoring.EfexMonitorAlgorithm import EfexMonitoringHistConfig
332  EfexMonitorHistCfg = EfexMonitoringHistConfig(flags,EfexMonAlg)
333  result.merge(EfexMonitorHistCfg)
334 
335  #gfex monitoring
336  from TrigT1CaloMonitoring.GfexMonitorAlgorithm import GfexMonitoringConfig
337  result.merge(GfexMonitoringConfig(flags))
338 
339  # run the L1Calo simulation (causes conflicts with DAOD)
340  from L1CaloFEXSim.L1CaloFEXSimCfg import L1CaloFEXSimCfg
341  result.merge(L1CaloFEXSimCfg(flags))
342 
343  # monitoring of simulation vs hardware
344  from TrigT1CaloMonitoring.EfexSimMonitorAlgorithm import EfexSimMonitoringConfig
345  result.merge(EfexSimMonitoringConfig(flags))
346 
347  from TrigT1CaloMonitoring.EfexInputMonitorAlgorithm import EfexInputMonitoringConfig
348  result.merge(EfexInputMonitoringConfig(flags))
349 
350  from TrigT1CaloMonitoring.GfexSimMonitorAlgorithm import GfexSimMonitoringConfig
351  result.merge(GfexSimMonitoringConfig(flags))
352 
353  #gfex input monitoring
354  from TrigT1CaloMonitoring.GfexInputMonitorAlgorithm import GfexInputMonitoringConfig
355  result.merge(GfexInputMonitoringConfig(flags))
356 
357 
360 
361  #jfex monitoring for input data
362  maybeMissingRobs = []
363  decoderTools = []
364 
365  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import jFexInputByteStreamToolCfg
366  inputjFexTool = result.popToolsAndMerge(jFexInputByteStreamToolCfg(flags, 'jFexInputBSDecoderTool'))
367 
368  for module_id in inputjFexTool.ROBIDs:
369  maybeMissingRobs.append(module_id)
370 
371  decoderTools += [inputjFexTool]
372  from AthenaConfiguration.ComponentFactory import CompFactory
373  decoderAlg = CompFactory.L1TriggerByteStreamDecoderAlg(name="L1TriggerByteStreamDecoder", DecoderTools=[inputjFexTool], MaybeMissingROBs=maybeMissingRobs)
374  result.addEventAlgo(decoderAlg)
375 
376  from L1CaloFEXSim.L1CaloFEXSimCfg import L1CaloFEXSimCfg
377  result.merge(L1CaloFEXSimCfg(flags))
378 
379  from TrigT1CaloMonitoring.JfexInputMonitorAlgorithm import JfexInputMonitoringConfig
380  result.merge(JfexInputMonitoringConfig(flags))
381 
382  #jfex monitoring for Data Vs Simulation
383  from TrigT1CaloMonitoring.JfexSimMonitorAlgorithm import JfexSimMonitoringConfig
384  JfexSimMonitoring = JfexSimMonitoringConfig(flags)
385  result.merge(JfexSimMonitoring)
386 
387  #jfex monitoring for Data Tobs
388  from TrigT1CaloMonitoring.JfexMonitorAlgorithm import JfexMonitoringConfig
389  JfexMonitoring = JfexMonitoringConfig(flags)
390  result.merge(JfexMonitoring)
391 
392  # jet monitoring
393  from TrigT1CaloMonitoring.JetEfficiencyMonitorAlgorithm import JetEfficiencyMonitoringConfig
394  result.merge(JetEfficiencyMonitoringConfig(flags))
395 
396  result.printConfig( withDetails= True )
397 
398 
399  # algorithms for validation checks
400  if validation:
401  from TrigT1CaloMonitoring.L1CaloLegacyEDMMonitorAlgorithm import L1CaloLegacyEDMMonitoringConfig
402  result.merge(L1CaloLegacyEDMMonitoringConfig(flags))
403  # Phase 1 systems
404  from TrigT1CaloMonitoring.EfexMonitorAlgorithm import EfexMonitoringConfig
405  EfexMonitorCfg = EfexMonitoringConfig(flags)
406  result.merge(EfexMonitorCfg)
407  # algorithm required for dynamic histogram booking
408  EfexMonAlg = result.getEventAlgo('EfexMonAlg')
409  EfexMonAlg.eFexEMTobKeyList = ['L1_eEMRoI', 'L1_eEMxRoI']
410  EfexMonAlg.eFexTauTobKeyList = ['L1_eTauRoI', 'L1_eTauxRoI']
411  from TrigT1CaloMonitoring.EfexMonitorAlgorithm import EfexMonitoringHistConfig
412  EfexMonitorHistCfg = EfexMonitoringHistConfig(flags,EfexMonAlg)
413  result.merge(EfexMonitorHistCfg)
414  #
415  from TrigT1CaloMonitoring.GfexMonitorAlgorithm import GfexMonitoringConfig
416  result.merge(GfexMonitoringConfig(flags))
417  from TrigT1CaloMonitoring.JfexMonitorAlgorithm import JfexMonitoringConfig
418  result.merge(JfexMonitoringConfig(flags))
419 
420  from TrigT1CaloMonitoring.JetEfficiencyMonitorAlgorithm import JetEfficiencyMonitoringConfig
421  result.merge(JetEfficiencyMonitoringConfig(flags))
422 
423 
424  return result
425 
426 if __name__ == '__main__':
427  from AthenaConfiguration.AllConfigFlags import initConfigFlags
428  from AthenaConfiguration.ComponentFactory import CompFactory
429  from AthenaMonitoring.DQConfigFlags import DQDataType
430  flags = initConfigFlags()
431  flags.DQ.useTrigger = False
432  flags.DQ.Environment = "user"
433  flags.DQ.DataType = DQDataType.MC
434  flags.DQ.enableLumiAccess = False
435  flags.lock()
436  h = L1CaloMonitorCfgHelper(flags,CompFactory.JfexSimMonitorAlgorithm,"MyAlg")
437  h.defineHistogram("x,y;h_myHist",type='TH2D',path="Shifter/Blah",hanConfig={"algorithm":"blah"})
438  h.defineHistogram("x,y;h_myHis2t",type='TH2D',path="Shifter/Blah",hanConfig={"algorithm":"blah2"})
439  h.defineHistogram("x;anotherHist",type='TH1D',path="Developer/whatever",hanConfig={"aaa":2})
440  h.defineTree("x,y,z,a,b;myTree","x/i:y/i:z/i:a/I:b/I",path="Developer/whatever")
441 
442  # example of an algorithm requiring all bins to be empty
443  h.defineDQAlgorithm("MyAlgo",
444  hanConfig={"libname":"libdqm_summaries.so","name":"Bins_NotEqual_Threshold","BinThreshold":"0."},
445  thresholdConfig={"NBins":[1,1]}) # first number if warning threshold, second is error threshold
446 
447  L1CaloMonitorCfgHelper.printHanConfig()
grepfile.info
info
Definition: grepfile.py:38
replace
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition: hcg.cxx:307
EfexMonitorAlgorithm.EfexMonitoringHistConfig
def EfexMonitoringHistConfig(flags, eFexAlg)
Definition: EfexMonitorAlgorithm.py:35
PPMSimBSMonitorAlgorithm.PPMSimBSMonitoringConfig
def PPMSimBSMonitoringConfig(flags)
Definition: PPMSimBSMonitorAlgorithm.py:7
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.hanThresholdConfigs
hanThresholdConfigs
Definition: LVL1CaloMonitoringConfig.py:17
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.defineDQAlgorithm
def defineDQAlgorithm(self, name, hanConfig, thresholdConfig=None)
Definition: LVL1CaloMonitoringConfig.py:117
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.dqEnv
dqEnv
Definition: LVL1CaloMonitoringConfig.py:115
EfexSimMonitorAlgorithm.EfexSimMonitoringConfig
def EfexSimMonitoringConfig(flags)
Definition: EfexSimMonitorAlgorithm.py:4
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.defineHistogram
def defineHistogram(self, *args, fillGroup=None, hanConfig={}, paths=[], **kwargs)
Definition: LVL1CaloMonitoringConfig.py:151
GfexSimMonitorAlgorithm.GfexSimMonitoringConfig
def GfexSimMonitoringConfig(flags, UseOfflineCopy=True)
Definition: GfexSimMonitorAlgorithm.py:4
python.AutoConfigFlags.GetFileMD
def GetFileMD(filenames, allowEmpty=True)
Definition: AutoConfigFlags.py:51
LVL1CaloRun2ByteStreamConfig.LVL1CaloRun2ReadBSCfg
def LVL1CaloRun2ReadBSCfg(flags, forRoIBResultToxAOD=False)
Definition: LVL1CaloRun2ByteStreamConfig.py:121
L1CaloFEXByteStreamConfig.jFexInputByteStreamToolCfg
def jFexInputByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:232
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
CpmSimMonitorAlgorithm.CpmSimMonitoringConfig
def CpmSimMonitoringConfig(inputFlags)
Definition: CpmSimMonitorAlgorithm.py:4
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.fillGroups
fillGroups
Definition: LVL1CaloMonitoringConfig.py:114
EfexInputMonitorAlgorithm.EfexInputMonitoringConfig
def EfexInputMonitoringConfig(flags)
Definition: EfexInputMonitorAlgorithm.py:4
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.printHanConfig
def printHanConfig(filename="collisions_run.config")
Definition: LVL1CaloMonitoringConfig.py:23
L1CaloLegacyEDMMonitorAlgorithm.L1CaloLegacyEDMMonitoringConfig
def L1CaloLegacyEDMMonitoringConfig(inputFlags)
Definition: L1CaloLegacyEDMMonitorAlgorithm.py:5
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.__init__
def __init__(self, flags, algClassOrObj=None, name=None, *args, **kwargs)
Definition: LVL1CaloMonitoringConfig.py:103
MistimedStreamMonitorAlgorithm.MistimedStreamMonitorConfig
def MistimedStreamMonitorConfig(flags)
Definition: MistimedStreamMonitorAlgorithm.py:6
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper
Definition: LVL1CaloMonitoringConfig.py:5
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
GfexInputMonitorAlgorithm.GfexInputMonitoringConfig
def GfexInputMonitoringConfig(flags)
Definition: GfexInputMonitorAlgorithm.py:4
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:224
PprMonitorAlgorithm.PprMonitoringConfig
def PprMonitoringConfig(inputFlags)
Definition: PprMonitorAlgorithm.py:5
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.helper
helper
Definition: LVL1CaloMonitoringConfig.py:112
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.HELPURL
HELPURL
Definition: LVL1CaloMonitoringConfig.py:20
LVL1CaloMonitoringConfig.LVL1CaloMonitoringConfig
def LVL1CaloMonitoringConfig(flags)
Definition: LVL1CaloMonitoringConfig.py:263
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:79
GfexMonitorAlgorithm.GfexMonitoringConfig
def GfexMonitoringConfig(flags)
Definition: GfexMonitorAlgorithm.py:4
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.alg
alg
Definition: LVL1CaloMonitoringConfig.py:113
JepCmxMonitorAlgorithm.JepCmxMonitoringConfig
def JepCmxMonitoringConfig(inputFlags)
Definition: JepCmxMonitorAlgorithm.py:4
Trk::open
@ open
Definition: BinningType.h:40
LVL1CaloMonitoringConfig.type
type
Definition: LVL1CaloMonitoringConfig.py:437
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:569
JfexSimMonitorAlgorithm.JfexSimMonitoringConfig
def JfexSimMonitoringConfig(flags)
Definition: JfexSimMonitorAlgorithm.py:4
pickleTool.object
object
Definition: pickleTool.py:30
str
Definition: BTagTrackIpAccessor.cxx:11
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.result
def result(self)
Definition: LVL1CaloMonitoringConfig.py:259
JfexInputMonitorAlgorithm.JfexInputMonitoringConfig
def JfexInputMonitoringConfig(flags)
Definition: JfexInputMonitorAlgorithm.py:4
EfexMonitorAlgorithm.EfexMonitoringConfig
def EfexMonitoringConfig(inputFlags)
Definition: EfexMonitorAlgorithm.py:4
JetEfficiencyMonitorAlgorithm.JetEfficiencyMonitoringConfig
def JetEfficiencyMonitoringConfig(flags)
Definition: JetEfficiencyMonitorAlgorithm.py:4
CpmMonitorAlgorithm.CpmMonitoringConfig
def CpmMonitoringConfig(inputFlags)
Definition: CpmMonitorAlgorithm.py:4
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.hanAlgConfigs
hanAlgConfigs
Definition: LVL1CaloMonitoringConfig.py:16
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
JepJemMonitorAlgorithm.JepJemMonitoringConfig
def JepJemMonitoringConfig(inputFlags)
Definition: JepJemMonitorAlgorithm.py:4
L1CaloFEXSimCfg
Definition: L1CaloFEXSimCfg.py:1
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.defineTree
def defineTree(self, *args, fillGroup=None, **kwargs)
Definition: LVL1CaloMonitoringConfig.py:218
JfexMonitorAlgorithm.JfexMonitoringConfig
def JfexMonitoringConfig(flags)
Definition: JfexMonitorAlgorithm.py:4
OverviewMonitorAlgorithm.OverviewMonitoringConfig
def OverviewMonitoringConfig(inputFlags)
Definition: OverviewMonitorAlgorithm.py:4