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):
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 CollectionType="RootCollection",
115 InputCollections=flags.Input.Files)
116 if flags.Common.isOverlay and flags.Overlay.DataOverlay:
117 evSel.OverrideRunNumber = True
118 evSel.RunNumber = flags.Input.RunNumbers[0]
119 evSel.FirstLB = flags.Input.LumiBlockNumbers[0]
120 evSel.InitialTimeStamp = flags.Input.TimeStamps[0]
121
122 # Overlay background RDOs are primary input
123 evSel.SkipEvents = skipEventsSecondary
124 # Do not process background input metadata
125 evSel.ProcessMetadata = False
126
127 # We have primary and secondary pool inputs, create two address providers
128 result.merge(AthenaPoolAddressProviderSvcCfg(flags,
129 name="AthenaPoolAddressProviderSvcPrimary",
130 DataHeaderKey="EventSelector",
131 AttributeListKey="Input"))
132 result.merge(AthenaPoolAddressProviderSvcCfg(flags,
133 name="AthenaPoolAddressProviderSvcSecondary",
134 DataHeaderKey="SecondaryEventSelector"))
135
136 secondarySel = CompFactory.EventSelectorAthenaPool("SecondaryEventSelector",
137 CollectionType="RootCollection",
138 IsSecondary=True,
139 InputCollections=flags.Input.SecondaryFiles,
140 SkipEvents=skipEventsPrimary)
141 result.addService(secondarySel)
142 result.addService(evSel)
143 else:
144 # We have only primary inputs
145 result.merge(AthenaPoolAddressProviderSvcCfg(flags))
146 result.merge(EventSelectorAthenaPoolCfg(flags))
147 evSel = result.getService("EventSelector")
148
149 #Schedule a (potential) AODFix ...
150 processingTags=flags.Input.ProcessingTags
151 if "StreamAOD" in processingTags:
152 try:
153 from RecJobTransforms.AODFixConfig import AODFixCfg
154 result.merge(AODFixCfg(flags))
155 except ImportError:
156 #Looks like running on AthSimulation or AthAnalysis ... ignore AODFix
157 pass
158
159
160
161 result.setAppProperty("EvtSel", evSel.getFullJobOptName())
162
163 return result