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