File indexing completed on 2026-09-18 08:26:24
0001 """
0002
0003 dd4hep simulation example setup using the python configuration
0004
0005 @author M.Frank
0006 @version 1.0
0007
0008 """
0009 import os
0010 import time
0011 import DDG4
0012 from g4units import keV, GeV, MeV
0013 import logging
0014
0015 logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
0016 logger = logging.getLogger(__name__)
0017
0018
0019 def run():
0020 kernel = DDG4.Kernel()
0021 install_dir = os.environ['DD4hepINSTALL']
0022 kernel.loadGeometry(str("file:" + install_dir + "/examples/CLICSiD/compact/compact.xml"))
0023
0024 simple = DDG4.Simple(kernel, tracker='LcioTestTrackerAction')
0025 simple.printDetectors()
0026
0027 simple.setupCshUI()
0028
0029
0030 run1 = DDG4.RunAction(kernel, 'Geant4TestRunAction/RunInit')
0031 run1.Property_int = 12345
0032 run1.Property_double = -5e15 * keV
0033 run1.Property_string = 'Startrun: Hello_2'
0034 logger.info("%s %s %s", run1.Property_string, run1.Property_double, run1.Property_int)
0035 run1.enableUI()
0036 kernel.registerGlobalAction(run1)
0037 kernel.runAction().add(run1)
0038
0039
0040 evt2 = DDG4.EventAction(kernel, 'Geant4TestEventAction/UserEvent_2')
0041 evt2.Property_int = 123454321
0042 evt2.Property_double = 5e15 * GeV
0043 evt2.Property_string = 'Hello_2 from the python setup'
0044 evt2.enableUI()
0045 kernel.registerGlobalAction(evt2)
0046
0047 evt1 = DDG4.EventAction(kernel, 'Geant4TestEventAction/UserEvent_1')
0048 evt1.Property_int = 0o1234
0049 evt1.Property_double = 1e11
0050 evt1.Property_string = 'Hello_1'
0051 evt1.enableUI()
0052
0053 kernel.eventAction().add(evt1)
0054 kernel.eventAction().add(evt2)
0055 """
0056 trk = DDG4.Action(kernel,"Geant4TrackPersistency/MonteCarloTruthHandler")
0057 kernel.registerGlobalAction(trk)
0058 trk.release()
0059 mc = DDG4.Action(kernel,"Geant4MonteCarloRecordManager/MonteCarloRecordManager")
0060 kernel.registerGlobalAction(mc)
0061 mc.release()
0062 """
0063
0064 simple.setupLCIOOutput('LcioOutput', 'CLICSiD_' + time.strftime('%Y-%m-%d_%H-%M'))
0065
0066 gen = DDG4.GeneratorAction(kernel, "Geant4TestGeneratorAction/Generate")
0067 kernel.generatorAction().add(gen)
0068
0069
0070 simple.setupGun('Gun', 'pi-', 100 * GeV, True)
0071
0072 """
0073 rdr = DDG4.GeneratorAction(kernel,"LcioGeneratorAction/Reader")
0074 rdr.zSpread = 0.0
0075 rdr.lorentzAngle = 0.0
0076 rdr.OutputLevel = DDG4.OutputLevel.INFO
0077 rdr.Input = "LcioEventReader|test.data"
0078 rdr.enableUI()
0079 kernel.generatorAction().add(rdr)
0080 """
0081
0082
0083 f1 = DDG4.Filter(kernel, 'GeantinoRejectFilter/GeantinoRejector')
0084 kernel.registerGlobalFilter(f1)
0085
0086 f2 = DDG4.Filter(kernel, 'ParticleRejectFilter/OpticalPhotonRejector')
0087 f2.particle = 'opticalphoton'
0088 kernel.registerGlobalFilter(f2)
0089
0090 f3 = DDG4.Filter(kernel, 'ParticleSelectFilter/OpticalPhotonSelector')
0091 f3.particle = 'opticalphoton'
0092 kernel.registerGlobalFilter(f3)
0093
0094 f4 = DDG4.Filter(kernel, 'EnergyDepositMinimumCut')
0095 f4.Cut = 10 * MeV
0096 f4.enableUI()
0097 kernel.registerGlobalFilter(f4)
0098
0099
0100 seq, act = simple.setupTracker('SiVertexBarrel')
0101 seq.add(f1)
0102
0103 act.add(f1)
0104
0105 seq, act = simple.setupTracker('SiVertexEndcap')
0106 seq.add(f1)
0107
0108
0109 seq, act = simple.setupTracker('SiTrackerBarrel')
0110 seq, act = simple.setupTracker('SiTrackerEndcap')
0111 seq, act = simple.setupTracker('SiTrackerForward')
0112
0113 seq, act = simple.setupCalorimeter('EcalBarrel')
0114 seq, act = simple.setupCalorimeter('EcalEndcap')
0115 seq, act = simple.setupCalorimeter('HcalBarrel')
0116 seq, act = simple.setupCalorimeter('HcalEndcap')
0117 seq, act = simple.setupCalorimeter('HcalPlug')
0118 seq, act = simple.setupCalorimeter('MuonBarrel')
0119 seq, act = simple.setupCalorimeter('MuonEndcap')
0120 seq, act = simple.setupCalorimeter('LumiCal')
0121 seq, act = simple.setupCalorimeter('BeamCal')
0122
0123
0124 phys = simple.setupPhysics('QGSP_BERT')
0125 ph = DDG4.PhysicsList(kernel, 'Geant4PhysicsList/Myphysics')
0126 ph.addParticleConstructor(str('G4BosonConstructor'))
0127 ph.addParticleConstructor(str('G4LeptonConstructor'))
0128 ph.addParticleProcess(str('e[+-]'), str('G4eMultipleScattering'), -1, 1, 1)
0129 ph.addPhysicsConstructor(str('G4StepLimiterPhysics'))
0130 ph.addPhysicsConstructor(str('G4OpticalPhysics'))
0131 ph.enableUI()
0132 phys.add(ph)
0133
0134 phys.dump()
0135
0136 kernel.configure()
0137 kernel.initialize()
0138
0139
0140 kernel.run()
0141 kernel.terminate()
0142
0143
0144 if __name__ == "__main__":
0145 run()