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