ATLAS Offline Software
Loading...
Searching...
No Matches
PoolReadConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5from AthenaConfiguration.Enums import ProductionStep
6import ROOT
7
8
10 result = ComponentAccumulator()
11 if flags.MP.UseSharedReader:
12 evSel = CompFactory.EventSelectorAthenaPoolSharedIO("EventSelector",
13 InputCollections=flags.Input.Files,
14 SkipEvents=flags.Exec.SkipEvents,
15 ConversionService="AthenaPoolSharedIOCnvSvc")
16 else:
17 evSel = CompFactory.EventSelectorAthenaPool("EventSelector",
18 InputCollections=flags.Input.Files,
19 SkipEvents=flags.Exec.SkipEvents,
20 ConversionService="AthenaPoolSharedIOCnvSvc" if flags.MP.UseSharedWriter else "AthenaPoolCnvSvc")
21 if flags.Input.OverrideRunNumber:
22 if not flags.Input.RunAndLumiOverrideList:
23 DataRunNumber = -1
24 FirstLB = 1
25 InitialTimeStamp = 1
26 OldRunNumber = -1
27 if flags.Input.ConditionsRunNumber > 0:
28 # Behaviour for Digitization jobs using DataRunNumber
29 DataRunNumber = flags.Input.ConditionsRunNumber
30 FirstLB = 1
31 InitialTimeStamp = flags.IOVDb.RunToTimestampDict.get(DataRunNumber, 1) # TODO fix repeated configuration
32 if not flags.Sim.DoFullChain:
33 OldRunNumber = flags.Input.RunNumbers[0] # CHECK this should be the Run Number from the HITS file
34 elif flags.Input.RunNumbers:
35 # Behaviour for Simulation jobs
36 DataRunNumber = flags.Input.RunNumbers[0]
37 FirstLB = flags.Input.LumiBlockNumbers[0]
38 InitialTimeStamp = flags.Input.TimeStamps[0]
39 assert DataRunNumber >= 0, (
40 "flags.Input.OverrideRunNumber was True, but provided DataRunNumber (%d) is negative. "
41 "Use a real run number from data." % DataRunNumber)
42 evSel.OverrideRunNumber = True
43 evSel.RunNumber = DataRunNumber
44 evSel.FirstLB = FirstLB
45 evSel.InitialTimeStamp = InitialTimeStamp # Necessary to avoid a crash
46 if hasattr(evSel, "OverrideRunNumberFromInput"):
47 evSel.OverrideRunNumberFromInput = True
48 if OldRunNumber > 0:
49 evSel.OldRunNumber = OldRunNumber
50 elif flags.Common.ProductionStep in [ProductionStep.Simulation, ProductionStep.FastChain]:
51 # Behaviour for Simulation and FastChain jobs using RunAndLumiOverrideList
52 from AthenaKernel.EventIdOverrideConfig import getMinMaxRunNumbers, getFirstLumiBlock
53 minMax = getMinMaxRunNumbers(flags)
54 evSel.OverrideRunNumber = True
55 evSel.RunNumber = minMax[0]
56 evSel.FirstLB = getFirstLumiBlock(flags, minMax[0])
57 evSel.InitialTimeStamp = flags.IOVDb.RunToTimestampDict.get(minMax[0], 1) # TODO fix repeated configuration
58 if hasattr(evSel, "OverrideRunNumberFromInput"):
59 evSel.OverrideRunNumberFromInput = True
60 else:
61 # Behaviour for Digitization jobs using RunAndLumiOverrideList
62 pass
63 from AthenaKernel.EventIdOverrideConfig import EvtIdModifierSvcCfg
64 result.merge(EvtIdModifierSvcCfg(flags))
65 elif flags.Common.ProductionStep in [ProductionStep.Simulation] and len(flags.Input.RunNumbers) and flags.Sim.ISF.ReSimulation:
66 # ReSimulation case
67 evSel.OverrideRunNumber = True
68 evSel.RunNumber = flags.Input.RunNumbers[0]
69 if flags.Input.LumiBlockNumbers:
70 evSel.FirstLB = flags.Input.LumiBlockNumbers[0]
71 evSel.InitialTimeStamp = flags.IOVDb.RunToTimestampDict.get(flags.Input.RunNumbers[0], 1)
72
73 result.addService(evSel)
74 return result
75
76
77def PoolReadCfg(flags,allowAODFix=True):
78 """
79 Creates a ComponentAccumulator instance containing the
80 athena services required for POOL file reading
81 """
82
83 result = ComponentAccumulator()
84
85 from AthenaPoolCnvSvc.PoolCommonConfig import AthenaPoolAddressProviderSvcCfg
86 if flags.MP.UseSharedReader or flags.MP.UseSharedWriter:
87 from AthenaPoolCnvSvc.PoolCommonConfig import AthenaPoolSharedIOCnvSvcCfg
88 result.merge(AthenaPoolSharedIOCnvSvcCfg(flags, InputPoolAttributes=["DatabaseName = '*'; ContainerName = 'CollectionTree'; TREE_CACHE = '-1'"]))
89 elif flags.PoolSvc.PersSvcPerInputType: # Switch off caching when using many TFiles
90 from AthenaPoolCnvSvc.PoolCommonConfig import AthenaPoolCnvSvcCfg
91 result.merge(AthenaPoolCnvSvcCfg(flags, InputPoolAttributes=["DatabaseName = '*'; ContainerName = 'CollectionTree'; TREE_CACHE = '0'"]))
92 else:
93 from AthenaPoolCnvSvc.PoolCommonConfig import AthenaPoolCnvSvcCfg
94 result.merge(AthenaPoolCnvSvcCfg(flags, InputPoolAttributes=["DatabaseName = '*'; ContainerName = 'CollectionTree'; TREE_CACHE = '-1'"]))
95
96 # Suppress ROOT warnings about old I/O classes.
97 from AthenaServices.ROOTMessageFilterSvcConfig import ROOTMessageFilterSvcCfg
98 result.merge(ROOTMessageFilterSvcCfg(flags,
99 SuppressionRules=[('TClass::Init',
100 '.*DataHeader.*_p[12].*',
101 ROOT.kWarning),
102 ('TClass::Init',
103 '.*PoolToken_p1.*',
104 ROOT.kWarning)]))
105
106 if flags.Input.SecondaryFiles:
107 skipEventsPrimary = flags.Exec.SkipEvents
108 skipEventsSecondary = flags.Exec.SkipEvents
109 if flags.Overlay.SkipSecondaryEvents >= 0:
110 skipEventsSecondary = flags.Overlay.SkipSecondaryEvents
111
112 # Create DoubleEventSelector (universal for any seconday input type)
113 evSel = CompFactory.DoubleEventSelectorAthenaPool("EventSelector",
114 InputCollections=flags.Input.Files)
115 if flags.Common.isOverlay and flags.Overlay.DataOverlay:
116 evSel.OverrideRunNumber = True
117 evSel.RunNumber = flags.Input.RunNumbers[0]
118 evSel.FirstLB = flags.Input.LumiBlockNumbers[0]
119 evSel.InitialTimeStamp = flags.Input.TimeStamps[0]
120
121 # Overlay background RDOs are primary input
122 evSel.SkipEvents = skipEventsSecondary
123 # Do not process background input metadata
124 evSel.ProcessMetadata = False
125
126 # We have primary and secondary pool inputs, create two address providers
127 result.merge(AthenaPoolAddressProviderSvcCfg(flags,
128 name="AthenaPoolAddressProviderSvcPrimary",
129 DataHeaderKey="EventSelector",
130 AttributeListKey="Input"))
131 result.merge(AthenaPoolAddressProviderSvcCfg(flags,
132 name="AthenaPoolAddressProviderSvcSecondary",
133 DataHeaderKey="SecondaryEventSelector"))
134
135 secondarySel = CompFactory.EventSelectorAthenaPool("SecondaryEventSelector",
136 IsSecondary=True,
137 InputCollections=flags.Input.SecondaryFiles,
138 SkipEvents=skipEventsPrimary)
139 result.addService(secondarySel)
140 result.addService(evSel)
141 else:
142 # We have only primary inputs
143 result.merge(AthenaPoolAddressProviderSvcCfg(flags))
144 result.merge(EventSelectorAthenaPoolCfg(flags))
145 evSel = result.getService("EventSelector")
146
147 if allowAODFix:
148 #Schedule a (potential) AODFix ...
149 processingTags=flags.Input.ProcessingTags
150 if "StreamAOD" in processingTags:
151 try:
152 from RecJobTransforms.AODFixConfig import AODFixCfg
153 result.merge(AODFixCfg(flags))
154 except ImportError:
155 #Looks like running on AthSimulation or AthAnalysis ... ignore AODFix
156 pass
157
158
159
160 result.setAppProperty("EvtSel", evSel.getFullJobOptName())
161
162 return result
PoolReadCfg(flags, allowAODFix=True)