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  from PathResolver import PathResolver
26  header = PathResolver.FindCalibFile("TrigT1CaloMonitoring/hanConfig_header.txt")
27  with open(filename,'w') as f:
28  # copy the header if we have one
29  if header != "":
30  with open(header,'r') as fh:
31  for line in fh: f.write(line)
32  with redirect_stdout(f):
33  # Note: common configs (see common dir in DataQualityConfiguration) provides following algorithms by default:
34  # algorithm All_Bins_Filled
35  # algorithm Histogram_Effective_Empty
36  # algorithm Histogram_Empty
37  # algorithm Histogram_Not_Empty
38  # algorithm No_OverFlows
39  # algorithm No_UnderFlows
40 
41  outputs = set()
42  def printConf(d,prefix=""):
43  for key,value in d.items():
44  if type(value)==dict:
45  print(prefix,key,"{")
46  if(key=="dir detail" or key=="dir Developer"):
47  print(prefix+" algorithm = GatherData") # define GatherData as default algo for all of these hists
48  if key.startswith("dir ") and any([x.startswith("hist ") for x in value.keys()]):
49  # this is a dir with hists, so specify output as the path .. take from the first hist child
50  for childKey,childVal in value.items():
51  if childKey.startswith("hist ") and "output" in childVal:
52  print(prefix+" output = "+childVal["output"])
53  break
54  printConf(value,prefix + " ")
55  print(prefix,"}")
56  else:
57  # save all output paths to add to output block (don't need to print here b.c. specified at dir level
58  if key == "output": outputs.add(value)
59  else: print(prefix,key,"=",value)
60 
61 
62  print("#inputs")
63  print("dir L1Calo {")
64  printConf(L1CaloMonitorCfgHelper.hanConfigs," ")
65  print("}")
66  print("#outputs")
67  print("output top_level {")
68  def printOutputs(d,prefix=""):
69  for key,value in d.items():
70  if(key.startswith("hist ")):
71  pass # do nothing
72  elif type(value)==dict:
73  print(prefix,key.replace("dir ","output "),"{")
74  printOutputs(value,prefix + " ")
75  print(prefix,"}")
76  print(" output L1Calo {")
77  printOutputs(L1CaloMonitorCfgHelper.hanConfigs," ")
78  print(" }")
79  print("}")
80  # include example of adding algorithms and thresholds
81  print("""
82 #algorithms
83 algorithm AnyNonZeroBinIsError {
84  # Use this algo if want error on any non-zero bin content
85  libname = libdqm_summaries.so
86  name = Bins_NotEqual_Threshold
87  BinThreshold = 0.
88  thresholds = th_AnyBinIsError
89 }
90 """)
91  for algName,algProps in L1CaloMonitorCfgHelper.hanAlgConfigs.items():
92  print(f"algorithm {algName} {{")
93  for propName,propVal in algProps.items():
94  print(f" {propName} = {propVal}")
95  print(" }")
96  print("""
97 #thresholds
98 thresholds th_AnyBinIsError {
99  limits NBins {
100  warning = 0
101  error = 1
102  }
103 }
104 """)
105  for threshName,threshProps in L1CaloMonitorCfgHelper.hanThresholdConfigs.items():
106  print(f"thresholds {threshName} {{")
107  for parName,parLims in threshProps.items():
108  print(f" limits {parName} {{")
109  for limName,limVal in parLims.items():
110  print(f" {limName} = {limVal}")
111  print(" }")
112  print("}")
113 
114 
115 
116  def __init__(self, flags, algClassOrObj = None, name = None, *args, **kwargs):
117  '''
118  Create the configuration helper.
119 
120  Arguments:
121  flags -- the configuration flag object
122  algClassOrObj -- the name you want to assign the family of algorithms
123  '''
124  from AthenaMonitoring import AthMonitorCfgHelper
125  self.helper = AthMonitorCfgHelper(flags,name)
126  self.alg = self.helper.addAlgorithm(algClassOrObj,name,*args, **kwargs) if algClassOrObj is not None else None
127  self.fillGroups = {}
128  self.dqEnv = flags.DQ.Environment # used to decide if should defineTree or not ...
129 
130  def defineDQAlgorithm(self,name,hanConfig,thresholdConfig=None):
131 
132  """
133 
134  :param name: name of algorithm
135  :param hanConfig: dict of algo properties
136  :param thresholdConfig: dict of thresholds, keys in form of ParName.level
137  :return:
138  """
139 
140  # note: this method will replace any existing alg definition
141 
142  #thresNum = len(self.hanThresholdConfigs)
143  if thresholdConfig is not None:
144  hanConfig["thresholds"] = f"{name}Thresholds"
145  threshDict = {}
146  for parName,limVals in thresholdConfig.items():
147  if len(limVals) != 2:
148  raise Exception("must specify two limits: warning and error")
149  if parName not in threshDict: threshDict[parName] = {}
150  threshDict[parName]["warning"] = limVals[0]
151  threshDict[parName]["error"] = limVals[1]
152  # see if any existing thresholds are identical, if so we can reuse
153  for threshName,thresh in self.hanThresholdConfigs.items():
154  if str(thresh)==str(threshDict):
155  threshDict = None
156  hanConfig["thresholds"] = threshName
157  break
158  if threshDict is not None: self.hanThresholdConfigs[hanConfig["thresholds"]] = threshDict
159  self.hanAlgConfigs[name] = hanConfig
160 
161  return
162 
163 
164  def defineHistogram(self,*args,fillGroup=None,hanConfig={},paths=[],**kwargs):
165  '''
166 
167  :param path:
168  :param fillGroup:
169  :param args:
170  :param kwargs:
171  :return:
172  '''
173 
174  hanConfig = dict(hanConfig) # create a copy since will modify below (otherwise we end up modifying the default empty dict)
175 
176  if paths != []:
177  for path in paths:
178  # create a copy of the histogram in each of the extra locations
179  self.defineHistogram(*args,fillGroup=fillGroup,hanConfig=hanConfig,paths=[],path=path,**kwargs)
180  return None
181 
182  argsCopy = list(args) # need to convert tuple to list to convert it
183  if ";" not in args[0]:
184  argsCopy[0] += ";h_" + argsCopy[0].replace(":","_")
185 
186  if kwargs.get("path",None) is None:
187  # put in the Developer path, under the name of the algorithm
188  kwargs["path"] = "Developer/" + self.alg.name
189  elif kwargs["path"][-1] == '/':
190  kwargs["path"] = kwargs["path"][:-1] # strip trailing slash
191  # verify path obeys convention
192  splitPath = kwargs["path"].split("/")
193  if splitPath[0] not in ["Shifter","Expert","Developer"]:
194  raise Exception("Path of histogram invalid, does not start with one of the allowed audiences (Shifter,Expert,Developer)")
195 
196  # require a hanConfig not in Developer or a detail dir
197  if splitPath[0] != "Developer" and splitPath[-1] != "detail" and ("algorithm" not in hanConfig):
198  # will default to using GatherData as long as there is a description
199  if "description" not in hanConfig:
200  raise Exception("Must specify a hanConfig for a Shifter or Expert (non-detail) histogram")
201  else:
202  hanConfig["algorithm"] = "GatherData" # must have an algo, otherwise wont be valid han config
203 
204 
205  if fillGroup is None: fillGroup = self.alg.name + "_fillGroup"
206  if fillGroup not in self.fillGroups:
207  self.fillGroups[fillGroup] = self.helper.addGroup(self.alg,fillGroup,topPath="L1Calo")
208 
209  if "merge" not in kwargs and kwargs.get("type","") !="TEfficiency":
210  kwargs["merge"] = "merge" # ensures we don't get a warning about not specifying merge method
211  out = self.fillGroups[fillGroup].defineHistogram(*argsCopy,**kwargs)
212  histName = argsCopy[0].split(";")[-1]
213 
214  # add help link for all expert plots
215  if splitPath[0] == "Expert":
216  linkUrl = self.HELPURL + "#" + "".join(splitPath[1:]+[histName])
217  linkUrl = f"<a href=\"{linkUrl}\">Help</a>"
218  if "description" not in hanConfig: hanConfig["description"] = linkUrl
219  else: hanConfig["description"] += " - " + linkUrl
220 
221  # only add to hanConfig if in Expert folder ... perhaps need to allow exception if doing local testing!
222  if splitPath[0] == "Expert":
223  splitPathWithHist = splitPath + [histName]
224  x = L1CaloMonitorCfgHelper.hanConfigs
225  for i,p in enumerate(splitPathWithHist):
226  key = ("dir " if i!=len(splitPathWithHist)-1 else "hist ") + p
227  if key not in x:
228  x[key] = {}
229  x = x[key]
230  hanConfig["output"] = "/".join(["L1Calo"]+splitPath)
231  x.update(hanConfig)
232 
233  return out
234 
235  def defineTree(self,*args,fillGroup=None,**kwargs):
236 
237  if ";" not in args[0]:
238  raise Exception("Must specify a tree name using ';name' suffix")
239  treeName = args[0].split(";")[-1]
240 
241  if "," in args[1]: # catch a subtle typo that can screw up monitoring
242  raise Exception("Should not have comma in list of branch names and types")
243 
244  if kwargs.get("path",None) is None:
245  # put in the Developer path, under the name of the algorithm
246  kwargs["path"] = "Developer/" + self.alg.name
247 
248  # verify path obeys convention
249  splitPath = kwargs["path"].split("/")
250  if splitPath[0] not in ["Developer"]:
251  raise Exception("Path of tree invalid, must be in the audience=Developer directory")
252 
253 
254  if fillGroup is None: fillGroup = self.alg.name + "_fillGroup"
255  if fillGroup not in self.fillGroups:
256  self.fillGroups[fillGroup] = self.helper.addGroup(self.alg,fillGroup,topPath="L1Calo")
257 
258  # always define a histogram to go with the tree, which will indicate how many entries there are
259  # this also ensures we satisfy the requirement that every fillGroup has an object defined
260  # (in the cases of running online/tier0 the defineTrees are blocked, but we still need a hist then)
261  histName = "h_" + treeName + "_entries"
262  argsCopy = list(args)
263  argsCopy[0] = argsCopy[0].replace(";"+treeName,";"+histName)
264  kwargsCopy = dict(kwargs)
265  kwargsCopy["title"] = f"Number of Entries in {treeName} TTree" + ";" + ";".join(kwargsCopy.get("title","").split(";")[1:])
266  kwargsCopy["opt"] = ['kCanRebin','kAddBinsDynamically']
267  kwargsCopy["merge"] = "merge"
268  is2d = (kwargsCopy["title"].count(";")>1)
269  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)
270  if not any([x in self.dqEnv for x in ['tier0','online']]):
271  out = self.fillGroups[fillGroup].defineTree(*args,**kwargs)
272  else:
273  out = None
274  return out
275 
276  def result(self):
277  return self.helper.result()
278 
279 
281  '''Function to call l1calo DQ monitoring algorithms'''
282  from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
283  from AthenaConfiguration.Enums import Format
284  import logging
285 
286  # local printing
287  local_logger = logging.getLogger('AthenaMonitoringCfg')
288  info = local_logger.info
289  info('In LVL1CaloMonitoringConfig')
290 
291  result = ComponentAccumulator()
292 
293  # If we're not putting trigger objects in event store, can't monitor them
294  if not flags.Trigger.Online.isPartition:
295  if not flags.DQ.triggerDataAvailable:
296  return result
297 
298  isData = not flags.Input.isMC
299 
300  # check if validation requested
301  validation=flags.DQ.Steering.LVL1Calo.doValidation
302 
303  # monitoring algorithm configs
304  # do not run on MC or RAW->ESD(tier0), or AOD-only
305  if not validation and isData and flags.DQ.Environment not in ('tier0Raw', 'AOD'):
306 
307  from TrigT1CaloMonitoring.PprMonitorAlgorithm import PprMonitoringConfig
308  from TrigT1CaloMonitoring.JepJemMonitorAlgorithm import JepJemMonitoringConfig
309 
310  # Use metadata to check Run3 compatible trigger info is available
311  from AthenaConfiguration.AutoConfigFlags import GetFileMD
312  md = GetFileMD(flags.Input.Files)
313  inputContainsRun3FormatConfigMetadata = ("metadata_items" in md and any(('TriggerMenuJson' in key) for key in md["metadata_items"].keys()))
314  result.merge(PprMonitoringConfig(flags))
315  result.merge(JepJemMonitoringConfig(flags))
316  if flags.Input.Format is not Format.POOL or inputContainsRun3FormatConfigMetadata:
317  # L1 menu available in the POOL file
318 
319  # since the legacy system started getting turned off in 2024, use detMask to determine
320  # which things are included, and therefore need monitoring ...
321  import eformat
322  detMask=eformat.helper.DetectorMask(f'{md.get("detectorMask",[0x0])[0]:032x}') #DetectorMask constructor swallows two 64bit ints
323  hasCPM = detMask.is_set(eformat.helper.SubDetector.TDAQ_CALO_CLUSTER_PROC_DAQ)
324  hasJEP = detMask.is_set(eformat.helper.SubDetector.TDAQ_CALO_JET_PROC_DAQ)
325 
326  if hasCPM:
327  from TrigT1CaloMonitoring.CpmMonitorAlgorithm import CpmMonitoringConfig
328  from TrigT1CaloMonitoring.CpmSimMonitorAlgorithm import CpmSimMonitoringConfig
329  result.merge(CpmMonitoringConfig(flags))
330  result.merge(CpmSimMonitoringConfig(flags))
331 
332  if hasJEP:
333  from TrigT1CaloMonitoring.JepCmxMonitorAlgorithm import JepCmxMonitoringConfig
334  result.merge(JepCmxMonitoringConfig(flags))
335 
336  from TrigT1CaloMonitoring.OverviewMonitorAlgorithm import OverviewMonitoringConfig
337  from TrigT1CaloMonitoring.PPMSimBSMonitorAlgorithm import PPMSimBSMonitoringConfig
338  result.merge(PPMSimBSMonitoringConfig(flags))
339  result.merge(OverviewMonitoringConfig(flags))
340 
341  if not hasCPM:
342  # CPM was disabled for run 480893 onwards, so stop monitoring that part
343  OverviewMonAlg = result.getEventAlgo("OverviewMonAlg")
344  OverviewMonAlg.CPMErrorLocation = ""
345  OverviewMonAlg.CPMMismatchLocation = ""
346 
347  if flags.Input.TriggerStream == "physics_Mistimed":
348  from TrigT1CaloMonitoring.MistimedStreamMonitorAlgorithm import MistimedStreamMonitorConfig
349  result.merge(MistimedStreamMonitorConfig(flags))
350 
351  # For running on bytestream data
352  if flags.Input.Format is Format.BS:
353  from TrigT1CaloByteStream.LVL1CaloRun2ByteStreamConfig import LVL1CaloRun2ReadBSCfg
354  result.merge(LVL1CaloRun2ReadBSCfg(flags))
355 
356  # Phase 1 monitoring of inputs and sim-vs-hw
357  if flags.Trigger.enableL1CaloPhase1 and flags.Input.Format is not Format.POOL:
358 
359  # run the L1Calo simulation (causes conflicts with DAOD)
360  from L1CaloFEXSim.L1CaloFEXSimCfg import L1CaloFEXSimCfg
361  result.merge(L1CaloFEXSimCfg(flags))
362 
363  #efex monitoring
364  if flags.Trigger.L1.doeFex:
365  from TrigT1CaloMonitoring.EfexInputMonitorAlgorithm import EfexInputMonitoringConfig
366  result.merge(EfexInputMonitoringConfig(flags))
367 
368  # monitoring of simulation vs hardware
369  from TrigT1CaloMonitoring.EfexSimMonitorAlgorithm import EfexSimMonitoringConfig
370  result.merge(EfexSimMonitoringConfig(flags))
371 
372  #gfex monitoring
373  if flags.Trigger.L1.dogFex:
374  #gfex input monitoring
375  from TrigT1CaloMonitoring.GfexInputMonitorAlgorithm import GfexInputMonitoringConfig
376  result.merge(GfexInputMonitoringConfig(flags))
377 
378  from TrigT1CaloMonitoring.GfexSimMonitorAlgorithm import GfexSimMonitoringConfig
379  result.merge(GfexSimMonitoringConfig(flags))
380 
381  #jfex monitoring
382  if flags.Trigger.L1.dojFex:
383  #jfex monitoring for input data
384  from TrigT1CaloMonitoring.JfexInputMonitorAlgorithm import JfexInputMonitoringConfig
385  result.merge(JfexInputMonitoringConfig(flags))
386 
387  #jfex monitoring for Data Vs Simulation
388  from TrigT1CaloMonitoring.JfexSimMonitorAlgorithm import JfexSimMonitoringConfig
389  JfexSimMonitoring = JfexSimMonitoringConfig(flags)
390  result.merge(JfexSimMonitoring)
391 
392  # run FEX output monitoring if doing validation or running on data not @ tier0 or on AOD
393  if validation or (isData and flags.DQ.Environment not in ('tier0Raw', 'AOD')):
394 
395  if validation:
396  # only run this monitoring if doing validation
397  from TrigT1CaloMonitoring.L1CaloLegacyEDMMonitorAlgorithm import L1CaloLegacyEDMMonitoringConfig
398  result.merge(L1CaloLegacyEDMMonitoringConfig(flags))
399 
400  #efex monitoring
401  if flags.Trigger.L1.doeFex:
402  from TrigT1CaloMonitoring.EfexMonitorAlgorithm import EfexMonitoringConfig
403  result.merge(EfexMonitoringConfig(flags))
404  from TrigT1CaloMonitoring.EfexMonitorAlgorithm import EfexMonitoringHistConfig
405  result.merge(EfexMonitoringHistConfig(flags,result.getEventAlgo('EfexMonAlg')))
406 
407  #gfex monitoring
408  if flags.Trigger.L1.dogFex:
409  from TrigT1CaloMonitoring.GfexMonitorAlgorithm import GfexMonitoringConfig
410  result.merge(GfexMonitoringConfig(flags))
411 
412  #jfex monitoring
413  if flags.Trigger.L1.dojFex:
414  from TrigT1CaloMonitoring.JfexMonitorAlgorithm import JfexMonitoringConfig
415  result.merge(JfexMonitoringConfig(flags))
416 
417  # jet efficiency monitoring -- needs either gfex or jfex to be worth scheduling
418  if flags.Trigger.L1.dojFex or flags.Trigger.L1.dogFex:
419  from TrigT1CaloMonitoring.JetEfficiencyMonitorAlgorithm import JetEfficiencyMonitoringConfig
420  result.merge(JetEfficiencyMonitoringConfig(flags))
421 
422  result.printConfig( withDetails= True )
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
PathResolver::FindCalibFile
static std::string FindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.h:108
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:130
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.dqEnv
dqEnv
Definition: LVL1CaloMonitoringConfig.py:128
EfexSimMonitorAlgorithm.EfexSimMonitoringConfig
def EfexSimMonitoringConfig(flags)
Definition: EfexSimMonitorAlgorithm.py:4
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.defineHistogram
def defineHistogram(self, *args, fillGroup=None, hanConfig={}, paths=[], **kwargs)
Definition: LVL1CaloMonitoringConfig.py:164
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
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
CpmSimMonitorAlgorithm.CpmSimMonitoringConfig
def CpmSimMonitoringConfig(inputFlags)
Definition: CpmSimMonitorAlgorithm.py:4
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.fillGroups
fillGroups
Definition: LVL1CaloMonitoringConfig.py:127
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:116
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:232
PprMonitorAlgorithm.PprMonitoringConfig
def PprMonitoringConfig(inputFlags)
Definition: PprMonitorAlgorithm.py:5
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.helper
helper
Definition: LVL1CaloMonitoringConfig.py:125
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:280
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:79
GfexMonitorAlgorithm.GfexMonitoringConfig
def GfexMonitoringConfig(flags)
Definition: GfexMonitorAlgorithm.py:4
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.alg
alg
Definition: LVL1CaloMonitoringConfig.py:126
JepCmxMonitorAlgorithm.JepCmxMonitoringConfig
def JepCmxMonitoringConfig(inputFlags)
Definition: JepCmxMonitorAlgorithm.py:4
MistimedStreamMonitorAlgorithm.MistimedStreamMonitorConfig
def MistimedStreamMonitorConfig(flags, Legacy, PhaseI)
Definition: MistimedStreamMonitorAlgorithm.py:6
Trk::open
@ open
Definition: BinningType.h:40
LVL1CaloMonitoringConfig.type
type
Definition: LVL1CaloMonitoringConfig.py:437
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
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:798
LVL1CaloMonitoringConfig.L1CaloMonitorCfgHelper.result
def result(self)
Definition: LVL1CaloMonitoringConfig.py:276
dbg::print
void print(std::FILE *stream, std::format_string< Args... > fmt, Args &&... args)
Definition: SGImplSvc.cxx:70
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:235
JfexMonitorAlgorithm.JfexMonitoringConfig
def JfexMonitoringConfig(flags)
Definition: JfexMonitorAlgorithm.py:4
OverviewMonitorAlgorithm.OverviewMonitoringConfig
def OverviewMonitoringConfig(inputFlags)
Definition: OverviewMonitorAlgorithm.py:4