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

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

◆ _loadDetectorsFromMetaData()

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

Definition at line 201 of file DetectorConfigFlags.py.

201def _loadDetectorsFromMetaData(flags, key, keep_beampipe=False):
202 from AthenaConfiguration.AutoConfigFlags import GetFileMD
203 detectors = eval(GetFileMD(flags.Input.Files).get(key, '[]'))
204 if not detectors:
205 return []
206
207 # MBTS compatibility check
208 from AthenaConfiguration.Enums import LHCPeriod
209 if ((not flags.GeoModel.AtlasVersion.startswith('ATLAS-CTB')
210 and flags.GeoModel.Run < LHCPeriod.Run4 and 'LAr' in detectors) # built as part of LAr
211 or 'TileHitVector#MBTSHits' in flags.Input.TypedCollections
212 or 'TileTTL1Container#TileTTL1MBTS' in flags.Input.TypedCollections):
213 detectors.append('MBTS')
214
215 if keep_beampipe and flags.Detector.GeometryBpipe:
216 detectors.append('Bpipe')
217
218 return _parseDetectorsList(flags, detectors)
219
220
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 160 of file DetectorConfigFlags.py.

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

◆ _printDetectorFlags()

python.DetectorConfigFlags._printDetectorFlags ( flags,
info_dict )
protected

Definition at line 245 of file DetectorConfigFlags.py.

245def _printDetectorFlags(flags, info_dict):
246 # setup logging
247 from AthenaCommon.Logging import logging
248 log = logging.getLogger('DetectorConfigFlags')
249 # generate common formatting string
250 item_len = 7
251 # initial is always there
252 types = ['Initial']
253 subtypes = ['Geo.', 'Enbl.']
254 format_header = f'%-{item_len * 2}s'
255 if 'metadata_simulated' in info_dict.keys() or 'metadata_digitized' in info_dict.keys():
256 metadata_len = 0
257 if 'metadata_simulated' in info_dict.keys():
258 subtypes.append('Sim.')
259 metadata_len += item_len
260 if 'metadata_digitized' in info_dict.keys():
261 subtypes.append('Digi.')
262 metadata_len += item_len
263 types.append('Metadata' if item_len > 8 else 'Meta.')
264 format_header += f'%-{metadata_len}s'
265 if 'requested_geometry' in info_dict.keys():
266 types.append('Requested')
267 subtypes += ['Geo.', 'Enbl.']
268 format_header += f'%-{item_len * 2}s'
269 # final is always there ?
270 types.append('Final')
271 subtypes += ['Geo.', 'Enbl.']
272 format_header += f'%-{item_len * 2}s'
273
274 detector_len = 7
275 for d in allDetectors:
276 detector_len = max(detector_len, len(d) + 2)
277
278 format_header = f'%{detector_len}s ' + format_header
279 format_subheader = f'%{detector_len}s ' + len(subtypes) * f'%-{item_len}s'
280 format = f'%{detector_len}s : ' + len(subtypes) * f'%-{item_len}s'
281 data = [allDetectors] + [v for _, v in info_dict.items()]
282 data = list(map(list, zip(*data)))
283
284 # print header rows
285 log.info(format_header, *([''] + types))
286 log.info(format_subheader, *([''] + subtypes))
287 # print data
288 for row in data:
289 log.info(format, *row)
290
291
#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 # 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 # EnableZDC enables the overall ZDC system, while _ZDC and _RPD refer to the subsystems, which are now independent
133 dcf.addFlag('Detector.EnableZDC', lambda prevFlags : prevFlags.Detector.GeometryZDC)
134 dcf.addFlag('Detector.EnableZDC_ZDC', lambda prevFlags : prevFlags.Detector.GeometryZDC)
135 dcf.addFlag('Detector.EnableZDC_RPD', lambda prevFlags : prevFlags.Detector.GeometryZDC)
136 dcf.addFlag('Detector.EnableALFA', lambda prevFlags : prevFlags.Detector.GeometryALFA)
137 dcf.addFlag('Detector.EnableAFP', lambda prevFlags : prevFlags.Detector.GeometryAFP)
138 dcf.addFlag('Detector.EnableFwdRegion', lambda prevFlags : prevFlags.Detector.GeometryFwdRegion)
139 dcf.addFlag('Detector.EnableForward', lambda prevFlags : prevFlags.Detector.GeometryForward and
140 (prevFlags.Detector.EnableLucid or prevFlags.Detector.EnableZDC
141 or prevFlags.Detector.EnableALFA or prevFlags.Detector.EnableAFP
142 or prevFlags.Detector.EnableFwdRegion))
143
144 return dcf
145
146

◆ disableDetectors()

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

Definition at line 429 of file DetectorConfigFlags.py.

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

◆ enableDetectors()

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

Definition at line 398 of file DetectorConfigFlags.py.

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

◆ getEnabledDetectors()

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

Definition at line 147 of file DetectorConfigFlags.py.

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

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

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

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

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.