ATLAS Offline Software
Loading...
Searching...
No Matches
TrigPSCPythonCASetup.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2#
3# This module is used as a Python bootstrap in athenaHLT for ComponentAccumulator
4# based configurations. In CA-mode, we always dump the configuraton to JSON and
5# re-launch ourselves from that file.
6#
7from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
8from AthenaConfiguration.ComponentFactory import CompFactory
9from AthenaConfiguration.ComponentFactory import isComponentAccumulatorCfg
10from AthenaConfiguration.MainServicesConfig import addMainSequences
11from AthenaCommon.Logging import logging
12
13from TrigCommon import AthHLT
14from TrigPSC import PscConfig
15from TrigServices.TriggerUnixStandardSetup import commonServicesCfg
16
17import os
18import sys
19
20log = logging.getLogger("athenaHLT")
21
22# Ensure we are really in CA-mode:
23if not isComponentAccumulatorCfg():
24 raise RuntimeError("isComponentAccumulatorCfg()==False but trying to run in CA mode")
25
26# For standalone testing:
27if __name__ == "__main__":
28 if len(sys.argv)!=2:
29 print("Syntax: python %s module.cfgFnc" % os.path.basename(sys.argv[0]))
30 sys.exit(1)
31
32 PscConfig.exitAfterDump = True # no execution for standalone testing
33 PscConfig.optmap = {"MESSAGESVCTYPE" : "TrigMessageSvc",
34 "JOBOPTIONSSVCTYPE" : "TrigConf::JobOptionSvc",
35 "JOBOPTIONSPATH" : sys.argv[1],
36 "PRECOMMAND" : "",
37 "POSTCOMMAND" : ""}
38
39
40def execCommands(cmds, stage):
41 """Helper to execute a command string"""
42 if cmds:
43 log.info("-"*80)
44 log.info("Executing %scommand: %s", stage, cmds)
45 exec(cmds, globals())
46 log.info("-"*80)
47
48
49from TrigPSC.PscDefaultFlags import defaultOnlineFlags
50flags = defaultOnlineFlags()
51
52# Run pre-command before user CA:
53execCommands(PscConfig.optmap["PRECOMMAND"], "pre-")
54
55# Now clone and use locked flags for services configuration:
56locked_flags = flags.clone()
57locked_flags.lock()
58
59# Setup sequences and framework services:
60cfg = ComponentAccumulator(CompFactory.AthSequencer("AthMasterSeq",Sequential=True))
61cfg.setAppProperty('ExtSvcCreates', False)
62cfg.setAppProperty("MessageSvcType", PscConfig.optmap["MESSAGESVCTYPE"])
63cfg.setAppProperty("JobOptionsSvcType", PscConfig.optmap["JOBOPTIONSSVCTYPE"])
64
65addMainSequences(locked_flags, cfg)
66cfg.merge( commonServicesCfg(locked_flags) )
67
68# User CA merge (with unlocked flags)
69cfg.merge( AthHLT.getCACfg(PscConfig.optmap["JOBOPTIONSPATH"])(flags) )
70
71# Run post-command after user CA:
72execCommands(PscConfig.optmap["POSTCOMMAND"], "post-")
73
74# Dump and convert job configuration:
75fname = "HLTJobOptions"
76with open(f"{fname}.pkl","wb") as f:
77 cfg.store(f)
78
79from TrigConfIO.JsonUtils import create_joboptions_json
80create_joboptions_json(f"{fname}.pkl", f"{fname}.json")
81
82# Exit or re-launch:
83if PscConfig.exitAfterDump:
84 log.info("Configuration dumped to %s.json Exiting...", fname)
85 sys.exit(0)
86
87AthHLT.reload_from_json(f"{fname}.json",
88 suppress_args = PscConfig.unparsedArguments)
void print(char *figname, TCanvas *c1)