ATLAS Offline Software
Loading...
Searching...
No Matches
TestWriteFileMetaDataHITS.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
4Read default test HITS and configure to write output stream with
5xAOD::FileMetaData object. Set up to process 4 concurrent events. Inspect the
6produced file for xAOD::FileMetaData metadata items.
7
8 Typical usage example
9 python -m xAODMetaDataCnv.TestWriteFileMetaDataHITS |tee log
10"""
11import sys
12from AthenaConfiguration import AllConfigFlags, Enums, TestDefaults, MainServicesConfig
13from AthenaCommon import Constants, Logging
14from OutputStreamAthenaPool import OutputStreamConfig
15from PyUtils import MetaReader
16from xAODEventInfoCnv import xAODEventInfoCnvConfig
17from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
18from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
19
20
22 """set up an output stream and xAOD::EventInfo"""
23 accumulator = OutputStreamConfig.OutputStreamCfg(flags, streamName="HITS")
24 accumulator.merge(SetupMetaDataForStreamCfg(flags, streamName="HITS"))
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
35def 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
45def 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.HITS_RUN2
52 flags.Output.HITSFileName = "test.pool.root"
53 flags.Concurrency.NumThreads = 4
54 flags.Concurrency.NumConcurrentEvents = 4
55 flags.lock()
56
57 write = MainServicesConfig.MainServicesCfg(flags)
58 write.merge(PoolReadCfg(flags))
59 write.merge(writeFileMetaData(flags))
60 write.run(100)
61
62 try:
63 if testMetaData(flags.Output.HITSFileName):
64 msg.info("File contains xAOD::FileMetaData")
65 return 0
66 msg.error("File does not contain xAOD::FileMetaData")
67 except ReferenceError:
68 msg.error("Failed to produce output file")
69 except KeyError:
70 msg.error("Failed to get metadata item list from file")
71 return 1
72
73
74if __name__ == "__main__":
75 sys.exit(main())
void print(char *figname, TCanvas *c1)