ATLAS Offline Software
Loading...
Searching...
No Matches
OverlaySkeleton.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3import sys
4
5from AthenaConfiguration.AutoConfigFlags import GetFileMD
6from AthenaConfiguration.Enums import ProductionStep
7from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags
8from PyJobTransforms.TransformUtils import processPreExec, processPreInclude, processPostExec, processPostInclude
9from SimuJobTransforms.CommonSimulationSteering import specialConfigPreInclude, specialConfigPostInclude
10
11# force no legacy job properties
12from AthenaCommon import JobProperties
13JobProperties.jobPropertiesDisallowed = True
14
15
16def setOverlayInputFiles(runArgs, flags, log):
17 hasRDO_BKGInput = hasattr(runArgs, 'inputRDO_BKGFile')
18 hasEVNT_Input = hasattr(runArgs, 'inputEVNTFile')
19
20 if flags.Common.ProductionStep == ProductionStep.Overlay and not hasattr(runArgs, 'inputHITSFile'):
21 raise RuntimeError('No input HITS file defined')
22
23 if not hasRDO_BKGInput:
24 raise RuntimeError('No input RDO_BKG file defined')
25
26 if hasattr(runArgs, 'skipSecondaryEvents'):
27 flags.Overlay.SkipSecondaryEvents = runArgs.skipSecondaryEvents
28
29 flags.Input.Files = runArgs.inputRDO_BKGFile
30
31 if flags.Input.isMC:
32 log.info('Running MC+MC overlay')
33 flags.Overlay.DataOverlay = False
34 else:
35 log.info('Running MC+data overlay')
36 flags.Overlay.DataOverlay = True
37 from CoolConvUtilities.MagFieldUtils import getTimeForLB
38 flags.Input.TimeStamps = [int(getTimeForLB(run=flags.Input.RunNumbers[0], LB=flags.Input.LumiBlockNumbers[0])/1e9)]
39
40 if flags.Common.ProductionStep == ProductionStep.Overlay:
41 flags.Input.SecondaryFiles = runArgs.inputHITSFile
42 elif flags.Common.ProductionStep == ProductionStep.FastChain:
43 if not hasEVNT_Input:
44 raise RuntimeError('No input EVNT file defined')
45 else:
46 flags.Input.SecondaryFiles = runArgs.inputEVNTFile
47 else:
48 raise RuntimeError('No secondaryFiles are defined')
49
50 # take MCChannelNumber from secondary input:
51 flags.Input.MCChannelNumber = GetFileMD(flags.Input.SecondaryFiles, allowEmpty=False).get("mc_channel_number", 0)
52
53 # runNumber is MC channel number in reco
54 if hasattr(runArgs, 'runNumber'):
55 if flags.Input.MCChannelNumber != runArgs.runNumber:
56 log.warning('Got different MC channel number (%d) from runNumber than from metadata (%d)', runArgs.runNumber, flags.Input.MCChannelNumber)
57 flags.Input.MCChannelNumber = runArgs.runNumber
58 else:
59 log.info('MC channel number: %d', flags.Input.MCChannelNumber)
60
61
62def fromRunArgs(runArgs):
63 from AthenaCommon.Logging import logging
64 logOverlay = logging.getLogger('Overlay')
65 logOverlay.info('****************** STARTING OVERLAY *****************')
66
67 logOverlay.info('**** Transformation run arguments')
68 logOverlay.info(str(runArgs))
69
70 logOverlay.info('**** Setting-up configuration flags')
71 from AthenaConfiguration.AllConfigFlags import initConfigFlags
72 flags = initConfigFlags()
73
74 commonRunArgsToFlags(runArgs, flags)
75
76 flags.Common.ProductionStep = ProductionStep.Overlay
77
78 # Setting input files for Overlay
79 setOverlayInputFiles(runArgs, flags, logOverlay)
80
81 # Setting output files for Overlay
82 if hasattr(runArgs, 'outputRDOFile'):
83 if runArgs.outputRDOFile == 'None':
84 flags.Output.RDOFileName = ''
85 else:
86 flags.Output.RDOFileName = runArgs.outputRDOFile
87 else:
88 raise RuntimeError('No output RDO file defined')
89
90 if hasattr(runArgs, 'outputRDO_SGNLFile'):
91 flags.Output.RDO_SGNLFileName = runArgs.outputRDO_SGNLFile
92
93 # Autoconfigure enabled subdetectors
94 if hasattr(runArgs, 'detectors'):
95 detectors = runArgs.detectors
96 else:
97 detectors = None
98
99 # Setup digitization flags
100 from DigitizationConfig.DigitizationConfigFlags import digitizationRunArgsToFlags
101 digitizationRunArgsToFlags(runArgs, flags)
102
103 # Setup detector flags
104 from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
105 setupDetectorFlags(flags, detectors, use_metadata=True, toggle_geometry=True)
106
107 # Disable LVL1 trigger if triggerConfig explicitly set to 'NONE'
108 if hasattr(runArgs, 'triggerConfig') and runArgs.triggerConfig == 'NONE':
109 flags.Detector.EnableL1Calo = False
110
111 # Setup perfmon flags from runargs
112 from PerfMonComps.PerfMonConfigHelpers import setPerfmonFlagsFromRunArgs
113 setPerfmonFlagsFromRunArgs(flags, runArgs)
114
115 # Special Configuration preInclude
116 specialConfigPreInclude(flags)
117
118 # Pre-include
119 processPreInclude(runArgs, flags)
120
121 # Pre-exec
122 processPreExec(runArgs, flags)
123
124 # To respect --athenaopts
125 flags.fillFromArgs()
126
127 # Moving here so that it is ahead of flags being locked. Need to
128 # iterate on exact best position w.r.t. above calls
129 from OverlayConfiguration.OverlayMetadata import overlayMetadataCheck
130 # Handle metadata correctly
131 overlayMetadataCheck(flags)
132
133 # Lock flags
134 flags.lock()
135
136 # Main overlay steering
137 from OverlayConfiguration.OverlaySteering import OverlayMainCfg
138 cfg = OverlayMainCfg(flags)
139
140 # Special message service configuration
141 from DigitizationConfig.DigitizationSteering import DigitizationMessageSvcCfg
142 cfg.merge(DigitizationMessageSvcCfg(flags))
143
144 # Special Configuration postInclude
145 specialConfigPostInclude(flags, cfg)
146
147 # Post-include
148 processPostInclude(runArgs, flags, cfg)
149
150 # Post-exec
151 processPostExec(runArgs, flags, cfg)
152
153 # Write AMI tag into in-file metadata
154 from PyUtils.AMITagHelperConfig import AMITagCfg
155 cfg.merge(AMITagCfg(flags, runArgs))
156
157 # Run the final configuration
158 sc = cfg.run()
159 sys.exit(not sc.isSuccess())
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130
setOverlayInputFiles(runArgs, flags, log)