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

Classes

class  DynamicallyLoadMetadata
 

Functions

def GetFileMD (filenames, allowEmpty=True)
 
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 72 of file AutoConfigFlags.py.

72 def _initializeGeometryParameters(geoTag,sqliteDB,sqliteDBFullPath):
73  """Read geometry database for all detectors"""
74 
75  from AtlasGeoModel import CommonGeoDB
76  from PixelGeoModel import PixelGeoDB
77  from LArGeoAlgsNV import LArGeoDB
78  from MuonGeoModel import MuonGeoDB
79 
80  if not sqliteDB:
81  # Read parameters from Oracle/Frontier
82  from AtlasGeoModel.AtlasGeoDBInterface import AtlasGeoDBInterface
83  dbGeomCursor = AtlasGeoDBInterface(geoTag)
84  dbGeomCursor.ConnectAndBrowseGeoDB()
85 
86  params = { 'Common' : CommonGeoDB.InitializeGeometryParameters(dbGeomCursor),
87  'Pixel' : PixelGeoDB.InitializeGeometryParameters(dbGeomCursor),
88  'LAr' : LArGeoDB.InitializeGeometryParameters(dbGeomCursor),
89  'Muon' : MuonGeoDB.InitializeGeometryParameters(dbGeomCursor),
90  'Luminosity' : CommonGeoDB.InitializeLuminosityDetectorParameters(dbGeomCursor),
91  }
92 
93  msg.debug('Config parameters retrieved from Geometry DB (Frontier/Oracle):')
94  for key in params.keys():
95  msg.debug(f'{key} -> {params[key]}')
96  else:
97  # Read parameters from SQLite
98  from AtlasGeoModel.AtlasGeoDBInterface import AtlasGeoDBInterface_SQLite
99  sqliteReader = AtlasGeoDBInterface_SQLite(geoTag,sqliteDBFullPath)
100  sqliteReader.ConnectToDB()
101 
102  params = { 'Common' : CommonGeoDB.InitializeGeometryParameters_SQLite(sqliteReader),
103  'Pixel' : PixelGeoDB.InitializeGeometryParameters_SQLite(sqliteReader),
104  'LAr' : LArGeoDB.InitializeGeometryParameters_SQLite(sqliteReader),
105  'Muon' : MuonGeoDB.InitializeGeometryParameters_SQLite(sqliteReader),
106  'Luminosity' : CommonGeoDB.InitializeLuminosityDetectorParameters_SQLite(sqliteReader),
107  }
108 
109  msg.debug('Config parameters retrieved from Geometry DB (SQLite):')
110  for key in params.keys():
111  msg.debug(f'{key} -> {params[key]}')
112 
113  return params
114 
115 
116 @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 117 of file AutoConfigFlags.py.

117 def DetDescrInfo(geoTag, sqliteDB, sqliteDBFullPath):
118  """Query geometry DB for detector description. Returns dictionary with
119  detector description. Queries DB for each tag only once.
120 
121  geoTag: geometry tag (e.g. ATLAS-R2-2016-01-00-01)
122  """
123  if not geoTag:
124  raise ValueError("No geometry tag specified")
125 
126  detDescrInfo = _initializeGeometryParameters(geoTag,sqliteDB,sqliteDBFullPath)
127  detDescrInfo["geomTag"] = geoTag
128  return detDescrInfo
129 
130 
131 @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 132 of file AutoConfigFlags.py.

132 def getDefaultDetectors(geoTag, sqliteDB, sqliteDBFullPath, includeForward=False):
133  """Query geometry DB for detector description.
134  Returns a set of detectors used in a geometry tag.
135 
136  geoTag: geometry tag (e.g. ATLAS-R2-2016-01-00-01)
137  """
138  detectors = set()
139  detectors.add('Bpipe')
140 
141  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Run'] not in ['RUN1', 'RUN2', 'RUN3']: # RUN4 and beyond
142  detectors.add('ITkPixel')
143  detectors.add('ITkStrip')
144  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Luminosity']['BCMPrime']:
145  detectors.add('BCMPrime') # since https://gitlab.cern.ch/Atlas-Inner-Tracking/ITKLayouts/-/merge_requests/347 introduced BCMPrime geometry
146  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Luminosity']['PLR']:
147  detectors.add('PLR')
148  else:
149  detectors.add('Pixel')
150  detectors.add('SCT')
151  detectors.add('TRT')
152  detectors.add('BCM')
153  # TODO: wait for special table in the geo DB
154  # if DetDescrInfo(geoTag)['Common']['Run'] == 'RUN4':
155  # detectors.add('BCMPrime')
156 
157  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Run'] not in ['RUN1', 'RUN2', 'RUN3']: # RUN4 and beyond
158  detectors.add('HGTD')
159 
160  detectors.add('LAr')
161  detectors.add('Tile')
162  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Run'] in ['RUN1', 'RUN2', 'RUN3']:
163  detectors.add('MBTS')
164 
165  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasMDT']:
166  detectors.add('MDT')
167  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasRPC']:
168  detectors.add('RPC')
169  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasTGC']:
170  detectors.add('TGC')
171  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasCSC']:
172  detectors.add('CSC')
173  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasSTGC']:
174  detectors.add('sTGC')
175  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Muon']['HasMM']:
176  detectors.add('MM')
177 
178  if includeForward:
179  detectors.add('Lucid')
180  if DetDescrInfo(geoTag,sqliteDB,sqliteDBFullPath)['Common']['Run'] not in ['RUN1']:
181  detectors.add('AFP')
182  detectors.add('ZDC')
183  detectors.add('ALFA')
184  detectors.add('FwdRegion')
185 
186  return detectors
187 
188 
189 # Based on RunDMCFlags.py

◆ GetFileMD()

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

Definition at line 51 of file AutoConfigFlags.py.

51 def GetFileMD(filenames, allowEmpty=True):
52  if not filenames:
53  if allowEmpty:
54  msg.info("Running an input-less job. Will have empty metadata.")
55  return {}
56  raise RuntimeError("Metadata can not be read in an input-less job.")
57  if isinstance(filenames, str):
58  filenames = [filenames]
59  if '_ATHENA_GENERIC_INPUTFILE_NAME_' in filenames:
60  raise RuntimeError('Input file name not set, instead _ATHENA_GENERIC_INPUTFILE_NAME_ found. Cannot read metadata.')
61  for filename in filenames:
62  if filename not in _fileMetaData:
63  msg.info("Obtaining metadata of auto-configuration by peeking into '%s'", filename)
64  _fileMetaData[filename] = DynamicallyLoadMetadata(filename)
65  if _fileMetaData[filename]['nentries'] not in [None, 0]:
66  return _fileMetaData[filename]
67  else:
68  msg.info("The file: %s has no entries, going to the next one for harvesting the metadata", filename)
69  msg.info("No file with events found, returning anyways metadata associated to the first file %s", filenames[0])
70  return _fileMetaData[filenames[0]]
71 

◆ getGeneratorsInfo()

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

Definition at line 206 of file AutoConfigFlags.py.

206 def getGeneratorsInfo(flags):
207  """Read in GeneratorsInfo from the input file
208  """
209  from AthenaConfiguration.Enums import ProductionStep
210  inputFiles = flags.Input.Files
211  if flags.Common.ProductionStep in [ProductionStep.Overlay, ProductionStep.FastChain] and not flags.Overlay.DataOverlay and flags.Input.SecondaryFiles:
212  # Do something special for MC Overlay
213  inputFiles = flags.Input.SecondaryFiles
214  generatorsString = ""
215  from AthenaConfiguration.AutoConfigFlags import GetFileMD
216  if inputFiles:
217  generatorsString = GetFileMD(inputFiles).get("generators", "")
218  from GeneratorConfig.Versioning import generatorsGetFromMetadata
219  return generatorsGetFromMetadata( generatorsString )
220 
221 

◆ 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 196 of file AutoConfigFlags.py.

196 def getInitialTimeStampsFromRunNumbers(runNumbers):
197  """This is used to hold a dictionary of the form
198  {152166:1269948352889940910, ...} to allow the
199  timestamp to be determined from the run.
200  """
201  run2timestampDict = getRunToTimestampDict()
202  timeStamps = [run2timestampDict.get(runNumber,1) for runNumber in runNumbers] # Add protection here?
203  return timeStamps
204 
205 

◆ getRunToTimestampDict()

def python.AutoConfigFlags.getRunToTimestampDict ( )

Definition at line 190 of file AutoConfigFlags.py.

191  # this wrapper is intended to avoid an initial import
192  from .RunToTimestampData import RunToTimestampDict
193  return RunToTimestampDict
194 
195 

◆ getSpecialConfigurationMetadata()

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

Definition at line 222 of file AutoConfigFlags.py.

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

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.getGeneratorsInfo
def getGeneratorsInfo(flags)
Definition: AutoConfigFlags.py:206
PixelGeoDB.InitializeGeometryParameters_SQLite
def InitializeGeometryParameters_SQLite(sqliteDbReader)
Definition: PixelGeoDB.py:54
python.AutoConfigFlags.getDefaultDetectors
def getDefaultDetectors(geoTag, sqliteDB, sqliteDBFullPath, includeForward=False)
Definition: AutoConfigFlags.py:132
python.AutoConfigFlags._initializeGeometryParameters
def _initializeGeometryParameters(geoTag, sqliteDB, sqliteDBFullPath)
Definition: AutoConfigFlags.py:72
MuonGeoDB.InitializeGeometryParameters
def InitializeGeometryParameters(dbGeomCursor)
Definition: MuonGeoDB.py:3
python.AutoConfigFlags.GetFileMD
def GetFileMD(filenames, allowEmpty=True)
Definition: AutoConfigFlags.py:51
LArGeoDB.InitializeGeometryParameters
def InitializeGeometryParameters(dbGeomCursor)
Definition: LArGeoDB.py:3
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
python.AutoConfigFlags.getRunToTimestampDict
def getRunToTimestampDict()
Definition: AutoConfigFlags.py:190
LArGeoDB.InitializeGeometryParameters_SQLite
def InitializeGeometryParameters_SQLite(sqliteDbReader)
Definition: LArGeoDB.py:34
python.AutoConfigFlags.getInitialTimeStampsFromRunNumbers
def getInitialTimeStampsFromRunNumbers(runNumbers)
Definition: AutoConfigFlags.py:196
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:32
python.AutoConfigFlags.DetDescrInfo
def DetDescrInfo(geoTag, sqliteDB, sqliteDBFullPath)
Definition: AutoConfigFlags.py:117
python.AutoConfigFlags.getSpecialConfigurationMetadata
def getSpecialConfigurationMetadata(flags)
Definition: AutoConfigFlags.py:222
MuonGeoDB.InitializeGeometryParameters_SQLite
def InitializeGeometryParameters_SQLite(sqliteDbReader)
Definition: MuonGeoDB.py:31