ATLAS Offline Software
Functions | Variables
python.DetectorConfigFlags Namespace Reference

Functions

def createDetectorConfigFlags ()
 
def getEnabledDetectors (flags, geometry=False)
 
def _parseDetectorsList (flags, detectors)
 
def _loadDetectorsFromMetaData (flags, key, keep_beampipe=False)
 
def _getDetectorFlagStatus (flags, list=None, geometry=False)
 
def _printDetectorFlags (flags, info_dict)
 
def setupDetectorFlags (flags, custom_list=None, use_metadata=False, toggle_geometry=False, validate_only=False, keep_beampipe=False)
 
def setupDetectorsFromList (flags, detectors, toggle_geometry=False, validate_only=False)
 
def enableDetectors (flags, detectors, toggle_geometry=False)
 
def disableDetectors (flags, detectors, toggle_geometry=False)
 

Variables

 allDetectors
 
 allGroups
 

Function Documentation

◆ _getDetectorFlagStatus()

def python.DetectorConfigFlags._getDetectorFlagStatus (   flags,
  list = None,
  geometry = False 
)
private

Definition at line 215 of file DetectorConfigFlags.py.

215 def _getDetectorFlagStatus(flags, list=None, geometry=False):
216  # load flags
217  flags._loadDynaFlags('Detector')
218 
219  values = []
220  for d in allDetectors:
221  # test whether each detector is on
222  name = f'Detector.Geometry{d}' if geometry else f'Detector.Enable{d}'
223  if flags.hasFlag(name):
224  if list is not None:
225  if d in list:
226  values.append('ON')
227  else:
228  values.append('--')
229  else:
230  if flags[name] is not False:
231  values.append('ON')
232  else:
233  values.append('--')
234  else:
235  values.append('n/a')
236  return values
237 
238 

◆ _loadDetectorsFromMetaData()

def python.DetectorConfigFlags._loadDetectorsFromMetaData (   flags,
  key,
  keep_beampipe = False 
)
private

Definition at line 196 of file DetectorConfigFlags.py.

196 def _loadDetectorsFromMetaData(flags, key, keep_beampipe=False):
197  from AthenaConfiguration.AutoConfigFlags import GetFileMD
198  detectors = eval(GetFileMD(flags.Input.Files).get(key, '[]'))
199  if not detectors:
200  return []
201 
202  # MBTS compatibility check
203  from AthenaConfiguration.Enums import LHCPeriod
204  if (flags.GeoModel.Run < LHCPeriod.Run4 and 'LAr' in detectors # built as part of LAr
205  or 'TileHitVector#MBTSHits' in flags.Input.TypedCollections
206  or 'TileTTL1Container#TileTTL1MBTS' in flags.Input.TypedCollections):
207  detectors.append('MBTS')
208 
209  if keep_beampipe and flags.Detector.GeometryBpipe:
210  detectors.append('Bpipe')
211 
212  return _parseDetectorsList(flags, detectors)
213 
214 

◆ _parseDetectorsList()

def python.DetectorConfigFlags._parseDetectorsList (   flags,
  detectors 
)
private

Definition at line 157 of file DetectorConfigFlags.py.

157 def _parseDetectorsList(flags, detectors):
158  # setup logging
159  from AthenaCommon.Logging import logging
160  log = logging.getLogger('DetectorConfigFlags')
161  # load flags
162  flags._loadDynaFlags('Detector')
163  # compatibility
164  ignored_detectors = ['None', 'Truth', 'DBM']
165  def compatibility_layer(detector):
166  if detector == 'pixel':
167  return 'Pixel'
168  return detector
169 
170  # first check if we have groups
171  groups = {d for d in detectors if d in allGroups.keys()}
172  detectors = {compatibility_layer(d) for d in detectors if d not in allGroups.keys()}
173  for g in groups:
174  log.debug("Evaluating detector group '%s'", g)
175  if g == 'Forward':
176  # forward detectors are special
177  for d in allGroups[g]:
178  log.debug("Appending detector '%s'", d)
179  detectors.add(d)
180  else:
181  # in case of groups only enable defaults
182  for d in allGroups[g]:
183  if d in getDefaultDetectors(flags.GeoModel.AtlasVersion,flags.GeoModel.SQLiteDB,flags.GeoModel.SQLiteDBFullPath):
184  log.debug("Appending detector '%s'", d)
185  detectors.add(d)
186 
187  # check if valid detectors are required
188  for d in detectors:
189  if d not in allDetectors and d not in ignored_detectors:
190  log.warning("Unknown detector '%s'", d)
191 
192  # sort the detectors
193  return [d for d in allDetectors if d in detectors]
194 
195 

◆ _printDetectorFlags()

def python.DetectorConfigFlags._printDetectorFlags (   flags,
  info_dict 
)
private

Definition at line 239 of file DetectorConfigFlags.py.

239 def _printDetectorFlags(flags, info_dict):
240  # setup logging
241  from AthenaCommon.Logging import logging
242  log = logging.getLogger('DetectorConfigFlags')
243  # generate common formatting string
244  item_len = 7
245  # initial is always there
246  types = ['Initial']
247  subtypes = ['Geo.', 'Enbl.']
248  format_header = f'%-{item_len * 2}s'
249  if 'metadata_simulated' in info_dict.keys() or 'metadata_digitized' in info_dict.keys():
250  metadata_len = 0
251  if 'metadata_simulated' in info_dict.keys():
252  subtypes.append('Sim.')
253  metadata_len += item_len
254  if 'metadata_digitized' in info_dict.keys():
255  subtypes.append('Digi.')
256  metadata_len += item_len
257  types.append('Metadata' if item_len > 8 else 'Meta.')
258  format_header += f'%-{metadata_len}s'
259  if 'requested_geometry' in info_dict.keys():
260  types.append('Requested')
261  subtypes += ['Geo.', 'Enbl.']
262  format_header += f'%-{item_len * 2}s'
263  # final is always there ?
264  types.append('Final')
265  subtypes += ['Geo.', 'Enbl.']
266  format_header += f'%-{item_len * 2}s'
267 
268  detector_len = 7
269  for d in allDetectors:
270  detector_len = max(detector_len, len(d) + 2)
271 
272  format_header = f'%{detector_len}s ' + format_header
273  format_subheader = f'%{detector_len}s ' + len(subtypes) * f'%-{item_len}s'
274  format = f'%{detector_len}s : ' + len(subtypes) * f'%-{item_len}s'
275  data = [allDetectors] + [v for _, v in info_dict.items()]
276  data = list(map(list, zip(*data)))
277 
278  # print header rows
279  log.info(format_header, *([''] + types))
280  log.info(format_subheader, *([''] + subtypes))
281  # print data
282  for row in data:
283  log.info(format, *row)
284 
285 

◆ createDetectorConfigFlags()

def python.DetectorConfigFlags.createDetectorConfigFlags ( )

Definition at line 26 of file DetectorConfigFlags.py.

27  dcf = AthConfigFlags()
28 
29 
31  dcf.addFlag('Detector.GeometryBpipe', True) # always enabled by default
32 
33  # Inner Detector
34  dcf.addFlag('Detector.GeometryBCM', lambda prevFlags : 'BCM' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
35  dcf.addFlag('Detector.GeometryPixel', lambda prevFlags : 'Pixel' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
36  dcf.addFlag('Detector.GeometrySCT', lambda prevFlags : 'SCT' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
37  dcf.addFlag('Detector.GeometryTRT', lambda prevFlags : 'TRT' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
38  dcf.addFlag('Detector.GeometryID', lambda prevFlags : (prevFlags.Detector.GeometryBCM
39  or prevFlags.Detector.GeometryPixel or prevFlags.Detector.GeometrySCT
40  or prevFlags.Detector.GeometryTRT))
41 
42  # Upgrade ITk Inner Tracker is a separate and parallel detector
43  dcf.addFlag('Detector.GeometryPLR', lambda prevFlags : 'PLR' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
44  dcf.addFlag('Detector.GeometryBCMPrime', lambda prevFlags : 'BCMPrime' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
45  dcf.addFlag('Detector.GeometryITkPixel', lambda prevFlags : 'ITkPixel' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
46  dcf.addFlag('Detector.GeometryITkStrip', lambda prevFlags : 'ITkStrip' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
47  dcf.addFlag('Detector.GeometryITk', lambda prevFlags : (prevFlags.Detector.GeometryBCMPrime
48  or prevFlags.Detector.GeometryITkPixel
49  or prevFlags.Detector.GeometryITkStrip
50  or prevFlags.Detector.GeometryPLR))
51  # HGTD
52  dcf.addFlag('Detector.GeometryHGTD', lambda prevFlags : 'HGTD' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
53 
54  # Calorimeters
55  dcf.addFlag('Detector.GeometryLAr', lambda prevFlags : 'LAr' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath)) # Add separate em HEC and FCAL flags?
56  dcf.addFlag('Detector.GeometryTile', lambda prevFlags : 'Tile' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
57  dcf.addFlag('Detector.GeometryMBTS', lambda prevFlags : (prevFlags.Detector.GeometryLAr and 'MBTS' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath)))
58  dcf.addFlag('Detector.GeometryCalo', lambda prevFlags : (prevFlags.Detector.GeometryLAr or prevFlags.Detector.GeometryTile))
59 
60  # Muon Spectrometer
61  dcf.addFlag('Detector.GeometryCSC', lambda prevFlags : 'CSC' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
62  dcf.addFlag('Detector.GeometryMDT', lambda prevFlags : 'MDT' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
63  dcf.addFlag('Detector.GeometryRPC', lambda prevFlags : 'RPC' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
64  dcf.addFlag('Detector.GeometryTGC', lambda prevFlags : 'TGC' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
65  dcf.addFlag('Detector.GeometrysTGC', lambda prevFlags : 'sTGC' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
66  dcf.addFlag('Detector.GeometryMM', lambda prevFlags : 'MM' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB,prevFlags.GeoModel.SQLiteDBFullPath))
67  dcf.addFlag('Detector.GeometryMuon', lambda prevFlags : (prevFlags.Detector.GeometryCSC or prevFlags.Detector.GeometryMDT
68  or prevFlags.Detector.GeometryRPC or prevFlags.Detector.GeometryTGC
69  or prevFlags.Detector.GeometrysTGC or prevFlags.Detector.GeometryMM))
70 
71  # Forward detectors (disabled by default)
72  dcf.addFlag('Detector.GeometryLucid', lambda prevFlags : 'Lucid' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
73  dcf.addFlag('Detector.GeometryZDC', lambda prevFlags : 'ZDC' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
74  dcf.addFlag('Detector.GeometryALFA', lambda prevFlags : 'ALFA' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
75  dcf.addFlag('Detector.GeometryAFP', lambda prevFlags : 'AFP' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
76  dcf.addFlag('Detector.GeometryFwdRegion', lambda prevFlags : 'FwdRegion' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
77  dcf.addFlag('Detector.GeometryForward', lambda prevFlags : (prevFlags.Detector.GeometryLucid or prevFlags.Detector.GeometryZDC
78  or prevFlags.Detector.GeometryALFA or prevFlags.Detector.GeometryAFP
79  or prevFlags.Detector.GeometryFwdRegion))
80 
81  # Cavern (disabled by default)
82  dcf.addFlag('Detector.GeometryCavern', False)
83 
84 
85 
88  dcf.addFlag('Detector.EnableBCM', lambda prevFlags : prevFlags.Detector.GeometryBCM)
89  dcf.addFlag('Detector.EnablePixel', lambda prevFlags : prevFlags.Detector.GeometryPixel)
90  dcf.addFlag('Detector.EnableSCT', lambda prevFlags : prevFlags.Detector.GeometrySCT)
91  dcf.addFlag('Detector.EnableTRT', lambda prevFlags : prevFlags.Detector.GeometryTRT)
92  dcf.addFlag('Detector.EnableID', lambda prevFlags : prevFlags.Detector.GeometryID and
93  (prevFlags.Detector.EnableBCM
94  or prevFlags.Detector.EnablePixel or prevFlags.Detector.EnableSCT
95  or prevFlags.Detector.EnableTRT))
96 
97  # Upgrade ITk Inner Tracker is a separate and parallel detector
98  dcf.addFlag('Detector.EnablePLR', lambda prevFlags : prevFlags.Detector.GeometryPLR)
99  dcf.addFlag('Detector.EnableBCMPrime', lambda prevFlags : prevFlags.Detector.GeometryBCMPrime)
100  dcf.addFlag('Detector.EnableITkPixel', lambda prevFlags : prevFlags.Detector.GeometryITkPixel)
101  dcf.addFlag('Detector.EnableITkStrip', lambda prevFlags : prevFlags.Detector.GeometryITkStrip)
102  dcf.addFlag('Detector.EnableITk', lambda prevFlags : prevFlags.Detector.GeometryITk and
103  (prevFlags.Detector.EnableBCMPrime
104  or prevFlags.Detector.EnableITkPixel
105  or prevFlags.Detector.EnableITkStrip
106  or prevFlags.Detector.EnablePLR))
107  # HGTD
108  dcf.addFlag('Detector.EnableHGTD', lambda prevFlags : prevFlags.Detector.GeometryHGTD)
109 
110  # Calorimeters
111  dcf.addFlag('Detector.EnableLAr', lambda prevFlags : prevFlags.Detector.GeometryLAr)
112  dcf.addFlag('Detector.EnableTile', lambda prevFlags : prevFlags.Detector.GeometryTile)
113  dcf.addFlag('Detector.EnableMBTS', lambda prevFlags : prevFlags.Detector.GeometryMBTS)
114  dcf.addFlag('Detector.EnableL1Calo', lambda prevFlags : (prevFlags.Detector.EnableLAr or prevFlags.Detector.EnableTile))
115  dcf.addFlag('Detector.EnableCalo', lambda prevFlags : prevFlags.Detector.GeometryCalo and
116  (prevFlags.Detector.EnableLAr or prevFlags.Detector.EnableTile))
117 
118  # Muon Spectrometer
119  dcf.addFlag('Detector.EnableCSC', lambda prevFlags : prevFlags.Detector.GeometryCSC)
120  dcf.addFlag('Detector.EnableMDT', lambda prevFlags : prevFlags.Detector.GeometryMDT)
121  dcf.addFlag('Detector.EnableRPC', lambda prevFlags : prevFlags.Detector.GeometryRPC)
122  dcf.addFlag('Detector.EnableTGC', lambda prevFlags : prevFlags.Detector.GeometryTGC)
123  dcf.addFlag('Detector.EnablesTGC', lambda prevFlags : prevFlags.Detector.GeometrysTGC)
124  dcf.addFlag('Detector.EnableMM', lambda prevFlags : prevFlags.Detector.GeometryMM)
125  dcf.addFlag('Detector.EnableMuon', lambda prevFlags : prevFlags.Detector.GeometryMuon and
126  (prevFlags.Detector.EnableCSC or prevFlags.Detector.EnableMDT
127  or prevFlags.Detector.EnableRPC or prevFlags.Detector.EnableTGC
128  or prevFlags.Detector.EnablesTGC or prevFlags.Detector.EnableMM))
129 
130  # Forward detectors (disabled by default)
131  dcf.addFlag('Detector.EnableLucid', lambda prevFlags : prevFlags.Detector.GeometryLucid)
132  dcf.addFlag('Detector.EnableZDC', lambda prevFlags : prevFlags.Detector.GeometryZDC)
133  dcf.addFlag('Detector.EnableALFA', lambda prevFlags : prevFlags.Detector.GeometryALFA)
134  dcf.addFlag('Detector.EnableAFP', lambda prevFlags : prevFlags.Detector.GeometryAFP)
135  dcf.addFlag('Detector.EnableFwdRegion', lambda prevFlags : prevFlags.Detector.GeometryFwdRegion)
136  dcf.addFlag('Detector.EnableForward', lambda prevFlags : prevFlags.Detector.GeometryForward and
137  (prevFlags.Detector.EnableLucid or prevFlags.Detector.EnableZDC
138  or prevFlags.Detector.EnableALFA or prevFlags.Detector.EnableAFP
139  or prevFlags.Detector.EnableFwdRegion))
140 
141  return dcf
142 
143 

◆ disableDetectors()

def python.DetectorConfigFlags.disableDetectors (   flags,
  detectors,
  toggle_geometry = False 
)
Disable detectors from a list

Definition at line 423 of file DetectorConfigFlags.py.

423 def disableDetectors(flags, detectors, toggle_geometry=False):
424  """Disable detectors from a list"""
425  changed = False
426  # setup logging
427  from AthenaCommon.Logging import logging
428  log = logging.getLogger('DetectorConfigFlags')
429  # parse the list
430  detectors = _parseDetectorsList(flags, detectors)
431 
432  # debugging
433  log.info('Disabling detectors: %s', detectors)
434 
435  # go through all of the detectors and disable them if needed
436  for d in detectors:
437  name = f'Detector.Enable{d}'
438  if flags.hasFlag(name):
439  if flags[name] is not False:
440  changed = True
441  log.info("Disabling '%s'", name)
442  flags._set(name, False)
443  if toggle_geometry:
444  name = f'Detector.Geometry{d}'
445  if flags.hasFlag(name):
446  if flags[name] is not False:
447  changed = True
448  log.info("Disabling '%s'", name)
449  flags._set(name, False)
450 
451  return changed
452 

◆ enableDetectors()

def python.DetectorConfigFlags.enableDetectors (   flags,
  detectors,
  toggle_geometry = False 
)
Enable detectors from a list

Definition at line 392 of file DetectorConfigFlags.py.

392 def enableDetectors(flags, detectors, toggle_geometry=False):
393  """Enable detectors from a list"""
394  changed = False
395  # setup logging
396  from AthenaCommon.Logging import logging
397  log = logging.getLogger('DetectorConfigFlags')
398  # parse the list
399  detectors = _parseDetectorsList(flags, detectors)
400 
401  # debugging
402  log.info('Enabling detectors: %s', detectors)
403 
404  # go through all of the detectors and enable them if needed
405  for d in detectors:
406  name = f'Detector.Enable{d}'
407  if flags.hasFlag(name):
408  if flags[name] is not True:
409  changed = True
410  log.info("Enabling '%s'", name)
411  flags._set(name, True)
412  if toggle_geometry:
413  name = f'Detector.Geometry{d}'
414  if flags.hasFlag(name):
415  if flags[name] is not True:
416  changed = True
417  log.info("Enabling '%s'", name)
418  flags._set(name, True)
419 
420  return changed
421 
422 

◆ getEnabledDetectors()

def python.DetectorConfigFlags.getEnabledDetectors (   flags,
  geometry = False 
)

Definition at line 144 of file DetectorConfigFlags.py.

144 def getEnabledDetectors(flags, geometry=False):
145  # load flags
146  flags._loadDynaFlags('Detector')
147  values = []
148  for d in allDetectors:
149  # test whether each detector is on
150  name = f'Detector.Geometry{d}' if geometry else f'Detector.Enable{d}'
151  if flags.hasFlag(name):
152  if flags[name] is not False:
153  values.append(d)
154  return values
155 
156 

◆ setupDetectorFlags()

def python.DetectorConfigFlags.setupDetectorFlags (   flags,
  custom_list = None,
  use_metadata = False,
  toggle_geometry = False,
  validate_only = False,
  keep_beampipe = False 
)
Setup detector flags from metadata or a list

Definition at line 286 of file DetectorConfigFlags.py.

286 def setupDetectorFlags(flags, custom_list=None, use_metadata=False, toggle_geometry=False, validate_only=False, keep_beampipe=False):
287  """Setup detector flags from metadata or a list"""
288  info_dict = {}
289  # setup logging
290  from AthenaCommon.Logging import logging
291  log = logging.getLogger('DetectorConfigFlags')
292 
293  initial_set = set(getEnabledDetectors(flags))
294 
295  info_dict['initial_geometry'] = _getDetectorFlagStatus(flags, geometry=True)
296  info_dict['initial_enable'] = _getDetectorFlagStatus(flags, geometry=False)
297 
298  final_set = initial_set
299  has_metadata = False
300  if use_metadata:
301  simulated_set = set(_loadDetectorsFromMetaData(flags, 'SimulatedDetectors', keep_beampipe=keep_beampipe))
302  digitized_set = set(_loadDetectorsFromMetaData(flags, 'DigitizedDetectors', keep_beampipe=keep_beampipe))
303  if simulated_set:
304  has_metadata = True
305  info_dict['metadata_simulated'] = _getDetectorFlagStatus(flags, list=simulated_set, geometry=False)
306  if digitized_set:
307  has_metadata = True
308  info_dict['metadata_digitized'] = _getDetectorFlagStatus(flags, list=digitized_set, geometry=False)
309 
310  if digitized_set and digitized_set != initial_set:
311  final_set = digitized_set
312  elif simulated_set and simulated_set != initial_set:
313  final_set = simulated_set
314 
315  requested_inconsistency_set = set()
316  if custom_list is not None and custom_list:
317  requested_set = set(_parseDetectorsList(flags, custom_list))
318  if toggle_geometry:
319  info_dict['requested_geometry'] = _getDetectorFlagStatus(flags, list=requested_set, geometry=True)
320  else:
321  info_dict['requested_geometry'] = info_dict['initial_geometry']
322  info_dict['requested_enable'] = _getDetectorFlagStatus(flags, list=requested_set, geometry=False)
323 
324  if has_metadata:
325  requested_inconsistency_set = requested_set.difference(final_set)
326  final_set = requested_set.intersection(final_set)
327  else:
328  final_set = requested_set
329 
330  info_dict['final_geometry'] = _getDetectorFlagStatus(flags, list=final_set, geometry=True)
331  info_dict['final_enable'] = _getDetectorFlagStatus(flags, list=final_set, geometry=False)
332 
333  _printDetectorFlags(flags, info_dict)
334 
335  if requested_inconsistency_set:
336  log.error('Requested detectors %s which are not enabled in the input file.', list(requested_inconsistency_set))
337  raise ValueError(list(requested_inconsistency_set))
338 
339  if initial_set != final_set:
340  diff_enable = final_set.difference(initial_set)
341  if 'Bpipe' in diff_enable and (keep_beampipe or flags.Detector.GeometryBpipe):
342  diff_enable.remove('Bpipe')
343  diff_disable = initial_set.difference(final_set)
344  if diff_enable:
345  log.info('Enabling detectors: %s', _parseDetectorsList(flags, diff_enable))
346  if diff_disable:
347  log.info('Disabling detectors: %s', _parseDetectorsList(flags, diff_disable))
348  setupDetectorsFromList(flags, final_set, toggle_geometry, validate_only)
349 
350 

◆ setupDetectorsFromList()

def python.DetectorConfigFlags.setupDetectorsFromList (   flags,
  detectors,
  toggle_geometry = False,
  validate_only = False 
)
Setup (toggle) detectors from a pre-defined list

Definition at line 351 of file DetectorConfigFlags.py.

351 def setupDetectorsFromList(flags, detectors, toggle_geometry=False, validate_only=False):
352  """Setup (toggle) detectors from a pre-defined list"""
353  changed = False
354  # setup logging
355  from AthenaCommon.Logging import logging
356  log = logging.getLogger('DetectorConfigFlags')
357  # parse the list
358  detectors = _parseDetectorsList(flags, detectors)
359 
360  # print summary
361  if validate_only:
362  log.info('Required detectors: %s', detectors)
363  else:
364  log.debug('Setting detectors to: %s', detectors)
365 
366  # go through all of the detectors and check what should happen
367  for d in allDetectors:
368  status = d in detectors
369  name = f'Detector.Enable{d}'
370  if flags.hasFlag(name):
371  if flags[name] != status:
372  changed = True
373  if validate_only:
374  log.warning("Flag '%s' should be %s but is set to %s", name, status, not status)
375  else:
376  log.debug("Toggling '%s' from %s to %s", name, not status, status)
377  flags._set(name, status)
378  if toggle_geometry:
379  name = f'Detector.Geometry{d}'
380  if flags.hasFlag(name):
381  if flags[name] != status:
382  changed = True
383  if validate_only:
384  log.warning("Flag '%s' should be %s but is set to %s", name, status, not status)
385  else:
386  log.debug("Toggling '%s' from %s to %s", name, not status, status)
387  flags._set(name, status)
388 
389  return changed
390 
391 

Variable Documentation

◆ allDetectors

python.DetectorConfigFlags.allDetectors

Definition at line 7 of file DetectorConfigFlags.py.

◆ allGroups

python.DetectorConfigFlags.allGroups

Definition at line 17 of file DetectorConfigFlags.py.

python.DetectorConfigFlags._parseDetectorsList
def _parseDetectorsList(flags, detectors)
Definition: DetectorConfigFlags.py:157
max
#define max(a, b)
Definition: cfImp.cxx:41
python.AutoConfigFlags.getDefaultDetectors
def getDefaultDetectors(geoTag, sqliteDB, sqliteDBFullPath, includeForward=False)
Definition: AutoConfigFlags.py:132
python.DetectorConfigFlags.getEnabledDetectors
def getEnabledDetectors(flags, geometry=False)
Definition: DetectorConfigFlags.py:144
python.DetectorConfigFlags._loadDetectorsFromMetaData
def _loadDetectorsFromMetaData(flags, key, keep_beampipe=False)
Definition: DetectorConfigFlags.py:196
python.AutoConfigFlags.GetFileMD
def GetFileMD(filenames, allowEmpty=True)
Definition: AutoConfigFlags.py:51
python.DetectorConfigFlags._getDetectorFlagStatus
def _getDetectorFlagStatus(flags, list=None, geometry=False)
Definition: DetectorConfigFlags.py:215
python.DetectorConfigFlags.createDetectorConfigFlags
def createDetectorConfigFlags()
Definition: DetectorConfigFlags.py:26
python.DetectorConfigFlags.enableDetectors
def enableDetectors(flags, detectors, toggle_geometry=False)
Definition: DetectorConfigFlags.py:392
python.DetectorConfigFlags.setupDetectorsFromList
def setupDetectorsFromList(flags, detectors, toggle_geometry=False, validate_only=False)
Definition: DetectorConfigFlags.py:351
python.DetectorConfigFlags.disableDetectors
def disableDetectors(flags, detectors, toggle_geometry=False)
Definition: DetectorConfigFlags.py:423
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
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.DetectorConfigFlags.setupDetectorFlags
def setupDetectorFlags(flags, custom_list=None, use_metadata=False, toggle_geometry=False, validate_only=False, keep_beampipe=False)
Definition: DetectorConfigFlags.py:286
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
python.DetectorConfigFlags._printDetectorFlags
def _printDetectorFlags(flags, info_dict)
Definition: DetectorConfigFlags.py:239