Back to home page

EIC code displayed by LXR

 
 

    


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)  # ENOENT