ATLAS Offline Software
Classes | Functions | Variables
python.AutoConfigFlags Namespace Reference

Classes

class  DynamicallyLoadMetadata
 

Functions

def GetFileMD (filenames, allowEmpty=True, maxLevel='peeker')
 
def _initializeGeometryParameters (geoTag, sqliteDB, sqliteDBFullPath)
 
def DetDescrInfo (geoTag, sqliteDB, sqliteDBFullPath)
 
def getDefaultDetectors (geoTag, sqliteDB, sqliteDBFullPath, includeForward=False)
 
def getRunToTimestampDict ()
 
def getInitialTimeStampsFromRunNumbers (runNumbers)
 
def getGeneratorsInfo (flags)
 
def getSpecialConfigurationMetadata (flags)
 

Variables

 msg = logging.getLogger('AutoConfigFlags')
 
 _fileMetaData = dict()
 

Function Documentation

◆ _initializeGeometryParameters()

def python.AutoConfigFlags._initializeGeometryParameters (   geoTag,
  sqliteDB,
  sqliteDBFullPath 
)
private
Read geometry database for all detectors

Definition at line 86 of file AutoConfigFlags.py.

86 def _initializeGeometryParameters(geoTag,sqliteDB,sqliteDBFullPath):
87  """Read geometry database for all detectors"""
88 
89  from AtlasGeoModel import CommonGeoDB
90  from PixelGeoModel import PixelGeoDB
91  from LArGeoAlgsNV import LArGeoDB
92  from MuonGeoModel import MuonGeoDB
93 
94  if not sqliteDB:
95  # Read parameters from Oracle/Frontier
96  from AtlasGeoModel.AtlasGeoDBInterface import AtlasGeoDBInterface
97  dbGeomCursor = AtlasGeoDBInterface(geoTag)
98  dbGeomCursor.ConnectAndBrowseGeoDB()
99 
100  params = { 'Common' : CommonGeoDB.InitializeGeometryParameters(dbGeomCursor),
101  'Pixel' : PixelGeoDB.InitializeGeometryParameters(dbGeomCursor),
102  'LAr' : LArGeoDB.InitializeGeometryParameters(dbGeomCursor),
103  'Muon' : MuonGeoDB.InitializeGeometryParameters(dbGeomCursor),
104  'Luminosity' : CommonGeoDB.InitializeLuminosityDetectorParameters(dbGeomCursor),
105  }
106 
107  msg.debug('Config parameters retrieved from Geometry DB (Frontier/Oracle):')
108  for key in params.keys():
109  msg.debug(f'{key} -> {params[key]}')
110  else:
111  # Read parameters from SQLite
112  from AtlasGeoModel.AtlasGeoDBInterface import AtlasGeoDBInterface_SQLite
113  sqliteReader = AtlasGeoDBInterface_SQLite(geoTag,sqliteDBFullPath)
114  sqliteReader.ConnectToDB()
115 
116  params = { 'Common' : CommonGeoDB.InitializeGeometryParameters_SQLite(sqliteReader),
117  'Pixel' : PixelGeoDB.InitializeGeometryParameters_SQLite(sqliteReader),
118  'LAr' : LArGeoDB.InitializeGeometryParameters_SQLite(sqliteReader),
119  'Muon' : MuonGeoDB.InitializeGeometryParameters_SQLite(sqliteReader),
120  'Luminosity' : CommonGeoDB.InitializeLuminosityDetectorParameters_SQLite(sqliteReader),
121  }
122 
123  msg.debug('Config parameters retrieved from Geometry DB (SQLite):')
124  for key in params.keys():
125  msg.debug(f'{key} -> {params[key]}')
126 
127  return params
128 
129 
130 @lru_cache(maxsize=4) # maxsize=1 should be enough for most jobs

◆ DetDescrInfo()

def python.AutoConfigFlags.DetDescrInfo (   geoTag,
  sqliteDB,
  sqliteDBFullPath 
)
Query geometry DB for detector description. Returns dictionary with
detector description. Queries DB for each tag only once.

geoTag: geometry tag (e.g. ATLAS-R2-2016-01-00-01)

Definition at line 131 of file AutoConfigFlags.py.

131 def DetDescrInfo(geoTag, sqliteDB, sqliteDBFullPath):
132  """Query geometry DB for detector description. Returns dictionary with
133  detector description. Queries DB for each tag only once.
134 
135  geoTag: geometry tag (e.g. ATLAS-R2-2016-01-00-01)
136  """
137  if not geoTag:
138  raise ValueError("No geometry tag specified")
139 
140  detDescrInfo = _initializeGeometryParameters(geoTag,sqliteDB,sqliteDBFullPath)
141  detDescrInfo["geomTag"] = geoTag
142  return detDescrInfo
143 
144 
145 @lru_cache(maxsize=4) # maxsize=1 should be enough for most jobs

◆ getDefaultDetectors()

def python.AutoConfigFlags.getDefaultDetectors (   geoTag,
  sqliteDB,
  sqliteDBFullPath,
  includeForward = False 
)
Query geometry DB for detector description.
Returns a set of detectors used in a geometry tag.

geoTag: geometry tag (e.g. ATLAS-R2-2016-01-00-01)

Definition at line 146 of file AutoConfigFlags.py.

146 def getDefaultDetectors(geoTag, sqliteDB, sqliteDBFullPath, includeForward=False):
147  """Query geometry DB for detector description.
148  Returns a set of detectors used in a geometry tag.
149 
150  geoTag: geometry tag (e.g. ATLAS-R2-2016-01-00-01)
151  """
152  detectors = DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Detectors']
153 
154  manualConfig = not DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']["DetectorsConfigured"]
155 
156 
157  if manualConfig:
158  detectors.add('Bpipe')
159  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Run'] not in ['RUN1', 'RUN2', 'RUN3']: # RUN4 and beyond
160  detectors.add('ITkPixel')
161  detectors.add('ITkStrip')
162  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Luminosity']['BCMPrime']:
163  detectors.add('BCMPrime') # since https://gitlab.cern.ch/Atlas-Inner-Tracking/ITKLayouts/-/merge_requests/347 introduced BCMPrime geometry
164  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Luminosity']['PLR']:
165  detectors.add('PLR')
166  else:
167  detectors.add('Pixel')
168  detectors.add('SCT')
169  detectors.add('TRT')
170  detectors.add('BCM')
171 
172  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Run'] not in ['RUN1', 'RUN2', 'RUN3']: # RUN4 and beyond
173  detectors.add('HGTD')
174 
175  detectors.add('LAr')
176  detectors.add('Tile')
177 
178 
179  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Run'] in ['RUN1', 'RUN2', 'RUN3']:
180  detectors.add('MBTS')
181 
182  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasMDT']:
183  detectors.add('MDT')
184  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasRPC']:
185  detectors.add('RPC')
186  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasTGC']:
187  detectors.add('TGC')
188  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasCSC']:
189  detectors.add('CSC')
190  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasSTGC']:
191  detectors.add('sTGC')
192  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasMM']:
193  detectors.add('MM')
194 
195  if includeForward:
196  detectors.add('Lucid')
197  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Run'] not in ['RUN1']:
198  detectors.add('AFP')
199  detectors.add('ZDC')
200  detectors.add('ALFA')
201  detectors.add('FwdRegion')
202 
203  return detectors
204 
205 
206 # Based on RunDMCFlags.py

◆ GetFileMD()

def python.AutoConfigFlags.GetFileMD (   filenames,
  allowEmpty = True,
  maxLevel = 'peeker' 
)

Definition at line 65 of file AutoConfigFlags.py.

65 def GetFileMD(filenames, allowEmpty=True, maxLevel='peeker'):
66  if not filenames or '_ATHENA_GENERIC_INPUTFILE_NAME_' in filenames:
67  if allowEmpty:
68  msg.info("Running an input-less job. Will have empty metadata.")
69  return {}
70  raise RuntimeError("Metadata can not be read in an input-less job.")
71  if isinstance(filenames, str):
72  filenames = [filenames]
73  for filename in filenames:
74  if filename not in _fileMetaData:
75  msg.info("Obtaining metadata of auto-configuration by peeking into '%s'", filename)
76  _fileMetaData[filename] = DynamicallyLoadMetadata(filename, maxLevel)
77  if _fileMetaData[filename].maxAccessLevel != maxLevel:
78  _fileMetaData[filename].maxAccessLevel = maxLevel
79  if _fileMetaData[filename]['nentries'] not in [None, 0]:
80  return _fileMetaData[filename]
81  else:
82  msg.info("The file: %s has no entries, going to the next one for harvesting the metadata", filename)
83  msg.info("No file with events found, returning anyways metadata associated to the first file %s", filenames[0])
84  return _fileMetaData[filenames[0]]
85 

◆ getGeneratorsInfo()

def python.AutoConfigFlags.getGeneratorsInfo (   flags)
Read in GeneratorsInfo from the input file

Definition at line 223 of file AutoConfigFlags.py.

223 def getGeneratorsInfo(flags):
224  """Read in GeneratorsInfo from the input file
225  """
226  from AthenaConfiguration.Enums import ProductionStep
227  inputFiles = flags.Input.Files
228  if flags.Common.ProductionStep in [ProductionStep.Overlay, ProductionStep.FastChain] and flags.Input.SecondaryFiles and not flags.Overlay.ByteStream:
229  # Do something special for MC Overlay
230  inputFiles = flags.Input.SecondaryFiles
231  generatorsString = ""
232  from AthenaConfiguration.AutoConfigFlags import GetFileMD
233  if inputFiles:
234  generatorsString = GetFileMD(inputFiles).get("generators", "")
235  from GeneratorConfig.Versioning import generatorsGetFromMetadata
236  return generatorsGetFromMetadata( generatorsString )
237 
238 

◆ getInitialTimeStampsFromRunNumbers()

def python.AutoConfigFlags.getInitialTimeStampsFromRunNumbers (   runNumbers)
This is used to hold a dictionary of the form
{152166:1269948352889940910, ...} to allow the
timestamp to be determined from the run.

Definition at line 213 of file AutoConfigFlags.py.

213 def getInitialTimeStampsFromRunNumbers(runNumbers):
214  """This is used to hold a dictionary of the form
215  {152166:1269948352889940910, ...} to allow the
216  timestamp to be determined from the run.
217  """
218  run2timestampDict = getRunToTimestampDict()
219  timeStamps = [run2timestampDict.get(runNumber,1) for runNumber in runNumbers] # Add protection here?
220  return timeStamps
221 
222 

◆ getRunToTimestampDict()

def python.AutoConfigFlags.getRunToTimestampDict ( )

Definition at line 207 of file AutoConfigFlags.py.

208  # this wrapper is intended to avoid an initial import
209  from .RunToTimestampData import RunToTimestampDict
210  return RunToTimestampDict
211 
212 

◆ getSpecialConfigurationMetadata()

def python.AutoConfigFlags.getSpecialConfigurationMetadata (   flags)
Read in special simulation job option fragments based on metadata
passed by the evgen stage

Definition at line 239 of file AutoConfigFlags.py.

240  """Read in special simulation job option fragments based on metadata
241  passed by the evgen stage
242  """
243  specialConfigDict = dict()
244  legacyPreIncludeToCAPostInclude = { 'SimulationJobOptions/preInclude.AMSB.py' : 'Charginos.CharginosConfig.AMSB_Cfg',
245  'SimulationJobOptions/preInclude.Monopole.py' : 'Monopole.MonopoleConfig.MonopoleCfg',
246  'SimulationJobOptions/preInclude.Quirks.py' : 'Quirks.QuirksConfig.QuirksCfg',
247  'SimulationJobOptions/preInclude.SleptonsLLP.py' : 'Sleptons.SleptonsConfig.SleptonsLLPCfg',
248  'SimulationJobOptions/preInclude.GMSB.py' : 'Sleptons.SleptonsConfig.GMSB_Cfg',
249  'SimulationJobOptions/preInclude.Qball.py' : 'Monopole.MonopoleConfig.QballCfg',
250  'SimulationJobOptions/preInclude.RHadronsPythia8.py' : 'RHadrons.RHadronsConfig.RHadronsCfg',
251  'SimulationJobOptions/preInclude.fcp.py' : 'Monopole.MonopoleConfig.fcpCfg' }
252  legacyPreIncludeToCAPreInclude = { 'SimulationJobOptions/preInclude.AMSB.py' : None,
253  'SimulationJobOptions/preInclude.Monopole.py' : 'Monopole.MonopoleConfig.MonopolePreInclude',
254  'SimulationJobOptions/preInclude.Quirks.py' : None,
255  'SimulationJobOptions/preInclude.SleptonsLLP.py' : None,
256  'SimulationJobOptions/preInclude.GMSB.py' : None,
257  'SimulationJobOptions/preInclude.Qball.py' : 'Monopole.MonopoleConfig.QballPreInclude',
258  'SimulationJobOptions/preInclude.RHadronsPythia8.py' : 'RHadrons.RHadronsConfig.RHadronsPreInclude',
259  'SimulationJobOptions/preInclude.fcp.py' : 'Monopole.MonopoleConfig.fcpPreInclude' }
260  specialConfigString = ''
261  from AthenaConfiguration.Enums import ProductionStep
262  inputFiles = flags.Input.Files
263  secondaryInputFiles = flags.Input.SecondaryFiles
264  if flags.Common.ProductionStep in [ProductionStep.Overlay, ProductionStep.FastChain] and not flags.Overlay.DataOverlay and flags.Input.SecondaryFiles:
265  # Do something special for MC Overlay
266  inputFiles = flags.Input.SecondaryFiles
267  secondaryInputFiles = flags.Input.Files
268  from AthenaConfiguration.AutoConfigFlags import GetFileMD
269  if len(inputFiles)>0:
270  specialConfigString = GetFileMD(inputFiles).get('specialConfiguration', '')
271  if (not len(specialConfigString) or specialConfigString == 'NONE') and len(secondaryInputFiles)>0:
272  # If there is no specialConfiguration metadata in the primary
273  # input try the secondary inputs (MC Overlay case)
274  specialConfigString = GetFileMD(secondaryInputFiles).get('specialConfiguration', '')
275  if len(specialConfigString)>0:
276 
278  spcitems = specialConfigString.split(";")
279  for spcitem in spcitems:
280  #print spcitem
281 
282  if not spcitem or spcitem.upper() == "NONE":
283  continue
284 
285  if "=" not in spcitem:
286  spcitem = "preInclude=" + spcitem
287 
288  k, v = spcitem.split("=")
289  if k == "preInclude" and v.endswith('.py'): # Translate old preIncludes into CA-based versions.
290  if v == 'SimulationJobOptions/preInclude.RhadronsPythia8.py':
291  v = 'SimulationJobOptions/preInclude.RHadronsPythia8.py' # ATLASSIM-6687 Fixup for older EVNT files
292  v1 = legacyPreIncludeToCAPreInclude[v]
293  if v1 is not None:
294  specialConfigDict[k] = v1
295  v2 = legacyPreIncludeToCAPostInclude[v]
296  if v2 is not None:
297  specialConfigDict['postInclude'] = v2
298  else:
299  specialConfigDict[k] = v
300  return specialConfigDict
301 

Variable Documentation

◆ _fileMetaData

python.AutoConfigFlags._fileMetaData = dict()
private

Definition at line 10 of file AutoConfigFlags.py.

◆ msg

python.AutoConfigFlags.msg = logging.getLogger('AutoConfigFlags')

Definition at line 7 of file AutoConfigFlags.py.

python.AutoConfigFlags.GetFileMD
def GetFileMD(filenames, allowEmpty=True, maxLevel='peeker')
Definition: AutoConfigFlags.py:65
python.AutoConfigFlags.getGeneratorsInfo
def getGeneratorsInfo(flags)
Definition: AutoConfigFlags.py:223
PixelGeoDB.InitializeGeometryParameters_SQLite
def InitializeGeometryParameters_SQLite(sqliteDbReader)
Definition: PixelGeoDB.py:54
python.AutoConfigFlags.getDefaultDetectors
def getDefaultDetectors(geoTag, sqliteDB, sqliteDBFullPath, includeForward=False)
Definition: AutoConfigFlags.py:146
python.AutoConfigFlags._initializeGeometryParameters
def _initializeGeometryParameters(geoTag, sqliteDB, sqliteDBFullPath)
Definition: AutoConfigFlags.py:86
MuonGeoDB.InitializeGeometryParameters
def InitializeGeometryParameters(dbGeomCursor)
Definition: MuonGeoDB.py:3
LArGeoDB.InitializeGeometryParameters
def InitializeGeometryParameters(dbGeomCursor)
Definition: LArGeoDB.py:3
python.AutoConfigFlags.getRunToTimestampDict
def getRunToTimestampDict()
Definition: AutoConfigFlags.py:207
LArGeoDB.InitializeGeometryParameters_SQLite
def InitializeGeometryParameters_SQLite(sqliteDbReader)
Definition: LArGeoDB.py:34
python.AutoConfigFlags.getInitialTimeStampsFromRunNumbers
def getInitialTimeStampsFromRunNumbers(runNumbers)
Definition: AutoConfigFlags.py:213
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
PixelGeoDB.InitializeGeometryParameters
def InitializeGeometryParameters(dbGeomCursor)
Definition: PixelGeoDB.py:3
python.Versioning.generatorsGetFromMetadata
def generatorsGetFromMetadata(metadataString)
Definition: Versioning.py:65
python.AutoConfigFlags.DetDescrInfo
def DetDescrInfo(geoTag, sqliteDB, sqliteDBFullPath)
Definition: AutoConfigFlags.py:131
python.AutoConfigFlags.getSpecialConfigurationMetadata
def getSpecialConfigurationMetadata(flags)
Definition: AutoConfigFlags.py:239
MuonGeoDB.InitializeGeometryParameters_SQLite
def InitializeGeometryParameters_SQLite(sqliteDbReader)
Definition: MuonGeoDB.py:31