ATLAS Offline Software
EVNTMerge_Skeleton.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 from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags
5 from PyJobTransforms.TransformUtils import processPreExec, processPreInclude, processPostExec, processPostInclude
6 
7 # force no legacy job properties
8 from AthenaCommon import JobProperties
9 JobProperties.jobPropertiesDisallowed = True
10 
11 
12 def fromRunArgs(runArgs):
13  from AthenaCommon.Logging import logging
14  log = logging.getLogger("EVNTMerge")
15  log.info("****************** STARTING EVNT MERGING *****************")
16 
17  log.info("**** Transformation run arguments")
18  log.info(str(runArgs))
19 
20  log.info("**** Setting-up configuration flags")
21  from AthenaConfiguration.AllConfigFlags import initConfigFlags
22  flags = initConfigFlags()
23 
24  from AthenaConfiguration.Enums import ProductionStep, MetadataCategory
25  flags.Common.ProductionStep = ProductionStep.Generation
26 
27  commonRunArgsToFlags(runArgs, flags)
28 
29  if hasattr(runArgs, "inputEVNTFile"):
30  flags.Input.Files = runArgs.inputEVNTFile
31  else:
32  raise RuntimeError("No input EVNT file defined")
33 
34  if hasattr(runArgs, "outputEVNT_MRGFile"):
35  if runArgs.outputEVNT_MRGFile == "None":
36  flags.Output.EVNTFileName = ""
37  # TODO decide if we need a specific EVNT_MRGFileName flag
38  else:
39  flags.Output.EVNTFileName = runArgs.outputEVNT_MRGFile
40  else:
41  raise RuntimeError("No outputEVNT_MRGFile defined")
42 
43  # Pre-include
44  processPreInclude(runArgs, flags)
45 
46  # Pre-exec
47  processPreExec(runArgs, flags)
48 
49  # To respect --athenaopts
50  flags.fillFromArgs()
51 
52  # Lock flags
53  flags.lock()
54 
55  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
56  cfg = MainServicesCfg(flags)
57 
58  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
59  cfg.merge(PoolReadCfg(flags))
60 
61  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
62  cfg.merge(OutputStreamCfg(flags, "EVNT", disableEventTag = True, takeItemsFromInput = True, extendProvenanceRecord = False))
63 
64  # Add in-file MetaData
65  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
66 
67  cfg.merge(
69  flags,
70  "EVNT",
71  disableEventTag=True,
72  createMetadata=[MetadataCategory.IOVMetaData],
73  )
74  )
75 
76  # Post-include
77  processPostInclude(runArgs, flags, cfg)
78 
79  # Post-exec
80  processPostExec(runArgs, flags, cfg)
81 
82  # Write AMI tag into in-file metadata
83  from PyUtils.AMITagHelperConfig import AMITagCfg
84  cfg.merge(AMITagCfg(flags, runArgs))
85 
86 
87  from AthenaConfiguration.AutoConfigFlags import GetFileMD
88  hepmc_version = GetFileMD(flags.Input.Files).get("hepmc_version", None)
89  if hepmc_version is not None:
90  if hepmc_version == "2":
91  hepmc_version = "HepMC2"
92  elif hepmc_version == "3":
93  hepmc_version = "HepMC3"
94  log.info("Input file was produced with %s", hepmc_version)
95  from EventInfoMgt.TagInfoMgrConfig import TagInfoMgrCfg
96  cfg.merge(TagInfoMgrCfg(flags, tagValuePairs={"hepmc_version": hepmc_version}))
97 
98  import time
99  tic = time.time()
100  # Run the final accumulator
101  sc = cfg.run()
102  log.info("Ran EVNTMerge_tf in " + str(time.time()-tic) + " seconds")
103 
104  sys.exit(not sc.isSuccess())
python.AutoConfigFlags.GetFileMD
def GetFileMD(filenames, allowEmpty=True, maxLevel='peeker')
Definition: AutoConfigFlags.py:65
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.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:12
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.TagInfoMgrConfig.TagInfoMgrCfg
def TagInfoMgrCfg(flags, tagValuePairs={})
Definition: TagInfoMgrConfig.py:6
python.EVNTMerge_Skeleton.fromRunArgs
def fromRunArgs(runArgs)
Definition: EVNTMerge_Skeleton.py:12
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:260
python.CommonRunArgsToFlags.commonRunArgsToFlags
def commonRunArgsToFlags(runArgs, configFlags)
Definition: CommonRunArgsToFlags.py:12
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
str
Definition: BTagTrackIpAccessor.cxx:11
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69