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