Esempio n. 1
0
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()
Esempio n. 2
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()
Esempio n. 3
0
def run():
  kernel = DDG4.Kernel()
  install_dir = os.environ['DD4hepINSTALL']
  kernel.loadGeometry("file:"+install_dir+"/examples/ClientTests/compact/SiliconBlock.xml")

  DDG4.importConstants(kernel.lcdd(),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
  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 I/O
  evt_root = geant4.setupROOTOutput('RootOutput','SiliconBlock_'+time.strftime('%Y-%m-%d_%H-%M'))

  # Setup particle gun
  gun = geant4.setupGun("Gun",particle='mu-',energy=20*GeV,multiplicity=1)
  gun.output_level = 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('SiliconBlockUpper')
  geant4.setupTracker('SiliconBlockDown')

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

  geant4.execute()
Esempio n. 4
0
def run():
  kernel = DDG4.Kernel()
  lcdd = kernel.lcdd()
  install_dir = os.environ['DD4hepINSTALL']
  DDG4.Core.setPrintFormat("%-32s %6s %s")
  kernel.loadGeometry("file:"+install_dir+"/DDDetectors/compact/SiD.xml")
  DDG4.importConstants(lcdd)

  kernel.NumberOfThreads = 3
  geant4 = DDG4.Geant4(kernel,tracker='Geant4TrackerCombineAction')
  print "#  Configure UI"
  geant4.setupCshUI()

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

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

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

  print "#  Configure G4 magnetic field tracking"
  seq,field = geant4.addDetectorConstruction("Geant4FieldTrackingConstruction/MagFieldTrackingSetup")
  field.stepper            = "HelixGeant4Runge"
  field.equation           = "Mag_UsualEqRhs"
  field.eps_min            = 5e-05 * mm
  field.eps_max            = 0.001 * mm
  field.min_chord_step     = 0.01 * mm
  field.delta_chord        = 0.25 * mm
  field.delta_intersection = 1e-05 * mm
  field.delta_one_step     = 0.001 * mm
  print '+++++> ',field.name,'-> stepper  = ',field.stepper
  print '+++++> ',field.name,'-> equation = ',field.equation
  print '+++++> ',field.name,'-> eps_min  = ',field.eps_min
  print '+++++> ',field.name,'-> eps_max  = ',field.eps_max
  print '+++++> ',field.name,'-> delta_one_step = ',field.delta_one_step

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

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

  geant4.run()
Esempio n. 5
0
def run():
  kernel = DDG4.Kernel()
  lcdd = kernel.lcdd()
  
  install_dir = os.environ['DD4hepINSTALL']
  kernel.loadGeometry("file:"+install_dir+"/examples/ClientTests/compact/LheD_tracker.xml")

  DDG4.importConstants(lcdd,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
  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
  evt_root = 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('G4Geantino')
  ph.addParticleConstructor('G4BosonConstructor')
  ph.enableUI()
  phys.adopt(ph)
  phys.dump()

  kernel.configure()
  kernel.initialize()

  #DDG4.setPrintLevel(Output.DEBUG)
  kernel.run()
  print 'End of run. Terminating .......'
  kernel.terminate()
Esempio n. 6
0
def run():
  import logging, LHeD, DDG4
  from DDG4 import OutputLevel as Output
  
  logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG)
  lhed = LHeD.LHeD()
  geant4 = lhed.geant4
  kernel = lhed.kernel
  lhed.loadGeometry()
  geant4.printDetectors()
  kernel.UI = "UI"
  geant4.setupCshUI()
  lhed.setupField(quiet=False)
  DDG4.importConstants(kernel.detectorDescription(),debug=False)

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

  gen = DDG4.GeneratorAction(kernel,"Geant4GeneratorActionInit/GenerationInit")
  kernel.generatorAction().adopt(gen)
  logging.info("#  First particle generator: gun")
  gun = DDG4.GeneratorAction(kernel,"Geant4GeneratorWrapper/Gun");
  gun.Uses     = 'G4ParticleGun'
  gun.Mask     = 1
  kernel.generatorAction().adopt(gun)

  # Merge all existing interaction records
  merger = DDG4.GeneratorAction(kernel,"Geant4InteractionMerger/InteractionMerger")
  merger.enableUI()
  kernel.generatorAction().adopt(merger)


  # And handle the simulation particles.
  part = DDG4.GeneratorAction(kernel,"Geant4ParticleHandler/ParticleHandler")
  kernel.generatorAction().adopt(part)
  part.OutputLevel = Output.INFO
  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)

  lhed.setupDetectors()
  lhed.setupPhysics('QGSP_BERT')
  lhed.test_config()
  gun.generator()  # Instantiate gun to be able to set properties from G4 prompt
  kernel.run()
  kernel.terminate()
Esempio n. 7
0
def run():
    import CLICSid, DDG4
    from DDG4 import OutputLevel as Output

    sid = CLICSid.CLICSid()
    geant4 = sid.geant4
    kernel = sid.kernel
    sid.loadGeometry()
    geant4.printDetectors()
    kernel.UI = "UI"
    geant4.setupCshUI()
    sid.setupField(quiet=False)
    DDG4.importConstants(kernel.lcdd(), debug=False)

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

    gen = DDG4.GeneratorAction(kernel, "Geant4GeneratorActionInit/GenerationInit")
    kernel.generatorAction().adopt(gen)
    print "#  First particle generator: gun"
    gun = DDG4.GeneratorAction(kernel, "Geant4GeneratorWrapper/Gun")
    gun.Uses = "G4ParticleGun"
    gun.Mask = 1
    kernel.generatorAction().adopt(gun)

    # Merge all existing interaction records
    merger = DDG4.GeneratorAction(kernel, "Geant4InteractionMerger/InteractionMerger")
    merger.enableUI()
    kernel.generatorAction().adopt(merger)

    # And handle the simulation particles.
    part = DDG4.GeneratorAction(kernel, "Geant4ParticleHandler/ParticleHandler")
    kernel.generatorAction().adopt(part)
    part.OutputLevel = Output.INFO
    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)

    sid.setupDetectors()
    sid.setupPhysics("QGSP_BERT")
    sid.test_config()
    gun.generator()  # Instantiate gun to be able to set properties from G4 prompt
    kernel.run()
    kernel.terminate()
Esempio n. 8
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|"+input_file
  gen.OutputLevel = Output.DEBUG
  gen.HaveAbort = False
  prim_vtx = DDG4.std_vector('dd4hep::sim::Geant4Vertex*')()
  parts = gen.new_particles()
  ret = 1
  evtid=0
  while ret:
    try:
      ret = gen.readParticles(evtid,prim_vtx,parts)
      evtid = evtid + 1
    except Exception,X:
      logging.info( '\nException: readParticles: %s',str(X))
      ret = None
    if ret:
      for v in prim_vtx:
        logging.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:
        logging.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:
      logging.info( '*** End of recordset or read failure.....')
    logging.info( 132*'*')
Esempio n. 9
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))
  geant4.setupTracker('SiliconBlockUpper')
  geant4.setupTracker('SiliconBlockDown')
  # 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()
Esempio n. 10
0
def run():
  global geant4
  kernel = DDG4.Kernel()
  lcdd = kernel.lcdd()
  install_dir = os.environ['DD4hepINSTALL']
  kernel.loadGeometry("file:"+install_dir+"/DDDetectors/compact/SiD_Markus.xml")
  DDG4.importConstants(lcdd)
  DDG4.Core.setPrintLevel(Output.DEBUG)
  DDG4.Core.setPrintFormat("%-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
  seq,fld = geant4.addDetectorConstruction("Geant4FieldTrackingConstruction/MagFieldTrackingSetup")
  fld.stepper            = "HelixGeant4Runge"
  fld.equation           = "Mag_UsualEqRhs"
  fld.eps_min            = 5e-05 * mm
  fld.eps_max            = 0.001 * mm
  fld.min_chord_step     = 0.01 * mm
  fld.delta_chord        = 0.25 * mm
  fld.delta_intersection = 1e-05 * mm
  fld.delta_one_step     = 0.001 * mm
  print '+++++> ',fld.name,'-> stepper  = ',fld.stepper
  print '+++++> ',fld.name,'-> equation = ',fld.equation
  print '+++++> ',fld.name,'-> eps_min  = ',fld.eps_min
  print '+++++> ',fld.name,'-> eps_max  = ',fld.eps_max
  print '+++++> ',fld.name,'-> delta_one_step = ',fld.delta_one_step

  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
Esempio n. 11
0
def run():
    kernel = DDG4.Kernel()
    lcdd = kernel.lcdd()
    install_dir = os.environ['DD4hepINSTALL']
    DDG4.Core.setPrintFormat("%-32s %6s %s")
    kernel.loadGeometry("file:" + install_dir + "/DDDetectors/compact/SiD.xml")
    DDG4.importConstants(lcdd)

    kernel.NumberOfThreads = 3
    geant4 = DDG4.Geant4(kernel, tracker='Geant4TrackerCombineAction')
    print "#  Configure UI"
    geant4.setupCshUI()

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

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

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

    print "#  Configure G4 magnetic field tracking"
    seq, field = geant4.addDetectorConstruction(
        "Geant4FieldTrackingConstruction/MagFieldTrackingSetup")
    field.stepper = "HelixGeant4Runge"
    field.equation = "Mag_UsualEqRhs"
    field.eps_min = 5e-05 * mm
    field.eps_max = 0.001 * mm
    field.min_chord_step = 0.01 * mm
    field.delta_chord = 0.25 * mm
    field.delta_intersection = 1e-05 * mm
    field.delta_one_step = 0.001 * mm
    print '+++++> ', field.name, '-> stepper  = ', field.stepper
    print '+++++> ', field.name, '-> equation = ', field.equation
    print '+++++> ', field.name, '-> eps_min  = ', field.eps_min
    print '+++++> ', field.name, '-> eps_max  = ', field.eps_max
    print '+++++> ', field.name, '-> delta_one_step = ', field.delta_one_step

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

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

    geant4.run()
Esempio n. 12
0
def run():
  kernel = DDG4.Kernel()
  install_dir = os.environ['DD4hepExamplesINSTALL']
  kernel.loadGeometry("file:"+install_dir+"/examples/DDCodex/compact/CODEX-b-alone.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
  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','CodexB_'+time.strftime('%Y-%m-%d_%H-%M'))

  # Setup particle gun
  
  #gun = geant4.setupGun("Gun",particle='pi+',
  gun = geant4.setupGun("Gun",particle='mu-',
                        energy=1000*GeV,
                        multiplicity=1,
                        isotrop=False,Standalone=True,
                        direction=(1,0,0),
                        #direction=(0.866025,0,0.5),
                        position='(0,0,12650)')
                        #position='(0,0,0)')
  setattr(gun,'print',True)
  """
  gen =  DDG4.GeneratorAction(kernel,"Geant4InputAction/Input")
  ##gen.Input = "Geant4EventReaderHepMC|"+ "/afs/cern.ch/work/j/jongho/Project_DD4hep/Test/DD4hep/examples/DDG4/data/hepmc_geant4.dat"
  gen.Input = "Geant4EventReaderHepMC|"+ "/afs/cern.ch/work/j/jongho/Project_DD4hep/Test/DD4hep/DDG4/examples/MinBias_HepMC.txt"
  gen.MomentumScale = 1.0
  gen.Mask = 1
  geant4.buildInputStage([gen],output_level=Output.DEBUG)
  """

  seq,action = geant4.setupTracker('CODEXb')
  #action.OutputLevel = Output.ERROR
  #seq,action = geant4.setupTracker('Shield')
  #action.OutputLevel = Output.ERROR

  # And handle the simulation particles.
  part = DDG4.GeneratorAction(kernel,"Geant4ParticleHandler/ParticleHandler")
  kernel.generatorAction().adopt(part)
  part.OutputLevel = Output.INFO
  part.enableUI()
  user = DDG4.Action(kernel,"Geant4TCUserParticleHandler/UserParticleHandler")
  user.TrackingVolume_Zmax = 999999.*m  # Something big. All is a tracker
  user.TrackingVolume_Rmax = 999999.*m
  user.enableUI()
  part.adopt(user)


  # Now build the physics list:
  ##phys = kernel.physicsList()
  phys = geant4.setupPhysics('QGSP_BERT')
  ph = DDG4.PhysicsList(kernel,'Geant4PhysicsList/Myphysics')
  ph.addParticleConstructor('G4LeptonConstructor')
  ph.addParticleConstructor('G4BaryonConstructor')
  ph.addParticleConstructor('G4MesonConstructor')
  ph.addParticleConstructor('G4BosonConstructor')
  ph.enableUI()
  phys.adopt(ph)
  phys.enableUI()
  phys.dump()
  # run
  kernel.configure()
  kernel.initialize()
  kernel.run()
  kernel.terminate()
Esempio n. 13
0
def run():
  kernel = DDG4.Kernel()
  description = kernel.detectorDescription()
  install_dir = os.environ['DD4hepINSTALL']
  example_dir = install_dir+'/examples/DDG4/examples';
  kernel.loadGeometry("file:"+install_dir+"/DDDetectors/compact/SiD_Markus.xml")
  ##kernel.loadXML("file:"+example_dir+"/DDG4_field.xml")
  DDG4.importConstants(description,debug=False)
  geant4 = DDG4.Geant4(kernel,tracker='Geant4TrackerCombineAction')
  geant4.printDetectors()
  # Configure UI
  #geant4.setupCshUI(macro='run.mac',ui=None)
  geant4.setupCshUI()
  geant4.setupTrackingField()

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

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

  generator_output_level = Output.WARNING

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

  prim = DDG4.GeneratorAction(kernel,"Geant4GeneratorActionInit/GenerationInit")
  #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
  """
  Generation of primary particles from LCIO input files
  """
  """
  # First particle file reader
  gen = DDG4.GeneratorAction(kernel,"LCIOInputAction/LCIO1");
  #gen.Input = "LCIOStdHepReader|/home/frankm/SW/data/e2e2nn_gen_1343_1.stdhep"
  #gen.Input = "LCIOStdHepReader|/home/frankm/SW/data/qq_gen_128_999.stdhep"
  #gen.Input = "LCIOStdHepReader|/home/frankm/SW/data/smuonLR_PointK_3TeV_BS_noBkg_run0001.stdhep"
  #gen.Input = "LCIOStdHepReader|/home/frankm/SW/data/bbbb_3TeV.stdhep"
  #gen.Input = "LCIOFileReader|/home/frankm/SW/data/mcparticles_pi-_5GeV.slcio"
  #gen.Input = "LCIOFileReader|/home/frankm/SW/data/mcparticles_mu-_5GeV.slcio"
  #gen.Input = "LCIOFileReader|/home/frankm/SW/data/bbbb_3TeV.slcio"
  #gen.Input = "LCIOStdHepReader|/home/frankm/SW/data/FCC-eh.stdhep"
  #gen.Input = "Geant4EventReaderHepMC|/home/frankm/SW/data/data.hepmc.txt"
  #gen.Input = "Geant4EventReaderHepMC|/home/frankm/SW/data/sherpa-2.1.1_zjets.hepmc2g"
  gen.Input = "LCIOFileReader|/afs/cern.ch/user/n/nikiforo/public/Markus/muons.slcio"
  #gen.Input = "LCIOFileReader|/afs/cern.ch/user/n/nikiforo/public/Markus/geantinos.slcio"
  gen.MomentumScale = 1.0
  gen.Mask = 1
  geant4.buildInputStage([gen],output_level=generator_output_level)
  """
  #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  gen = geant4.setupGun("Gun",particle='mu+',energy=20*GeV,position=(0*mm,0*mm,0*cm),multiplicity=3)
  gen.isotrop = True
  gen.direction = (1,0,0)
  gen.OutputLevel = generator_output_level
  gen.Standalone = False
  """
  # 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.INFO #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)
  """
  geant4.buildInputStage([prim,gen],Output.ERROR)

  """
  """

  """
  rdr = DDG4.GeneratorAction(kernel,"LcioGeneratorAction/Reader")
  rdr.zSpread = 0.0
  rdr.lorentzAngle = 0.0
  rdr.OutputLevel = DDG4.OutputLevel.INFO
  rdr.Input = "LcioEventReader|test.data"
  rdr.enableUI()
  kernel.generatorAction().adopt(rdr)
  """


  # First the tracking detectors
  seq,act = geant4.setupTracker('SiTrackerBarrel')
  seq,act = geant4.setupTracker('SiTrackerEndcap')
  seq,act = geant4.setupTracker('SiTrackerForward')
  """
  # Now the calorimeters
  seq,act = geant4.setupTracker('SiVertexBarrel')
  seq,act = geant4.setupTracker('SiVertexEndcap')

  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')
  """
  """
  scan = DDG4.SteppingAction(kernel,'Geant4MaterialScanner/MaterialScan')
  kernel.steppingAction().adopt(scan)
  """


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

  kernel.configure()
  kernel.initialize()

  #DDG4.setPrintLevel(Output.DEBUG)
  kernel.run()
  logging.info('End of run. Terminating .......')
  kernel.terminate()
Esempio n. 14
0
def run():
  kernel = DDG4.Kernel()
  lcdd = kernel.lcdd()
  install_dir = os.environ['DD4hepINSTALL']
  kernel.loadGeometry("file:"+install_dir+"/DDDetectors/compact/SiD.xml")
  DDG4.importConstants(lcdd)

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

  print "#  Configure G4 magnetic field tracking"
  field = geant4.addConfig('Geant4FieldTrackingSetupAction/MagFieldTrackingSetup')
  field.stepper            = "HelixGeant4Runge"
  field.equation           = "Mag_UsualEqRhs"
  field.eps_min            = 5e-05 * mm
  field.eps_max            = 0.001 * mm
  field.min_chord_step     = 0.01 * mm
  field.delta_chord        = 0.25 * mm
  field.delta_intersection = 1e-05 * mm
  field.delta_one_step     = 0.001 * mm
  print '+++++> ',field.name,'-> stepper  = ',field.stepper
  print '+++++> ',field.name,'-> equation = ',field.equation
  print '+++++> ',field.name,'-> eps_min  = ',field.eps_min
  print '+++++> ',field.name,'-> eps_max  = ',field.eps_max
  print '+++++> ',field.name,'-> delta_one_step = ',field.delta_one_step

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

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

  print "#  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)

  print """
  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
  print """
  Generation of isotrope tracks of a given multiplicity with overlay:
  """
  print "#  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)
  print "#  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)

  print "#  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)
  print "  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)
  #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

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

  print "#  ....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)

  print "#  Setup global filters fur use in sensntive 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)

  print "#  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')
  print "#  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')

  print "#  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()
Esempio n. 15
0
def setupWorker(geant4):
    kernel = geant4.kernel()
    print '#PYTHON: +++ Creating Geant4 worker thread ....'
    print "#PYTHON:  Configure Run actions"
    run1 = DDG4.RunAction(kernel, 'Geant4TestRunAction/RunInit', shared=True)
    run1.Property_int = int(12345)
    run1.Property_double = -5e15 * keV
    run1.Property_string = 'Startrun: Hello_2'
    print run1.Property_string, run1.Property_double, run1.Property_int
    run1.enableUI()
    kernel.runAction().adopt(run1)

    print "#PYTHON:  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)

    print "\n#PYTHON:  Configure I/O\n"
    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
    print "#PYTHON:\n#PYTHON:  Generation of isotrope tracks of a given multiplicity with overlay:\n#PYTHON:"
    print "#PYTHON:  First particle generator: pi+"
    gen = DDG4.GeneratorAction(kernel, "Geant4IsotropeGenerator/IsotropPi+")
    gen.Mask = 1
    gen.Particle = 'pi+'
    gen.Energy = 20 * GeV
    gen.Multiplicity = 2
    kernel.generatorAction().adopt(gen)
    print "#PYTHON:  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)

    print "#PYTHON:  Second particle generator: e-"
    gen = DDG4.GeneratorAction(kernel, "Geant4IsotropeGenerator/IsotropE-")
    gen.Mask = 2
    gen.Particle = 'e-'
    gen.Energy = 15 * GeV
    gen.Multiplicity = 3
    kernel.generatorAction().adopt(gen)
    print "#PYTHON:  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)
    #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

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

    print "#PYTHON:  ....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)
    print '#PYTHON: +++ Geant4 worker thread configured successfully....'
    return 1
Esempio n. 16
0
def run():

  kernel = DDG4.Kernel()

  try:
    install_dir = os.environ['DD4hepINSTALL']
#    lcgeo_dir   = os.environ['LCGEO']
  except (KeyError):
    print " please set the environment variable  DD4hepINSTALL  "
    print "        to your DD4hep installation path ! "
    exit(1)

#  example_dir = lcgeo_dir+'/example';

  kernel.loadGeometry("file:"+ compactFile )

  lcdd = kernel.lcdd() 

  DDG4.importConstants( lcdd ) 

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

  simple = DDG4.Geant4( kernel, tracker='Geant4TrackerAction',calo='Geant4CalorimeterAction')
## Apply BirksLaw effect for Scintillator Calorimeter by using 'Geant4ScintillatorCalorimeterAction'.
#  simple = DDG4.Geant4( kernel, tracker='Geant4TrackerAction',calo='Geant4ScintillatorCalorimeterAction')

  simple.printDetectors()

  # Configure UI
  #simple.setupCshUI()
  simple.setupUI()

  kernel.UI=""
  kernel.NumEvents=numberOfEvents 

#-----------------------------------------------------------------------------------
#  setup the magnetic field:

  field = simple.addConfig('Geant4FieldTrackingSetupAction/MagFieldTrackingSetup')
  field.stepper            = cfgDict['field.stepper']
  field.equation           = cfgDict['field.equation']          
  field.eps_min            = cfgDict['field.eps_min']           
  field.eps_max            = cfgDict['field.eps_max']           
  field.min_chord_step     = cfgDict['field.min_chord_step']    
  field.delta_chord        = cfgDict['field.delta_chord']       
  field.delta_intersection = cfgDict['field.delta_intersection']
  field.delta_one_step     = cfgDict['field.delta_one_step']    

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

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

  # Configure I/O 
  evt_lcio = simple.setupLCIOOutput('LcioOutput', lcioOutputFile )
  
  gen = DDG4.GeneratorAction(kernel,"LCIOInputAction/LCIO1")

  if( lcioInputFile[ (len(lcioInputFile)-6 ) : ] == ".slcio" ):
    gen.Input="LCIOFileReader|"+lcioInputFile
  else:
    gen.Input="LCIOStdHepReader|"+lcioInputFile
    
  simple.buildInputStage( [gen] , output_level=DDG4.OutputLevel.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 = Output.INFO #generator_output_level
  part.enableUI()
  user = DDG4.Action(kernel,"Geant4TCUserParticleHandler/UserParticleHandler")
  user.TrackingVolume_Zmax = DDG4.tracker_region_zmax
  user.TrackingVolume_Rmax = DDG4.tracker_region_rmax
#  user.enableUI()
  part.adopt(user)

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

  # Setup global filters fur use in sensintive detectors

  f1 = DDG4.Filter(kernel,'GeantinoRejectFilter/GeantinoRejector')
  kernel.registerGlobalFilter(f1)

  f4 = DDG4.Filter(kernel,'EnergyDepositMinimumCut')
  f4.Cut = 1.*keV
  kernel.registerGlobalFilter(f4)


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

  trk,cal = getDetectorLists( lcdd )

# ---- add the trackers:
# fixme: this assumes the same filters for all trackers ...

  for t in trk:
    print 'simple.setupTracker(  ' , t , ')'
    seq,act = simple.setupTracker( t )
    seq.add(f1)
    act.HitCreationMode = 2

# ---- add the calorimeters:

  for c in cal:
    print 'simple.setupCalorimeter(  ' , c , ')'
    seq,act = simple.setupCalorimeter( c )


#=================================================================================
  # Now build the physics list:
  phys = simple.setupPhysics( physicsList )

  #fg: do we need these really ?
  #fg:  ph = DDG4.PhysicsList(kernel,'Geant4PhysicsList/Myphysics')
  #fg:  ph.addParticleConstructor('G4BosonConstructor')
  #fg:  ph.addParticleConstructor('G4LeptonConstructor')
  #fg:  ph.addParticleProcess('e[+-]','G4eMultipleScattering',-1,1,1)
  #fg:  ph.addPhysicsConstructor('G4OpticalPhysics')
  #fg:  ph.enableUI()
  #fg:  phys.add(ph)
  #fg:  phys.dump()


  kernel.configure()
  kernel.initialize()

  #DDG4.setPrintLevel(Output.DEBUG)
  kernel.run()
  kernel.terminate()
Esempio n. 17
0
def run():
  import LHeD, DDG4, os, SystemOfUnits
  from DDG4 import OutputLevel as Output
  
  lhed = LHeD.LHeD()
  geant4 = lhed.geant4
  kernel = lhed.kernel
  lhed.loadGeometry()
  geant4.printDetectors()
  kernel.UI = "UI"
  geant4.setupCshUI()
  lhed.setupField(quiet=False)
  DDG4.importConstants(kernel.detectorDescription(),debug=False)

  dd4hep_dir = os.environ['DD4hep']
  kernel.loadXML("file:"+dd4hep_dir+"/examples/LHeD/scripts/DDG4_field.xml")

  geant4 = DDG4.Geant4(kernel,tracker='Geant4TrackerCombineAction')
  geant4.printDetectors()

  # Configure G4 magnetic field tracking
  field = geant4.addConfig('Geant4FieldTrackingSetupAction/MagFieldTrackingSetup')
  field.stepper            = "HelixGeant4Runge"
  field.equation           = "Mag_UsualEqRhs"
  field.eps_min            = 5e-0520*SystemOfUnits.mm
  field.eps_max            = 0.001*SystemOfUnits.mm
  field.min_chord_step     = 0.01*SystemOfUnits.mm
  field.delta_chord        = 0.25*SystemOfUnits.mm
  field.delta_intersection = 1e-05*SystemOfUnits.mm
  field.delta_one_step     = 0.001*SystemOfUnits.mm
  print '+++++> ',field.name,'-> stepper  = ',field.stepper
  print '+++++> ',field.name,'-> equation = ',field.equation
  print '+++++> ',field.name,'-> eps_min  = ',field.eps_min
  print '+++++> ',field.name,'-> eps_max  = ',field.eps_max
  print '+++++> ',field.name,'-> delta_one_step = ',field.delta_one_step


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

  # Configure Run actions
  run1 = DDG4.RunAction(kernel,'Geant4TestRunAction/RunInit')
  """
  run1.Property_int    = 12345
  run1.Property_double = -5e15*keV
  run1.Property_string = 'Startrun: Hello_LHeD'
  print 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.INFO
  prt.OutputType  = 3 # Print both: table and tree
  kernel.eventAction().adopt(prt)

  # Configure I/O
  #evt_lcio = geant4.setupLCIOOutput('LcioOutput','Lhe_dip_sol_circ-higgs-bb')
  #evt_lcio.OutputLevel = Output.ERROR
  
  evt_root = geant4.setupROOTOutput('RootOutput','Lhe_dip_sol_circ-higgs-bb')
  evt_root.OutputLevel = Output.INFO

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

  """
  # First particle generator: e-  non-isotropic generation using Gun: 
  gun = DDG4.GeneratorAction(kernel,"Geant4ParticleGenerator/Gun");
  gun.Particle = 'e-'
  gun.Energy = 60 * GeV
  gun.Multiplicity = 1
  gun.Position = (0.*mm,0.*mm,0.*mm)
  gun.Direction = (1.,0.,0.)
  gun.Mask = 2
  gun.enableUI()
  kernel.generatorAction().adopt(gun)
  # Install vertex smearing for this primary e-
  gen = DDG4.GeneratorAction(kernel,"Geant4InteractionVertexSmear/SmearE-");
  gen.Mask = 1
  gen.Sigma = (0*mm, 0*mm, 0*mm, 0*ns)
  kernel.generatorAction().adopt(gen)
  """

  #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
  """
  Generation of isotrope tracks of a given multiplicity with overlay:
  """
  #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
  """
  # First particle generator: pi+
  gen = DDG4.GeneratorAction(kernel,"Geant4IsotropeGenerator/IsotropPi+");
  gen.Particle = 'pi+'
  gen.Energy = 200*GeV
  gen.Multiplicity = 1
  gen.Mask = 1
  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 = 60 * GeV
  gen.Multiplicity = 2
  gen.Mask = 2
  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)
  """
  #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 


  #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
  """
  Generation of primary particles from LCIO input files
  """
  #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
    
  # First particle file reader
  gen = DDG4.GeneratorAction(kernel,"LCIOInputAction/LCIO1");
  # gen.Input = "LCIOStdHepReader|/afs/.cern.ch/project/lhec/software/aidasoft/DD4hep/DD4hep/files/NC_bb_tag_2_pythia_events.hep"
  #gen.Input = "LCIOStdHepReader|/opt/DD4hep/files/NC_bb_tag_2_pythia_events.hep"
  gen.Input = "LCIOStdHepReader|/opt/DD4hep/files/lhec_for_peter/tag_2_pythia_events.hep"
  # gen.Input = "LCIOStdHepReader|/opt/DD4hep/files/single-top-tag_1_pythia_events.hep"
  
  # gen.Input = "Geant4EventReaderHepMC|/opt/DD4hep/files/ePb-q2-0-i.mc2"
  # gen.Input = "LCIOStdHepReader|/opt/DD4hep/files/single-top-tag_1_pythia_events.hep"
  # gen.Input = "LCIOStdHepReader|/opt/DD4hep/files/root.hep"

  gen.OutputLevel = 2 # generator_output_level
  gen.MomentumScale = 1.0
  gen.Mask = 1
  gen.enableUI()
  kernel.generatorAction().adopt(gen)

  # Install vertex smearing for this interaction
  gen = DDG4.GeneratorAction(kernel,"Geant4InteractionVertexSmear/Smear1");  
  gen.OutputLevel = 4 #generator_output_level
  gen.Mask = 1
  gen.Offset = (-20*SystemOfUnits.mm, -10*SystemOfUnits.mm, -10*SystemOfUnits.mm, 0*SystemOfUnits.ns)
  gen.Sigma = (12*SystemOfUnits.mm, 8*SystemOfUnits.mm, 8*SystemOfUnits.mm, 0*SystemOfUnits.ns)
  gen.enableUI()
  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 = 4 #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 = 10*SystemOfUnits.MeV
  part.OutputLevel = 5 # generator_output_level
  part.enableUI()

  user = DDG4.Action(kernel,"Geant4TCUserParticleHandler/UserParticleHandler")
  user.TrackingVolume_Zmax = DDG4.EcalEndcap_zmin_fwd
  user.TrackingVolume_Rmax = DDG4.EcalBarrel_rmin
  user.enableUI()
  part.adopt(user)


  """
  rdr = DDG4.GeneratorAction(kernel,"LcioGeneratorAction/Reader")
  rdr.zSpread = 0.0
  rdr.lorentzAngle = 0.0
  rdr.OutputLevel = DDG4.OutputLevel.INFO
  rdr.Input = "LcioEventReader|test.data"
  rdr.enableUI()
  kernel.generatorAction().adopt(rdr)
  """

  # Setup global filters fur use in sensntive detectors
  f1 = DDG4.Filter(kernel,'GeantinoRejectFilter/GeantinoRejector')
  kernel.registerGlobalFilter(f1)
  f2 = DDG4.Filter(kernel,'ParticleRejectFilter/OpticalPhotonRejector')
  f2.particle = 'opticalphoton'
  kernel.registerGlobalFilter(f2)
  f3 = DDG4.Filter(kernel,'ParticleSelectFilter/OpticalPhotonSelector') 
  f3.particle = 'opticalphoton'
  kernel.registerGlobalFilter(f3)

  f4 = DDG4.Filter(kernel,'EnergyDepositMinimumCut')
  f4.Cut = 0.5*SystemOfUnits.MeV
  f4.enableUI()
  kernel.registerGlobalFilter(f4)

  # First the tracking detectors
  seq,act = geant4.setupTracker('SiVertexBarrel')
  seq.adopt(f1)
  act.adopt(f1)
  
  seq,act = geant4.setupTracker('SiTrackerBarrel')
  seq.adopt(f1)
  act.adopt(f1)
  seq,act = geant4.setupTracker('SiTrackerForward')
  seq.adopt(f1)
  act.adopt(f1)
  seq,act = geant4.setupTracker('SiTrackerBackward')
  seq.adopt(f1)
  act.adopt(f1)

  # Now the calorimeters
  seq,act = geant4.setupCalorimeter('EcalBarrel')
  seq.adopt(f3)
  act.adopt(f3)
  seq.adopt(f4)
  act.adopt(f4)

  seq,act = geant4.setupCalorimeter('EcalEndcap_fwd')
  seq.adopt(f3)
  act.adopt(f3)
  seq.adopt(f4)
  act.adopt(f4)
  seq,act = geant4.setupCalorimeter('EcalEndcap_bwd')
  seq.adopt(f3)
  act.adopt(f3)
  seq.adopt(f4)
  act.adopt(f4)
    
  seq,act = geant4.setupCalorimeter('HcalBarrel')
  seq.adopt(f3)
  act.adopt(f3)
  seq.adopt(f4)
  act.adopt(f4)
  seq,act = geant4.setupCalorimeter('HcalEndcap_fwd')
  seq.adopt(f3)
  act.adopt(f3)
  seq.adopt(f4)
  act.adopt(f4)
  seq,act = geant4.setupCalorimeter('HcalEndcap_bwd')
  seq.adopt(f3)
  act.adopt(f3)
  seq.adopt(f4)
  act.adopt(f4)

  seq,act = geant4.setupCalorimeter('HcalPlug_fwd')
  seq.adopt(f3)
  act.adopt(f3)
  seq.adopt(f4)
  act.adopt(f4)
  seq,act = geant4.setupCalorimeter('HcalPlug_bwd')
  seq.adopt(f3)
  act.adopt(f3)
  seq.adopt(f4)
  act.adopt(f4)
    
  seq,act = geant4.setupCalorimeter('MuonBarrel')
  seq.adopt(f2)
  act.adopt(f2)
  seq,act = geant4.setupCalorimeter('MuonEndcap_fwd1')
  seq.adopt(f2)
  act.adopt(f2)
  seq,act = geant4.setupCalorimeter('MuonEndcap_fwd2')
  seq.adopt(f2)
  act.adopt(f2)
  seq,act = geant4.setupCalorimeter('MuonEndcap_bwd1')
  seq.adopt(f2)
  act.adopt(f2)
  seq,act = geant4.setupCalorimeter('MuonEndcap_bwd2')
  seq.adopt(f2)
  act.adopt(f2)


  """
  scan = DDG4.SteppingAction(kernel,'Geant4MaterialScanner/MaterialScan')
  kernel.steppingAction().adopt(scan)
  """

  # Now build the physics list:
  phys = geant4.setupPhysics('QGSP_BERT')
  ph = DDG4.PhysicsList(kernel,'Geant4PhysicsList/Myphysics')
  ph.addParticleConstructor('G4Geantino')
  ph.addParticleConstructor('G4BosonConstructor')
  ph.addParticleConstructor('G4LeptonConstructor')
  ph.addParticleProcess('e[+-]','G4eMultipleScattering',-1,1,1)
  ph.addPhysicsConstructor('G4OpticalPhysics')
  ph.enableUI()
  phys.adopt(ph)
  phys.dump()

  kernel.configure()
  kernel.initialize()

  #DDG4.setPrintLevel(Output.DEBUG)
  kernel.run()
  print 'End of run. Terminating .......'
  kernel.terminate()
Esempio n. 18
0
 def __init__(self,tracker='Geant4TrackerCombineAction'):
   self.kernel = DDG4.Kernel()
   self.description   = self.kernel.detectorDescription()
   self.geant4 = DDG4.Geant4(self.kernel,tracker=tracker)
   self.kernel.UI = ""
   self.noPhysics()