Beispiel #1
0
def run(input_file):
    import DDG4
    from DDG4 import OutputLevel as Output
    kernel = DDG4.Kernel()
    description = kernel.detectorDescription()
    gen = DDG4.GeneratorAction(kernel, "Geant4InputAction/Input")
    kernel.generatorAction().adopt(gen)
    gen.Input = "Geant4EventReaderHepMC|/home/frankm/SW/data/hepmc_geant4.dat"
    gen.Input = "Geant4EventReaderHepMC|/home/frankm/SW/data/"
    gen.Input = "Geant4EventReaderHepMC|" + input_file
    gen.OutputLevel = Output.DEBUG
    gen.HaveAbort = False
    prim_vtx = DDG4.std_vector('dd4hep::sim::Geant4Vertex*')()
    parts = gen.new_particles()
    ret = 1
    while ret:
        try:
            ret = gen.readParticles(0, prim_vtx, parts)
        except Exception, X:
            print '\nException: readParticles:', str(X)
            ret = None
        if ret:
            for v in prim_vtx:
                print 'Mask:%04X (X:%8.2g,Y:%8.2g,Z:%8.2g) time:%8.2g Outgoing:%4d particles'%\
                      (v.mask,v.x,v.y,v.z,v.time,len(v.out),)
            for p in parts:
                print 'Mask:%04X ID:%5d PDG-id:%8d Charge:%1d Mass:%8.3g Momentum:(%8.2g,%8.2g,%8.2g) '\
                      'Vertex:(%8.2g,%8.2g,%8.2g) NDau:%2d Status:%08X'%\
                      (p.mask,p.id,p.pdgID,int(p.charge3()),p.mass,p.psx,p.psy,p.psz,\
                       p.vsx,p.vsy,p.vsz,len(p.daughters),p.status,)
            parts.clear()
        else:
            print '*** End of recordset or read failure.....'
        print 132 * '*'
Beispiel #2
0
def run():
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepINSTALL']
    example_dir = install_dir + '/examples/DDG4/examples'
    kernel.setOutputLevel('Geant4Converter', Output.DEBUG)
    kernel.setOutputLevel('RootOutput', Output.INFO)
    kernel.setOutputLevel('ShellHandler', Output.DEBUG)
    kernel.setOutputLevel('Gun', Output.INFO)
    kernel.loadGeometry("file:" + install_dir +
                        "/examples/ClientTests/compact/FCC_HcalBarrel.xml")

    geant4 = DDG4.Geant4(kernel)
    geant4.printDetectors()
    geant4.setupCshUI()

    # Configure field
    field = geant4.setupTrackingField(prt=True)
    # Configure I/O
    evt_root = geant4.setupROOTOutput('RootOutput',
                                      'FCC_' + time.strftime('%Y-%m-%d_%H-%M'),
                                      mc_truth=False)
    # Setup particle gun
    geant4.setupGun("Gun", particle='pi-', energy=100 * GeV, multiplicity=1)
    # Now the calorimeters
    seq, act = geant4.setupTracker('HcalBarrel')
    seq, act = geant4.setupDetector('ContainmentShell', 'Geant4EscapeCounter')
    # Now build the physics list:
    phys = kernel.physicsList()
    phys.extends = 'QGSP_BERT'
    phys.enableUI()
    phys.dump()
    # and run
    geant4.execute()
def run():

    kernel = DDG4.Kernel()

    try:
        install_dir = os.environ['DD4hepINSTALL']

    except (KeyError):
        print " please set the environment variable  DD4hepINSTALL  "
        print "        to your DD4hep installation path ! "
        exit(1)

    kernel.loadGeometry("file:" + compactFile)
    lcdd = kernel.detectorDescription()
    DDG4.importConstants(lcdd)

    #--------

    inf = open(paramFile, 'r')
    outf = open(dictFile, 'w')

    names = readNames(inf)

    writeDictionary(names, outf)

    inf.close()
    outf.close()
Beispiel #4
0
 def __init__(self, tracker='Geant4TrackerCombineAction', no_physics=True):
   self.kernel = DDG4.Kernel()
   self.description = self.kernel.detectorDescription()
   self.geant4 = DDG4.Geant4(self.kernel, tracker=tracker)
   self.kernel.UI = ""
   if no_physics:
     self.noPhysics()
Beispiel #5
0
def run():
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepINSTALL']
    kernel.loadGeometry("file:" + install_dir +
                        "/examples/ClientTests/compact/Assemblies.xml")
    #
    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    geant4.printDetectors()
    # Configure UI
    geant4.setupCshUI()
    if len(sys.argv) >= 2 and sys.argv[1] == "batch":
        kernel.UI = ''

    # Configure field
    field = geant4.setupTrackingField(prt=True)
    # Configure I/O
    geant4.setupROOTOutput('RootOutput',
                           'Assemblies_' + time.strftime('%Y-%m-%d_%H-%M'),
                           mc_truth=False)
    # Setup particle gun
    geant4.setupGun("Gun",
                    particle='e-',
                    energy=2 * GeV,
                    position=(0.15 * mm, 0.12 * mm, 0.1 * cm),
                    multiplicity=1)
    # First the tracking detectors
    seq, act = geant4.setupTracker('VXD')
    # Now build the physics list:
    phys = kernel.physicsList()
    phys.extends = 'QGSP_BERT'
    phys.enableUI()
    phys.dump()

    DDG4.setPrintLevel(DDG4.OutputLevel.DEBUG)
    geant4.execute()
Beispiel #6
0
def run(input_file):
    import DDG4
    from DDG4 import OutputLevel as Output
    kernel = DDG4.Kernel()
    lcdd = kernel.lcdd()
    gen = DDG4.GeneratorAction(kernel, "Geant4InputAction/Input")
    kernel.generatorAction().adopt(gen)
    gen.Input = "Geant4EventReaderHepMC|/home/frankm/SW/data/hepmc_geant4.dat"
    gen.Input = "Geant4EventReaderHepMC|/home/frankm/SW/data/"
    gen.Input = "Geant4EventReaderHepMC|" + input_file
    gen.OutputLevel = Output.DEBUG
    gen.HaveAbort = False
    prim_vtx = DDG4.Geant4Vertex()
    prim_vtx.x = 0.0
    prim_vtx.y = 0.0
    prim_vtx.z = 0.0
    parts = gen.new_particles()
    ret = 1
    while ret:
        try:
            ret = gen.readParticles(0, prim_vtx, parts)
        except Exception, X:
            print '\nException: readParticles:', str(X)
            ret = None
        if ret:
            for p in parts:
                print 'ID:%5d PDG-id:%8d Charge:%1d Mass:%8.3g Momentum:(%8.2g,%8.2g,%8.2g) '\
                      'Vertex:(%8.2g,%8.2g,%8.2g) NDau:%2d Status:%08X'%\
                      (p.id,p.pdgID,int(p.charge3()),p.mass,p.psx,p.psy,p.psz,\
                       p.vsx,p.vsy,p.vsz,len(p.daughters),p.status)
            parts.clear()
        else:
            print '*** End of recordset or read failure.....'
        print 132 * '*'
Beispiel #7
0
def run():
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepExamplesINSTALL']
    kernel.loadGeometry("file:" + install_dir +
                        "/examples/OpticalSurfaces/compact/OpNovice.xml")

    logging.basicConfig(format='%(levelname)s: %(message)s',
                        level=logging.DEBUG)
Beispiel #8
0
def run():
  kernel = DDG4.Kernel()
  install_dir = os.environ['DD4hepINSTALL']
  kernel.setOutputLevel('Geant4Converter',Output.DEBUG)
  kernel.setOutputLevel('Gun',Output.INFO)
  kernel.detectorDescription().fromXML("file:"+install_dir+"/examples/DDCMS/data/dd4hep-config.xml");
  kernel.NumEvents = 5
  geant4 = DDG4.Geant4(kernel,tracker='Geant4TrackerCombineAction')
  geant4.printDetectors()
  geant4.setupCshUI()
  batch = False
  test  = False
  for i in xrange(len(sys.argv)):
    arg = sys.argv[i].lower()
    if arg == 'batch':
      batch = True
    elif arg == 'test':
      test  = True
    elif arg == 'numevents':
      kernel.NumEvents = int(sys.argv[i+1])
  if batch or test:
    kernel.UI = ''

  # Configure field
  field = geant4.setupTrackingField(prt=True)
  # Configure I/O
  evt_root = geant4.setupROOTOutput('RootOutput','CMSTracker_'+time.strftime('%Y-%m-%d_%H-%M'),mc_truth=True)
  # Setup particle gun
  generators = []
  generators.append(geant4.setupGun("GunPi-",particle='pi-',energy=300*GeV,multiplicity=1,Standalone=False,register=False, Mask=1))
  if not test:
    generators.append(geant4.setupGun("GunPi+",particle='pi+',energy=300*GeV,multiplicity=1,Standalone=False,register=False, Mask=2))
    generators.append(geant4.setupGun("GunE-",particle='e-',energy=100*GeV,multiplicity=1,Standalone=False,register=False, Mask=4))
    generators.append(geant4.setupGun("GunE+",particle='e+',energy=100*GeV,multiplicity=1,Standalone=False,register=False, Mask=8))
  geant4.buildInputStage(generators)
  # Now setup all tracking detectors
  for i in geant4.description.detectors():
    o = DDG4.DetElement(i.second.ptr())
    sd = geant4.description.sensitiveDetector(o.name())
    if sd.isValid():
      type = geant4.sensitive_types[sd.type()]
      print 'CMSTracker: Configure subdetector %-24s of type %s'%(o.name(),type,)
      geant4.setupDetector(o.name(),type)

  # And handle the simulation particles.
  part = DDG4.GeneratorAction(kernel,"Geant4ParticleHandler/ParticleHandler")
  kernel.generatorAction().adopt(part)
  part.SaveProcesses = ['conv','Decay']
  part.MinimalKineticEnergy = 1*MeV
  part.OutputLevel = 5 # generator_output_level
  part.enableUI()

  # Now build the physics list:
  phys = kernel.physicsList()
  phys.extends = 'QGSP_BERT'
  phys.enableUI()
  # and run
  geant4.execute()
Beispiel #9
0
def run():
    kernel = DDG4.Kernel()
    description = kernel.detectorDescription()

    install_dir = os.environ['DD4hepExamplesINSTALL']
    kernel.loadGeometry(
        str("file:" + install_dir +
            "/examples/ClientTests/compact/LheD_tracker.xml"))

    DDG4.importConstants(description, debug=False)
    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    geant4.printDetectors()

    # Configure UI
    geant4.setupCshUI()
    # geant4.setupCshUI('csh',True,True)
    # geant4.setupCshUI('csh',True,True,'vis.mac')
    if len(sys.argv) >= 2 and sys.argv[1] == "batch":
        kernel.UI = ''

    # Configure field
    geant4.setupTrackingField(prt=True)
    # Configure Event actions
    prt = DDG4.EventAction(kernel, 'Geant4ParticlePrint/ParticlePrint')
    prt.OutputLevel = Output.WARNING  # Output.WARNING
    prt.OutputType = 3  # Print both: table and tree
    kernel.eventAction().adopt(prt)

    # Configure I/O
    geant4.setupROOTOutput('RootOutput',
                           'LHeD_tracker_' + time.strftime('%Y-%m-%d_%H-%M'))
    gen = geant4.setupGun("Gun",
                          particle='geantino',
                          energy=20 * GeV,
                          position=(0 * mm, 0 * mm, 0 * cm),
                          multiplicity=3)
    gen.isotrop = False
    gen.direction = (1, 0, 0)
    gen.OutputLevel = Output.WARNING

    # seq,act = geant4.setupTracker('SiVertexBarrel')

    # Now build the physics list:
    phys = geant4.setupPhysics('QGSP_BERT')
    ph = DDG4.PhysicsList(kernel, 'Geant4PhysicsList/Myphysics')
    ph.addParticleConstructor(str('G4Geantino'))
    ph.addParticleConstructor(str('G4BosonConstructor'))
    ph.enableUI()
    phys.adopt(ph)
    phys.dump()

    kernel.configure()
    kernel.initialize()

    # DDG4.setPrintLevel(Output.DEBUG)
    kernel.run()
    logger.info('End of run. Terminating .......')
    kernel.terminate()
Beispiel #10
0
    def __init__(self, geometry_file):
        self.kernel = DDG4.Kernel()
        self.kernel.setOutputLevel(str('Geant4Converter'), Output.DEBUG)
        self.kernel.setOutputLevel(str('Gun'), Output.INFO)
        self.kernel.loadGeometry(str(geometry_file))

        self.geant4 = DDG4.Geant4(self.kernel)
        self.geant4.printDetectors()
        self.geant4.setupCshUI()
Beispiel #11
0
def run():
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepINSTALL']
    kernel.setOutputLevel('Geant4Converter', Output.DEBUG)
    kernel.setOutputLevel('Gun', Output.INFO)
    kernel.loadGeometry("file:" + install_dir +
                        "/examples/ClientTests/compact/MiniTel.xml")

    geant4 = DDG4.Geant4(kernel)
    geant4.printDetectors()
    geant4.setupCshUI()
    if len(sys.argv) >= 2 and sys.argv[1] == "batch":
        kernel.NumEvents = 200
        kernel.UI = ''

    # Configure field
    field = geant4.setupTrackingField(prt=True)
    # Setup particle gun
    geant4.setupGun("Gun", particle='pi-', energy=100 * GeV, multiplicity=1)
    # Now the calorimeters
    seq, act = geant4.setupTracker('MyLHCBdetector1')
    seq, act = geant4.setupTracker('MyLHCBdetector2')
    seq, act = geant4.setupTracker('MyLHCBdetector3')
    seq, act = geant4.setupTracker('MyLHCBdetector4')
    act.OutputLevel = 4
    seq, act = geant4.setupTracker('MyLHCBdetector5')
    seq, act = geant4.setupTracker('MyLHCBdetector6')
    seq, act = geant4.setupTracker('MyLHCBdetector7')
    seq, act = geant4.setupTracker('MyLHCBdetector8')
    seq, act = geant4.setupTracker('MyLHCBdetector9')
    seq, act = geant4.setupTracker('MyLHCBdetector10')

    # And handle the simulation particles.
    part = DDG4.GeneratorAction(kernel,
                                "Geant4ParticleHandler/ParticleHandler")
    kernel.generatorAction().adopt(part)
    part.SaveProcesses = ['conv', 'Decay']
    part.MinimalKineticEnergy = 1 * MeV
    part.OutputLevel = 5  # generator_output_level
    part.enableUI()

    hit_tuple = DDG4.EventAction(kernel, 'HitTupleAction/MiniTelTuple', True)
    hit_tuple.OutputFile = 'MiniTel_EnergyDeposits_' + time.strftime(
        '%Y-%m-%d_%H-%M') + '.root'
    hit_tuple.Collections = ['*']
    kernel.eventAction().add(hit_tuple)

    # Now build the physics list:
    phys = kernel.physicsList()
    phys.extends = 'QGSP_BERT'
    phys.enableUI()
    # and run
    geant4.execute()
Beispiel #12
0
def run():
    kernel = DDG4.Kernel()
    description = kernel.detectorDescription()
    install_dir = os.environ['DD4hepINSTALL']
    DDG4.Core.setPrintFormat(str("%-32s %6s %s"))
    kernel.loadGeometry(
        str("file:" + install_dir + "/DDDetectors/compact/SiD.xml"))
    DDG4.importConstants(description)

    kernel.NumberOfThreads = 3
    kernel.RunManagerType = 'G4MTRunManager'
    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    logger.info("#  Configure UI")
    geant4.setupCshUI()

    logger.info("#  Geant4 user initialization action")
    geant4.addUserInitialization(worker=setupWorker,
                                 worker_args=(geant4, ),
                                 master=setupMaster,
                                 master_args=(geant4, ))

    logger.info("#  Configure G4 geometry setup")
    seq, act = geant4.addDetectorConstruction(
        "Geant4DetectorGeometryConstruction/ConstructGeo")

    logger.info("# Configure G4 sensitive detectors: python setup callback")
    seq, act = geant4.addDetectorConstruction(
        "Geant4PythonDetectorConstruction/SetupSD",
        sensitives=setupSensitives,
        sensitives_args=(geant4, ))
    logger.info(
        "# Configure G4 sensitive detectors: atach'em to the sensitive volumes"
    )
    seq, act = geant4.addDetectorConstruction(
        "Geant4DetectorSensitivesConstruction/ConstructSD")
    #                                           allow_threads=True)

    logger.info("#  Configure G4 magnetic field tracking")
    geant4.setupTrackingFieldMT()

    logger.info("#  Setup random generator")
    rndm = DDG4.Action(kernel, 'Geant4Random/Random')
    rndm.Seed = 987654321
    rndm.initialize()
    # rndm.showStatus()

    logger.info("#  Now build the physics list:")
    phys = geant4.setupPhysics('QGSP_BERT')
    phys.dump()

    geant4.run()
Beispiel #13
0
def run():
    batch = False
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepINSTALL']
    geometry = "file:" + install_dir + "/examples/ClientTests/compact/MultiCollections.xml"
    kernel.setOutputLevel('Geant4Converter', Output.DEBUG)
    kernel.setOutputLevel('Gun', Output.INFO)
    for i in xrange(len(sys.argv)):
        if sys.argv[i] == '-compact':
            geometry = sys.argv[i + 1]
        elif sys.argv[i] == '-input':
            geometry = sys.argv[i + 1]
        elif sys.argv[i] == '-batch':
            batch = True
        elif sys.argv[i] == 'batch':
            batch = True

    kernel.loadGeometry(geometry)
    geant4 = DDG4.Geant4(kernel)
    geant4.printDetectors()
    geant4.setupCshUI()
    if batch: kernel.UI = ''

    # Configure field
    field = geant4.setupTrackingField(prt=True)
    # Configure I/O
    evt_root = geant4.setupROOTOutput('RootOutput',
                                      'Multi_coll_' +
                                      time.strftime('%Y-%m-%d_%H-%M'),
                                      mc_truth=True)
    # Setup particle gun
    geant4.setupGun("Gun", particle='pi-', energy=10 * GeV, multiplicity=1)

    # Now the test calorimeter with multiple collections
    seq, act = geant4.setupCalorimeter('TestCal')

    # And handle the simulation particles.
    part = DDG4.GeneratorAction(kernel,
                                "Geant4ParticleHandler/ParticleHandler")
    kernel.generatorAction().adopt(part)
    part.MinimalKineticEnergy = 1 * MeV
    part.enableUI()

    # Now build the physics list:
    phys = kernel.physicsList()
    phys.extends = 'QGSP_BERT'
    phys.enableUI()
    phys.dump()
    # and run
    geant4.execute()
Beispiel #14
0
def run():
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepExamplesINSTALL']
    kernel.loadGeometry("file:" + install_dir +
                        "/examples/ClientTests/compact/SiliconBlock.xml")
    DDG4.importConstants(kernel.detectorDescription(), debug=False)
    # =======================================================================================
    # ===> This is actually the ONLY difference to ClientTests/scripts/SiliconBlock.py
    # =======================================================================================
    geant4 = DDG4.Geant4(kernel, tracker='MyTrackerSDAction')

    geant4.printDetectors()
    kernel.NumEvents = 5
    kernel.UI = ''

    # Configure field
    field = geant4.setupTrackingField(prt=True)
    # Configure Event actions
    prt = DDG4.EventAction(kernel, 'Geant4ParticlePrint/ParticlePrint')
    prt.OutputLevel = Output.WARNING
    prt.OutputType = 3  # Print both: table and tree
    kernel.eventAction().adopt(prt)

    # Configure I/O
    evt_root = geant4.setupROOTOutput('RootOutput',
                                      'MySD_' +
                                      time.strftime('%Y-%m-%d_%H-%M'),
                                      mc_truth=False)
    # Setup particle gun
    gun = geant4.setupGun("Gun",
                          particle='mu-',
                          energy=5 * GeV,
                          multiplicity=1,
                          Standalone=True,
                          position=(0, 0, 0))
    seq, act = geant4.setupTracker('SiliconBlockUpper')
    act.OutputLevel = Output.INFO
    seq, act = geant4.setupTracker('SiliconBlockDown')
    act.OutputLevel = Output.INFO
    # Now build the physics list:
    phys = kernel.physicsList()
    phys.extends = 'QGSP_BERT'
    phys.enableUI()
    phys.dump()
    # run
    kernel.configure()
    kernel.initialize()
    kernel.run()
    kernel.terminate()
Beispiel #15
0
def run():
  kernel = DDG4.Kernel()
  install_dir = os.environ['DD4hepExamplesINSTALL']
  kernel.loadGeometry(str("file:" + install_dir + "/examples/ClientTests/compact/TrackingRegion.xml"))
  geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
  # Configure field
  # field = geant4.setupTrackingField(prt=True)
  # Configure G4 geometry setup
  seq, act = geant4.addDetectorConstruction("Geant4DetectorGeometryConstruction/ConstructGeo")
  act.DebugVolumes = True
  act.DebugPlacements = True
  geant4.setupTracker('SiliconBlock')
  kernel.configure()
  kernel.initialize()
  kernel.terminate()
  sys.exit(0)
Beispiel #16
0
def run():
    cnt = 0
    geo = None
    vis = False
    batch = False
    for i in sys.argv:
        cnt = cnt + 1
        c = i.upper()
        if c.find('BATCH') < 2 and c.find('BATCH') >= 0:
            batch = True
        elif c[:4] == '-GEO':
            geo = sys.argv[cnt]
        elif c[:4] == '-VIS':
            vis = True

    if not geo:
        help()
        sys.exit(1)

    import DDG4
    kernel = DDG4.Kernel()
    # Configure UI
    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    if batch:
        ui = geant4.setupCshUI(typ=None, ui=None, vis=None)
        kernel.UI = 'UI'
    else:
        ui = geant4.setupCshUI(vis=vis)
    kernel.loadGeometry(geo)
    # Configure field
    geant4.setupTrackingField(prt=True)
    # Now build the physics list:
    geant4.setupPhysics('')
    kernel.physicsList().enableUI()
    DDG4.setPrintLevel(DDG4.OutputLevel.DEBUG)
    #
    ui.Commands = [
        '/ddg4/ConstructGeometry/printVolume /world_volume_1',
        '/ddg4/ConstructGeometry/printMaterial Air',
        '/ddg4/ConstructGeometry/printMaterial Vacuum', '/ddg4/UI/exit'
    ]
    kernel.NumEvents = 0
    kernel.configure()
    kernel.initialize()
    kernel.run()
    kernel.terminate()
Beispiel #17
0
def run():
    geo = None
    vis = False
    batch = False
    for i in list(range(len(sys.argv))):
        c = sys.argv[i].upper()
        if c.find('BATCH') < 2 and c.find('BATCH') >= 0:
            batch = True
        elif c[:4] == '-GEO':
            geo = sys.argv[i + 1]
        elif c[:4] == '-VIS':
            vis = True

    if not geo:
        help()
        sys.exit(1)

    import DDG4
    kernel = DDG4.Kernel()
    # Configure UI
    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    if batch:
        ui = geant4.setupCshUI(ui=None, vis=None)
        kernel.UI = 'UI'
    else:
        ui = geant4.setupCshUI(vis=vis)
    kernel.loadGeometry(geo)
    # Configure field
    geant4.setupTrackingField(prt=True)
    # Now build the physics list:
    geant4.setupPhysics('')
    kernel.physicsList().enableUI()
    DDG4.setPrintLevel(DDG4.OutputLevel.DEBUG)
    #
    cmds = []
    cmds.append(
        '/ddg4/ConstructGeometry/printVolume /world_volume_1/Shape_Test_0/Shape_Test_vol_0_0'
    )
    cmds.append('/ddg4/UI/exit')
    ui.Commands = cmds
    kernel.NumEvents = 0
    kernel.configure()
    kernel.initialize()
    kernel.run()
    kernel.terminate()
Beispiel #18
0
def run():
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepExamplesINSTALL']
    kernel.loadGeometry(
        str("file:" + install_dir +
            "/examples/ClientTests/compact/GdmlDetector.xml"))

    DDG4.importConstants(kernel.detectorDescription(), debug=False)
    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    geant4.printDetectors()
    # Configure UI
    if len(sys.argv) > 1:
        geant4.setupCshUI(macro=sys.argv[1])
    else:
        geant4.setupCshUI()

    # Configure field
    geant4.setupTrackingField(prt=True)

    generator_output_level = Output.INFO

    # Configure G4 geometry setup
    seq, act = geant4.addDetectorConstruction(
        "Geant4DetectorGeometryConstruction/ConstructGeo")
    act.DebugVolumes = True
    act.DebugShapes = True
    act.DebugPlacements = True
    act.DumpHierarchy = True

    # Setup particle gun
    gun = geant4.setupGun("Gun",
                          particle='mu-',
                          energy=20 * GeV,
                          multiplicity=1)
    gun.OutputLevel = generator_output_level

    # Now build the physics list:
    phys = geant4.setupPhysics('QGSP_BERT')
    phys.dump()

    geant4.execute()
Beispiel #19
0
def run():
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepExamplesINSTALL']
    kernel.setOutputLevel(str('Geant4Converter'), Output.DEBUG)
    kernel.setOutputLevel(str('Gun'), Output.INFO)
    kernel.loadGeometry(
        str("file:" + install_dir +
            "/examples/ClientTests/compact/NestedDetectors.xml"))

    geant4 = DDG4.Geant4(kernel)
    geant4.printDetectors()
    geant4.setupCshUI()
    if len(sys.argv) >= 2 and sys.argv[1] == "batch":
        kernel.UI = ''

    # Configure field
    geant4.setupTrackingField(prt=True)
    # Configure I/O
    geant4.setupROOTOutput('RootOutput',
                           'Nested_' + time.strftime('%Y-%m-%d_%H-%M'),
                           mc_truth=True)
    # Setup particle gun
    geant4.setupGun("Gun", particle='pi-', energy=100 * GeV, multiplicity=1)
    # Now the calorimeters
    seq, act = geant4.setupTracker('SiTrackerBarrel')
    seq, act = geant4.setupTracker('SiVertexBarrel')
    # And handle the simulation particles.
    part = DDG4.GeneratorAction(kernel,
                                "Geant4ParticleHandler/ParticleHandler")
    kernel.generatorAction().adopt(part)
    part.SaveProcesses = ['conv', 'Decay']
    part.MinimalKineticEnergy = 1 * MeV
    part.enableUI()

    # Now build the physics list:
    phys = kernel.physicsList()
    phys.extends = 'QGSP_BERT'
    phys.enableUI()
    phys.dump()
    # and run
    geant4.execute()
Beispiel #20
0
def run():
    import os
    import DDG4
    import g4units

    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepExamplesINSTALL']
    kernel.loadGeometry(
        str("file:" + install_dir + "/examples/LHeD/compact/compact.xml"))
    DDG4.Core.setPrintFormat(str("%-32s %6s %s"))
    geant4 = DDG4.Geant4(kernel)
    # Configure UI
    geant4.setupCshUI(ui=None)
    gun = geant4.setupGun("Gun",
                          Standalone=True,
                          particle='geantino',
                          energy=20 * g4units.GeV,
                          position=(0, 0, 0),
                          multiplicity=1,
                          isotrop=False)
    scan = DDG4.SteppingAction(kernel, 'Geant4MaterialScanner/MaterialScan')
    kernel.steppingAction().adopt(scan)

    # Now build the physics list:
    geant4.setupPhysics('QGSP_BERT')
    kernel.configure()
    kernel.initialize()
    kernel.NumEvents = 1

    # 3 shots in different directions:
    gun.direction = (0, 1, 0)
    kernel.run()
    gun.direction = (1, 0, 0)
    kernel.run()
    gun.direction = (1, 1, 1)
    kernel.run()

    kernel.terminate()
    logger.info('End of run. Terminating .......')
    logger.info('TEST_PASSED')
Beispiel #21
0
def run(input_file):
    import DDG4
    from DDG4 import OutputLevel as Output
    kernel = DDG4.Kernel()
    kernel.detectorDescription()
    gen = DDG4.GeneratorAction(kernel, "Geant4InputAction/Input")
    kernel.generatorAction().adopt(gen)
    gen.Input = "Geant4EventReaderHepMC|" + input_file
    gen.OutputLevel = Output.DEBUG
    gen.HaveAbort = False
    prim_vtx = DDG4.std_vector(str('dd4hep::sim::Geant4Vertex*'))()
    parts = gen.new_particles()
    ret = 1
    evtid = 0
    while ret:
        try:
            parts.clear()
            prim_vtx.clear()
            ret = gen.readParticles(evtid, prim_vtx, parts)
            evtid = evtid + 1
        except Exception as X:
            logger.error('\nException: readParticles: %s', str(X))
            if evtid > 0:
                os._exit(0)
        if ret:
            for v in prim_vtx:
                logger.info(
                    'Mask:%04X (X:%8.2g,Y:%8.2g,Z:%8.2g) time:%8.2g Outgoing:%4d particles',
                    v.mask, v.x, v.y, v.z, v.time, len(v.out))
            for p in parts:
                logger.info(
                    'Mask:%04X ID:%5d PDG-id:%8d Charge:%1d Mass:%8.3g Momentum:(%8.2g,%8.2g,%8.2g) '
                    'Vertex:(%8.2g,%8.2g,%8.2g) NDau:%2d Status:%08X', p.mask,
                    p.id, p.pdgID, int(p.charge3()), p.mass, p.psx, p.psy,
                    p.psz, p.vsx, p.vsy, p.vsz, len(p.daughters), p.status)
            parts.clear()
        else:
            logger.info('*** End of recordset or read failure.....')
        logger.info(132 * '*')
    return 0
Beispiel #22
0
def run():
    import os, sys, logging, DDG4, SystemOfUnits

    logging.basicConfig(format='%(levelname)s: %(message)s',
                        level=logging.DEBUG)
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepINSTALL']
    kernel.loadGeometry("file:" + install_dir + "/DDDetectors/compact/SiD.xml")
    DDG4.Core.setPrintFormat("%-32s %6s %s")
    geant4 = DDG4.Geant4(kernel)
    # Configure UI
    geant4.setupCshUI(ui=None)
    gun = geant4.setupGun("Gun",
                          Standalone=True,
                          particle='geantino',
                          energy=20 * SystemOfUnits.GeV,
                          position=(0, 0, 0),
                          multiplicity=1,
                          isotrop=False)
    scan = DDG4.SteppingAction(kernel, 'Geant4MaterialScanner/MaterialScan')
    kernel.steppingAction().adopt(scan)

    # Now build the physics list:
    phys = geant4.setupPhysics('QGSP_BERT')
    kernel.configure()
    kernel.initialize()
    kernel.NumEvents = 1

    # 3 shots in different directions:
    gun.direction = (0, 1, 0)
    kernel.run()
    gun.direction = (1, 0, 0)
    kernel.run()
    gun.direction = (1, 1, 1)
    kernel.run()

    kernel.terminate()
    logging.info('End of run. Terminating .......')
    logging.info('TEST_PASSED')
Beispiel #23
0
def run():
    kernel = DDG4.Kernel()
    install_dir = os.environ['DD4hepExamplesINSTALL']
    kernel.loadGeometry(
        str("file:" + install_dir +
            "/examples/OpticalSurfaces/compact/OpNovice.xml"))

    DDG4.importConstants(kernel.detectorDescription(), debug=False)
    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    geant4.printDetectors()
    # Configure UI
    if len(sys.argv) > 1:
        geant4.setupCshUI(macro=sys.argv[1])
    else:
        geant4.setupCshUI()

    # Configure field
    geant4.setupTrackingField(prt=True)
    # Configure Event actions
    prt = DDG4.EventAction(kernel, 'Geant4ParticlePrint/ParticlePrint')
    prt.OutputLevel = Output.DEBUG
    prt.OutputType = 3  # Print both: table and tree
    kernel.eventAction().adopt(prt)

    generator_output_level = Output.INFO

    # Configure G4 geometry setup
    seq, act = geant4.addDetectorConstruction(
        "Geant4DetectorGeometryConstruction/ConstructGeo")
    act.DebugMaterials = True
    act.DebugElements = False
    act.DebugVolumes = True
    act.DebugShapes = True
    act.DebugSurfaces = True

    # Configure I/O
    # evt_root = geant4.setupROOTOutput('RootOutput','OpNovice_'+time.strftime('%Y-%m-%d_%H-%M'))

    # Setup particle gun
    gun = geant4.setupGun("Gun",
                          particle='gamma',
                          energy=5 * keV,
                          multiplicity=1)
    gun.OutputLevel = generator_output_level

    # And handle the simulation particles.
    """
  part = DDG4.GeneratorAction(kernel,"Geant4ParticleHandler/ParticleHandler")
  kernel.generatorAction().adopt(part)
  part.SaveProcesses = ['Decay']
  part.MinimalKineticEnergy = 100*MeV
  part.OutputLevel = Output.INFO #generator_output_level
  part.enableUI()
  user = DDG4.Action(kernel,"Geant4TCUserParticleHandler/UserParticleHandler")
  user.TrackingVolume_Zmax = 3.0*m
  user.TrackingVolume_Rmax = 3.0*m
  user.enableUI()
  part.adopt(user)
  """
    geant4.setupTracker('BubbleDevice')

    # Now build the physics list:
    phys = geant4.setupPhysics('')
    ph = DDG4.PhysicsList(kernel,
                          'Geant4OpticalPhotonPhysics/OpticalGammaPhys')
    ph.VerboseLevel = 2
    ph.addParticleGroup('G4BosonConstructor')
    ph.addParticleGroup('G4LeptonConstructor')
    ph.addParticleGroup('G4MesonConstructor')
    ph.addParticleGroup('G4BaryonConstructor')
    ph.addParticleGroup('G4IonConstructor')
    ph.addParticleConstructor('G4OpticalPhoton')

    ph.addDiscreteParticleProcess('gamma', 'G4GammaConversion')
    ph.addDiscreteParticleProcess('gamma', 'G4ComptonScattering')
    ph.addDiscreteParticleProcess('gamma', 'G4PhotoElectricEffect')
    ph.addParticleProcess(str('e[+-]'), str('G4eMultipleScattering'), -1, 1, 1)
    ph.addParticleProcess(str('e[+-]'), str('G4eIonisation'), -1, 2, 2)
    ph.addParticleProcess(str('e[+-]'), str('G4eBremsstrahlung'), -1, 3, 3)
    ph.addParticleProcess(str('e+'), str('G4eplusAnnihilation'), 0, -1, 4)
    ph.addParticleProcess(str('mu[+-]'), str('G4MuMultipleScattering'), -1, 1,
                          1)
    ph.addParticleProcess(str('mu[+-]'), str('G4MuIonisation'), -1, 2, 2)
    ph.addParticleProcess(str('mu[+-]'), str('G4MuBremsstrahlung'), -1, 3, 3)
    ph.addParticleProcess(str('mu[+-]'), str('G4MuPairProduction'), -1, 4, 4)
    ph.enableUI()
    phys.adopt(ph)

    ph = DDG4.PhysicsList(kernel,
                          'Geant4ScintillationPhysics/ScintillatorPhys')
    ph.ScintillationYieldFactor = 1.0
    ph.ScintillationExcitationRatio = 1.0
    ph.TrackSecondariesFirst = False
    ph.VerboseLevel = 2
    ph.enableUI()
    phys.adopt(ph)

    ph = DDG4.PhysicsList(kernel, 'Geant4CerenkovPhysics/CerenkovPhys')
    ph.MaxNumPhotonsPerStep = 10
    ph.MaxBetaChangePerStep = 10.0
    ph.TrackSecondariesFirst = True
    ph.VerboseLevel = 2
    ph.enableUI()
    phys.adopt(ph)

    phys.dump()

    geant4.execute()
Beispiel #24
0
def run():
  kernel = DDG4.Kernel()
  install_dir = os.environ['DD4hepExamplesINSTALL']
  kernel.loadGeometry("file:" + install_dir + "/examples/OpticalSurfaces/compact/OpNovice.xml")
Beispiel #25
0
def run():
    geo = None
    vis = False
    dump = False
    batch = False
    install_dir = os.environ['DD4hepINSTALL']
    #
    for i in list(range(len(sys.argv))):
        c = sys.argv[i].upper()
        if c.find('BATCH') < 2 and c.find('BATCH') >= 0:
            batch = True
        elif c[:4] == '-GEO':
            geo = sys.argv[i + 1]
        elif c[:4] == '-VIS':
            vis = True
        elif c[:4] == '-DUM':
            dump = True

    if not geo:
        help()
        sys.exit(1)

    import DDG4
    kernel = DDG4.Kernel()
    description = kernel.detectorDescription()
    DDG4.setPrintLevel(DDG4.OutputLevel.INFO)
    DDG4.importConstants(description)
    #
    # Configure UI
    geant4 = DDG4.Geant4(kernel)
    ui = None
    if batch:
        geant4.setupCshUI(ui=None, vis=None)
        kernel.UI = 'UI'
    else:
        ui = geant4.setupCshUI(vis=vis)
    Output = DDG4.OutputLevel

    seq, act = geant4.addDetectorConstruction(
        "Geant4DetectorGeometryConstruction/ConstructGeo")
    act.DebugReflections = True
    act.DebugMaterials = False
    act.DebugElements = False
    act.DebugVolumes = False
    act.DebugShapes = False
    if dump:
        act.DumpHierarchy = ~0x0
    #
    kernel.setOutputLevel(str('Geant4Converter'), Output.WARNING)
    kernel.loadGeometry(geo)
    #
    geant4.printDetectors()
    # Configure field
    geant4.setupTrackingField(prt=True)
    logger.info("#  Setup random generator")
    rndm = DDG4.Action(kernel, 'Geant4Random/Random')
    rndm.Seed = 987654321
    rndm.initialize()
    #
    # Setup detector
    seq, act = geant4.setupCalorimeter('NestedBox')
    #
    # Configure I/O
    geant4.setupROOTOutput('RootOutput',
                           'Reflections_' + time.strftime('%Y-%m-%d_%H-%M'),
                           mc_truth=True)
    #
    # Setup particle gun
    geant4.setupGun(name="Gun",
                    particle='e-',
                    energy=1000 * GeV,
                    isotrop=True,
                    multiplicity=1,
                    position=(0 * m, 0 * m, 0 * m),
                    PhiMin=0.0 * rad,
                    PhiMax=math.pi * 2.0 * rad,
                    ThetaMin=0.0 * rad,
                    ThetaMax=math.pi * rad)

    logger.info("#  ....and handle the simulation particles.")
    part = DDG4.GeneratorAction(kernel,
                                str('Geant4ParticleHandler/ParticleHandler'))
    kernel.generatorAction().adopt(part)
    part.MinimalKineticEnergy = 100 * MeV
    part.SaveProcesses = ['Decay']
    part.OutputLevel = 5  # generator_output_level
    part.enableUI()
    user = DDG4.Action(kernel,
                       str('Geant4TCUserParticleHandler/UserParticleHandler'))
    user.TrackingVolume_Rmax = 3.0 * m
    user.TrackingVolume_Zmax = 2.0 * m
    user.enableUI()
    part.adopt(user)
    #
    #
    prt = DDG4.EventAction(kernel, str('Geant4ParticlePrint/ParticlePrint'))
    prt.OutputLevel = Output.INFO
    prt.OutputType = 3  # Print both: table and tree
    kernel.eventAction().adopt(prt)
    #
    # Now build the physics list:
    phys = geant4.setupPhysics(str('QGSP_BERT'))
    ph = geant4.addPhysics(str('Geant4PhysicsList/Myphysics'))
    ph.addPhysicsConstructor(str('G4StepLimiterPhysics'))
    ph.addParticleConstructor(str('G4Geantino'))
    ph.addParticleConstructor(str('G4BosonConstructor'))
    #
    # Add special particle types from specialized physics constructor
    part = geant4.addPhysics('Geant4ExtraParticles/ExtraParticles')
    part.pdgfile = os.path.join(install_dir,
                                'examples/DDG4/examples/particle.tbl')
    #
    # Add global range cut
    rg = geant4.addPhysics('Geant4DefaultRangeCut/GlobalRangeCut')
    rg.RangeCut = 0.7 * mm
    #
    phys.dump()
    #
    #
    if ui and vis:
        cmds = []
        cmds.append('/control/verbose 2')
        cmds.append('/run/initialize')
        cmds.append('/vis/open OGL')
        cmds.append('/vis/verbose errors')
        cmds.append('/vis/drawVolume')
        cmds.append('/vis/viewer/set/viewpointThetaPhi 55. 45.')
        cmds.append('/vis/scene/add/axes 0 0 0 3 m')
        ui.Commands = cmds
    kernel.NumEvents = 0
    kernel.configure()
    kernel.initialize()
    kernel.run()
    kernel.terminate()
Beispiel #26
0
 def __init__(self, tracker='Geant4TrackerCombineAction'):
     self.kernel = DDG4.Kernel()
     self.lcdd = self.kernel.lcdd()
     self.geant4 = DDG4.Geant4(self.kernel, tracker=tracker)
     self.kernel.UI = ""
     self.noPhysics()
Beispiel #27
0
    def run(self):
        """setup the geometry and dd4hep and geant4 and do what was asked to be done"""
        import ROOT
        ROOT.PyConfig.IgnoreCommandLineOptions = True

        import DDG4, dd4hep

        self.printLevel = getOutputLevel(self.printLevel)

        kernel = DDG4.Kernel()
        dd4hep.setPrintLevel(self.printLevel)
        #kernel.setOutputLevel('Compact',1)

        kernel.loadGeometry("file:" + self.compactFile)
        detectorDescription = kernel.detectorDescription()

        DDG4.importConstants(detectorDescription)

        #----------------------------------------------------------------------------------

        #simple = DDG4.Geant4( kernel, tracker='Geant4TrackerAction',calo='Geant4CalorimeterAction')
        #simple = DDG4.Geant4( kernel, tracker='Geant4TrackerCombineAction',calo='Geant4ScintillatorCalorimeterAction')
        simple = DDG4.Geant4(kernel,
                             tracker=self.action.tracker,
                             calo=self.action.calo)

        simple.printDetectors()

        if self.runType == "vis":
            simple.setupUI(typ="csh", vis=True, macro=self.macroFile)
        elif self.runType == "run":
            simple.setupUI(typ="csh",
                           vis=False,
                           macro=self.macroFile,
                           ui=False)
        elif self.runType == "shell":
            simple.setupUI(typ="csh", vis=False, macro=None, ui=True)
        elif self.runType == "batch":
            simple.setupUI(typ="csh", vis=False, macro=None, ui=False)
        else:
            print "ERROR: unknown runType"
            exit(1)

        #kernel.UI="csh"
        kernel.NumEvents = self.numberOfEvents

        #-----------------------------------------------------------------------------------
        # setup the magnetic field:
        self.__setMagneticFieldOptions(simple)

        #----------------------------------------------------------------------------------

        # Configure Run actions
        run1 = DDG4.RunAction(kernel, 'Geant4TestRunAction/RunInit')
        kernel.registerGlobalAction(run1)
        kernel.runAction().add(run1)

        # Configure the random seed, do it before the I/O because we might change the seed!
        _rndm = self.random.initialize(DDG4, kernel, self.output.random)

        # Configure I/O
        if self.outputFile.endswith(".slcio"):
            lcOut = simple.setupLCIOOutput('LcioOutput', self.outputFile)
            lcOut.RunHeader = self.meta.addParametersToRunHeader(self)
            lcOut.EventParametersString, lcOut.EventParametersInt, lcOut.EventParametersFloat = self.meta.parseEventParameters(
            )
            lcOut.RunNumberOffset = self.meta.runNumberOffset if self.meta.runNumberOffset > 0 else 0
            lcOut.EventNumberOffset = self.meta.eventNumberOffset if self.meta.eventNumberOffset > 0 else 0
        elif self.outputFile.endswith(".root"):
            simple.setupROOTOutput('RootOutput', self.outputFile)

        actionList = []

        if self.enableGun:
            gun = DDG4.GeneratorAction(kernel, "Geant4ParticleGun/" + "Gun")
            self.gun.setOptions(gun)
            gun.Standalone = False
            gun.Mask = 1
            actionList.append(gun)
            self.__applyBoostOrSmear(kernel, actionList, 1)
            print "++++ Adding DD4hep Particle Gun ++++"

        if self.enableG4Gun:
            ## GPS Create something
            self._g4gun = DDG4.GeneratorAction(kernel,
                                               "Geant4GeneratorWrapper/Gun")
            self._g4gun.Uses = 'G4ParticleGun'
            self._g4gun.Mask = 2
            print "++++ Adding Geant4 Particle Gun ++++"
            actionList.append(self._g4gun)

        if self.enableG4GPS:
            ## GPS Create something
            self._g4gps = DDG4.GeneratorAction(kernel,
                                               "Geant4GeneratorWrapper/GPS")
            self._g4gps.Uses = 'G4GeneralParticleSource'
            self._g4gps.Mask = 3
            print "++++ Adding Geant4 General Particle Source ++++"
            actionList.append(self._g4gps)

        for index, inputFile in enumerate(self.inputFiles, start=4):
            if inputFile.endswith(".slcio"):
                gen = DDG4.GeneratorAction(kernel,
                                           "LCIOInputAction/LCIO%d" % index)
                gen.Parameters = self.lcio.getParameters()
                gen.Input = "LCIOFileReader|" + inputFile
            elif inputFile.endswith(".stdhep"):
                gen = DDG4.GeneratorAction(kernel,
                                           "LCIOInputAction/STDHEP%d" % index)
                gen.Input = "LCIOStdHepReader|" + inputFile
            elif inputFile.endswith(".HEPEvt"):
                gen = DDG4.GeneratorAction(
                    kernel, "Geant4InputAction/HEPEvt%d" % index)
                gen.Input = "Geant4EventReaderHepEvtShort|" + inputFile
            elif inputFile.endswith(".hepevt"):
                gen = DDG4.GeneratorAction(
                    kernel, "Geant4InputAction/hepevt%d" % index)
                gen.Input = "Geant4EventReaderHepEvtLong|" + inputFile
            elif inputFile.endswith(".hepmc"):
                gen = DDG4.GeneratorAction(kernel,
                                           "Geant4InputAction/hepmc%d" % index)
                gen.Input = "Geant4EventReaderHepMC|" + inputFile
            elif inputFile.endswith(".pairs"):
                gen = DDG4.GeneratorAction(
                    kernel, "Geant4InputAction/GuineaPig%d" % index)
                gen.Input = "Geant4EventReaderGuineaPig|" + inputFile
                gen.Parameters = self.guineapig.getParameters()
            else:
                ##this should never happen because we already check at the top, but in case of some LogicError...
                raise RuntimeError("Unknown input file type: %s" % inputFile)
            gen.Sync = self.skipNEvents
            gen.Mask = index
            actionList.append(gen)
            self.__applyBoostOrSmear(kernel, actionList, index)

        if actionList:
            self._buildInputStage(simple,
                                  actionList,
                                  output_level=self.output.inputStage,
                                  have_mctruth=self._enablePrimaryHandler())

        #================================================================================================

        # And handle the simulation particles.
        part = DDG4.GeneratorAction(kernel,
                                    "Geant4ParticleHandler/ParticleHandler")
        kernel.generatorAction().adopt(part)
        #part.SaveProcesses = ['conv','Decay']
        part.SaveProcesses = self.part.saveProcesses
        part.MinimalKineticEnergy = self.part.minimalKineticEnergy
        part.KeepAllParticles = self.part.keepAllParticles
        part.PrintEndTracking = self.part.printEndTracking
        part.PrintStartTracking = self.part.printStartTracking
        part.MinDistToParentVertex = self.part.minDistToParentVertex
        part.OutputLevel = self.output.part
        part.enableUI()

        if self.part.enableDetailedHitsAndParticleInfo:
            self.part.setDumpDetailedParticleInfo(kernel, DDG4)

        self.part.setupUserParticleHandler(part, kernel, DDG4)

        #=================================================================================

        # Setup global filters for use in sensitive detectors
        try:
            self.filter.setupFilters(kernel)
        except RuntimeError as e:
            print "ERROR", str(e)
            exit(1)

        #=================================================================================
        # get lists of trackers and calorimeters in detectorDescription

        trk, cal = self.getDetectorLists(detectorDescription)

        # ---- add the trackers:
        try:
            self.__setupSensitiveDetectors(trk, simple.setupTracker,
                                           self.filter.tracker)
        except Exception as e:
            print "ERROR setting up sensitive detector", str(e)
            raise

    # ---- add the calorimeters:
        try:
            self.__setupSensitiveDetectors(cal, simple.setupCalorimeter,
                                           self.filter.calo)
        except Exception as e:
            print "ERROR setting up sensitive detector", str(e)
            raise

    #=================================================================================
    # Now build the physics list:
        _phys = self.physics.setupPhysics(kernel, name=self.physicsList)

        ## add the G4StepLimiterPhysics to activate the max step limits in volumes
        ph = DDG4.PhysicsList(kernel, 'Geant4PhysicsList/Myphysics')
        ph.addPhysicsConstructor('G4StepLimiterPhysics')
        _phys.add(ph)

        dd4hep.setPrintLevel(self.printLevel)

        kernel.configure()
        kernel.initialize()

        ## GPS
        if self._g4gun is not None:
            self._g4gun.generator()
        if self._g4gps is not None:
            self._g4gps.generator()

        startUpTime, _sysTime, _cuTime, _csTime, _elapsedTime = os.times()

        kernel.run()
        kernel.terminate()

        totalTimeUser, totalTimeSys, _cuTime, _csTime, _elapsedTime = os.times(
        )
        if self.printLevel <= 3:
            print "DDSim            INFO  Total Time:   %3.2f s (User), %3.2f s (System)" % (
                totalTimeUser, totalTimeSys)
            if self.numberOfEvents != 0:
                eventTime = totalTimeUser - startUpTime
                perEventTime = eventTime / float(self.numberOfEvents)
                print "DDSim            INFO  StartUp Time: %3.2f s, Event Processing: %3.2f s (%3.2f s/Event) " \
                    % (startUpTime, eventTime, perEventTime)
Beispiel #28
0
def run():
    kernel = DDG4.Kernel()
    description = kernel.detectorDescription()
    install_dir = os.environ['DD4hepINSTALL']
    kernel.loadGeometry("file:" + install_dir + "/DDDetectors/compact/SiD.xml")
    DDG4.importConstants(description)

    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    geant4.printDetectors()
    logging.info("#  Configure UI")
    geant4.setupCshUI()

    logging.info("#  Configure G4 magnetic field tracking")
    geant4.setupTrackingField()

    logging.info("#  Setup random generator")
    rndm = DDG4.Action(kernel, 'Geant4Random/Random')
    rndm.Seed = 987654321
    rndm.initialize()
    ##rndm.showStatus()

    logging.info("#  Configure Run actions")
    run1 = DDG4.RunAction(kernel, 'Geant4TestRunAction/RunInit')
    run1.Property_int = 12345
    run1.Property_double = -5e15 * keV
    run1.Property_string = 'Startrun: Hello_2'
    logging.info("%s %s %s", run1.Property_string, str(run1.Property_double),
                 str(run1.Property_int))
    run1.enableUI()
    kernel.registerGlobalAction(run1)
    kernel.runAction().adopt(run1)

    logging.info("#  Configure Event actions")
    prt = DDG4.EventAction(kernel, 'Geant4ParticlePrint/ParticlePrint')
    prt.OutputLevel = Output.INFO
    prt.OutputType = 3  # Print both: table and tree
    kernel.eventAction().adopt(prt)

    logging.info("""
  Configure I/O
  """)
    #evt_lcio = geant4.setupLCIOOutput('LcioOutput','CLICSiD_'+time.strftime('%Y-%m-%d_%H-%M'))
    #evt_lcio.OutputLevel = Output.ERROR

    evt_root = geant4.setupROOTOutput(
        'RootOutput', 'CLICSiD_' + time.strftime('%Y-%m-%d_%H-%M'))

    generator_output_level = Output.INFO

    gen = DDG4.GeneratorAction(kernel,
                               "Geant4GeneratorActionInit/GenerationInit")
    kernel.generatorAction().adopt(gen)

    #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
    logging.info("""
  Generation of isotrope tracks of a given multiplicity with overlay:
  """)
    logging.info("#  First particle generator: pi+")
    gen = DDG4.GeneratorAction(kernel, "Geant4IsotropeGenerator/IsotropPi+")
    gen.Mask = 1
    gen.Particle = 'pi+'
    gen.Energy = 100 * GeV
    gen.Multiplicity = 2
    gen.Distribution = 'cos(theta)'
    kernel.generatorAction().adopt(gen)
    logging.info("#  Install vertex smearing for this interaction")
    gen = DDG4.GeneratorAction(kernel, "Geant4InteractionVertexSmear/SmearPi+")
    gen.Mask = 1
    gen.Offset = (20 * mm, 10 * mm, 10 * mm, 0 * ns)
    gen.Sigma = (4 * mm, 1 * mm, 1 * mm, 0 * ns)
    kernel.generatorAction().adopt(gen)

    logging.info("#  Second particle generator: e-")
    gen = DDG4.GeneratorAction(kernel, "Geant4IsotropeGenerator/IsotropE-")
    gen.Mask = 2
    gen.Particle = 'e-'
    gen.Energy = 25 * GeV
    gen.Multiplicity = 3
    gen.Distribution = 'uniform'
    kernel.generatorAction().adopt(gen)
    logging.info("  Install vertex smearing for this interaction")
    gen = DDG4.GeneratorAction(kernel, "Geant4InteractionVertexSmear/SmearE-")
    gen.Mask = 2
    gen.Offset = (-20 * mm, -10 * mm, -10 * mm, 0 * ns)
    gen.Sigma = (12 * mm, 8 * mm, 8 * mm, 0 * ns)
    kernel.generatorAction().adopt(gen)
    #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    logging.info("#  Merge all existing interaction records")
    gen = DDG4.GeneratorAction(kernel,
                               "Geant4InteractionMerger/InteractionMerger")
    gen.OutputLevel = 4  #generator_output_level
    gen.enableUI()
    kernel.generatorAction().adopt(gen)

    logging.info("#  Finally generate Geant4 primaries")
    gen = DDG4.GeneratorAction(kernel, "Geant4PrimaryHandler/PrimaryHandler")
    gen.OutputLevel = 4  #generator_output_level
    gen.enableUI()
    kernel.generatorAction().adopt(gen)

    logging.info("#  ....and handle the simulation particles.")
    part = DDG4.GeneratorAction(kernel,
                                "Geant4ParticleHandler/ParticleHandler")
    kernel.generatorAction().adopt(part)
    #part.SaveProcesses = ['conv','Decay']
    part.SaveProcesses = ['Decay']
    part.MinimalKineticEnergy = 100 * MeV
    part.OutputLevel = 5  # generator_output_level
    part.enableUI()
    user = DDG4.Action(kernel,
                       "Geant4TCUserParticleHandler/UserParticleHandler")
    user.TrackingVolume_Zmax = DDG4.EcalEndcap_zmin
    user.TrackingVolume_Rmax = DDG4.EcalBarrel_rmin
    user.enableUI()
    part.adopt(user)

    logging.info("#  Setup global filters fur use in sensitive detectors")
    f1 = DDG4.Filter(kernel, 'GeantinoRejectFilter/GeantinoRejector')
    f2 = DDG4.Filter(kernel, 'ParticleRejectFilter/OpticalPhotonRejector')
    f2.particle = 'opticalphoton'
    f3 = DDG4.Filter(kernel, 'ParticleSelectFilter/OpticalPhotonSelector')
    f3.particle = 'opticalphoton'
    f4 = DDG4.Filter(kernel, 'EnergyDepositMinimumCut')
    f4.Cut = 10 * MeV
    f4.enableUI()
    kernel.registerGlobalFilter(f1)
    kernel.registerGlobalFilter(f2)
    kernel.registerGlobalFilter(f3)
    kernel.registerGlobalFilter(f4)

    logging.info("#  First the tracking detectors")
    seq, act = geant4.setupTracker('SiVertexBarrel')
    seq.adopt(f1)
    #seq.adopt(f4)
    act.adopt(f1)

    seq, act = geant4.setupTracker('SiVertexEndcap')
    seq.adopt(f1)
    #seq.adopt(f4)

    seq, act = geant4.setupTracker('SiTrackerBarrel')
    seq, act = geant4.setupTracker('SiTrackerEndcap')
    seq, act = geant4.setupTracker('SiTrackerForward')
    logging.info("#  Now setup the calorimeters")
    seq, act = geant4.setupCalorimeter('EcalBarrel')
    seq, act = geant4.setupCalorimeter('EcalEndcap')
    seq, act = geant4.setupCalorimeter('HcalBarrel')
    seq, act = geant4.setupCalorimeter('HcalEndcap')
    seq, act = geant4.setupCalorimeter('HcalPlug')
    seq, act = geant4.setupCalorimeter('MuonBarrel')
    seq, act = geant4.setupCalorimeter('MuonEndcap')
    seq, act = geant4.setupCalorimeter('LumiCal')
    seq, act = geant4.setupCalorimeter('BeamCal')

    logging.info("#  Now build the physics list:")
    phys = geant4.setupPhysics('QGSP_BERT')
    ph = geant4.addPhysics('Geant4PhysicsList/Myphysics')
    #ph.addParticleConstructor('G4BosonConstructor')
    #ph.addParticleConstructor('G4LeptonConstructor')
    #ph.addParticleProcess('e[+-]','G4eMultipleScattering',-1,1,1)
    #ph.addPhysicsConstructor('G4OpticalPhysics')

    # Add special particle types from specialized physics constructor
    part = geant4.addPhysics('Geant4ExtraParticles/ExtraParticles')
    part.pdgfile = 'checkout/DDG4/examples/particle.tbl'

    # Add global range cut
    rg = geant4.addPhysics('Geant4DefaultRangeCut/GlobalRangeCut')
    rg.RangeCut = 0.7 * mm

    phys.dump()

    kernel.configure()
    kernel.initialize()

    #DDG4.setPrintLevel(Output.DEBUG)
    kernel.run()
    kernel.terminate()
Beispiel #29
0
def setupWorker():
  k = DDG4.Kernel()
  kernel = k.worker()
  logger.info('PYTHON: +++ Creating Geant4 worker thread ....')

  # Configure Run actions
  run1 = DDG4.RunAction(kernel, 'Geant4TestRunAction/RunInit')
  run1.Property_int = 12345
  run1.Property_double = -5e15 * keV
  run1.Property_string = 'Startrun: Hello_2'
  logger.info("%s %f %d", run1.Property_string, run1.Property_double, run1.Property_int)
  run1.enableUI()
  kernel.registerGlobalAction(run1)
  kernel.runAction().adopt(run1)

  # Configure Event actions
  prt = DDG4.EventAction(kernel, 'Geant4ParticlePrint/ParticlePrint')
  prt.OutputLevel = Output.DEBUG
  prt.OutputType = 3  # Print both: table and tree
  kernel.eventAction().adopt(prt)

  # Configure Event actions
  prt = DDG4.EventAction(kernel, 'Geant4SurfaceTest/SurfaceTest')
  prt.OutputLevel = Output.INFO
  kernel.eventAction().adopt(prt)

  # Configure I/O
  evt_lcio = geant4.setupLCIOOutput('LcioOutput', 'CLICSiD_' + time.strftime('%Y-%m-%d_%H-%M'))
  evt_lcio.OutputLevel = Output.DEBUG

  # evt_root = geant4.setupROOTOutput('RootOutput','CLICSiD_'+time.strftime('%Y-%m-%d_%H-%M'))
  # generator_output_level = Output.INFO

  gen = DDG4.GeneratorAction(kernel, "Geant4GeneratorActionInit/GenerationInit")
  kernel.generatorAction().adopt(gen)

  # VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
  """
  Generation of isotrope tracks of a given multiplicity with overlay:
  """
  # First particle generator: pi+
  gen = DDG4.GeneratorAction(kernel, "Geant4IsotropeGenerator/IsotropPi+")
  gen.Particle = 'pi+'
  gen.Energy = 100 * GeV
  gen.Multiplicity = 2
  gen.Mask = 1
  gen.OutputLevel = Output.DEBUG
  gen.PhiMin = 0
  gen.PhiMax = 0
  gen.ThetaMin = 1.61
  gen.ThetaMax = 1.61

  kernel.generatorAction().adopt(gen)
  # Install vertex smearing for this interaction
  gen = DDG4.GeneratorAction(kernel, "Geant4InteractionVertexSmear/SmearPi+")
  gen.Mask = 1
  gen.Offset = (20 * mm, 10 * mm, 10 * mm, 0 * ns)
  gen.Sigma = (4 * mm, 1 * mm, 1 * mm, 0 * ns)
  kernel.generatorAction().adopt(gen)
  """
  # Second particle generator: e-
  gen = DDG4.GeneratorAction(kernel,"Geant4IsotropeGenerator/IsotropE-");
  gen.Particle = 'e-'
  gen.Energy = 25 * GeV
  gen.Multiplicity = 3
  gen.Mask = 2
  gen.OutputLevel = Output.DEBUG
  kernel.generatorAction().adopt(gen)
  # Install vertex smearing for this interaction
  gen = DDG4.GeneratorAction(kernel,"Geant4InteractionVertexSmear/SmearE-");
  gen.Mask = 2
  gen.Offset = (-20*mm, -10*mm, -10*mm, 0*ns)
  gen.Sigma = (12*mm, 8*mm, 8*mm, 0*ns)
  kernel.generatorAction().adopt(gen)
  #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  """
  # Merge all existing interaction records
  gen = DDG4.GeneratorAction(kernel, "Geant4InteractionMerger/InteractionMerger")
  gen.OutputLevel = 4  # generator_output_level
  gen.enableUI()
  kernel.generatorAction().adopt(gen)

  # Finally generate Geant4 primaries
  gen = DDG4.GeneratorAction(kernel, "Geant4PrimaryHandler/PrimaryHandler")
  gen.OutputLevel = Output.DEBUG  # generator_output_level
  gen.enableUI()
  kernel.generatorAction().adopt(gen)

  # And handle the simulation particles.
  part = DDG4.GeneratorAction(kernel, "Geant4ParticleHandler/ParticleHandler")
  kernel.generatorAction().adopt(part)
  # part.SaveProcesses = ['conv','Decay']
  part.SaveProcesses = ['Decay']
  part.MinimalKineticEnergy = 100 * MeV
  part.OutputLevel = Output.DEBUG  # generator_output_level
  part.enableUI()
  user = DDG4.Action(kernel, "Geant4TCUserParticleHandler/UserParticleHandler")
  user.TrackingVolume_Zmax = DDG4.EcalEndcap_zmin
  user.TrackingVolume_Rmax = DDG4.EcalBarrel_rmin
  user.enableUI()
  part.adopt(user)
  logger.info('PYTHON: +++ Geant4 worker thread configured successfully....')
  return 1
Beispiel #30
0
def run():
  global geant4
  kernel = DDG4.Kernel()
  description = kernel.detectorDescription()
  install_dir = os.environ['DD4hepINSTALL']
  kernel.loadGeometry(str("file:" + install_dir + "/DDDetectors/compact/SiD_Markus.xml"))
  DDG4.importConstants(description)
  DDG4.Core.setPrintLevel(Output.DEBUG)
  DDG4.Core.setPrintFormat(str("%-32s %6s %s"))

  kernel.NumberOfThreads = 1
  geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerWeightedAction')
  geant4.printDetectors()
  # Configure UI
  geant4.setupCshUI()

  # Geant4 user initialization action
  geant4.addUserInitialization(worker=setupWorker, master=setupMaster)

  # Configure G4 geometry setup
  seq, act = geant4.addDetectorConstruction("Geant4DetectorGeometryConstruction/ConstructGeo")

  # Configure G4 magnetic field tracking
  self.setupTrackingFieldMT()  # noqa: F821

  seq, act = geant4.addDetectorConstruction("Geant4PythonDetectorConstruction/DummyDet",
                                            geometry=dummy_geom,
                                            sensitives=dummy_sd)
  # Configure G4 sensitive detectors
  seq, act = geant4.addDetectorConstruction("Geant4PythonDetectorConstruction/SetupSD",
                                            sensitives=setupSensitives)

  # Configure G4 sensitive detectors
  seq, act = geant4.addDetectorConstruction("Geant4DetectorSensitivesConstruction/ConstructSD",
                                            allow_threads=True)

  # Setup random generator
  rndm = DDG4.Action(kernel, 'Geant4Random/Random')
  rndm.Seed = 987654321
  rndm.initialize()

  # Setup global filters fur use in sensntive detectors
  f1 = DDG4.Filter(kernel, 'GeantinoRejectFilter/GeantinoRejector')
  kernel.registerGlobalFilter(f1)

  # seq,act = geant4.setupTracker('SiTrackerBarrel')
  # seq,act = geant4.setupTracker('SiTrackerEndcap')
  # seq,act = geant4.setupTracker('SiTrackerForward')
  # Now the calorimeters
  # seq,act = geant4.setupCalorimeter('EcalBarrel')
  # seq,act = geant4.setupCalorimeter('EcalEndcap')
  # seq,act = geant4.setupCalorimeter('HcalBarrel')
  # seq,act = geant4.setupCalorimeter('HcalEndcap')
  # seq,act = geant4.setupCalorimeter('HcalPlug')
  # seq,act = geant4.setupCalorimeter('MuonBarrel')
  # seq,act = geant4.setupCalorimeter('MuonEndcap')
  # seq,act = geant4.setupCalorimeter('LumiCal')
  # seq,act = geant4.setupCalorimeter('BeamCal')

  # Now build the physics list:
  seq = geant4.setupPhysics('QGSP_BERT')
  phys = DDG4.PhysicsList(geant4.master(), 'Geant4PhysicsList/MyPhysics')
  part = DDG4.Action(geant4.master(), 'Geant4ExtraParticles/extraparts')
  part.pdgfile = 'checkout/DDG4/examples/particle.tbl'
  phys.adoptPhysicsConstructor(part.get())
  seq.add(phys)

  geant4.run()

  # kernel.configure()
  # kernel.initialize()

  # DDG4.setPrintLevel(Output.DEBUG)
  # kernel.run()
  # kernel.terminate()
  return 1