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 """Return whether standalone DumpGeo was given real input files."""
152 return bool(input_files)
and input_files != [
153 "_ATHENA_GENERIC_INPUTFILE_NAME_"
158 """Configure deterministic defaults for an input-less standalone job."""
162 from Campaigns.Utils
import Campaign
163 from AthenaConfiguration.TestDefaults
import defaultConditionsTags
165 flags.Input.Files = []
169 flags.Input.ProjectName =
"mc23_13p6TeV"
170 flags.Input.RunNumbers = [330000]
171 flags.Input.TimeStamps = [1]
172 flags.Input.TypedCollections = []
173 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN3_MC
174 flags.Input.isMC =
True
175 flags.Input.MCCampaign = Campaign.Unknown
180 """Reject an existing output file unless overwrite is enabled."""
181 if os.path.exists(output_file)
and not force_overwrite:
182 raise ConfigurationError(
183 f
"DumpGeo output file '{output_file}' already exists. "
184 "Move or remove it, or enable "
185 "'GeoModel.DumpGeo.ForceOverwrite' "
186 "(or use the '-f' option from the command line)."
191 """Remind standalone users about ZDC diagnostics after a failed run."""
192 if zdc_enabled
and not run_succeeded:
194 "DumpGeo failed while ZDC geometry was enabled. Check the "
195 "preceding ZDC_DetTool messages: the selected geometry tag "
196 "may not contain ZDC geometry information."
201 if _logger.isEnabledFor(logging.DEBUG):
203 "Dumping the 'GeoModel.DumpGeo' configuration flags:"
205 flags.dump(
"GeoModel.DumpGeo")
208 _logger.debug(
"kwargs: %s", kwargs)
212 _logger.verbose(
"Using GeoModel ATLAS version: %s", flags.GeoModel.AtlasVersion)
214 kwargs.setdefault(
"AtlasVersion", flags.GeoModel.AtlasVersion)
217 if flags.GeoModel.DumpGeo.ShowTreetopContent:
218 kwargs.setdefault(
"ShowTreetopContent",
True)
223 filterDetManagers = flags.GeoModel.DumpGeo.FilterDetManagers
224 if filterDetManagers:
226 "+++ Filtering on these GeoModel 'Detector Managers': '%s'",
229 kwargs.setdefault(
"UserFilterDetManager", filterDetManagers)
233 if not flags.GeoModel.DumpGeo.OutputFileName:
235 "+++ Dumping this Detector Description geometry TAG: '%s'",
236 flags.GeoModel.AtlasVersion,
240 kwargs.setdefault(
"OutSQLiteFileName", configuredOutFileName)
245 outFileName = kwargs[
"OutSQLiteFileName"]
248 flags.GeoModel.DumpGeo.ForceOverwrite,
250 forceOverwrite = kwargs[
"ForceOverwrite"]
261 result = ComponentAccumulator()
262 the_alg = CompFactory.DumpGeo(name=name, **kwargs)
263 result.addEventAlgo(the_alg, primary=
True)
267if __name__==
"__main__":
270 from AthenaConfiguration.TestDefaults
import defaultGeometryTags
274 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
275 flags = initConfigFlags()
277 flags.Exec.MaxEvents = 0
290 flags.Concurrency.NumThreads = 0
300 parser = flags.getArgumentParser(description=
"Dump the detector geometry to a GeoModel-based SQLite '.db' file.")
301 parser.prog =
'dump-geo'
307 "Override the ATLAS geometry tag. This is a convenience alias "
308 "for 'GeoModel.AtlasVersion=TAG'. If omitted, the generic flag "
309 "or input-file metadata is used."
313 parser.add_argument(
"--outFilename", default=
"",
314 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")
316 parser.add_argument(
"--filterDetManagers", help=
"Only output the GeoModel Detector Managers specified in the FILTER list; input is a comma-separated list")
317 parser.add_argument(
"-f",
"--forceOverwrite",
318 help=
"Force to overwrite an existing SQLite output file with the same name, if any", action =
'store_true')
319 parser.add_argument(
"--showTreetopContent",
320 help=
"Show the content of the Treetops --- (by default, only the list of Treetops is shown)", action =
'store_true')
321 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.")
323 args = flags.fillFromArgs(parser=parser)
330 flags.GeoModel.DumpGeo.OutputFileName = args.outFilename
331 if args.filterDetManagers:
332 flags.GeoModel.DumpGeo.FilterDetManagers = [
334 for manager
in args.filterDetManagers.split(
",")
337 if args.showTreetopContent:
338 flags.GeoModel.DumpGeo.ShowTreetopContent =
True
339 if args.forceOverwrite:
340 flags.GeoModel.DumpGeo.ForceOverwrite =
True
351 if flags.GeoModel.DumpGeo.OutputFileName:
353 flags.GeoModel.DumpGeo.OutputFileName,
354 flags.GeoModel.DumpGeo.ForceOverwrite,
362 configured_geometry_tag =
None
363 if not args.detDescr:
364 configured_geometry_tag = flags.GeoModel.AtlasVersion
367 configured_geometry_tag,
368 defaultGeometryTags.RUN3,
372 "+ About to set this detector description tag: '%s'",
375 flags.GeoModel.AtlasVersion = geometry_tag
376 _logger.verbose(
"+ Using detector description tag: '%s'", geometry_tag)
378 from MuonConfig.MuonConfigUtils
import configureCondTag
379 configureCondTag(flags)
388 flags.GeoModel.DumpGeo.ForceOverwrite,
392 _logger.verbose(
"+ About to set flags related to the input")
396 dumpgeo_empty_input =
False
400 from AthenaConfiguration.AutoConfigFlags
import GetFileMD
402 input_metadata = GetFileMD(flags.Input.Files)
403 input_geometry_tag = input_metadata.get(
"GeoAtlas",
None)
406 dumpgeo_empty_input = (
407 len(flags.Input.Files) == 0
or not input_geometry_tag
410 if dumpgeo_empty_input:
411 from Campaigns.Utils
import Campaign
412 from AthenaConfiguration.TestDefaults
import (
413 defaultConditionsTags,
424 flags.Input.ProjectName =
"mc23_13p6TeV"
425 flags.Input.RunNumbers = [330000]
426 flags.Input.TimeStamps = [1]
427 flags.Input.TypedCollections = []
430 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN3_MC
431 flags.Input.isMC =
True
432 flags.Input.MCCampaign = Campaign.Unknown
434 _logger.verbose(
"+ ... Done")
435 _logger.verbose(
"+ empty input: '%s'", dumpgeo_empty_input)
439 _logger.verbose(
"+ About to set the detector flags")
441 from AthenaConfiguration.DetectorConfigFlags
import setupDetectorFlags
445 use_metadata=
not dumpgeo_empty_input,
446 toggle_geometry=
True,
449 _logger.verbose(
"+ ... Done")
455 _logger.verbose(
"+ Setup main services")
456 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
457 cfg = MainServicesCfg(flags)
458 _logger.verbose(
"+ ...Done")
460 _logger.verbose(
"+ About to setup geometry")
462 _logger.verbose(
"+ ...Done")
466 debugCAlevel = int(args.debugCA)
467 if debugCAlevel >= 1:
468 _logger.verbose(
"Debug --- printing flags...")
469 print(
"\nflags:", flags)
472 print(
"\nflags.Tile:", flags.Tile)
473 for fl
in flags.Tile:
474 print(
"fl.Tile:", fl)
476 print(
"cfg._privateTools: ", cfg._privateTools)
477 print(
"cfg._publicTools: ", cfg._publicTools)
478 if debugCAlevel >= 2:
480 flags._loadDynaFlags(
'GeoModel')
481 flags._loadDynaFlags(
'Detector')
482 flags.dump(
'Detector.(Geometry|Enable)',
True)
483 if debugCAlevel >= 1:
484 _logger.verbose(
"We're in a debugCA session, flags have been printed out, now exiting...")
492 flags.Detector.GeometryZDC,
496 sys.exit(
not status.isSuccess())
void print(char *figname, TCanvas *c1)
configureDumpGeoInputFlags(flags)
DumpGeoCfg(flags, name="DumpGeoAlg", **kwargs)
dumpGeoOutputFileName(flags)
resolveDumpGeoGeometryTag(det_descr, configured_tag, fallback_tag)
dumpGeoHasInputFiles(input_files)
configureGeometry(flags, cfg)
logZDCFailureReminder(zdc_enabled, run_succeeded)
validateDumpGeoOutputFile(output_file, force_overwrite)