ATLAS Offline Software
RAWtoALL_Skeleton.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags
4 from PyJobTransforms.TransformUtils import processPreExec, processPreInclude, processPostExec, processPostInclude
5 
6 from AthenaCommon import SystemOfUnits as Units
7 
8 # force no legacy job properties
9 from AthenaCommon import JobProperties
10 JobProperties.jobPropertiesDisallowed = True
11 
12 
13 
14 def fromRunArgs(runArgs):
15  from AthenaCommon.Logging import logging
16  log = logging.getLogger('RAWtoALL')
17  log.info('****************** STARTING Reconstruction (RAWtoALL) *****************')
18 
19  log.info('**** Transformation run arguments')
20  log.info(str(runArgs))
21 
22  import time
23  timeStart = time.time()
24 
25  log.info('**** executing ROOT6Setup')
26  from PyUtils.Helpers import ROOT6Setup
27  ROOT6Setup(batch=True)
28 
29  log.info('**** Setting-up configuration flags')
30  from AthenaConfiguration.AllConfigFlags import initConfigFlags
31  flags = initConfigFlags()
32  # set per-event timeout (in ns)
33  flags.Exec.EventTimeOut = 3600*Units.second
34 
35  commonRunArgsToFlags(runArgs, flags)
36 
37  # Autoconfigure enabled subdetectors
38  if hasattr(runArgs, 'detectors'):
39  detectors = runArgs.detectors
40  else:
41  detectors = None
42 
43  # TODO: event service?
44 
45 
47  inputsDRAW = [prop for prop in dir(runArgs) if prop.startswith('inputDRAW') and prop.endswith('File')]
48  if hasattr(runArgs, 'inputBSFile'):
49  if inputsDRAW:
50  raise RuntimeError('Impossible to run RAWtoALL with input BS and DRAW files (one input type only!)')
51  flags.Input.Files = runArgs.inputBSFile
52  if len(inputsDRAW) == 1:
53  flags.Input.Files = getattr(runArgs, inputsDRAW[0])
54  elif len(inputsDRAW) > 1:
55  raise RuntimeError('Impossible to run RAWtoALL with multiple input DRAW files (viz.: {0})'.format(inputsDRAW))
56 
57  # RDO
58  if hasattr(runArgs, 'inputRDOFile'):
59  flags.Input.Files = runArgs.inputRDOFile
60  if hasattr(runArgs, 'inputRDO_TRIGFile'):
61  flags.Input.Files = runArgs.inputRDO_TRIGFile
62  # TODO: trigger setup
63 
64  # TODO: EVNT?
65 
66 
67  if hasattr(runArgs, 'outputESDFile'):
68  flags.Output.ESDFileName = runArgs.outputESDFile
69  log.info("---------- Configured ESD output")
70 
71  if hasattr(runArgs, 'outputAODFile'):
72  flags.Output.AODFileName = runArgs.outputAODFile
73  log.info("---------- Configured AOD output")
74 
75  if hasattr(runArgs, 'outputHISTFile'):
76  flags.Output.HISTFileName = runArgs.outputHISTFile
77  flags.DQ.doMonitoring = True
78  log.info("---------- Configured HIST output")
79 
80  if hasattr(runArgs, 'outputHIST_R2AFile'):
81  flags.Output.HISTFileName = runArgs.outputHIST_R2AFile
82  flags.DQ.doMonitoring = True
83  log.info("---------- Configured HIST_R2A output")
84 
85  if hasattr(runArgs, 'outputDAOD_IDTIDEFile'):
86  flagString = 'Output.DAOD_IDTIDEFileName'
87  flags.addFlag(flagString, runArgs.outputDAOD_IDTIDEFile)
88  flags.Output.doWriteDAOD = True
89  flags.addFlag('Output.doWriteDAOD_IDTIDE', True)
90  log.info("---------- Configured DAOD_IDTIDE output")
91 
92  if hasattr(runArgs, 'outputDAOD_PIXELVALIDFile'):
93  flagString = 'Output.DAOD_PIXELVALIDFileName'
94  flags.addFlag(flagString, runArgs.outputDAOD_PIXELVALIDFile)
95  flags.Output.doWriteDAOD = True
96  flags.addFlag('Output.doWriteDAOD_PIXELVALID', True)
97  log.info("---------- Configured DAOD_PIXELVALID output")
98 
99  if hasattr(runArgs, 'outputDAOD_IDTRKVALIDFile'):
100  flagString = 'Output.DAOD_IDTRKVALIDFileName'
101  flags.addFlag(flagString, runArgs.outputDAOD_IDTRKVALIDFile)
102  flags.Output.doWriteDAOD = True
103  flags.addFlag('Output.doWriteDAOD_IDTRKVALID', True)
104  log.info("---------- Configured DAOD_IDTRKVALID output")
105 
106  if hasattr(runArgs, 'outputDAOD_SCTVALIDFile'):
107  flagString = 'Output.DAOD_SCTVALIDFileName'
108  flags.addFlag(flagString, runArgs.outputDAOD_SCTVALIDFile)
109  flags.Output.doWriteDAOD = True
110  flags.addFlag('Output.doWriteDAOD_SCTVALID', True)
111  log.info("---------- Configured DAOD_SCTVALID output")
112 
113  if hasattr(runArgs, 'outputDESDM_MCPFile'):
114  flagString = 'Output.DESDM_MCPFileName'
115  flags.addFlag(flagString, runArgs.outputDESDM_MCPFile)
116  flags.Output.doWriteDAOD = True
117  flags.addFlag('Output.doWriteDESDM_MCP', True)
118  log.info("---------- Configured DESDM_MCP output")
119 
120  if hasattr(runArgs, 'outputDRAW_ZMUMUFile'):
121  flagString = 'Output.DRAW_ZmumuFileName'
122  flags.addFlag(flagString, runArgs.outputDRAW_ZMUMUFile)
123  flags.Output.doWriteBS = True
124  log.info("---------- Configured DRAW ZMUMU output")
125 
126  if hasattr(runArgs, 'outputDRAW_EGZFile'):
127  flagString = 'Output.DRAW_EGZFileName'
128  flags.addFlag(flagString, runArgs.outputDRAW_EGZFile)
129  flags.Output.doWriteBS = True
130  log.info("---------- Configured DRAW_EGZ output")
131 
132  if hasattr(runArgs, 'outputDRAW_TAULHFile'):
133  flagString = 'Output.DRAW_TAULHFileName'
134  flags.addFlag(flagString, runArgs.outputDRAW_TAULHFile)
135  flags.Output.doWriteBS = True
136  log.info("---------- Configured DRAW_TAULH output")
137 
138  if hasattr(runArgs, 'outputDRAW_JETFile'):
139  flagString = 'Output.DRAW_JETFileName'
140  flags.addFlag(flagString, runArgs.outputDRAW_JETFile)
141  flags.Output.doWriteBS = True
142  log.info("---------- Configured DRAW_JET output")
143 
144  if hasattr(runArgs, 'outputDAOD_L1CALO1File'):
145  flagString = 'Output.DAOD_L1CALO1FileName'
146  flags.addFlag(flagString, runArgs.outputDAOD_L1CALO1File)
147  flags.Output.doWriteDAOD = True
148  flags.addFlag('Output.doWriteDAOD_L1CALO1', True)
149  log.info("---------- Configured DAOD_L1CALO1 output")
150 
151  if hasattr(runArgs, 'outputDAOD_L1CALO2File'):
152  flagString = 'Output.DAOD_L1CALO2FileName'
153  flags.addFlag(flagString, runArgs.outputDAOD_L1CALO2File)
154  flags.Output.doWriteDAOD = True
155  flags.addFlag('Output.doWriteDAOD_L1CALO2', True)
156  log.info("---------- Configured DAOD_L1CALO2 output")
157 
158  if hasattr(runArgs, 'outputDESDM_PHOJETFile'):
159  flagString = 'Output.DESDM_PHOJETFileName'
160  flags.addFlag(flagString, runArgs.outputDESDM_PHOJETFile)
161  flags.Output.doWriteDAOD = True
162  flags.addFlag('Output.doWriteDESDM_PHOJET', True)
163  log.info("---------- Configured DESDM_PHOJET output")
164 
165  if hasattr(runArgs, 'outputDESDM_ALLCELLSFile'):
166  streamName = 'DESDM_ALLCELLS'
167  flags.addFlag(f'Output.{streamName}FileName', runArgs.outputDESDM_ALLCELLSFile)
168  flags.addFlag(f'Output.doWrite{streamName}', True)
169  log.info("---------- Configured "+streamName+" output")
170 
171  # Reconstruction flags should be parsed after inputs are set
172  from RecJobTransforms.RecoConfigFlags import recoRunArgsToFlags
173  recoRunArgsToFlags(runArgs, flags)
174 
175  from AthenaConfiguration.Enums import ProductionStep
176  flags.Common.ProductionStep=ProductionStep.Reconstruction
177 
178  # Setup detector flags
179  from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
180  setupDetectorFlags(flags, detectors, use_metadata=True, toggle_geometry=True, keep_beampipe=True)
181  # Print reco domain status
182  from RecJobTransforms.RecoConfigFlags import printRecoFlags
183  printRecoFlags(flags)
184 
185  # TODO: DESD, DAOD and DRAW
186 
187  # outputHIST_R2AFile
188  # outputTAG_COMMFile
189  # outputTXT_FTKIPFile
190  # outputNTUP_MUONCALIBFile
191  # outputTXT_JIVEXMLTGZFile
192 
193  # Setup perfmon flags from runargs
194  from PerfMonComps.PerfMonConfigHelpers import setPerfmonFlagsFromRunArgs
195  setPerfmonFlagsFromRunArgs(flags, runArgs)
196 
197  # Pre-include
198  processPreInclude(runArgs, flags)
199 
200  # Pre-exec
201  processPreExec(runArgs, flags)
202 
203  # To respect --athenaopts
204  flags.fillFromArgs()
205 
206  # Lock flags
207  flags.lock()
208 
209  # Main reconstruction steering
210  from RecJobTransforms.RecoSteering import RecoSteering
211  cfg = RecoSteering(flags)
212 
213  # Performance DPDs
214  cfg.flagPerfmonDomain('PerfDPD')
215  # IDTIDE
216  for flag in [key for key in flags._flagdict.keys() if ("Output.DAOD_IDTIDEFileName" in key)]:
217  from DerivationFrameworkInDet.IDTIDE import IDTIDECfg
218  cfg.merge(IDTIDECfg(flags))
219  log.info("---------- Configured IDTIDE perfDPD")
220 
221  # PixelVALID
222  for flag in [key for key in flags._flagdict.keys() if ("Output.DAOD_PIXELVALIDFileName" in key)]:
223  from DerivationFrameworkInDet.PIXELVALID import PixelVALIDCfg
224  cfg.merge(PixelVALIDCfg(flags))
225  log.info("---------- Configured PixelVALID perfDPD")
226 
227  # SCTVALID
228  for flag in [key for key in flags._flagdict.keys() if ("Output.DAOD_SCTVALIDFileName" in key)]:
229  from InDetPrepRawDataToxAOD.SCTVALID import SCTVALIDCfg
230  cfg.merge(SCTVALIDCfg(flags))
231  log.info("---------- Configured SCTVALID perfDPD")
232 
233  # IDTRKVALID
234  for flag in [key for key in flags._flagdict.keys() if ("Output.DAOD_IDTRKVALIDFileName" in key)]:
235  from DerivationFrameworkInDet.IDTRKVALID import IDTRKVALIDCfg
236  cfg.merge(IDTRKVALIDCfg(flags))
237  log.info("---------- Configured IDTRKVALID perfDPD")
238 
239  # DESDM_MCP
240  for flag in [key for key in flags._flagdict.keys() if ("Output.DESDM_MCPFileName" in key)]:
241  from PrimaryDPDMaker.DESDM_MCP import DESDM_MCPCfg
242  cfg.merge(DESDM_MCPCfg(flags))
243  log.info("---------- Configured DESDM_MCP perfDPD")
244 
245  # DRAW ZMUMU
246  for flag in [key for key in flags._flagdict.keys() if ("Output.DRAW_ZmumuFileName" in key)]:
247  from PrimaryDPDMaker.DRAW_ZMUMU import DRAW_ZmumuCfg
248  cfg.merge(DRAW_ZmumuCfg(flags))
249  log.info("---------- Configured DRAW_ZMUMU perfDPD")
250 
251  #DRAW_EGZ
252  for flag in [key for key in flags._flagdict.keys() if ("Output.DRAW_EGZFileName" in key)]:
253  from PrimaryDPDMaker.DRAW_EGZ import DRAW_EGZCfg
254  cfg.merge(DRAW_EGZCfg(flags))
255  log.info("---------- Configured DRAW_EGZ perfDPD")
256 
257  #DRAW_TAULH
258  for flag in [key for key in flags._flagdict.keys() if ("Output.DRAW_TAULHFileName" in key)]:
259  from PrimaryDPDMaker.DRAW_TAULH import DRAW_TAULHCfg
260  cfg.merge(DRAW_TAULHCfg(flags))
261  log.info("---------- Configured DRAW_TAULH perfDPD")
262 
263  #DRAW_JET
264  for flag in [key for key in flags._flagdict.keys() if ("Output.DRAW_JETFileName" in key)]:
265  from PrimaryDPDMaker.DRAW_JET import DRAW_JETCfg
266  cfg.merge(DRAW_JETCfg(flags))
267  log.info("---------- Configured DRAW_JET perfDPD")
268 
269  # L1CALO1/2
270  for flag in [key for key in flags._flagdict.keys() if ("Output.DAOD_L1CALO1FileName" in key)]:
271  from DerivationFrameworkL1Calo.L1CALO1 import L1CALO1Cfg
272  cfg.merge(L1CALO1Cfg(flags))
273  log.info("---------- Configured L1CALO1 perfDPD")
274 
275  for flag in [key for key in flags._flagdict.keys() if ("Output.DAOD_L1CALO2FileName" in key)]:
276  from DerivationFrameworkL1Calo.L1CALO2 import L1CALO2Cfg
277  cfg.merge(L1CALO2Cfg(flags))
278  log.info("---------- Configured L1CALO2 perfDPD")
279 
280  # DESDM PHOJET
281  for flag in [key for key in flags._flagdict.keys() if ("Output.DESDM_PHOJETFileName" in key)]:
282  from PrimaryDPDMaker.DESDM_PHOJET import DESDM_PHOJETCfg
283  cfg.merge(DESDM_PHOJETCfg(flags))
284  log.info("---------- Configured PHOJET perfDPD")
285 
286  # DESDM ALLCELLS
287  for flag in [key for key in flags._flagdict.keys() if ("Output.DESDM_ALLCELLSFileName" in key)]:
288  from PrimaryDPDMaker.DESDM_ALLCELLS import DESDM_ALLCELLSCfg
289  cfg.merge(DESDM_ALLCELLSCfg(flags))
290  log.info("---------- Configured ALLCELLS perfDPD")
291 
292  # Special message service configuration
293  from DigitizationConfig.DigitizationSteering import DigitizationMessageSvcCfg
294  cfg.merge(DigitizationMessageSvcCfg(flags))
295 
296  # Post-include
297  processPostInclude(runArgs, flags, cfg)
298 
299  # Post-exec
300  processPostExec(runArgs, flags, cfg)
301 
302  from AthenaConfiguration.Utils import setupLoggingLevels
303  setupLoggingLevels(flags, cfg)
304 
305  # Write some metadata into TagInfo
306  from EventInfoMgt.TagInfoMgrConfig import TagInfoMgrCfg
307  cfg.merge(
309  flags,
310  tagValuePairs={
311  "beam_type": flags.Beam.Type.value,
312  "beam_energy": str(int(flags.Beam.Energy)),
313  "triggerStreamOfFile": ""
314  if flags.Input.isMC
315  else flags.Input.TriggerStream,
316  "project_name": "IS_SIMULATION"
317  if flags.Input.isMC
318  else flags.Input.ProjectName,
319  f"AtlasRelease_{runArgs.trfSubstepName}": flags.Input.Release or "n/a",
320  },
321  )
322  )
323  if not flags.Input.isMC and flags.Input.DataYear > 0:
324  cfg.merge(TagInfoMgrCfg(flags, tagValuePairs={
325  "data_year": str(flags.Input.DataYear)
326  }))
327 
328  # Write AMI tag into in-file metadata
329  from PyUtils.AMITagHelperConfig import AMITagCfg
330  cfg.merge(AMITagCfg(flags, runArgs))
331 
332  # Print PerfMon domain information when running detailed monitoring
333  if flags.PerfMon.doFullMonMT:
334  cfg.printPerfmonDomains()
335 
336  timeConfig = time.time()
337  log.info("configured in %d seconds", timeConfig - timeStart)
338 
339  log.info("Configured according to flag values listed below")
340  flags.dump()
341 
342  # Print sum information about AccumulatorCache performance
343  from AthenaConfiguration.AccumulatorCache import AccumulatorDecorator
344  AccumulatorDecorator.printStats()
345 
346  # Run the final accumulator
347  sc = cfg.run()
348  timeFinal = time.time()
349  log.info("Run RAWtoALL_skeleton in %d seconds (running %d seconds)", timeFinal - timeStart, timeFinal - timeConfig)
350 
351  import sys
352  sys.exit(not sc.isSuccess())
python.RAWtoALL_Skeleton.fromRunArgs
def fromRunArgs(runArgs)
Definition: RAWtoALL_Skeleton.py:14
python.RecoSteering.RecoSteering
def RecoSteering(flags)
Definition: RecoSteering.py:6
python.DESDM_PHOJET.DESDM_PHOJETCfg
def DESDM_PHOJETCfg(configFlags)
Definition: DESDM_PHOJET.py:40
python.TransformUtils.processPreExec
def processPreExec(runArgs, flags)
Definition: Tools/PyJobTransforms/python/TransformUtils.py:41
vtune_athena.format
format
Definition: vtune_athena.py:14
python.TransformUtils.processPostExec
def processPostExec(runArgs, flags, cfg)
Definition: Tools/PyJobTransforms/python/TransformUtils.py:50
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
python.DESDM_MCP.DESDM_MCPCfg
def DESDM_MCPCfg(flags)
Definition: DESDM_MCP.py:353
python.DESDM_ALLCELLS.DESDM_ALLCELLSCfg
def DESDM_ALLCELLSCfg(configFlags)
Definition: DESDM_ALLCELLS.py:27
L1CALO1.L1CALO1Cfg
def L1CALO1Cfg(flags)
Definition: L1CALO1.py:15
python.RecoConfigFlags.printRecoFlags
def printRecoFlags(flags)
Definition: RecoConfigFlags.py:153
python.TransformUtils.processPostInclude
def processPostInclude(runArgs, flags, cfg)
Definition: Tools/PyJobTransforms/python/TransformUtils.py:69
python.RecoConfigFlags.recoRunArgsToFlags
def recoRunArgsToFlags(runArgs, flags)
Definition: RecoConfigFlags.py:196
python.TransformUtils.processPreInclude
def processPreInclude(runArgs, flags)
Definition: Tools/PyJobTransforms/python/TransformUtils.py:62
python.TagInfoMgrConfig.TagInfoMgrCfg
def TagInfoMgrCfg(flags, tagValuePairs={})
Definition: TagInfoMgrConfig.py:6
python.DigitizationSteering.DigitizationMessageSvcCfg
def DigitizationMessageSvcCfg(flags)
Definition: DigitizationSteering.py:217
python.DRAW_TAULH.DRAW_TAULHCfg
def DRAW_TAULHCfg(flags)
Definition: DRAW_TAULH.py:121
python.Utils.setupLoggingLevels
def setupLoggingLevels(flags, ca)
Definition: Control/AthenaConfiguration/python/Utils.py:46
python.SCTVALID.SCTVALIDCfg
def SCTVALIDCfg(flags)
Definition: SCTVALID.py:89
python.PerfMonConfigHelpers.setPerfmonFlagsFromRunArgs
def setPerfmonFlagsFromRunArgs(flags, runArgs)
Definition: PerfMonConfigHelpers.py:3
python.Helpers.ROOT6Setup
def ROOT6Setup(batch=False)
Definition: Tools/PyUtils/python/Helpers.py:19
python.CommonRunArgsToFlags.commonRunArgsToFlags
def commonRunArgsToFlags(runArgs, configFlags)
Definition: CommonRunArgsToFlags.py:12
python.PIXELVALID.PixelVALIDCfg
def PixelVALIDCfg(flags)
Definition: PIXELVALID.py:190
beamspotman.dir
string dir
Definition: beamspotman.py:623
python.DetectorConfigFlags.setupDetectorFlags
def setupDetectorFlags(flags, custom_list=None, use_metadata=False, toggle_geometry=False, validate_only=False, keep_beampipe=False)
Definition: DetectorConfigFlags.py:286
python.DRAW_JET.DRAW_JETCfg
def DRAW_JETCfg(flags)
Definition: DRAW_JET.py:64
python.AMITagHelperConfig.AMITagCfg
def AMITagCfg(flags, runArgs=None, fixBroken=False)
Definition: AMITagHelperConfig.py:77
python.DRAW_EGZ.DRAW_EGZCfg
def DRAW_EGZCfg(flags)
Definition: DRAW_EGZ.py:94
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.IDTRKVALID.IDTRKVALIDCfg
def IDTRKVALIDCfg(flags)
Definition: IDTRKVALID.py:229
str
Definition: BTagTrackIpAccessor.cxx:11
python.IDTIDE.IDTIDECfg
def IDTIDECfg(flags)
Definition: IDTIDE.py:304
L1CALO2.L1CALO2Cfg
def L1CALO2Cfg(flags)
Definition: L1CALO2.py:15
python.DRAW_ZMUMU.DRAW_ZmumuCfg
def DRAW_ZmumuCfg(flags)
Definition: DRAW_ZMUMU.py:85