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 bsMetadataKey = ''
64 else:
65 # For ByteStream input, don't use conditions folder - will read from BS metadata
66 digitizationFolderKey = ''
67 bsMetadataKey = 'MetaDataStore+ByteStreamMetadata'
68
69 return { 'LuminosityFolderInputKey' : '',
70 'DigitizationFolderInputKey' : digitizationFolderKey,
71 'OnlineLumiCalibrationInputKey' : '',
72 'ByteStreamMetadataKey': bsMetadataKey,
73 'BunchLumisInputKey' : '',
74 'BunchGroupInputKey' : '',
75 'FillParamsInputKey' : '',
76 'IsMC' : True }
77
78
79# Configuration for offline default luminosity used in Run2
80def luminosityCondAlgRun2Cfg (flags, name, result):
81 log = logging.getLogger(name)
82
83 kwargs = {}
84
85 # Check if this is express stream or bulk
86 if flags.Common.doExpressProcessing:
87 lumiFolder = "/TRIGGER/LUMI/OnlPrefLumi"
88 result.merge (addFolders (flags, lumiFolder, 'TRIGGER_ONL',
89 className = 'CondAttrListCollection'))
90
91 else:
92 lumiFolder = "/TRIGGER/OFLLUMI/OflPrefLumi"
93 result.merge (addFolders (flags, lumiFolder, 'TRIGGER_OFL',
94 className = 'CondAttrListCollection'))
95
96 log.info ("luminosityCondAlgRun2Config requested %s", lumiFolder)
97 kwargs['LuminosityFolderInputKey'] = lumiFolder
98
99 log.info ("Created Run2 %s using folder %s" % (name, lumiFolder))
100
101 # Need the calibration just to get the proper MuToLumi value
102 from CoolLumiUtilities.OnlineLumiCalibrationCondAlgConfig \
103 import OnlineLumiCalibrationCondAlgCfg
104 result.merge (OnlineLumiCalibrationCondAlgCfg(flags))
105 olalg = result.getCondAlgo ('OnlineLumiCalibrationCondAlg')
106 kwargs['OnlineLumiCalibrationInputKey'] = olalg.LumiCalibOutputKey
107
108 # Other folder names should be blank.
109 kwargs['BunchLumisInputKey'] = ''
110 kwargs['BunchGroupInputKey'] = ''
111 kwargs['FillParamsInputKey'] = ''
112
113 # if cosmics, suppress warnings.
114 if flags.Beam.Type is BeamType.Cosmics:
115 kwargs['ExpectInvalid'] = True
116
117 return kwargs
118
119
120# Configuration for offline default luminosity used in Run1
121def luminosityCondAlgRun1Cfg (flags, name, result):
122 log = logging.getLogger(name)
123
124 kwargs = {}
125
126 # Check if this is express stream or bulk
127 if flags.Common.doExpressProcessing:
128 lumiFolder = "/TRIGGER/LUMI/LBLESTONL"
129 result.merge (addFolders (flags, lumiFolder, 'TRIGGER_ONL',
130 className = 'CondAttrListCollection'))
131
132 else:
133 lumiFolder = "/TRIGGER/OFLLUMI/LBLESTOFL"
134 result.merge (addFolders (flags, lumiFolder, 'TRIGGER_OFL',
135 className = 'CondAttrListCollection'))
136
137 log.info ("configureLuminosityCondAlgRun1 requested %s", lumiFolder)
138 kwargs['LuminosityFolderInputKey'] = lumiFolder
139
140 # Configure input conditions data.
141 from CoolLumiUtilities.FillParamsCondAlgConfig \
142 import FillParamsCondAlgCfg
143 result.merge (FillParamsCondAlgCfg (flags))
144 fpalg = result.getCondAlgo ('FillParamsCondAlg')
145 kwargs['FillParamsInputKey'] = fpalg.FillParamsOutputKey
146
147 from CoolLumiUtilities.BunchLumisCondAlgConfig \
148 import BunchLumisCondAlgCfg
149 result.merge (BunchLumisCondAlgCfg (flags))
150 blalg = result.getCondAlgo ('BunchLumisCondAlg')
151 kwargs['BunchLumisInputKey'] = blalg.BunchLumisOutputKey
152
153 from CoolLumiUtilities.BunchGroupCondAlgConfig \
154 import BunchGroupCondAlgCfg
155 result.merge (BunchGroupCondAlgCfg (flags))
156 bgalg = result.getCondAlgo ('BunchGroupCondAlg')
157 kwargs['BunchGroupInputKey'] = bgalg.BunchGroupOutputKey
158
159 from CoolLumiUtilities.OnlineLumiCalibrationCondAlgConfig \
160 import OnlineLumiCalibrationCondAlgCfg
161 result.merge (OnlineLumiCalibrationCondAlgCfg (flags))
162 olalg = result.getCondAlgo ('OnlineLumiCalibrationCondAlg')
163 kwargs['OnlineLumiCalibrationInputKey'] = olalg.LumiCalibOutputKey
164
165 return kwargs
166
167
168
169# Configuration for online luminosity.
170def luminosityCondAlgOnlineCfg (flags, name, result):
171 log = logging.getLogger(name)
172
173 kwargs = {}
174
175 # Keep values for invalid data
176 kwargs['SkipInvalid'] = False
177
178 if flags.IOVDb.DatabaseInstance == 'COMP200': # Run1
179 folder = "/TRIGGER/LUMI/LBLESTONL"
180 result.merge (addFolders (flags, folder, 'TRIGGER_ONL',
181 className = 'CondAttrListCollection'))
182
183 else: # Run 2+
184 if flags.IOVDb.DatabaseInstance != 'CONDBR2':
185 log.warning("LuminosityCondAlgOnlineCfg can't resolve DatabaseInstance = %s, assuming CONDBR2!", flags.IOVDb.DatabaseInstance)
186
187 folder = "/TRIGGER/LUMI/HLTPrefLumi"
188 result.merge (addFolders (flags, folder, 'TRIGGER_ONL',
189 className = 'CondAttrListCollection',
190 extensible = flags.Trigger.doHLT and flags.Trigger.Online.isPartition))
191
192 kwargs['LuminosityFolderInputKey'] = folder
193 log.info ("Created online %s using folder %s" % (name, folder))
194
195 # Need the calibration just to get the proper MuToLumi value
196 from CoolLumiUtilities.OnlineLumiCalibrationCondAlgConfig \
197 import OnlineLumiCalibrationCondAlgCfg
198 result.merge (OnlineLumiCalibrationCondAlgCfg(flags))
199 olalg = result.getCondAlgo ('OnlineLumiCalibrationCondAlg')
200 kwargs['OnlineLumiCalibrationInputKey'] = olalg.LumiCalibOutputKey
201
202 # Other folder names should be blank.
203 kwargs['BunchLumisInputKey'] = ''
204 kwargs['BunchGroupInputKey'] = ''
205 kwargs['FillParamsInputKey'] = ''
206
207 return kwargs
208
209
210if __name__ == "__main__":
211 from AthenaConfiguration.AllConfigFlags import initConfigFlags
212 from AthenaConfiguration.TestDefaults import defaultTestFiles
213
214 print ('--- run2')
215 flags1 = initConfigFlags()
216 flags1.Input.Files = defaultTestFiles.RAW_RUN2
217 flags1.lock()
218 acc1 = LuminosityCondAlgCfg (flags1)
219 acc1.printCondAlgs(summariseProps=True)
220 print ('IOVDbSvc:', acc1.getService('IOVDbSvc').Folders)
221 acc1.wasMerged()
222
223 print ('--- run2/express')
224 flags2 = initConfigFlags()
225 flags2.Input.Files = defaultTestFiles.RAW_RUN2
226 flags2.Common.doExpressProcessing = True
227 flags2.lock()
228 acc2 = LuminosityCondAlgCfg (flags2)
229 acc2.printCondAlgs(summariseProps=True)
230 print ('IOVDbSvc:', acc2.getService('IOVDbSvc').Folders)
231 acc2.wasMerged()
232
233 print ('--- run1')
234 flags3 = initConfigFlags()
235 flags3.Input.Files = defaultTestFiles.RAW_RUN2
236 flags3.Input.ProjectName = 'data12_8TeV'
237 flags3.lock()
238 acc3 = LuminosityCondAlgCfg (flags3)
239 acc3.printCondAlgs(summariseProps=True)
240 print ('IOVDbSvc:', acc3.getService('IOVDbSvc').Folders)
241 acc3.wasMerged()
242
243 print ('--- run1/express')
244 flags4 = initConfigFlags()
245 flags4.Input.Files = defaultTestFiles.RAW_RUN2
246 flags4.Input.ProjectName = 'data12_8TeV'
247 flags4.Common.doExpressProcessing = True
248 flags4.lock()
249 acc4 = LuminosityCondAlgCfg (flags4)
250 acc4.printCondAlgs(summariseProps=True)
251 print ('IOVDbSvc:', acc4.getService('IOVDbSvc').Folders)
252 acc4.wasMerged()
253
254 print ('--- mc')
255 flags5 = initConfigFlags()
256 flags5.Input.Files = defaultTestFiles.ESD
257 flags5.lock()
258 acc5 = LuminosityCondAlgCfg (flags5)
259 acc5.printCondAlgs(summariseProps=True)
260 acc5.wasMerged()
261
262 print ('--- online')
263 flags6 = initConfigFlags()
264 flags6.Input.Files = defaultTestFiles.RAW_RUN2
265 flags6.Common.useOnlineLumi = True
266 flags6.lock()
267 acc6 = LuminosityCondAlgCfg (flags6)
268 acc6.printCondAlgs(summariseProps=True)
269 acc6.wasMerged()
270
271 print ('--- forced online')
272 flags7 = initConfigFlags()
273 flags7.Input.Files = defaultTestFiles.RAW_RUN2
274 flags7.lock()
275 acc7 = LuminosityCondAlgCfg (flags7, useOnlineLumi=True, suffix='Online')
276 acc7.printCondAlgs(summariseProps=True)
277 acc7.wasMerged()
LuminosityCondAlgCfg(flags, useOnlineLumi=None, suffix=None)
luminosityCondAlgRun2Cfg(flags, name, result)
luminosityCondAlgOnlineCfg(flags, name, result)