18from AthenaConfiguration.ComponentAccumulator
import (
22from AthenaConfiguration.ComponentFactory
import CompFactory
25from AthenaCommon.Logging
import logging
26_logger = logging.getLogger(
'DumpGeo')
31 if flags.Detector.GeometryBpipe:
32 from BeamPipeGeoModel.BeamPipeGMConfig
import BeamPipeGeometryCfg
33 cfg.merge(BeamPipeGeometryCfg(flags))
36 if flags.Detector.GeometryPixel:
37 from PixelGeoModel.PixelGeoModelConfig
import PixelReadoutGeometryCfg
38 cfg.merge(PixelReadoutGeometryCfg(flags))
42 if flags.Detector.GeometrySCT:
43 from SCT_GeoModel.SCT_GeoModelConfig
import SCT_ReadoutGeometryCfg
44 cfg.merge(SCT_ReadoutGeometryCfg(flags))
46 if flags.Detector.GeometryTRT:
47 from TRT_GeoModel.TRT_GeoModelConfig
import TRT_ReadoutGeometryCfg
48 cfg.merge(TRT_ReadoutGeometryCfg(flags))
53 if flags.Detector.GeometryID:
54 from InDetServMatGeoModel.InDetServMatGeoModelConfig
import (
55 InDetServiceMaterialCfg)
56 cfg.merge(InDetServiceMaterialCfg(flags))
59 if flags.Detector.GeometryLAr:
60 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
61 cfg.merge(LArGMCfg(flags))
63 if flags.Detector.GeometryTile:
64 from TileGeoModel.TileGMConfig
import TileGMCfg
66 cfg.merge(TileGMCfg(flags))
69 cfg.getService(
"GeoModelSvc").DetectorTools[
"TileDetectorTool"].GeometryConfig=
"FULL"
74 if flags.Detector.GeometryMuon:
75 from MuonConfig.MuonGeometryConfig
import MuonGeoModelCfg
76 cfg.merge(MuonGeoModelCfg(flags))
79 if flags.Detector.GeometryHGTD:
81 if flags.HGTD.Geometry.useGeoModelXml:
82 from HGTD_GeoModelXml.HGTD_GeoModelConfig
import HGTD_SimulationGeometryCfg
84 from HGTD_GeoModel.HGTD_GeoModelConfig
import HGTD_SimulationGeometryCfg
85 cfg.merge(HGTD_SimulationGeometryCfg(flags))
88 if flags.Detector.GeometryITkPixel:
89 from PixelGeoModelXml.ITkPixelGeoModelConfig
import ITkPixelReadoutGeometryCfg
90 cfg.merge(ITkPixelReadoutGeometryCfg(flags))
91 if flags.Detector.GeometryITkStrip:
92 from StripGeoModelXml.ITkStripGeoModelConfig
import ITkStripReadoutGeometryCfg
93 cfg.merge(ITkStripReadoutGeometryCfg(flags))
99 if flags.Detector.GeometryCavern:
100 from AtlasGeoModel.CavernGMConfig
import CavernGeometryCfg
101 cfg.merge(CavernGeometryCfg(flags))
104 if flags.Detector.GeometryLucid
or flags.Detector.GeometryALFA
or flags.Detector.GeometryAFP
or flags.Detector.GeometryFwdRegion :
105 from AtlasGeoModel.ForDetGeoModelConfig
import ForDetGeometryCfg
106 cfg.merge(ForDetGeometryCfg(flags))
107 if flags.Detector.GeometryZDC:
108 from ZDC_GeoM.ZdcGeoModelConfig
import ZDC_DetToolCfg
109 cfg.merge(ZDC_DetToolCfg(flags))
116 if "ForwardRegionGeoModelTool" in cfg.getService(
"GeoModelSvc").DetectorTools:
117 cfg.getService(
"GeoModelSvc").DetectorTools[
"ForwardRegionGeoModelTool"].vp1Compatibility=
True
121 if "AtlasVersion" in os.environ:
122 return os.environ[
"AtlasVersion"]
123 if "AtlasBaseVersion" in os.environ:
124 return os.environ[
"AtlasBaseVersion"]
129 """Return the configured DumpGeo SQLite output file name."""
130 if flags.GeoModel.DumpGeo.OutputFileName:
131 return flags.GeoModel.DumpGeo.OutputFileName
133 output_file = f
"geometry-{flags.GeoModel.AtlasVersion}"
134 filter_det_managers = flags.GeoModel.DumpGeo.FilterDetManagers
135 if filter_det_managers:
136 output_file +=
"-" +
"-".join(filter_det_managers)
138 return output_file +
".db"
142 """Resolve the geometry tag using the DumpGeo command-line precedence."""
146 return configured_tag
151 """Reject an existing output file unless overwrite is enabled."""
152 if os.path.exists(output_file)
and not force_overwrite:
153 raise ConfigurationError(
154 f
"DumpGeo output file '{output_file}' already exists. "
155 "Move or remove it, or enable "
156 "'GeoModel.DumpGeo.ForceOverwrite' "
157 "(or use the '-f' option from the command line)."
162 """Return logger arguments for an incompatible ZDC geometry tag."""
163 if not flags.Detector.GeometryZDC:
167 default_geometry_tags.RUN2_ZDC,
168 default_geometry_tags.RUN3_ZDC23,
169 default_geometry_tags.RUN3_ZDC24,
171 if flags.GeoModel.AtlasVersion
in known_zdc_tags:
175 "ZDC geometry was enabled with geometry tag '%s', which may "
176 "not contain a ZDC GeoDB payload. Consider using "
177 "--detDescr=%s or --detDescr=%s for Run 3.",
178 flags.GeoModel.AtlasVersion,
179 default_geometry_tags.RUN3_ZDC23,
180 default_geometry_tags.RUN3_ZDC24,
185 """Log a ZDC geometry warning, optionally as an end-of-run reminder."""
189 _logger.warning(
"Repeating the earlier ZDC geometry warning:")
190 _logger.warning(*warning)
194 if _logger.isEnabledFor(logging.DEBUG):
196 "Dumping the 'GeoModel.DumpGeo' configuration flags:"
198 flags.dump(
"GeoModel.DumpGeo")
201 _logger.debug(
"kwargs: %s", kwargs)
205 _logger.verbose(
"Using GeoModel ATLAS version: %s", flags.GeoModel.AtlasVersion)
207 kwargs.setdefault(
"AtlasVersion", flags.GeoModel.AtlasVersion)
210 if flags.GeoModel.DumpGeo.ShowTreetopContent:
211 kwargs.setdefault(
"ShowTreetopContent",
True)
216 filterDetManagers = flags.GeoModel.DumpGeo.FilterDetManagers
217 if filterDetManagers:
219 "+++ Filtering on these GeoModel 'Detector Managers': '%s'",
222 kwargs.setdefault(
"UserFilterDetManager", filterDetManagers)
226 if not flags.GeoModel.DumpGeo.OutputFileName:
228 "+++ Dumping this Detector Description geometry TAG: '%s'",
229 flags.GeoModel.AtlasVersion,
233 kwargs.setdefault(
"OutSQLiteFileName", configuredOutFileName)
238 outFileName = kwargs[
"OutSQLiteFileName"]
241 flags.GeoModel.DumpGeo.ForceOverwrite,
243 forceOverwrite = kwargs[
"ForceOverwrite"]
254 result = ComponentAccumulator()
255 the_alg = CompFactory.DumpGeo(name=name, **kwargs)
256 result.addEventAlgo(the_alg, primary=
True)
260if __name__==
"__main__":
263 from AthenaConfiguration.TestDefaults
import defaultGeometryTags
267 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
268 flags = initConfigFlags()
270 flags.Exec.MaxEvents = 0
283 flags.Concurrency.NumThreads = 0
293 parser = flags.getArgumentParser(description=
"Dump the detector geometry to a GeoModel-based SQLite '.db' file.")
294 parser.prog =
'dump-geo'
300 "Override the ATLAS geometry tag. This is a convenience alias "
301 "for 'GeoModel.AtlasVersion=TAG'. If omitted, the generic flag "
302 "or input-file metadata is used."
306 parser.add_argument(
"--outFilename", default=
"",
307 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 filtered Detector Managers, if any.", metavar=
"FILENAME")
309 parser.add_argument(
"--filterDetManagers", help=
"Only output the GeoModel Detector Managers specified in the FILTER list; input is a comma-separated list")
310 parser.add_argument(
"-f",
"--forceOverwrite",
311 help=
"Force to overwrite an existing SQLite output file with the same name, if any", action =
'store_true')
312 parser.add_argument(
"--showTreetopContent",
313 help=
"Show the content of the Treetops --- (by default, only the list of Treetops is shown)", action =
'store_true')
314 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.")
316 from AthenaConfiguration.TestDefaults
import defaultTestFiles
317 parser.set_defaults(filesInput=f
"{defaultTestFiles.EVNT[0]}")
318 args = flags.fillFromArgs(parser=parser)
325 flags.GeoModel.DumpGeo.OutputFileName = args.outFilename
326 if args.filterDetManagers:
327 flags.GeoModel.DumpGeo.FilterDetManagers = [
329 for manager
in args.filterDetManagers.split(
",")
332 if args.showTreetopContent:
333 flags.GeoModel.DumpGeo.ShowTreetopContent =
True
334 if args.forceOverwrite:
335 flags.GeoModel.DumpGeo.ForceOverwrite =
True
339 if flags.GeoModel.DumpGeo.OutputFileName:
341 flags.GeoModel.DumpGeo.OutputFileName,
342 flags.GeoModel.DumpGeo.ForceOverwrite,
350 configured_geometry_tag =
None
351 if not args.detDescr:
352 configured_geometry_tag = flags.GeoModel.AtlasVersion
355 configured_geometry_tag,
356 defaultGeometryTags.RUN3,
360 "+ About to set this detector description tag: '%s'",
363 flags.GeoModel.AtlasVersion = geometry_tag
364 _logger.verbose(
"+ Using detector description tag: '%s'", geometry_tag)
373 flags.GeoModel.DumpGeo.ForceOverwrite,
377 _logger.verbose(
"+ About to set flags related to the input")
381 dumpgeo_empty_input =
False
385 from AthenaConfiguration.AutoConfigFlags
import GetFileMD
387 input_metadata = GetFileMD(flags.Input.Files)
388 input_geometry_tag = input_metadata.get(
"GeoAtlas",
None)
391 dumpgeo_empty_input = (
392 len(flags.Input.Files) == 0
or not input_geometry_tag
395 if dumpgeo_empty_input:
396 from Campaigns.Utils
import Campaign
397 from AthenaConfiguration.TestDefaults
import (
398 defaultConditionsTags,
409 flags.Input.ProjectName =
"mc23_13p6TeV"
410 flags.Input.RunNumbers = [330000]
411 flags.Input.TimeStamps = [1]
412 flags.Input.TypedCollections = []
415 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN3_MC
416 flags.Input.isMC =
True
417 flags.Input.MCCampaign = Campaign.Unknown
419 _logger.verbose(
"+ ... Done")
420 _logger.verbose(
"+ empty input: '%s'", dumpgeo_empty_input)
424 _logger.verbose(
"+ About to set the detector flags")
426 from AthenaConfiguration.DetectorConfigFlags
import setupDetectorFlags
430 use_metadata=
not dumpgeo_empty_input,
431 toggle_geometry=
True,
434 _logger.verbose(
"+ ... Done")
446 _logger.verbose(
"+ Setup main services")
447 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
448 cfg = MainServicesCfg(flags)
449 _logger.verbose(
"+ ...Done")
451 _logger.verbose(
"+ About to setup geometry")
453 _logger.verbose(
"+ ...Done")
457 debugCAlevel = int(args.debugCA)
458 if debugCAlevel >= 1:
459 _logger.verbose(
"Debug --- printing flags...")
460 print(
"\nflags:", flags)
463 print(
"\nflags.Tile:", flags.Tile)
464 for fl
in flags.Tile:
465 print(
"fl.Tile:", fl)
467 print(
"cfg._privateTools: ", cfg._privateTools)
468 print(
"cfg._publicTools: ", cfg._publicTools)
469 if debugCAlevel >= 2:
471 flags._loadDynaFlags(
'GeoModel')
472 flags._loadDynaFlags(
'Detector')
473 flags.dump(
'Detector.(Geometry|Enable)',
True)
474 if debugCAlevel >= 1:
475 _logger.verbose(
"We're in a debugCA session, flags have been printed out, now exiting...")
484 sys.exit(
not status.isSuccess())
void print(char *figname, TCanvas *c1)
zdcGeometryWarning(flags, default_geometry_tags)
DumpGeoCfg(flags, name="DumpGeoAlg", **kwargs)
dumpGeoOutputFileName(flags)
resolveDumpGeoGeometryTag(det_descr, configured_tag, fallback_tag)
configureGeometry(flags, cfg)
validateDumpGeoOutputFile(output_file, force_overwrite)
logZDCGeometryWarning(warning, repeated=False)