18 from AthenaConfiguration.ComponentAccumulator 
import ComponentAccumulator
 
   19 from AthenaConfiguration.ComponentFactory 
import CompFactory
 
   22 from AthenaCommon.Logging 
import logging
 
   23 _logger = logging.getLogger(
'DumpGeo')
 
   28     if flags.Detector.GeometryBpipe:
 
   29         from BeamPipeGeoModel.BeamPipeGMConfig 
import BeamPipeGeometryCfg
 
   33     if flags.Detector.GeometryPixel:
 
   34         from PixelGeoModel.PixelGeoModelConfig 
import PixelReadoutGeometryCfg
 
   39     if flags.Detector.GeometrySCT:
 
   40         from SCT_GeoModel.SCT_GeoModelConfig 
import SCT_ReadoutGeometryCfg
 
   43     if flags.Detector.GeometryTRT:
 
   44         from TRT_GeoModel.TRT_GeoModelConfig 
import TRT_ReadoutGeometryCfg
 
   50     if flags.Detector.GeometryID:
 
   51         from InDetServMatGeoModel.InDetServMatGeoModelConfig 
import (
 
   52              InDetServiceMaterialCfg)
 
   56     if flags.Detector.GeometryLAr:
 
   57         from LArGeoAlgsNV.LArGMConfig 
import LArGMCfg
 
   60     if flags.Detector.GeometryTile:
 
   61         from TileGeoModel.TileGMConfig 
import TileGMCfg
 
   66         cfg.getService(
"GeoModelSvc").DetectorTools[
"TileDetectorTool"].GeometryConfig=
"FULL" 
   71     if flags.Detector.GeometryMuon:
 
   72         from MuonConfig.MuonGeometryConfig 
import MuonGeoModelCfg
 
   76     if flags.Detector.GeometryHGTD:
 
   78         if flags.HGTD.Geometry.useGeoModelXml:
 
   79             from HGTD_GeoModelXml.HGTD_GeoModelConfig 
import HGTD_SimulationGeometryCfg
 
   81             from HGTD_GeoModel.HGTD_GeoModelConfig 
import HGTD_SimulationGeometryCfg
 
   85     if flags.Detector.GeometryITkPixel:
 
   86         from PixelGeoModelXml.ITkPixelGeoModelConfig 
import ITkPixelReadoutGeometryCfg
 
   88     if flags.Detector.GeometryITkStrip:
 
   89         from StripGeoModelXml.ITkStripGeoModelConfig 
import ITkStripReadoutGeometryCfg
 
   96     if flags.Detector.GeometryCavern:
 
   97         from AtlasGeoModel.CavernGMConfig 
import CavernGeometryCfg
 
  101     if flags.Detector.GeometryLucid 
or flags.Detector.GeometryALFA 
or flags.Detector.GeometryAFP 
or flags.Detector.GeometryFwdRegion :
 
  102         from AtlasGeoModel.ForDetGeoModelConfig 
import ForDetGeometryCfg
 
  104     if flags.Detector.GeometryZDC:
 
  105         from ZDC_GeoM.ZdcGeoModelConfig 
import ZDC_DetToolCfg
 
  113     if "ForwardRegionGeoModelTool" in cfg.getService(
"GeoModelSvc").DetectorTools:
 
  114         cfg.getService(
"GeoModelSvc").DetectorTools[
"ForwardRegionGeoModelTool"].vp1Compatibility=
True 
  118     if "AtlasVersion" in os.environ:
 
  119         return os.environ[
"AtlasVersion"]
 
  120     if "AtlasBaseVersion" in os.environ:
 
  121         return os.environ[
"AtlasBaseVersion"]
 
  127     _logger.info(
"We're using these 'GeoModel.DumpGeo' configuration flags:")
 
  128     flags.dump(
"GeoModel.DumpGeo")
 
  131     _logger.debug(
"kwargs: %s", kwargs)
 
  135     _logger.verbose(
"Using GeoModel ATLAS version: %s", flags.GeoModel.AtlasVersion)
 
  137     kwargs.setdefault(
"AtlasVersion", flags.GeoModel.AtlasVersion)
 
  140     if flags.GeoModel.DumpGeo.ShowTreetopContent:
 
  141         kwargs.setdefault(
"ShowTreetopContent", 
True)
 
  148     if flags.GeoModel.DumpGeo.OutputFileName:
 
  149         outFileName = flags.GeoModel.DumpGeo.OutputFileName
 
  153         outFileName = 
"geometry" 
  154         filterDetManagers = []
 
  159         geoTAG = flags.GeoModel.AtlasVersion
 
  160         _logger.info(
"+++ Dumping this Detector Description geometry TAG: '%s'", geoTAG)
 
  161         outFileName = outFileName + 
"-" + geoTAG
 
  163         if flags.GeoModel.DumpGeo.FilterDetManagers:
 
  165             _logger.info(
"+++ Filtering on these GeoModel 'Detector Managers': '%s'", flags.GeoModel.DumpGeo.FilterDetManagers)
 
  167             filterDetManagers = flags.GeoModel.DumpGeo.FilterDetManagers
 
  170             kwargs.setdefault(
"UserFilterDetManager", filterDetManagers)
 
  174             outFileName = outFileName + 
"-" + 
"-".
join(filterDetManagers)
 
  177         outFileName = outFileName + 
".db" 
  180     kwargs.setdefault(
"OutSQLiteFileName", outFileName)
 
  185     if os.path.exists(outFileName):
 
  186         if flags.GeoModel.DumpGeo.ForceOverwrite:
 
  187             print(
"+ DumpGeo -- NOTE -- You chose to overwrite an existing geometry dump file with the same name, if present.")
 
  190             if os.path.exists(outFileName):
 
  191                 os.remove(outFileName)
 
  192                 _logger.verbose(f
"The file {outFileName} has been deleted.")
 
  194                 _logger.verbose(f
"The file {outFileName} does not exist. So, it was not needed to 'force-delete' it. Continuing...")
 
  196             _logger.error(f
"+++ DumpGeo -- ERROR!! The ouput file '{outFileName}' exists already!\nPlease move or remove it, or use the 'force' option: '-f' or '--forceOverWrite'.\n\n")
 
  200     the_alg = CompFactory.DumpGeo(name=
"DumpGeoAlg", **kwargs)
 
  201     result.addEventAlgo(the_alg, primary=
True)
 
  205 if __name__==
"__main__":
 
  208     from AthenaConfiguration.TestDefaults 
import defaultGeometryTags
 
  212     from AthenaConfiguration.AllConfigFlags 
import initConfigFlags
 
  215     flags.Exec.MaxEvents = 0 
 
  228     flags.Concurrency.NumThreads = 0 
 
  238     parser = flags.getArgumentParser(description=
"Dump the detector geometry to a GeoModel-based SQLite '.db' file.")
 
  239     parser.prog = 
'dump-geo' 
  241     parser.add_argument(
"--detDescr", default=defaultGeometryTags.RUN3,
 
  242                         help=
"The ATLAS geometry tag you want to dump (a convenience alias for the Athena flag 'GeoModel.AtlasVersion=TAG')", metavar=
"TAG")
 
  243     parser.add_argument(
"--outFilename", default=
"",
 
  244                         help=
"Here you can set a custom name for the output '.db' file. It will replace the name that is built with the geometry tag and the list of fileterd Detector Managers, if any.", metavar=
"FILENAME")
 
  246     parser.add_argument(
"--filterDetManagers", help=
"Only output the GeoModel Detector Managers specified in the FILTER list; input is a comma-separated list")
 
  247     parser.add_argument(
"-f", 
"--forceOverwrite",
 
  248                         help=
"Force to overwrite an existing SQLite output file with the same name, if any", action = 
'store_true')
 
  249     parser.add_argument(
"--showTreetopContent",
 
  250                         help=
"Show the content of the Treetops --- (by default, only the list of Treetops is shown)", action = 
'store_true')
 
  251     parser.add_argument(
"--debugCA", help=
"Debug the CA configuration: print flags, tools, ... --- mainly, for DumpGeo developers. '1' prints a subset of the CA flags, '2' prints all of them.")
 
  253     from AthenaConfiguration.TestDefaults 
import defaultTestFiles
 
  254     parser.set_defaults(filesInput=f
"{defaultTestFiles.EVNT[0]}")
 
  255     args = flags.fillFromArgs(parser=parser)
 
  266         flags.GeoModel.DumpGeo.OutputFileName = args.outFilename
 
  267     if args.showTreetopContent:
 
  268         flags.GeoModel.DumpGeo.ShowTreetopContent = 
True 
  269     if args.forceOverwrite:
 
  270         flags.GeoModel.DumpGeo.ForceOverwrite = 
True 
  274     _logger.verbose(
"+ About to set flags related to the input")
 
  277     dumpgeo_empty_input = 
False   
  280     from AthenaConfiguration.AutoConfigFlags 
import GetFileMD
 
  281     if ( len(flags.Input.Files) ==  0 
or GetFileMD(flags.Input.Files).
get(
"GeoAtlas", 
None) 
is None):
 
  282         from Campaigns.Utils 
import Campaign
 
  283         from AthenaConfiguration.TestDefaults 
import defaultConditionsTags, defaultGeometryTags
 
  285         dumpgeo_empty_input = 
True 
  293         flags.Input.ProjectName = 
"mc23_13p6TeV" 
  294         flags.Input.RunNumbers = [330000]  
 
  295         flags.Input.TimeStamps = [1]  
 
  296         flags.Input.TypedCollections = []
 
  299         flags.IOVDb.GlobalTag = defaultConditionsTags.RUN3_MC
 
  300         flags.Input.isMC = 
True 
  301         flags.Input.MCCampaign = Campaign.Unknown
 
  302         flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
 
  303     _logger.verbose(
"+ ... Done")
 
  304     _logger.verbose(
"+ empty input: '%s'" % dumpgeo_empty_input)
 
  306     _logger.verbose(
"+ detDescr flag: '%s'" % args.detDescr)
 
  310     _logger.verbose(
"+ About to set the detector flags")
 
  312     from AthenaConfiguration.DetectorConfigFlags 
import setupDetectorFlags
 
  314                        toggle_geometry=
True, keep_beampipe=
True)
 
  315     _logger.verbose(
"+ ... Done")
 
  318         _logger.verbose(
"+ About to set this detector description tag: '%s'" % args.detDescr)
 
  319         flags.GeoModel.AtlasVersion = args.detDescr
 
  320         _logger.verbose(
"+ ... Done")
 
  326     _logger.verbose(
"+ Setup main services")
 
  327     from AthenaConfiguration.MainServicesConfig 
import MainServicesCfg
 
  329     _logger.verbose(
"+ ...Done")
 
  331     _logger.verbose(
"+ About to setup geometry")
 
  333     _logger.verbose(
"+ ...Done")
 
  337         debugCAlevel = 
int(args.debugCA)
 
  338         if debugCAlevel >= 1:
 
  339             _logger.verbose(
"Debug --- printing flags...")
 
  340             print(
"\nflags:", flags)
 
  343             print(
"\nflags.Tile:", flags.Tile)
 
  344             for fl 
in flags.Tile:
 
  345                 print(
"fl.Tile:", fl)
 
  347             print(
"cfg._privateTools: ", cfg._privateTools)
 
  348             print(
"cfg._publicTools: ", cfg._publicTools)
 
  349         if debugCAlevel >= 2:
 
  351             flags._loadDynaFlags(
'GeoModel')
 
  352             flags._loadDynaFlags(
'Detector')
 
  353             flags.dump(
'Detector.(Geometry|Enable)', 
True)
 
  354         if debugCAlevel >= 1:
 
  355             _logger.verbose(
"We're in a debugCA session, flags have been printed out, now exiting...")