ATLAS Offline Software
Loading...
Searching...
No Matches
xAODEventSelectorConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3# @file xAODHybridSelectorConfig
4# @purpose make the Athena framework read a set of xAOD files to emulate the
5# usual TEvent event loop ... BUT READ METADATA WITH POOL!
6# @author Teng Jian Khoo
7#
8
9from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
10from AthenaConfiguration.ComponentFactory import CompFactory
11from AthenaCommon import Logging
12from AthenaCommon import Constants
13from AthenaServices.MetaDataSvcConfig import MetaDataSvcCfg
14from enum import IntEnum
15
16# Duplicate here because it's probably more efficient than importing from ROOT
17class xAODAccessMode(IntEnum):
18 BRANCH_ACCESS = 0
19 CLASS_ACCESS = 1
20 ATHENA_ACCESS = 2
21
22# Default to the most efficient access method
23def xAODReadCfg(flags, AccessMode=xAODAccessMode.CLASS_ACCESS):
24 """
25 Creates a ComponentAccumulator instance containing the
26 athena services required for xAOD file reading
27 """
28
29 msg = Logging.logging.getLogger( 'xAODReadCfg' )
30 msg.debug("Configuring Athena for reading xAOD files (via TEvent, with POOL for Metadata)...")
31
32
33 result=ComponentAccumulator()
34
35 result.addService(CompFactory.EvtPersistencySvc("EventPersistencySvc",)) #No service handle yet???
36 result.merge(MetaDataSvcCfg(flags))
37
38 result.addService(CompFactory.StoreGateSvc("MetaDataStore"))
39 # Suppress some uninformative messages
40 result.addService(CompFactory.PoolSvc("PoolSvc",OutputLevel=Constants.WARNING))
41
42 # result.addService(CompFactory.THistSvc())
43 result.addService(CompFactory.Athena.xAODCnvSvc())
44
45 result.addService(CompFactory.ProxyProviderSvc("ProxyProviderSvc",ProviderNames=[ "MetaDataSvc"]))
46 result.addService(
47 CompFactory.Athena.xAODEventSelector(
48 name='EventSelector',
49 InputCollections=flags.Input.Files,
50 SkipEvents=flags.Exec.SkipEvents,
51 AccessMode=AccessMode,
52 ReadMetaDataWithPool=True,
53 printEventProxyWarnings=False,
54 ))
55 evSel = result.getService("EventSelector")
56
57 result.setAppProperty("EvtSel",evSel.getFullJobOptName())
58
59 msg.debug("Configuring Athena for reading ROOT files (via TEvent, with POOL for Metadata)... [OK]")
60
61 return result
62
63
64
65if __name__=="__main__":
66 from AthenaConfiguration.AllConfigFlags import initConfigFlags
67 import os
68 asg_test_file_mc = os.environ['ASG_TEST_FILE_MC']
69 flags = initConfigFlags()
70 flags.Input.Files=[asg_test_file_mc]
71
72 import sys
73 if len(sys.argv)>1:
74 flags.Input.Files=[sys.argv[1]]
75 flags.lock()
76
77 AccessMode = xAODAccessMode.CLASS_ACCESS
78 if len(sys.argv)>2:
79 AccessMode = xAODAccessMode(int(sys.argv[2]))
80
81 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
82 cfg = MainServicesCfg(flags)
83 cfg.merge(xAODReadCfg(flags,AccessMode))
84
85 cfg.run(10)
xAODReadCfg(flags, AccessMode=xAODAccessMode.CLASS_ACCESS)