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 args = flags.fillFromArgs(parser=parser)
264 flags.GeoModel.DumpGeo.OutputFileName = args.outFilename
265 if args.showTreetopContent:
266 flags.GeoModel.DumpGeo.ShowTreetopContent =
True
267 if args.forceOverwrite:
268 flags.GeoModel.DumpGeo.ForceOverwrite =
True
272 _logger.verbose(
"+ About to set flags related to the input")
275 dumpgeo_empty_input =
False
278 if (flags.Input.Files == []
or
279 flags.Input.Files == [
'_ATHENA_GENERIC_INPUTFILE_NAME_']):
280 from Campaigns.Utils
import Campaign
281 from AthenaConfiguration.TestDefaults
import defaultConditionsTags, defaultGeometryTags
283 dumpgeo_empty_input =
True
291 flags.Input.ProjectName =
"mc23_13p6TeV"
292 flags.Input.RunNumbers = [330000]
293 flags.Input.TimeStamps = [1]
294 flags.Input.TypedCollections = []
297 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN3_MC
298 flags.Input.isMC =
True
299 flags.Input.MCCampaign = Campaign.Unknown
300 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
301 _logger.verbose(
"+ ... Done")
302 _logger.verbose(
"+ empty input: '%s'" % dumpgeo_empty_input)
304 _logger.verbose(
"+ detDescr flag: '%s'" % args.detDescr)
308 _logger.verbose(
"+ About to set the detector flags")
310 from AthenaConfiguration.DetectorConfigFlags
import setupDetectorFlags
312 toggle_geometry=
True, keep_beampipe=
True)
313 _logger.verbose(
"+ ... Done")
316 _logger.verbose(
"+ About to set this detector description tag: '%s'" % args.detDescr)
317 flags.GeoModel.AtlasVersion = args.detDescr
318 _logger.verbose(
"+ ... Done")
324 _logger.verbose(
"+ Setup main services")
325 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
327 _logger.verbose(
"+ ...Done")
329 _logger.verbose(
"+ About to setup geometry")
331 _logger.verbose(
"+ ...Done")
335 debugCAlevel =
int(args.debugCA)
336 if debugCAlevel >= 1:
337 _logger.verbose(
"Debug --- printing flags...")
338 print(
"\nflags:", flags)
341 print(
"\nflags.Tile:", flags.Tile)
342 for fl
in flags.Tile:
343 print(
"fl.Tile:", fl)
345 print(
"cfg._privateTools: ", cfg._privateTools)
346 print(
"cfg._publicTools: ", cfg._publicTools)
347 if debugCAlevel >= 2:
349 flags._loadDynaFlags(
'GeoModel')
350 flags._loadDynaFlags(
'Detector')
351 flags.dump(
'Detector.(Geometry|Enable)',
True)
352 if debugCAlevel >= 1:
353 _logger.verbose(
"We're in a debugCA session, flags have been printed out, now exiting...")