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