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:
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
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
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
122 evSel.SkipEvents = skipEventsSecondary
123
124 evSel.ProcessMetadata = False
125
126
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
143 result.merge(AthenaPoolAddressProviderSvcCfg(flags))
144 result.merge(EventSelectorAthenaPoolCfg(flags))
145 evSel = result.getService("EventSelector")
146
147 if allowAODFix:
148
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
156 pass
157
158
159
160 result.setAppProperty("EvtSel", evSel.getFullJobOptName())
161
162 return result