Back to home page

EIC code displayed by LXR

 
 

    


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   # Configure UI
0027   simple.setupCshUI()
0028 
0029   # Configure Run actions
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   # Configure Event actions
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   # Configure I/O
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   # Setup particle gun
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   # Setup global filters fur use in sensintive detectors
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   # First the tracking detectors
0100   seq, act = simple.setupTracker('SiVertexBarrel')
0101   seq.add(f1)
0102   # seq.add(f4)
0103   act.add(f1)
0104 
0105   seq, act = simple.setupTracker('SiVertexEndcap')
0106   seq.add(f1)
0107   # seq.add(f4)
0108 
0109   seq, act = simple.setupTracker('SiTrackerBarrel')
0110   seq, act = simple.setupTracker('SiTrackerEndcap')
0111   seq, act = simple.setupTracker('SiTrackerForward')
0112   # Now the calorimeters
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   # Now build the physics list:
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   # DDG4.setPrintLevel(Output.DEBUG)
0140   kernel.run()
0141   kernel.terminate()
0142 
0143 
0144 if __name__ == "__main__":
0145   run()