diff --git a/examples/ClientTests/compact/DriftChamber.xml b/examples/ClientTests/compact/DriftChamber.xml index 1373af4eb..9fa27d9bb 100644 --- a/examples/ClientTests/compact/DriftChamber.xml +++ b/examples/ClientTests/compact/DriftChamber.xml @@ -18,28 +18,27 @@ - + - + - - + A barrel hadronic calorimeter inspired on the ATLAS Tile hadronic calorimeter - - + + diff --git a/examples/ClientTests/scripts/DriftChamber.py b/examples/ClientTests/scripts/DriftChamber.py new file mode 100644 index 000000000..44f00564c --- /dev/null +++ b/examples/ClientTests/scripts/DriftChamber.py @@ -0,0 +1,109 @@ +# ========================================================================== +# AIDA Detector description implementation +# -------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +# ========================================================================== +# +# +from __future__ import absolute_import, unicode_literals +import os +import time +import DDG4 +from DDG4 import OutputLevel as Output +from g4units import GeV, MeV, m +# +# +""" + + dd4hep simulation example setup using the python configuration + + @author M.Frank + @version 1.0 + +""" + + +def run(): + args = DDG4.CommandLine() + kernel = DDG4.Kernel() + install_dir = os.environ['DD4hepExamplesINSTALL'] + kernel.loadGeometry(str("file:" + install_dir + "/examples/ClientTests/compact/DriftChamber.xml")) + + DDG4.importConstants(kernel.detectorDescription(), debug=False) + geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction') + geant4.registerInterruptHandler() + geant4.printDetectors() + # Configure UI + if args.macro: + ui = geant4.setupCshUI(macro=args.macro) + else: + ui = geant4.setupCshUI() + + cmds = [] + if args.verbose: + cmds.append('/run/verbose ' + str(args.verbose)) + if args.events: + cmds.append('/run/beamOn ' + str(args.events)) + cmds.append('/ddg4/UI/terminate') + + if len(cmds) > 0: + ui.Commands = cmds + + # Configure field + geant4.setupTrackingField(prt=True) + # Configure Event actions + prt = DDG4.EventAction(kernel, 'Geant4ParticlePrint/ParticlePrint') + prt.OutputLevel = Output.DEBUG + prt.OutputType = 3 # Print both: table and tree + kernel.eventAction().adopt(prt) + + generator_output_level = Output.INFO + + # Configure G4 geometry setup + seq, act = geant4.addDetectorConstruction("Geant4DetectorGeometryConstruction/ConstructGeo") + act.DebugMaterials = True + act.DebugElements = False + act.DebugVolumes = True + act.DebugShapes = True + seq, act = geant4.addDetectorConstruction("Geant4DetectorSensitivesConstruction/ConstructSD") + + # Configure I/O + geant4.setupROOTOutput('RootOutput', 'DriftChamber_' + time.strftime('%Y-%m-%d_%H-%M')) + + # Setup particle gun + gun = geant4.setupGun("Gun", particle='e+', energy=20 * GeV, multiplicity=1) + gun.OutputLevel = generator_output_level + + # And handle the simulation particles. + part = DDG4.GeneratorAction(kernel, "Geant4ParticleHandler/ParticleHandler") + kernel.generatorAction().adopt(part) + part.SaveProcesses = ['Decay'] + part.MinimalKineticEnergy = 100 * MeV + part.OutputLevel = Output.INFO # generator_output_level + part.enableUI() + user = DDG4.Action(kernel, "Geant4TCUserParticleHandler/UserParticleHandler") + user.TrackingVolume_Zmax = 3.0 * m + user.TrackingVolume_Rmax = 3.0 * m + user.enableUI() + part.adopt(user) + + geant4.setupTracker('DriftChamber') + + # Now build the physics list: + phys = geant4.setupPhysics('QGSP_BERT') + ph = DDG4.PhysicsList(kernel, str('Geant4PhysicsList/Myphysics')) + ph.addParticleConstructor(str('G4BosonConstructor')) + ph.enableUI() + phys.adopt(ph) + phys.dump() + + geant4.execute() + + +if __name__ == "__main__": + run() diff --git a/examples/ClientTests/src/DriftChamber_geo.cpp b/examples/ClientTests/src/DriftChamber_geo.cpp index 46acce19e..91b3063a8 100644 --- a/examples/ClientTests/src/DriftChamber_geo.cpp +++ b/examples/ClientTests/src/DriftChamber_geo.cpp @@ -37,10 +37,11 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s double cyl_rmax = x_dim.rmax(); double cyl_dz = x_dim.dz(); double layer_cnt = x_dim.layers(); + xml_comp_t x_wire = x_det.child(_Unicode(wire)); size_t wire_cnt = x_wire.count(); double wire_thick = x_wire.thickness(); - + double layer_thickness = (cyl_rmax - cyl_rmin)/double(layer_cnt+1); double delta_phi = 2.0 * M_PI / double(wire_cnt); double phi_start = 0e0; @@ -57,7 +58,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s sdet_vol.setAttributes(description, x_det.regionStr(), x_det.limitsStr(), x_det.visStr()); wire_vol.setSmartlessValue(2); - wire_vol.setVisAttributes(description.visAttributes(x_det.visStr())); + wire_vol.setVisAttributes(description.visAttributes(x_wire.visStr())); for( std::size_t l=0; l