ATLAS Offline Software
Loading...
Searching...
No Matches
python.DetectorConfigFlags Namespace Reference

Functions

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

Variables

list allDetectors
dict allGroups

Function Documentation

◆ _getDetectorFlagStatus()

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

Definition at line 226 of file DetectorConfigFlags.py.

226def _getDetectorFlagStatus(flags, list=None, geometry=False):
227 # load flags
228 flags._loadDynaFlags('Detector')
229
230 values = []
231 for d in allDetectors:
232 # test whether each detector is on
233 name = f'Detector.Geometry{d}' if geometry else f'Detector.Enable{d}'
234 if flags.hasFlag(name):
235 if list is not None:
236 if d in list:
237 values.append('ON')
238 else:
239 values.append('--')
240 else:
241 if flags[name] is not False:
242 values.append('ON')
243 else:
244 values.append('--')
245 else:
246 values.append('n/a')
247 return values
248
249

◆ _loadDetectorsFromMetaData()

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

Definition at line 206 of file DetectorConfigFlags.py.

206def _loadDetectorsFromMetaData(flags, key, keep_beampipe=False):
207 from AthenaConfiguration.AutoConfigFlags import GetFileMD
208 detectors = eval(GetFileMD(flags.Input.Files).get(key, '[]'))
209 if not detectors:
210 return []
211
212 # MBTS compatibility check
213 from AthenaConfiguration.Enums import LHCPeriod
214 if ((not flags.GeoModel.AtlasVersion.startswith('ATLAS-CTB')
215 and flags.GeoModel.Run < LHCPeriod.Run4 and 'LAr' in detectors) # built as part of LAr
216 or 'TileHitVector#MBTSHits' in flags.Input.TypedCollections
217 or 'TileTTL1Container#TileTTL1MBTS' in flags.Input.TypedCollections):
218 detectors.append('MBTS')
219
220 if keep_beampipe and flags.Detector.GeometryBpipe:
221 detectors.append('Bpipe')
222
223 return _parseDetectorsList(flags, detectors)
224
225
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130

◆ _parseDetectorsList()

python.DetectorConfigFlags._parseDetectorsList ( flags,
detectors )
protected

Definition at line 165 of file DetectorConfigFlags.py.

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

◆ _printDetectorFlags()

python.DetectorConfigFlags._printDetectorFlags ( flags,
info_dict )
protected

Definition at line 250 of file DetectorConfigFlags.py.

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

◆ createDetectorConfigFlags()

python.DetectorConfigFlags.createDetectorConfigFlags ( )

Definition at line 26 of file DetectorConfigFlags.py.

26def createDetectorConfigFlags():
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
74 dcf.addFlag('Detector.SpecialGeometryToroid', False)
75
76 # Forward detectors (disabled by default)
77 dcf.addFlag('Detector.GeometryLucid', lambda prevFlags : 'Lucid' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
78 dcf.addFlag('Detector.GeometryZDC', lambda prevFlags : 'ZDC' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
79 dcf.addFlag('Detector.GeometryALFA', lambda prevFlags : 'ALFA' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
80 dcf.addFlag('Detector.GeometryAFP', lambda prevFlags : 'AFP' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
81 dcf.addFlag('Detector.GeometryFwdRegion', lambda prevFlags : 'FwdRegion' in getDefaultDetectors(prevFlags.GeoModel.AtlasVersion,prevFlags.GeoModel.SQLiteDB, prevFlags.GeoModel.SQLiteDBFullPath, includeForward=not prevFlags.Input.isMC))
82 dcf.addFlag('Detector.GeometryForward', lambda prevFlags : (prevFlags.Detector.GeometryLucid or prevFlags.Detector.GeometryZDC
83 or prevFlags.Detector.GeometryALFA or prevFlags.Detector.GeometryAFP
84 or prevFlags.Detector.GeometryFwdRegion))
85
86 # Cavern (disabled by default)
87 dcf.addFlag('Detector.GeometryCavern', False)
88
89
90
93 dcf.addFlag('Detector.EnableBCM', lambda prevFlags : prevFlags.Detector.GeometryBCM)
94 dcf.addFlag('Detector.EnablePixel', lambda prevFlags : prevFlags.Detector.GeometryPixel)
95 dcf.addFlag('Detector.EnableSCT', lambda prevFlags : prevFlags.Detector.GeometrySCT)
96 dcf.addFlag('Detector.EnableTRT', lambda prevFlags : prevFlags.Detector.GeometryTRT)
97 dcf.addFlag('Detector.EnableID', lambda prevFlags : prevFlags.Detector.GeometryID and
98 (prevFlags.Detector.EnableBCM
99 or prevFlags.Detector.EnablePixel or prevFlags.Detector.EnableSCT
100 or prevFlags.Detector.EnableTRT))
101
102 # Upgrade ITk Inner Tracker is a separate and parallel detector
103 dcf.addFlag('Detector.EnablePLR', lambda prevFlags : prevFlags.Detector.GeometryPLR)
104 dcf.addFlag('Detector.EnableBCMPrime', lambda prevFlags : prevFlags.Detector.GeometryBCMPrime)
105 dcf.addFlag('Detector.EnableITkPixel', lambda prevFlags : prevFlags.Detector.GeometryITkPixel)
106 dcf.addFlag('Detector.EnableITkStrip', lambda prevFlags : prevFlags.Detector.GeometryITkStrip)
107 dcf.addFlag('Detector.EnableITk', lambda prevFlags : prevFlags.Detector.GeometryITk and
108 (prevFlags.Detector.EnableBCMPrime
109 or prevFlags.Detector.EnableITkPixel
110 or prevFlags.Detector.EnableITkStrip
111 or prevFlags.Detector.EnablePLR))
112 # HGTD
113 dcf.addFlag('Detector.EnableHGTD', lambda prevFlags : prevFlags.Detector.GeometryHGTD)
114
115 # Calorimeters
116 dcf.addFlag('Detector.EnableLAr', lambda prevFlags : prevFlags.Detector.GeometryLAr)
117 dcf.addFlag('Detector.EnableTile', lambda prevFlags : prevFlags.Detector.GeometryTile)
118 dcf.addFlag('Detector.EnableMBTS', lambda prevFlags : prevFlags.Detector.GeometryMBTS)
119 dcf.addFlag('Detector.EnableL1Calo', lambda prevFlags : (prevFlags.Detector.EnableLAr or prevFlags.Detector.EnableTile))
120 dcf.addFlag('Detector.EnableCalo', lambda prevFlags : prevFlags.Detector.GeometryCalo and
121 (prevFlags.Detector.EnableLAr or prevFlags.Detector.EnableTile))
122
123 # Muon Spectrometer
124 dcf.addFlag('Detector.EnableCSC', lambda prevFlags : prevFlags.Detector.GeometryCSC)
125 dcf.addFlag('Detector.EnableMDT', lambda prevFlags : prevFlags.Detector.GeometryMDT)
126 dcf.addFlag('Detector.EnableRPC', lambda prevFlags : prevFlags.Detector.GeometryRPC)
127 dcf.addFlag('Detector.EnableTGC', lambda prevFlags : prevFlags.Detector.GeometryTGC)
128 dcf.addFlag('Detector.EnablesTGC', lambda prevFlags : prevFlags.Detector.GeometrysTGC)
129 dcf.addFlag('Detector.EnableMM', lambda prevFlags : prevFlags.Detector.GeometryMM)
130 dcf.addFlag('Detector.EnableMuon', lambda prevFlags : prevFlags.Detector.GeometryMuon and
131 (prevFlags.Detector.EnableCSC or prevFlags.Detector.EnableMDT
132 or prevFlags.Detector.EnableRPC or prevFlags.Detector.EnableTGC
133 or prevFlags.Detector.EnablesTGC or prevFlags.Detector.EnableMM))
134
135 # Forward detectors (disabled by default)
136 dcf.addFlag('Detector.EnableLucid', lambda prevFlags : prevFlags.Detector.GeometryLucid)
137 # EnableZDC enables the overall ZDC system, while _ZDC and _RPD refer to the subsystems, which are now independent
138 dcf.addFlag('Detector.EnableZDC', lambda prevFlags : prevFlags.Detector.GeometryZDC)
139 dcf.addFlag('Detector.EnableZDC_ZDC', lambda prevFlags : prevFlags.Detector.GeometryZDC)
140 dcf.addFlag('Detector.EnableZDC_RPD', lambda prevFlags : prevFlags.Detector.GeometryZDC)
141 dcf.addFlag('Detector.EnableALFA', lambda prevFlags : prevFlags.Detector.GeometryALFA)
142 dcf.addFlag('Detector.EnableAFP', lambda prevFlags : prevFlags.Detector.GeometryAFP)
143 dcf.addFlag('Detector.EnableFwdRegion', lambda prevFlags : prevFlags.Detector.GeometryFwdRegion)
144 dcf.addFlag('Detector.EnableForward', lambda prevFlags : prevFlags.Detector.GeometryForward and
145 (prevFlags.Detector.EnableLucid or prevFlags.Detector.EnableZDC
146 or prevFlags.Detector.EnableALFA or prevFlags.Detector.EnableAFP
147 or prevFlags.Detector.EnableFwdRegion))
148
149 return dcf
150
151

◆ disableDetectors()

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

Definition at line 434 of file DetectorConfigFlags.py.

434def disableDetectors(flags, detectors, toggle_geometry=False):
435 """Disable detectors from a list"""
436 changed = False
437 # setup logging
438 from AthenaCommon.Logging import logging
439 log = logging.getLogger('DetectorConfigFlags')
440 # parse the list
441 detectors = _parseDetectorsList(flags, detectors)
442
443 # debugging
444 log.info('Disabling detectors: %s', detectors)
445
446 # go through all of the detectors and disable them if needed
447 for d in detectors:
448 name = f'Detector.Enable{d}'
449 if flags.hasFlag(name):
450 if flags[name] is not False:
451 changed = True
452 log.info("Disabling '%s'", name)
453 flags._set(name, False)
454 if toggle_geometry:
455 name = f'Detector.Geometry{d}'
456 if flags.hasFlag(name):
457 if flags[name] is not False:
458 changed = True
459 log.info("Disabling '%s'", name)
460 flags._set(name, False)
461
462 return changed
463

◆ enableDetectors()

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

Definition at line 403 of file DetectorConfigFlags.py.

403def enableDetectors(flags, detectors, toggle_geometry=False):
404 """Enable detectors from a list"""
405 changed = False
406 # setup logging
407 from AthenaCommon.Logging import logging
408 log = logging.getLogger('DetectorConfigFlags')
409 # parse the list
410 detectors = _parseDetectorsList(flags, detectors)
411
412 # debugging
413 log.info('Enabling detectors: %s', detectors)
414
415 # go through all of the detectors and enable them if needed
416 for d in detectors:
417 name = f'Detector.Enable{d}'
418 if flags.hasFlag(name):
419 if flags[name] is not True:
420 changed = True
421 log.info("Enabling '%s'", name)
422 flags._set(name, True)
423 if toggle_geometry:
424 name = f'Detector.Geometry{d}'
425 if flags.hasFlag(name):
426 if flags[name] is not True:
427 changed = True
428 log.info("Enabling '%s'", name)
429 flags._set(name, True)
430
431 return changed
432
433

◆ getEnabledDetectors()

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

Definition at line 152 of file DetectorConfigFlags.py.

152def getEnabledDetectors(flags, geometry=False):
153 # load flags
154 flags._loadDynaFlags('Detector')
155 values = []
156 for d in allDetectors:
157 # test whether each detector is on
158 name = f'Detector.Geometry{d}' if geometry else f'Detector.Enable{d}'
159 if flags.hasFlag(name):
160 if flags[name] is not False:
161 values.append(d)
162 return values
163
164

◆ setupDetectorFlags()

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 297 of file DetectorConfigFlags.py.

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

◆ setupDetectorsFromList()

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

Definition at line 362 of file DetectorConfigFlags.py.

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

Variable Documentation

◆ allDetectors

list python.DetectorConfigFlags.allDetectors
Initial value:
1= [
2 'Bpipe',
3 'BCM', 'Pixel', 'SCT', 'TRT',
4 'BCMPrime', 'PLR', 'ITkPixel', 'ITkStrip', 'HGTD',
5 'LAr', 'Tile', 'MBTS',
6 'CSC', 'MDT', 'RPC', 'TGC', 'sTGC', 'MM',
7 'Lucid', 'ZDC', 'ALFA', 'AFP', 'FwdRegion',
8 'Cavern',
9]

Definition at line 7 of file DetectorConfigFlags.py.

◆ allGroups

dict python.DetectorConfigFlags.allGroups
Initial value:
1= {
2 'ID': ['BCM', 'Pixel', 'SCT', 'TRT'],
3 'ITk': ['BCMPrime', 'ITkPixel', 'ITkStrip', 'PLR'],
4 'Calo': ['LAr', 'Tile', 'MBTS'],
5 'Muon': ['CSC', 'MDT', 'RPC', 'TGC', 'sTGC', 'MM'],
6 'Forward': ['Lucid', 'ZDC', 'ALFA', 'AFP', 'FwdRegion'],
7}

Definition at line 17 of file DetectorConfigFlags.py.