ATLAS Offline Software
test_menu_cf.py
Go to the documentation of this file.
1 #!/usr/bin/env athena
2 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 
4 
6 
7 # - menuManual: chains are generated manually in generateCFChains, and run on input data file
8 # - emuMenuTest: chains are generated in the menu framework as HLT_TestChain**, and run on emulated data
9 # - emuManual: chains are genrated manually and run on emulated data
10 
11 import itertools
12 import functools
13 
14 from AthenaCommon.Logging import logging
15 log = logging.getLogger('test_menu_cf')
16 from AthenaCommon.Constants import DEBUG
17 
18 
19 # load all configuration as the real HLT
20 def set_flags(flags):
21 
22  # Prevent usage of legacy job properties
23  from AthenaCommon import JobProperties
24  JobProperties.jobPropertiesDisallowed = True
25 
26  # generic trigger flags
27  flags.Trigger.doHLT = True # needs to be set early as other flags depend on it
28  flags.Trigger.EDMVersion = 3 # Run-3 EDM
29  flags.Common.isOnline = True # online environment
30  flags.Input.Files = [] # menu cannot depend on input files
31 
32  from TriggerJobOpts.TriggerConfigFlags import ROBPrefetching
33  flags.Trigger.triggerMenuSetup = "Dev_pp_run3_v1"
34  flags.Trigger.ROBPrefetchingOptions = [ROBPrefetching.StepRoI]
35  flags.Trigger.enableL1MuonPhase1 = False # doesn't work in this minimal setup
36  flags.Trigger.enabledSignatures = ['Muon', 'Tau','MinBias','Bphysics','Egamma', 'Electron', 'Photon', 'MET', 'Jet','Bjet','Calib']
37  log.info("Running on these signatures: %s",flags.Trigger.enabledSignatures)
38 
39  # these flags are proper for these tests
40  flags.Trigger.doCFEmulationTest = True # this enables this emulation tests
41  flags.Trigger.generateMenuDiagnostics = True
42  # set DEBUG flag on the control-flow builder (before building)
43  import TriggerMenuMT.HLT.Config.ControlFlow.HLTCFConfig
44  TriggerMenuMT.HLT.Config.ControlFlow.HLTCFConfig.log.setLevel(DEBUG)
45 
46 
47 def configure(flags, args):
48 
49  from TriggerMenuMT.CFtest.generateCFChains import generateCFChains
50  from TriggerMenuMT.CFtest.EmuStepProcessingConfig import generateEmuEvents, generateChainsManually, generateEmuMenu
51 
52  if args.menuType == 'menuManual':
53  # test generating chains from real sequences and real data
54  menu = generateCFChains(flags)
55  chains = list(itertools.chain(*menu.chainsInMenu.values()))
56  elif args.menuType == 'emuMenuTest':
57  # test using menu code (HLT_TestChain) with dummy sequences and events
59  chains = generateEmuMenu(flags)
60  elif args.menuType == 'emuManual':
61  # test generating emulation chains with dummy segments and events
63  chains = generateChainsManually(flags)
64  else:
65  log.error("Input parameter %s not accepted",args.menuType)
66 
67  return chains
68 
69 def makeMenu(flags, args):
70  from TrigConfigSvc.TrigConfigSvcCfg import generateL1Menu
71  generateL1Menu(flags)
72  # from here generate the ControlFlow and the Dataflow
73  # doing the same as menu.generateMT()
74  chains = configure(flags, args)
75  from TriggerMenuMT.HLT.Config.GenerateMenuMT import makeHLTTree
76  menuCA, cfseqlist = makeHLTTree(flags, chains)
77  return menuCA
78 
79 def main():
80  from AthenaConfiguration.AllConfigFlags import initConfigFlags
81  flags = initConfigFlags()
82  set_flags(flags)
83  # Add options to command line parser
84  parser = flags.getArgumentParser()
85 
86  parser.add_argument('--menuType', default='emuMenuTest', #'emuManual',
87  help='use either menu or manual chain building')
88 
89  # Fill flags from command line
90  args = flags.fillFromArgs(parser=parser)
91  log.info('Setup options:')
92  log.info(' %20s = %s' , 'menuType', args.menuType)
93 
94  # Configure main services
95  _allflags = flags.clone() # copy including Concurrency flags
96  _allflags.lock()
97  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
98  cfg = MainServicesCfg(_allflags)
99  del _allflags
100  flags.lock()
101 
102  from TriggerJobOpts.TriggerConfig import triggerRunCfg
103  menu = triggerRunCfg(flags, menu=functools.partial(makeMenu, args=args))
104  cfg.merge(menu)
105  cfg.printConfig(withDetails=False, summariseProps=True, printDefaults=True)
106 
107  from AthenaConfiguration.AccumulatorCache import AccumulatorDecorator
108  AccumulatorDecorator.printStats()
109 
110  from AthenaCommon.CFElements import isSequence
111  for alg in menu.getSequence("HLTAllSteps").Members:
112  if isSequence( alg ):
113  continue
114 
115  if "TriggerSummary" in alg.getName():
116  alg.OutputLevel = DEBUG # noqa: ATL900 (testing script)
117 
118  return cfg
119 
120 # This entry point is only used when running in athena
121 if __name__ == "__main__":
122  import sys
123  sys.exit(main().run().isFailure())
python.TrigConfigSvcCfg.generateL1Menu
def generateL1Menu(flags)
Definition: TrigConfigSvcCfg.py:184
GenerateMenuMT.makeHLTTree
def makeHLTTree(flags, chainConfigs)
Definition: GenerateMenuMT.py:572
test_menu_cf.configure
def configure(flags, args)
Definition: test_menu_cf.py:47
EmuStepProcessingConfig.generateChainsManually
def generateChainsManually(flags, maskbit=0x7)
Definition: EmuStepProcessingConfig.py:130
test_menu_cf.main
def main()
Definition: test_menu_cf.py:79
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:256
Constants
some useful constants -------------------------------------------------—
run
Definition: run.py:1
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
test_menu_cf.makeMenu
def makeMenu(flags, args)
Definition: test_menu_cf.py:69
python.TriggerConfig.triggerRunCfg
def triggerRunCfg(flags, menu=None)
Definition: TriggerConfig.py:611
generateCFChains
Definition: generateCFChains.py:1
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
test_menu_cf.set_flags
def set_flags(flags)
Definition: test_menu_cf.py:20
python.CFElements.isSequence
def isSequence(obj)
Definition: CFElements.py:96
EmuStepProcessingConfig.generateEmuMenu
def generateEmuMenu(flags)
Definition: EmuStepProcessingConfig.py:10
EmuStepProcessingConfig.generateEmuEvents
def generateEmuEvents()
Definition: EmuStepProcessingConfig.py:30