File indexing completed on 2025-02-22 09:38:17
0001 from __future__ import absolute_import, unicode_literals
0002 import sys
0003 import logging
0004 import DDG4
0005
0006 logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
0007 logger = logging.getLogger(__name__)
0008
0009
0010 class LHeD:
0011 def __init__(self, tracker='Geant4TrackerCombineAction'):
0012 self.kernel = DDG4.Kernel()
0013 self.description = self.kernel.detectorDescription()
0014 self.geant4 = DDG4.Geant4(self.kernel, tracker=tracker)
0015 self.kernel.UI = ""
0016 self.noPhysics()
0017
0018 def loadGeometry(self):
0019 import os
0020 install_dir = os.environ['DD4hepExamplesINSTALL']
0021 self.kernel.loadGeometry(str("file:" + install_dir + "/examples/LHeD/compact/compact_Lhe_dip_sol_ell.xml"))
0022 return self
0023
0024
0025 def setupField(self, quiet=True):
0026 return self.geant4.setupTrackingField(prt=True)
0027
0028
0029 def setupRandom(self, name, type=None, seed=None, quiet=True):
0030 rndm = DDG4.Action(self.kernel, 'Geant4Random/' + name)
0031 if seed:
0032 rndm.Seed = seed
0033 if type:
0034 rndm.Type = type
0035 rndm.initialize()
0036 if not quiet:
0037 rndm.showStatus()
0038 return rndm
0039
0040
0041 def setupPhysics(self, model):
0042 phys = self.geant4.setupPhysics(model)
0043 ph = DDG4.PhysicsList(self.kernel, 'Geant4PhysicsList/Myphysics')
0044
0045 ph.addParticleGroup(str('G4BosonConstructor'))
0046
0047 ph.addParticleGroup(str('G4LeptonConstructor'))
0048
0049 ph.addParticleProcess(str('e[+-]'), str('G4eMultipleScattering'), -1, 1, 1)
0050
0051 ph.addPhysicsConstructor(str('G4OpticalPhysics'))
0052
0053 ph.enableUI()
0054 phys.adopt(ph)
0055 phys.dump()
0056 return phys
0057
0058
0059 def noPhysics(self):
0060 self.geant4.setupPhysics('')
0061 return self
0062
0063 def setupDetectors(self):
0064 logger.info("# First the tracking detectors")
0065 seq, act = self.geant4.setupTracker('SiVertexBarrel')
0066 seq, act = self.geant4.setupTracker('SiTrackerForward')
0067 seq, act = self.geant4.setupTracker('SiTrackerBarrel')
0068 seq, act = self.geant4.setupTracker('SiTrackerBackward')
0069 logger.info("# Now setup the calorimeters")
0070 seq, act = self.geant4.setupCalorimeter('EcalBarrel')
0071 seq, act = self.geant4.setupCalorimeter('EcalEndcap_fwd')
0072 seq, act = self.geant4.setupCalorimeter('EcalEndcap_bwd')
0073 seq, act = self.geant4.setupCalorimeter('HcalBarrel')
0074 seq, act = self.geant4.setupCalorimeter('HcalEndcap_fwd')
0075 seq, act = self.geant4.setupCalorimeter('HcalEndcap_bwd')
0076 seq, act = self.geant4.setupCalorimeter('HcalPlug_fwd')
0077 seq, act = self.geant4.setupCalorimeter('HcalPlug_bwd')
0078 seq, act = self.geant4.setupCalorimeter('MuonBarrel')
0079 seq, act = self.geant4.setupCalorimeter('MuonEndcap_fwd1')
0080 seq, act = self.geant4.setupCalorimeter('MuonEndcap_fwd2')
0081 seq, act = self.geant4.setupCalorimeter('MuonEndcap_bwd1')
0082 seq, act = self.geant4.setupCalorimeter('MuonEndcap_bwd2')
0083 return self
0084
0085 def test_config(self, have_geo=True):
0086 self.kernel.configure()
0087 if have_geo:
0088 self.kernel.initialize()
0089
0090
0091 def test_run(self, have_geo=True, have_physics=False):
0092 self.test_config(have_geo)
0093 if have_geo:
0094 self.kernel.NumEvents = 0
0095 self.kernel.run()
0096 self.kernel.terminate()
0097 logger.info('+++++ All Done....\n\nTEST_PASSED')
0098 sys.exit(0)