ATLAS Offline Software
xAODEventSelectorConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2023 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 # Converted from ReadAthenaxAODHybrid.py
7 # @author Teng Jian Khoo
8 #
9 
10 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
11 from AthenaConfiguration.ComponentFactory import CompFactory
12 from AthenaCommon import Logging
13 from AthenaCommon import Constants
14 from AthenaServices.MetaDataSvcConfig import MetaDataSvcCfg
15 
16 # suppress the event loop heartbeat as it is somewhat I/O hungry for
17 # no real gain in n-tuple reading/writing scenarii
18 # if not hasattr(svcMgr, theApp.EventLoop): svcMgr += getattr(CfgMgr, theApp.EventLoop)()
19 # evtloop = getattr(svcMgr, theApp.EventLoop)
20 # try:
21 # evtloop.EventPrintoutInterval = 10000
22 # except Exception:
23 # msg.info('disabling event loop heartbeat... [failed]')
24 # msg.info('performances might be sub-par... sorry.')
25 # pass
26 
27 from enum import IntEnum
28 # Duplicate here because it's probably more efficient than importing from ROOT
29 class xAODAccessMode(IntEnum):
30  BRANCH_ACCESS = 0
31  CLASS_ACCESS = 1
32  ATHENA_ACCESS = 2
33 
34 # Default to the most efficient access method
35 def xAODReadCfg(flags, AccessMode=xAODAccessMode.CLASS_ACCESS):
36  """
37  Creates a ComponentAccumulator instance containing the
38  athena services required for xAOD file reading
39  """
40 
41  msg = Logging.logging.getLogger( 'ReadAthenaxAODHybrid' )
42  msg.debug("Configuring Athena for reading xAOD files (via TEvent, with POOL for Metadata)...")
43 
44 
45  result=ComponentAccumulator()
46 
47  result.addService(CompFactory.EvtPersistencySvc("EventPersistencySvc",)) #No service handle yet???
48  result.merge(MetaDataSvcCfg(flags))
49 
50  result.addService(CompFactory.StoreGateSvc("MetaDataStore"))
51  # Suppress some uninformative messages
52  result.addService(CompFactory.PoolSvc("PoolSvc",OutputLevel=Constants.WARNING))
53 
54  # result.addService(CompFactory.THistSvc())
55  result.addService(CompFactory.Athena.xAODCnvSvc())
56 
57  result.addService(CompFactory.ProxyProviderSvc("ProxyProviderSvc",ProviderNames=[ "MetaDataSvc"]))
58  result.addService(
59  CompFactory.Athena.xAODEventSelector(
60  name='EventSelector',
61  InputCollections=flags.Input.Files,
62  SkipEvents=flags.Exec.SkipEvents,
63  AccessMode=AccessMode,
64  ReadMetaDataWithPool=True,
65  printEventProxyWarnings=False,
66  ))
67  evSel = result.getService("EventSelector")
68 
69  result.setAppProperty("EvtSel",evSel.getFullJobOptName())
70 
71  msg.debug("Configuring Athena for reading ROOT files (via TEvent, with POOL for Metadata)... [OK]")
72 
73  return result
74 
75 
76 
77 if __name__=="__main__":
78  from AthenaConfiguration.AllConfigFlags import initConfigFlags
79  import os
80  asg_test_file_mc = os.environ['ASG_TEST_FILE_MC']
81  flags = initConfigFlags()
82  flags.Input.Files=[asg_test_file_mc]
83 
84  import sys
85  if len(sys.argv)>1:
86  flags.Input.Files=[sys.argv[1]]
87  flags.lock()
88 
89  AccessMode = xAODAccessMode.CLASS_ACCESS
90  if len(sys.argv)>2:
91  AccessMode = xAODAccessMode(int(sys.argv[2]))
92 
93  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
94  cfg = MainServicesCfg(flags)
95  cfg.merge(xAODReadCfg(flags,AccessMode))
96 
97  cfg.run(10)
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
python.xAODEventSelectorConfig.xAODAccessMode
Definition: xAODEventSelectorConfig.py:29
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:256
python.xAODEventSelectorConfig.xAODReadCfg
def xAODReadCfg(flags, AccessMode=xAODAccessMode.CLASS_ACCESS)
Definition: xAODEventSelectorConfig.py:35
python.MetaDataSvcConfig.MetaDataSvcCfg
def MetaDataSvcCfg(flags, toolNames=[], tools=[])
Definition: MetaDataSvcConfig.py:6
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19