11 #include <simulation/kernel/ExtPhysicsConstructor.h>
13 #include <CLHEP/Units/PhysicalConstants.h>
14 #include <CLHEP/Units/SystemOfUnits.h>
16 #include <G4ParticleTable.hh>
17 #include <G4ParticleDefinition.hh>
18 #include <G4ProcessManager.hh>
19 #include <G4ComptonScattering.hh>
20 #include <G4GammaConversion.hh>
21 #include <G4PhotoElectricEffect.hh>
22 #include <simulation/kernel/ExtStepLengthLimitProcess.h>
23 #include <simulation/kernel/ExtMagFieldLimitProcess.h>
24 #include <simulation/kernel/ExtEnergyLoss.h>
25 #include <simulation/kernel/ExtMessenger.h>
31 using namespace Belle2::Simulation;
33 ExtPhysicsConstructor::ExtPhysicsConstructor() : G4VPhysicsConstructor(
"ExtPhysicsConstructor"),
34 m_StepLengthLimitProcess(NULL), m_MagFieldLimitProcess(NULL), m_ELossProcess(NULL), m_Messenger(NULL)
69 static G4ParticleDefinition* g4eParticle = NULL;
71 if (g4eParticle == NULL) {
73 G4double muBpositron = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.51099906 * CLHEP::MeV / CLHEP::c_squared);
74 G4double muBmuon = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.1056584 * CLHEP::GeV / CLHEP::c_squared);
75 G4double muNucleon = CLHEP::eplus * CLHEP::hbar_Planck / 2. / (CLHEP::proton_mass_c2 / CLHEP::c_squared);
77 g4eParticle =
new G4ParticleDefinition(
78 "g4e_gamma", 0.0 * CLHEP::MeV, 0.0 * CLHEP::MeV, 0.0,
81 "gamma", 0, 0, g4ePDGcode,
83 false,
"photon", g4ePDGcode
86 new G4ParticleDefinition(
87 "g4e_e-", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
90 "lepton", 1, 0, g4ePDGcode,
92 false,
"e", g4ePDGcode, -1.0011596521859 * muBpositron
95 new G4ParticleDefinition(
96 "g4e_e+", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
99 "lepton", -1, 0, g4ePDGcode,
101 false,
"e", g4ePDGcode, 1.0011596521859 * muBpositron
104 new G4ParticleDefinition(
105 "g4e_mu+", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, +1.0 * CLHEP::eplus,
108 "lepton", -1, 0, g4ePDGcode,
110 false,
"mu", g4ePDGcode, 1.0011659208 * muBmuon
113 new G4ParticleDefinition(
114 "g4e_mu-", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, -1.0 * CLHEP::eplus,
117 "lepton", 1, 0, g4ePDGcode,
119 false,
"mu", g4ePDGcode, -1.0011659208 * muBmuon
122 new G4ParticleDefinition(
123 "g4e_pi+", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
126 "meson", 0, 0, g4ePDGcode,
128 false,
"pi", g4ePDGcode
131 new G4ParticleDefinition(
132 "g4e_pi-", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
135 "meson", 0, 0, g4ePDGcode,
137 false,
"pi", g4ePDGcode
140 new G4ParticleDefinition(
141 "g4e_kaon+", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
144 "meson", 0, 0, g4ePDGcode,
146 false,
"kaon", g4ePDGcode
149 new G4ParticleDefinition(
150 "g4e_kaon-", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
153 "meson", 0, 0, g4ePDGcode,
155 false,
"kaon", g4ePDGcode
158 new G4ParticleDefinition(
159 "g4e_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
162 "baryon", 0, +1, g4ePDGcode,
164 false,
"nucleon", g4ePDGcode, 2.792847351 * muNucleon
167 new G4ParticleDefinition(
168 "g4e_anti_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
171 "baryon", 0, -1, g4ePDGcode,
173 false,
"nucleon", g4ePDGcode, -2.792847351 * muNucleon
176 new G4ParticleDefinition(
177 "g4e_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
180 "nucleus", 0, +2, g4ePDGcode,
182 false,
"static", g4ePDGcode, 0.857438230 * muNucleon
186 new G4ParticleDefinition(
187 "g4e_anti_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
190 "anti_nucleus", 0, -2, g4ePDGcode,
192 false,
"static", g4ePDGcode, -0.857438230 * muNucleon
206 G4ParticleTable* myParticleTable = G4ParticleTable::GetParticleTable();
208 G4ParticleTable::G4PTblDicIterator* myParticleIterator = myParticleTable->GetIterator();
209 myParticleIterator->reset();
210 while ((*myParticleIterator)()) {
211 G4ParticleDefinition* particle = myParticleIterator->value();
212 G4ProcessManager* pmanager = particle->GetProcessManager();
213 G4String particleName = particle->GetParticleName();
214 if (particleName.compare(0, 4,
"g4e_") == 0) {
215 if (particleName ==
"g4e_gamma") {
216 pmanager->AddDiscreteProcess(
new G4GammaConversion());
217 pmanager->AddDiscreteProcess(
new G4ComptonScattering());
218 pmanager->AddDiscreteProcess(
new G4PhotoElectricEffect());