File indexing completed on 2026-07-07 07:52:17
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 import sys
0014 import errno
0015 import argparse
0016 import logging
0017
0018 logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
0019 logger = logging.getLogger(__name__)
0020
0021 parser = argparse.ArgumentParser()
0022 parser.description = "Check TGeo geometries for overlaps."
0023 parser.add_argument("-c", "--compact", dest="compact", default=None, nargs='+',
0024 help="Define LCCDD style compact xml input",
0025 metavar="<FILE>")
0026 parser.add_argument("-p", "--print",
0027 dest="print_overlaps", default=True,
0028 help="Print overlap information to standard output (default:True)",
0029 metavar="<boolean>")
0030 parser.add_argument("-q", "--quiet",
0031 action="store_false", dest="print_overlaps",
0032 help="Do not print (disable --print)")
0033 parser.add_argument("-t", "--tolerance", dest="tolerance", default=0.1,
0034 type=float,
0035 help="Overlap checking tolerance. Unit is in [mm]. (default:0.1 mm)",
0036 metavar="<double number>")
0037 parser.add_argument("-o", "--option", dest="option", default='',
0038 help="Overlap checking option ('' or 's')",
0039 metavar="<string>")
0040
0041 args = parser.parse_args()
0042
0043 if args.compact is None:
0044 logger.info(" %s", parser.format_help())
0045 sys.exit(1)
0046
0047 try:
0048 from ROOT import gROOT
0049 gROOT.SetBatch(1)
0050 except ImportError as X:
0051 logger.error('PyROOT interface not accessible: %s', str(X))
0052 logger.error("%s", parser.format_help())
0053 sys.exit(errno.ENOENT)
0054
0055 try:
0056 import dd4hep
0057 except ImportError as X:
0058 logger.error('dd4hep python interface not accessible: %s', str(X))
0059 logger.error("%s", parser.format_help())
0060 sys.exit(errno.ENOENT)
0061
0062
0063 dd4hep.setPrintLevel(dd4hep.OutputLevel.ERROR)
0064 logger.info('+++%s', 120 * '=')
0065 logger.info('+++ Loading compact geometry:')
0066 for xmlfile in args.compact:
0067 logger.info('+++ ' + xmlfile)
0068 logger.info('+++ tolerance: %f, option: %s', args.tolerance, args.option)
0069 logger.info('+++%s\n', 120 * '=')
0070 description = dd4hep.Detector.getInstance()
0071 for xmlfile in args.compact:
0072 description.fromXML(xmlfile)
0073
0074 description.manager().CheckOverlaps(args.tolerance, args.option)
0075
0076
0077 if args.print_overlaps:
0078 logger.info('+++%s', 120 * '=')
0079 logger.info('+++ Printing overlaps of geometry:')
0080 for xmlfile in args.compact:
0081 logger.info('+++ %s', xmlfile)
0082 logger.info('+++%s\n', 120 * '=')
0083 description.manager().PrintOverlaps()
0084
0085
0086 logger.info('+++ Execution finished...')
0087 sys.exit(0)