ATLAS Offline Software
TestWriteFileMetaDataAOD.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2 """Test multi-threaded xAOD::FileMetaData writing
3 
4 Read default test AOD and configure to write output stream with
5 xAOD::FileMetaData object. Set up to process 4 concurrent events. Inspect the
6 produced file for xAOD::FileMetaData metadata items.
7 
8  Typical usage example
9  python -m xAODMetaDataCnv.TestWriteFileMetaDataAOD |tee log
10 """
11 import sys
12 from AthenaConfiguration import AllConfigFlags, Enums, TestDefaults, MainServicesConfig
13 from AthenaCommon import Constants, Logging
14 from OutputStreamAthenaPool import OutputStreamConfig
15 from PyUtils import MetaReader
16 from xAODEventInfoCnv import xAODEventInfoCnvConfig
17 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
18 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
19 
20 
21 def writeFileMetaData(flags):
22  """set up an output stream and xAOD::EventInfo"""
23  accumulator = OutputStreamConfig.OutputStreamCfg(flags, streamName="AOD")
24  accumulator.merge(SetupMetaDataForStreamCfg(flags, streamName="AOD"))
25 
26  accumulator.merge(
27  xAODEventInfoCnvConfig.EventInfoCnvAlgCfg(
28  flags=flags, inputKey="", disableBeamSpot=flags.Common.Project is not Enums.Project.Athena
29  )
30  )
31 
32  return accumulator
33 
34 
35 def testMetaData(file_name):
36  """Check that file metadata is in output"""
37  meta = MetaReader.read_metadata([file_name])[file_name]["metadata_items"]
38  file_info_items = [
39  v for _, v in meta.items() if "FileMetaData" in v
40  ]
41  print("found file metadata objects:", file_info_items)
42  return bool(file_info_items)
43 
44 
45 def main():
46  """Run a job writing a file with FileMetaData"""
47  msg = Logging.logging.getLogger("TestFileMetaData")
48 
49  flags = AllConfigFlags.initConfigFlags()
50  flags.Exec.OutputLevel = Constants.DEBUG
51  flags.Input.Files = TestDefaults.defaultTestFiles.AOD_RUN2_DATA
52  flags.Output.AODFileName = "test.pool.root"
53  flags.Output.doWriteAOD = True
54  flags.Concurrency.NumThreads = 4
55  flags.Concurrency.NumConcurrentEvents = 4
56  flags.lock()
57 
58  write = MainServicesConfig.MainServicesCfg(flags)
59  write.merge(PoolReadCfg(flags))
60  write.merge(writeFileMetaData(flags))
61  write.run(100)
62 
63  try:
64  if testMetaData(flags.Output.AODFileName):
65  msg.info("File contains xAOD::FileMetaData")
66  return 0
67  msg.error("File does not contain xAOD::FileMetaData")
68  except ReferenceError:
69  msg.error("Failed to produce output file")
70  except KeyError:
71  msg.error("Failed to get metadata item list from file")
72  return 1
73 
74 
75 if __name__ == "__main__":
76  sys.exit(main())
TestWriteFileMetaDataAOD.main
def main()
Definition: TestWriteFileMetaDataAOD.py:45
TestWriteFileMetaDataAOD.testMetaData
def testMetaData(file_name)
Definition: TestWriteFileMetaDataAOD.py:35
TestWriteFileMetaDataAOD.writeFileMetaData
def writeFileMetaData(flags)
Definition: TestWriteFileMetaDataAOD.py:21
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:216
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60