From 94e450e3df1c50ac8898776878807b0eb57fd26f Mon Sep 17 00:00:00 2001 From: Frank Winklmeier <fwinkl@cern> Date: Thu, 10 Dec 2020 15:07:53 +0100 Subject: [PATCH] AutoConfigFlags: factorize detector description flags Introduce a "detector" layer for the detector description flags to make sure we don't have name collisions across systems. Adjust client code accordingly. Also remove the default values as those are already being set within the detector specific GeoDB modules. --- .../python/AutoConfigFlags.py | 17 +++++----- .../python/DetectorConfigFlags.py | 12 +++---- .../python/GeoModelConfigFlags.py | 34 +++++++++++++++---- .../MuonConfig/python/MuonConfigFlags.py | 10 +++--- 4 files changed, 46 insertions(+), 27 deletions(-) diff --git a/Control/AthenaConfiguration/python/AutoConfigFlags.py b/Control/AthenaConfiguration/python/AutoConfigFlags.py index b18ebd491b5..cc58a4fb4b8 100644 --- a/Control/AthenaConfiguration/python/AutoConfigFlags.py +++ b/Control/AthenaConfiguration/python/AutoConfigFlags.py @@ -37,20 +37,21 @@ def _initializeGeometryParameters(geoTag): dbGeomCursor = AtlasGeoDBInterface(geoTag) dbGeomCursor.ConnectAndBrowseGeoDB() - # FIXME: geometry parameter names need to be unique across systems! - params = {} - params.update(CommonGeoDB.InitializeGeometryParameters(dbGeomCursor)) - params.update(PixelGeoDB.InitializeGeometryParameters(dbGeomCursor)) - params.update(LArGeoDB.InitializeGeometryParameters(dbGeomCursor)) - params.update(MuonGeoDB.InitializeGeometryParameters(dbGeomCursor)) + params = { 'Common' : CommonGeoDB.InitializeGeometryParameters(dbGeomCursor), + 'Pixel' : PixelGeoDB.InitializeGeometryParameters(dbGeomCursor), + 'LAr' : LArGeoDB.InitializeGeometryParameters(dbGeomCursor), + 'Muon' : MuonGeoDB.InitializeGeometryParameters(dbGeomCursor) } return params @lru_cache(maxsize=4) # maxsize=1 should be enough for most jobs -def GetDetDescrInfo(geoTag): - """Query geometry DB for detector description""" +def DetDescrInfo(geoTag): + """Query geometry DB for detector description. Returns dictionary with + detector description. Queries DB for each tag only once. + geoTag: gemometry tag (e.g. ATLAS-R2-2016-01-00-01) + """ detDescrInfo = _initializeGeometryParameters(geoTag) detDescrInfo["geomTag"] = geoTag return detDescrInfo diff --git a/Control/AthenaConfiguration/python/DetectorConfigFlags.py b/Control/AthenaConfiguration/python/DetectorConfigFlags.py index 5960b079514..886c1dadb2b 100644 --- a/Control/AthenaConfiguration/python/DetectorConfigFlags.py +++ b/Control/AthenaConfiguration/python/DetectorConfigFlags.py @@ -1,9 +1,7 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - from AthenaConfiguration.AthConfigFlags import AthConfigFlags -from AthenaConfiguration.AutoConfigFlags import GetDetDescrInfo +from AthenaConfiguration.AutoConfigFlags import DetDescrInfo # This module is based upon Control/AthenaCommon/python/DetFlags.py # Only some flags have been migrated. A full list of what the old # DetFlags provided is given for reference below: @@ -56,13 +54,13 @@ def createDetectorConfigFlags(): dcf.addFlag('Detector.GeometryLAr', False) # Add separate em HEC and FCAL flags? dcf.addFlag('Detector.GeometryTile', False) - dcf.addFlag('Detector.GeometryCalo', lambda prevFlags : (prevFlags.Detector.GeometryLAr or prevFlags.Detector.GeometryTile)) - dcf.addFlag('Detector.GeometryCSC', lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('HasCSC',"True")) + dcf.addFlag('Detector.GeometryCalo', lambda prevFlags : (prevFlags.Detector.GeometryLAr or prevFlags.Detector.GeometryTile)) + dcf.addFlag('Detector.GeometryCSC', lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Muon']['HasCSC']) dcf.addFlag('Detector.GeometryMDT', False) dcf.addFlag('Detector.GeometryRPC', False) dcf.addFlag('Detector.GeometryTGC', False) - dcf.addFlag('Detector.GeometrysTGC', lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('HasSTGC',"True")) # Set default according to prevFlags.GeoModel.Run? - dcf.addFlag('Detector.GeometryMM', lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('HasMM',"True")) # Set default according to prevFlags.GeoModel.Run? + dcf.addFlag('Detector.GeometrysTGC', lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Muon']['HasSTGC']) + dcf.addFlag('Detector.GeometryMM', lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Muon']['HasMM']) dcf.addFlag('Detector.GeometryMuon', lambda prevFlags : (prevFlags.Detector.GeometryCSC or prevFlags.Detector.GeometryMDT or prevFlags.Detector.GeometryRPC or prevFlags.Detector.GeometryTGC or prevFlags.Detector.GeometrysTGC or prevFlags.Detector.GeometryMM)) diff --git a/Control/AthenaConfiguration/python/GeoModelConfigFlags.py b/Control/AthenaConfiguration/python/GeoModelConfigFlags.py index 077dde3dfd5..1c81c50711c 100644 --- a/Control/AthenaConfiguration/python/GeoModelConfigFlags.py +++ b/Control/AthenaConfiguration/python/GeoModelConfigFlags.py @@ -1,15 +1,35 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.AthConfigFlags import AthConfigFlags -from AthenaConfiguration.AutoConfigFlags import GetFileMD, GetDetDescrInfo +from AthenaConfiguration.AutoConfigFlags import GetFileMD, DetDescrInfo def createGeoModelConfigFlags(): gcf=AthConfigFlags() + gcf.addFlag('GeoModel.Layout', 'atlas') # replaces global.GeoLayout - gcf.addFlag("GeoModel.AtlasVersion", lambda prevFlags : (prevFlags.Input.Files and prevFlags.Input.Files != ["_ATHENA_GENERIC_INPUTFILE_NAME_"] and GetFileMD(prevFlags.Input.Files).get("GeoAtlas",None)) or "ATLAS-R2-2016-01-00-01") # - gcf.addFlag("GeoModel.Align.Dynamic", lambda prevFlags : (not prevFlags.Detector.Simulate and not prevFlags.Input.isMC)) - gcf.addFlag("GeoModel.StripGeoType", lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('StripGeoType',"GMX")) # Based on CommonGeometryFlags.StripGeoType - gcf.addFlag("GeoModel.Run", lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('Run',"RUN2")) # Based on CommonGeometryFlags.Run (InDetGeometryFlags.isSLHC replaced by GeoModel.Run=="RUN4") - gcf.addFlag("GeoModel.Type", lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('GeoType',"UNDEFINED")) # Geometry type in {ITKLoI, ITkLoI-VF, etc...} - gcf.addFlag("GeoModel.IBLLayout", lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('IBLlayout',"UNDEFINED")) # IBL layer layout in {"planar", "3D", "noIBL", "UNDEFINED"} + + gcf.addFlag("GeoModel.AtlasVersion", + lambda prevFlags : ((prevFlags.Input.Files and + prevFlags.Input.Files != ["_ATHENA_GENERIC_INPUTFILE_NAME_"] and + GetFileMD(prevFlags.Input.Files).get("GeoAtlas",None)) + or "ATLAS-R2-2016-01-00-01")) + + gcf.addFlag("GeoModel.Align.Dynamic", + lambda prevFlags : not prevFlags.Detector.Simulate and not prevFlags.Input.isMC) + + gcf.addFlag("GeoModel.StripGeoType", + lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Common']['StripGeoType']) + + gcf.addFlag("GeoModel.Run", + lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Common']['Run']) + # Based on CommonGeometryFlags.Run (InDetGeometryFlags.isSLHC replaced by GeoModel.Run=="RUN4") + + gcf.addFlag("GeoModel.Type", + lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Common']['GeoType']) + # Geometry type in {ITKLoI, ITkLoI-VF, etc...} + + gcf.addFlag("GeoModel.IBLLayout", + lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Pixel']['IBLlayout']) + # IBL layer layout in {"planar", "3D", "noIBL"} + return gcf diff --git a/MuonSpectrometer/MuonConfig/python/MuonConfigFlags.py b/MuonSpectrometer/MuonConfig/python/MuonConfigFlags.py index 030bacb8690..b3109196b6c 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonConfigFlags.py +++ b/MuonSpectrometer/MuonConfig/python/MuonConfigFlags.py @@ -1,7 +1,7 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.AthConfigFlags import AthConfigFlags -from AthenaConfiguration.AutoConfigFlags import GetDetDescrInfo +from AthenaConfiguration.AutoConfigFlags import DetDescrInfo import re # Some comments from Ed about existing flags @@ -37,9 +37,9 @@ def createMuonConfigFlags(): mcf.addFlag("Muon.doMDTs",True) mcf.addFlag("Muon.doTGCs",True) mcf.addFlag("Muon.doRPCs",True) - mcf.addFlag("Muon.doCSCs",lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('HasCSC',"True")) - mcf.addFlag("Muon.doMicromegas",lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('HasMM',"True")) - mcf.addFlag("Muon.dosTGCs",lambda prevFlags : GetDetDescrInfo(prevFlags.GeoModel.AtlasVersion).get('HasSTGC',"True")) + mcf.addFlag("Muon.doCSCs",lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Muon']['HasCSC']) + mcf.addFlag("Muon.doMicromegas",lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Muon']['HasMM']) + mcf.addFlag("Muon.dosTGCs",lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion)['Muon']['HasSTGC']) # stages of processing # 1. Digitization -- GitLab