9 #include <simulation/kernel/ExtPhysicsConstructor.h> 
   11 #include <CLHEP/Units/PhysicalConstants.h> 
   12 #include <CLHEP/Units/SystemOfUnits.h> 
   14 #include <G4ParticleTable.hh> 
   15 #include <G4ParticleDefinition.hh> 
   16 #include <G4ProcessManager.hh> 
   17 #include <G4ComptonScattering.hh> 
   18 #include <G4GammaConversion.hh> 
   19 #include <G4PhotoElectricEffect.hh> 
   20 #include <simulation/kernel/ExtStepLengthLimitProcess.h> 
   21 #include <simulation/kernel/ExtMagFieldLimitProcess.h> 
   22 #include <simulation/kernel/ExtEnergyLoss.h> 
   23 #include <simulation/kernel/ExtMessenger.h> 
   29 using namespace Belle2::Simulation;
 
   31 ExtPhysicsConstructor::ExtPhysicsConstructor() : G4VPhysicsConstructor(
"ExtPhysicsConstructor"),
 
   32   m_StepLengthLimitProcess(NULL), m_MagFieldLimitProcess(NULL), m_ELossProcess(NULL), m_Messenger(NULL)
 
   67   static G4ParticleDefinition* g4eParticle = NULL;
 
   69   if (g4eParticle == NULL) {
 
   71     G4double muBpositron = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.51099906 * CLHEP::MeV / CLHEP::c_squared);
 
   72     G4double muBmuon = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.1056584 * CLHEP::GeV / CLHEP::c_squared);
 
   73     G4double muNucleon = CLHEP::eplus * CLHEP::hbar_Planck / 2. / (CLHEP::proton_mass_c2 / CLHEP::c_squared);
 
   75     g4eParticle = 
new G4ParticleDefinition(
 
   76       "g4e_gamma", 0.0 * CLHEP::MeV, 0.0 * CLHEP::MeV, 0.0,
 
   79       "gamma",          0,           0,  g4ePDGcode,
 
   81       false,     
"photon",  g4ePDGcode
 
   84     new G4ParticleDefinition(
 
   85       "g4e_e-", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
 
   88       "lepton",         1,           0,  g4ePDGcode,
 
   90       false,          
"e",  g4ePDGcode, -1.0011596521859 * muBpositron
 
   93     new G4ParticleDefinition(
 
   94       "g4e_e+", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
 
   97       "lepton",        -1,           0,  g4ePDGcode,
 
   99       false,          
"e",  g4ePDGcode,  1.0011596521859 * muBpositron
 
  102     new G4ParticleDefinition(
 
  103       "g4e_mu+", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, +1.0 * CLHEP::eplus,
 
  106       "lepton",        -1,           0,  g4ePDGcode,
 
  108       false,         
"mu",  g4ePDGcode,  1.0011659208 * muBmuon
 
  111     new G4ParticleDefinition(
 
  112       "g4e_mu-", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, -1.0 * CLHEP::eplus,
 
  115       "lepton",         1,           0,  g4ePDGcode,
 
  117       false,         
"mu",  g4ePDGcode, -1.0011659208 * muBmuon
 
  120     new G4ParticleDefinition(
 
  121       "g4e_pi+", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
 
  124       "meson",          0,           0,  g4ePDGcode,
 
  126       false,         
"pi",  g4ePDGcode
 
  129     new G4ParticleDefinition(
 
  130       "g4e_pi-", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
 
  133       "meson",          0,           0,  g4ePDGcode,
 
  135       false,         
"pi",  g4ePDGcode
 
  138     new G4ParticleDefinition(
 
  139       "g4e_kaon+", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
 
  142       "meson",          0,           0,  g4ePDGcode,
 
  144       false,       
"kaon",  g4ePDGcode
 
  147     new G4ParticleDefinition(
 
  148       "g4e_kaon-", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
 
  151       "meson",          0,           0,  g4ePDGcode,
 
  153       false,       
"kaon",  g4ePDGcode
 
  156     new G4ParticleDefinition(
 
  157       "g4e_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
 
  160       "baryon",         0,          +1,  g4ePDGcode,
 
  162       false,    
"nucleon",  g4ePDGcode,  2.792847351 * muNucleon
 
  165     new G4ParticleDefinition(
 
  166       "g4e_anti_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
 
  169       "baryon",         0,          -1,  g4ePDGcode,
 
  171       false,    
"nucleon",  g4ePDGcode, -2.792847351 * muNucleon
 
  174     new G4ParticleDefinition(
 
  175       "g4e_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
 
  178       "nucleus",        0,          +2,  g4ePDGcode,
 
  180       false,     
"static",  g4ePDGcode,  0.857438230 *  muNucleon
 
  184     new G4ParticleDefinition(
 
  185       "g4e_anti_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
 
  188       "anti_nucleus",   0,          -2,  g4ePDGcode,
 
  190       false,     
"static",  g4ePDGcode, -0.857438230 * muNucleon
 
  204   G4ParticleTable* myParticleTable = G4ParticleTable::GetParticleTable();
 
  206   G4ParticleTable::G4PTblDicIterator* myParticleIterator = myParticleTable->GetIterator();
 
  207   myParticleIterator->reset();
 
  208   while ((*myParticleIterator)()) {
 
  209     G4ParticleDefinition* particle = myParticleIterator->value();
 
  210     G4ProcessManager* pmanager = particle->GetProcessManager();
 
  211     G4String particleName = particle->GetParticleName();
 
  212     if (particleName.compare(0, 4, 
"g4e_") == 0) {
 
  213       if (particleName == 
"g4e_gamma") {
 
  214         pmanager->AddDiscreteProcess(
new G4GammaConversion());
 
  215         pmanager->AddDiscreteProcess(
new G4ComptonScattering());
 
  216         pmanager->AddDiscreteProcess(
new G4PhotoElectricEffect());
 
Define physics process to calculate energy loss without fluctuations.
Defines the physics process that avoids hit invocation in sensitive volumes.
Define the mechanism by which the user can communicate with the geant4e extrapolator using geant4 UI ...
void ConstructProcess()
ConstructProcess() defines the geant4e-specific processes.
ExtStepLengthLimitProcess * m_StepLengthLimitProcess
Process that limits the geant4e step length.
ExtMagFieldLimitProcess * m_MagFieldLimitProcess
Process that limits the geant4e step length in magnetic field.
ExtMessenger * m_Messenger
Pointer to the ExtMessenger that is used to control geant4e.
virtual ~ExtPhysicsConstructor()
The ExtPhysicsConstructor destructor.
ExtEnergyLoss * m_ELossProcess
Process that limits the geant4e step length due to energy loss.
void ConstructParticle()
ConstructParticle() defines the geant4e-specific particles.
Defines the physics process that avoids hit invocation in sensitive volumes.
Abstract base class for different kinds of events.