File indexing completed on 2025-03-19 08:02:14
0001 """
0002
0003 dd4hep simulation example setup using the python configuration
0004
0005 @author M.Frank
0006 @version 1.0
0007
0008 """
0009 from __future__ import absolute_import, unicode_literals
0010 import os
0011 import logging
0012
0013 logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
0014 logger = logging.getLogger(__name__)
0015
0016
0017 def run(input_file):
0018 import DDG4
0019 from DDG4 import OutputLevel as Output
0020 kernel = DDG4.Kernel()
0021 kernel.detectorDescription()
0022 gen = DDG4.GeneratorAction(kernel, "Geant4InputAction/Input")
0023 kernel.generatorAction().adopt(gen)
0024 gen.Input = "Geant4EventReaderHepMC|" + input_file
0025 gen.OutputLevel = Output.DEBUG
0026 gen.HaveAbort = False
0027 prim_vtx = DDG4.std_vector(str('dd4hep::sim::Geant4Vertex*'))()
0028 parts = gen.new_particles()
0029 ret = 1
0030 evtid = 0
0031 while ret:
0032 try:
0033 parts.clear()
0034 prim_vtx.clear()
0035 ret = gen.readParticles(evtid, prim_vtx, parts)
0036 evtid = evtid + 1
0037 except Exception as X:
0038 logger.error('\nException: readParticles: %s', str(X))
0039 if evtid > 0:
0040 os._exit(0)
0041 if ret:
0042 for v in prim_vtx:
0043 logger.info('Mask:%04X (X:%8.2g,Y:%8.2g,Z:%8.2g) time:%8.2g Outgoing:%4d particles',
0044 v.mask, v.x, v.y, v.z, v.time, len(v.out))
0045 for p in parts:
0046 logger.info('Mask:%04X ID:%5d PDG-id:%8d Charge:%1d Mass:%8.3g Momentum:(%8.2g,%8.2g,%8.2g) '
0047 'Vertex:(%8.2g,%8.2g,%8.2g) NDau:%2d Status:%08X',
0048 p.mask, p.id, p.pdgID, int(p.charge3()), p.mass, p.psx, p.psy, p.psz,
0049 p.vsx, p.vsy, p.vsz, len(p.daughters), p.status)
0050 parts.clear()
0051 else:
0052 logger.info('*** End of recordset or read failure.....')
0053 logger.info(132 * '*')
0054 return 0
0055
0056
0057 if __name__ == "__main__":
0058 import sys
0059 input_file = None
0060 if len(sys.argv) > 1:
0061 input_file = sys.argv[1]
0062 sys.exit(run(input_file))
0063 else:
0064 logger.error('No input file given. Try again....')
0065 sys.exit(2)