ATLAS Offline Software
Loading...
Searching...
No Matches
LuminosityCondAlgConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2#
3# File: LumiBlockComps/python/LuminosityCondAlgConfig.py
4# Created: May 2019, sss, from existing LuminosityToolDefault.
5# Purpose: Configure LuminosityCondAlg.
6#
7
8from AthenaConfiguration.ComponentFactory import CompFactory
9from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
10from AthenaConfiguration.Enums import BeamType
11from IOVDbSvc.IOVDbSvcConfig import addFolders
12from AthenaCommon.Logging import logging
13from AthenaConfiguration.AccumulatorCache import AccumulatorCache
14from AthenaConfiguration.Enums import ProductionStep
15
16@AccumulatorCache
17def LuminosityCondAlgCfg (flags, useOnlineLumi=None, suffix=None):
18 # This function, without the useOnlineLumi and suffix arguments, will set up a default configuration
19 # appropriate to the job; the conditions object will be called LuminosityCondData
20 # Can override whether it sets up the online lumi (but then you are strongly urged to use the suffix
21 # argument!)
22 # Suffix will allow you to make an object with a different name, e.g. LuminosityCondDataOnline
23 log = logging.getLogger ('LuminosityCondAlgCfg')
24 name = 'LuminosityCondAlg'
25 result = ComponentAccumulator()
26
27 if suffix is None: suffix = ''
28 if useOnlineLumi is not None and suffix is None:
29 log.warning('useOnlineLumi argument is provided but not a suffix for the lumi object name. Is this really intended?')
30
31 if flags.Input.isMC:
32 kwargs = luminosityCondAlgMCCfg (flags, name, result)
33 elif ((useOnlineLumi is None and flags.Common.useOnlineLumi)
34 or (useOnlineLumi is not None and useOnlineLumi)):
35 kwargs = luminosityCondAlgOnlineCfg (flags, name, result)
36 elif flags.IOVDb.DatabaseInstance == 'COMP200':
37 kwargs = luminosityCondAlgRun1Cfg (flags, name, result)
38 elif flags.IOVDb.DatabaseInstance == 'CONDBR2':
39 kwargs = luminosityCondAlgRun2Cfg (flags, name, result)
40
41 else:
42 log.warning ("LuminosityCondAlgCfg can't resolve database instance = %s, assume Run2!" % flags.IOVDb.DatabaseInstance)
43 kwargs = luminosityCondAlgRun2Cfg (flags, name, result)
44
45 if flags.Common.ProductionStep is ProductionStep.PileUpPretracking:
46 kwargs.setdefault("EventInfoKey", flags.Overlay.BkgPrefix + "EventInfo")
47
48 kwargs.setdefault("LuminosityOutputKey", "LuminosityCondData" + suffix)
49
50 result.addCondAlgo(CompFactory.LuminosityCondAlg(name, **kwargs))
51 return result
52
53
54def luminosityCondAlgMCCfg (flags, name, result):
55 from AthenaConfiguration.Enums import Format
56
57 # Only read digitization parameters from conditions DB if NOT ByteStream input
58 # For ByteStream input, the metadata will be read from BS metadata instead
59 if flags.Input.Format != Format.BS:
60 from DigitizationConfig.DigitizationParametersConfig import readDigitizationParameters
61 result.merge(readDigitizationParameters(flags))
62 digitizationFolderKey = '/Digitization/Parameters'
63 else:
64 # For ByteStream input, don't use conditions folder - will read from BS metadata
65 digitizationFolderKey = ''
66
67 return { 'LuminosityFolderInputKey' : '',
68 'DigitizationFolderInputKey' : digitizationFolderKey,
69 'OnlineLumiCalibrationInputKey' : '',
70 'BunchLumisInputKey' : '',
71 'BunchGroupInputKey' : '',
72 'FillParamsInputKey' : '',
73 'IsMC' : True }
74
75
76# Configuration for offline default luminosity used in Run2
77def luminosityCondAlgRun2Cfg (flags, name, result):
78 log = logging.getLogger(name)
79
80 kwargs = {}
81
82 # Check if this is express stream or bulk
83 if flags.Common.doExpressProcessing:
84 lumiFolder = "/TRIGGER/LUMI/OnlPrefLumi"
85 result.merge (addFolders (flags, lumiFolder, 'TRIGGER_ONL',
86 className = 'CondAttrListCollection'))
87
88 else:
89 lumiFolder = "/TRIGGER/OFLLUMI/OflPrefLumi"
90 result.merge (addFolders (flags, lumiFolder, 'TRIGGER_OFL',
91 className = 'CondAttrListCollection'))
92
93 log.info ("luminosityCondAlgRun2Config requested %s", lumiFolder)
94 kwargs['LuminosityFolderInputKey'] = lumiFolder
95
96 log.info ("Created Run2 %s using folder %s" % (name, lumiFolder))
97
98 # Need the calibration just to get the proper MuToLumi value
99 from CoolLumiUtilities.OnlineLumiCalibrationCondAlgConfig \
100 import OnlineLumiCalibrationCondAlgCfg
101 result.merge (OnlineLumiCalibrationCondAlgCfg(flags))
102 olalg = result.getCondAlgo ('OnlineLumiCalibrationCondAlg')
103 kwargs['OnlineLumiCalibrationInputKey'] = olalg.LumiCalibOutputKey
104
105 # Other folder names should be blank.
106 kwargs['BunchLumisInputKey'] = ''
107 kwargs['BunchGroupInputKey'] = ''
108 kwargs['FillParamsInputKey'] = ''
109
110 # if cosmics, suppress warnings.
111 if flags.Beam.Type is BeamType.Cosmics:
112 kwargs['ExpectInvalid'] = True
113
114 return kwargs
115
116
117# Configuration for offline default luminosity used in Run1
118def luminosityCondAlgRun1Cfg (flags, name, result):
119 log = logging.getLogger(name)
120
121 kwargs = {}
122
123 # Check if this is express stream or bulk
124 if flags.Common.doExpressProcessing:
125 lumiFolder = "/TRIGGER/LUMI/LBLESTONL"
126 result.merge (addFolders (flags, lumiFolder, 'TRIGGER_ONL',
127 className = 'CondAttrListCollection'))
128
129 else:
130 lumiFolder = "/TRIGGER/OFLLUMI/LBLESTOFL"
131 result.merge (addFolders (flags, lumiFolder, 'TRIGGER_OFL',
132 className = 'CondAttrListCollection'))
133
134 log.info ("configureLuminosityCondAlgRun1 requested %s", lumiFolder)
135 kwargs['LuminosityFolderInputKey'] = lumiFolder
136
137 # Configure input conditions data.
138 from CoolLumiUtilities.FillParamsCondAlgConfig \
139 import FillParamsCondAlgCfg
140 result.merge (FillParamsCondAlgCfg (flags))
141 fpalg = result.getCondAlgo ('FillParamsCondAlg')
142 kwargs['FillParamsInputKey'] = fpalg.FillParamsOutputKey
143
144 from CoolLumiUtilities.BunchLumisCondAlgConfig \
145 import BunchLumisCondAlgCfg
146 result.merge (BunchLumisCondAlgCfg (flags))
147 blalg = result.getCondAlgo ('BunchLumisCondAlg')
148 kwargs['BunchLumisInputKey'] = blalg.BunchLumisOutputKey
149
150 from CoolLumiUtilities.BunchGroupCondAlgConfig \
151 import BunchGroupCondAlgCfg
152 result.merge (BunchGroupCondAlgCfg (flags))
153 bgalg = result.getCondAlgo ('BunchGroupCondAlg')
154 kwargs['BunchGroupInputKey'] = bgalg.BunchGroupOutputKey
155
156 from CoolLumiUtilities.OnlineLumiCalibrationCondAlgConfig \
157 import OnlineLumiCalibrationCondAlgCfg
158 result.merge (OnlineLumiCalibrationCondAlgCfg (flags))
159 olalg = result.getCondAlgo ('OnlineLumiCalibrationCondAlg')
160 kwargs['OnlineLumiCalibrationInputKey'] = olalg.LumiCalibOutputKey
161
162 return kwargs
163
164
165
166# Configuration for online luminosity.
167def luminosityCondAlgOnlineCfg (flags, name, result):
168 log = logging.getLogger(name)
169
170 kwargs = {}
171
172 # Keep values for invalid data
173 kwargs['SkipInvalid'] = False
174
175 if flags.IOVDb.DatabaseInstance == 'COMP200': # Run1
176 folder = "/TRIGGER/LUMI/LBLESTONL"
177 result.merge (addFolders (flags, folder, 'TRIGGER_ONL',
178 className = 'CondAttrListCollection'))
179
180 else: # Run 2+
181 if flags.IOVDb.DatabaseInstance != 'CONDBR2':
182 log.warning("LuminosityCondAlgOnlineCfg can't resolve DatabaseInstance = %s, assuming CONDBR2!", flags.IOVDb.DatabaseInstance)
183
184 folder = "/TRIGGER/LUMI/HLTPrefLumi"
185 result.merge (addFolders (flags, folder, 'TRIGGER_ONL',
186 className = 'CondAttrListCollection',
187 extensible = flags.Trigger.doHLT and flags.Trigger.Online.isPartition))
188
189 kwargs['LuminosityFolderInputKey'] = folder
190 log.info ("Created online %s using folder %s" % (name, folder))
191
192 # Need the calibration just to get the proper MuToLumi value
193 from CoolLumiUtilities.OnlineLumiCalibrationCondAlgConfig \
194 import OnlineLumiCalibrationCondAlgCfg
195 result.merge (OnlineLumiCalibrationCondAlgCfg(flags))
196 olalg = result.getCondAlgo ('OnlineLumiCalibrationCondAlg')
197 kwargs['OnlineLumiCalibrationInputKey'] = olalg.LumiCalibOutputKey
198
199 # Other folder names should be blank.
200 kwargs['BunchLumisInputKey'] = ''
201 kwargs['BunchGroupInputKey'] = ''
202 kwargs['FillParamsInputKey'] = ''
203
204 return kwargs
205
206
207if __name__ == "__main__":
208 from AthenaConfiguration.AllConfigFlags import initConfigFlags
209 from AthenaConfiguration.TestDefaults import defaultTestFiles
210
211 print ('--- run2')
212 flags1 = initConfigFlags()
213 flags1.Input.Files = defaultTestFiles.RAW_RUN2
214 flags1.lock()
215 acc1 = LuminosityCondAlgCfg (flags1)
216 acc1.printCondAlgs(summariseProps=True)
217 print ('IOVDbSvc:', acc1.getService('IOVDbSvc').Folders)
218 acc1.wasMerged()
219
220 print ('--- run2/express')
221 flags2 = initConfigFlags()
222 flags2.Input.Files = defaultTestFiles.RAW_RUN2
223 flags2.Common.doExpressProcessing = True
224 flags2.lock()
225 acc2 = LuminosityCondAlgCfg (flags2)
226 acc2.printCondAlgs(summariseProps=True)
227 print ('IOVDbSvc:', acc2.getService('IOVDbSvc').Folders)
228 acc2.wasMerged()
229
230 print ('--- run1')
231 flags3 = initConfigFlags()
232 flags3.Input.Files = defaultTestFiles.RAW_RUN2
233 flags3.Input.ProjectName = 'data12_8TeV'
234 flags3.lock()
235 acc3 = LuminosityCondAlgCfg (flags3)
236 acc3.printCondAlgs(summariseProps=True)
237 print ('IOVDbSvc:', acc3.getService('IOVDbSvc').Folders)
238 acc3.wasMerged()
239
240 print ('--- run1/express')
241 flags4 = initConfigFlags()
242 flags4.Input.Files = defaultTestFiles.RAW_RUN2
243 flags4.Input.ProjectName = 'data12_8TeV'
244 flags4.Common.doExpressProcessing = True
245 flags4.lock()
246 acc4 = LuminosityCondAlgCfg (flags4)
247 acc4.printCondAlgs(summariseProps=True)
248 print ('IOVDbSvc:', acc4.getService('IOVDbSvc').Folders)
249 acc4.wasMerged()
250
251 print ('--- mc')
252 flags5 = initConfigFlags()
253 flags5.Input.Files = defaultTestFiles.ESD
254 flags5.lock()
255 acc5 = LuminosityCondAlgCfg (flags5)
256 acc5.printCondAlgs(summariseProps=True)
257 acc5.wasMerged()
258
259 print ('--- online')
260 flags6 = initConfigFlags()
261 flags6.Input.Files = defaultTestFiles.RAW_RUN2
262 flags6.Common.useOnlineLumi = True
263 flags6.lock()
264 acc6 = LuminosityCondAlgCfg (flags6)
265 acc6.printCondAlgs(summariseProps=True)
266 acc6.wasMerged()
267
268 print ('--- forced online')
269 flags7 = initConfigFlags()
270 flags7.Input.Files = defaultTestFiles.RAW_RUN2
271 flags7.lock()
272 acc7 = LuminosityCondAlgCfg (flags7, useOnlineLumi=True, suffix='Online')
273 acc7.printCondAlgs(summariseProps=True)
274 acc7.wasMerged()
LuminosityCondAlgCfg(flags, useOnlineLumi=None, suffix=None)
luminosityCondAlgRun2Cfg(flags, name, result)
luminosityCondAlgOnlineCfg(flags, name, result)