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>
29using namespace Belle2::Simulation;
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.
ExtPhysicsConstructor()
The ExtPhysicsConstructor constructor.
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.