From 9044fdc7c83a5bfe22d7b30058c71df9fec2c96a Mon Sep 17 00:00:00 2001 From: Wouter Deconinck <wouter.deconinck@umanitoba.ca> Date: Sat, 5 Jun 2021 04:54:59 +0000 Subject: [PATCH] Feature: check overlaps with geant4 --- .gitlab-ci.yml | 23 +++++++++++++------ scripts/checkOverlaps.py | 45 ++++++++++++++++++++++++++++++++++++++ scripts/convert_to_gdml.py | 4 ++-- 3 files changed, 63 insertions(+), 9 deletions(-) create mode 100755 scripts/checkOverlaps.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a9d600dd..08123f1c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -136,14 +136,23 @@ dump_constants: script: - npdet_info dump ${DETECTOR_PATH}/athena.xml | tee doc/constants.out -overlap_check: +overlap_check_tgeo: stage: test needs: - ["common:detector"] script: - - checkOverlaps -c ${DETECTOR_PATH}/athena.xml | tee doc/overlap_check.out - - echo "$(cat doc/overlap_check.out | grep ovlp | wc -l) overlaps..." - - if [[ "$(cat doc/overlap_check.out | grep ovlp | wc -l)" -gt "0" ]] ; then echo "Overlaps exist!" && false ; fi + - checkOverlaps -c ${DETECTOR_PATH}/athena.xml | tee doc/overlap_check_tgeo.out + - echo "$(cat doc/overlap_check_tgeo.out | grep ovlp | wc -l) overlaps..." + - if [[ "$(cat doc/overlap_check_tgeo.out | grep ovlp | wc -l)" -gt "0" ]] ; then echo "Overlaps exist!" && false ; fi + +overlap_check_geant4: + stage: test + needs: + - ["common:detector"] + script: + - python scripts/checkOverlaps.py -c ${DETECTOR_PATH}/athena.xml | tee doc/overlap_check_geant4.out + - echo "$(cat doc/overlap_check_geant4.out | grep GeomVol1002 | wc -l) overlaps..." + - if [[ "$(cat doc/overlap_check_geant4.out | grep GeomVol1002 | wc -l)" -gt "0" ]] ; then echo "Overlaps exist!" && false ; fi convert_to_gdml: stage: test @@ -177,7 +186,7 @@ benchmarks:detector: trigger: project: EIC/benchmarks/detector_benchmarks strategy: depend - needs: ["overlap_check","report"] + needs: ["overlap_check_tgeo","overlap_check_geant4","report"] allow_failure: true @@ -189,7 +198,7 @@ benchmarks:detector: # trigger: # project: EIC/benchmarks/reconstruction_benchmarks # strategy: depend - # needs: ["env","overlap_check","report"] + # needs: ["env","overlap_check_tgeo","overlap_check_geant4","report"] # # #benchmarks:physics: @@ -200,5 +209,5 @@ benchmarks:detector: # trigger: # project: EIC/benchmarks/physics_benchmarks # strategy: depend - # needs: ["env","overlap_check","report"] + # needs: ["env","overlap_check_tgeo","overlap_check_geant4","report"] diff --git a/scripts/checkOverlaps.py b/scripts/checkOverlaps.py new file mode 100755 index 00000000..e093bedb --- /dev/null +++ b/scripts/checkOverlaps.py @@ -0,0 +1,45 @@ +from __future__ import absolute_import, unicode_literals +import os +import time +import logging + +import argparse +parser = argparse.ArgumentParser( + prog='convert_to_gdml.py', + description='''Convert DD4Hep description to GDML''', + epilog=''' + This program converts the compact detector file to a single GDML file. + ''') +parser.add_argument("-c", "--compact", help="compact detector file",default="athena.xml") +parser.add_argument("-r", "--resolution", help="number of points on surface",default="10000") +parser.add_argument("-t", "--tolerance", help="minimum distance (in mm) to report overlaps",default="0.1") +parser.add_argument("-v", "--verbose", help="print output", action='store_true') + +args = parser.parse_args() + +import DDG4 +from g4units import keV, GeV, mm, ns, MeV + +def run(): + kernel = DDG4.Kernel() + description = kernel.detectorDescription() + kernel.loadGeometry(str("file:" + args.compact)) + + DDG4.importConstants(description) + + geant4 = DDG4.Geant4(kernel) + ui = geant4.setupCshUI(ui=None) + ui.Commands = [ + '/geometry/test/resolution {}'.format(args.resolution), + '/geometry/test/tolerance {}'.format(args.tolerance), + '/geometry/test/verbosity {}'.format(1 if args.verbose else 0), + '/geometry/test/run' + ] + kernel.configure() + kernel.initialize() + kernel.run() + kernel.terminate() + + +if __name__ == "__main__": + run() diff --git a/scripts/convert_to_gdml.py b/scripts/convert_to_gdml.py index ce00df35..c24f73a0 100755 --- a/scripts/convert_to_gdml.py +++ b/scripts/convert_to_gdml.py @@ -10,8 +10,8 @@ parser = argparse.ArgumentParser( epilog=''' This program converts the compact detector file to a single GDML file. ''') -parser.add_argument("--compact", help="compact detector file",default="athena.xml") -parser.add_argument("--output", help="gdml detector file",default="athena.gdml") +parser.add_argument("-c", "--compact", help="compact detector file",default="athena.xml") +parser.add_argument("-o", "--output", help="gdml detector file",default="athena.gdml") args = parser.parse_args() -- GitLab