11 #include <simulation/physicslist/Belle2PhysicsList.h>
12 #include "G4SystemOfUnits.hh"
13 #include "G4RegionStore.hh"
14 #include "G4ProductionCuts.hh"
17 #include "G4EmStandardPhysics.hh"
18 #include "G4EmStandardPhysics_option1.hh"
19 #include "G4OpticalPhysics.hh"
20 #include "G4DecayPhysics.hh"
21 #include <simulation/physicslist/Geant4ePhysics.h>
24 #include <simulation/physicslist/ProtonPhysics.h>
25 #include <simulation/physicslist/NeutronPhysics.h>
26 #include <simulation/physicslist/PionPhysics.h>
27 #include <simulation/physicslist/KaonPhysics.h>
28 #include <simulation/physicslist/HyperonPhysics.h>
29 #include <simulation/physicslist/AntiBaryonPhysics.h>
30 #include <simulation/physicslist/IonPhysics.h>
31 #include <simulation/physicslist/GammaLeptoNuclearPhysics.h>
34 #include "G4BosonConstructor.hh"
35 #include "G4LeptonConstructor.hh"
36 #include "G4MesonConstructor.hh"
37 #include "G4BaryonConstructor.hh"
38 #include "G4IonConstructor.hh"
39 #include "G4ShortLivedConstructor.hh"
42 #include "simulation/longlivedneutral/G4LongLivedNeutralPhysics.h"
43 #include <framework/logging/Logger.h>
48 using namespace Simulation;
52 : G4VModularPhysicsList(), m_globalCutValue(0.07)
54 B2INFO(
"Using " << physicsListName <<
" physics list");
64 RegisterPhysics(
new G4DecayPhysics());
85 G4BosonConstructor pBosonConstructor;
86 pBosonConstructor.ConstructParticle();
88 G4LeptonConstructor pLeptonConstructor;
89 pLeptonConstructor.ConstructParticle();
91 G4MesonConstructor pMesonConstructor;
92 pMesonConstructor.ConstructParticle();
94 G4BaryonConstructor pBaryonConstructor;
95 pBaryonConstructor.ConstructParticle();
97 G4IonConstructor pIonConstructor;
98 pIonConstructor.ConstructParticle();
100 G4ShortLivedConstructor pShortLivedConstructor;
101 pShortLivedConstructor.ConstructParticle();
109 static G4ParticleDefinition* g4eParticle = NULL;
111 if (g4eParticle == NULL) {
113 G4double muBpositron = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.51099906 * CLHEP::MeV / CLHEP::c_squared);
114 G4double muBmuon = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.1056584 * CLHEP::GeV / CLHEP::c_squared);
115 G4double muNucleon = CLHEP::eplus * CLHEP::hbar_Planck / 2. / (CLHEP::proton_mass_c2 / CLHEP::c_squared);
117 g4eParticle =
new G4ParticleDefinition(
118 "g4e_gamma", 0.0 * CLHEP::MeV, 0.0 * CLHEP::MeV, 0.0,
121 "gamma", 0, 0, g4ePDGcode,
123 false,
"photon", g4ePDGcode
126 new G4ParticleDefinition(
127 "g4e_e-", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
130 "lepton", 1, 0, g4ePDGcode,
132 false,
"e", g4ePDGcode, -1.0011596521859 * muBpositron
135 new G4ParticleDefinition(
136 "g4e_e+", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
139 "lepton", -1, 0, g4ePDGcode,
141 false,
"e", g4ePDGcode, 1.0011596521859 * muBpositron
144 new G4ParticleDefinition(
145 "g4e_mu+", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, +1.0 * CLHEP::eplus,
148 "lepton", -1, 0, g4ePDGcode,
150 false,
"mu", g4ePDGcode, 1.0011659208 * muBmuon
153 new G4ParticleDefinition(
154 "g4e_mu-", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, -1.0 * CLHEP::eplus,
157 "lepton", 1, 0, g4ePDGcode,
159 false,
"mu", g4ePDGcode, -1.0011659208 * muBmuon
162 new G4ParticleDefinition(
163 "g4e_pi+", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
166 "meson", 0, 0, g4ePDGcode,
168 false,
"pi", g4ePDGcode
171 new G4ParticleDefinition(
172 "g4e_pi-", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
175 "meson", 0, 0, g4ePDGcode,
177 false,
"pi", g4ePDGcode
180 new G4ParticleDefinition(
181 "g4e_kaon+", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
184 "meson", 0, 0, g4ePDGcode,
186 false,
"kaon", g4ePDGcode
189 new G4ParticleDefinition(
190 "g4e_kaon-", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
193 "meson", 0, 0, g4ePDGcode,
195 false,
"kaon", g4ePDGcode
198 new G4ParticleDefinition(
199 "g4e_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
202 "baryon", 0, +1, g4ePDGcode,
204 false,
"nucleon", g4ePDGcode, 2.792847351 * muNucleon
207 new G4ParticleDefinition(
208 "g4e_anti_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
211 "baryon", 0, -1, g4ePDGcode,
213 false,
"nucleon", g4ePDGcode, -2.792847351 * muNucleon
216 new G4ParticleDefinition(
217 "g4e_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
220 "nucleus", 0, +2, g4ePDGcode,
222 false,
"static", g4ePDGcode, 0.857438230 * muNucleon
225 new G4ParticleDefinition(
226 "g4e_anti_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
229 "anti_nucleus", 0, -2, g4ePDGcode,
231 false,
"static", g4ePDGcode, -0.857438230 * muNucleon
238 G4RegionStore* theRegionStore = G4RegionStore::GetInstance();
242 B2INFO(
"Set production cut for detector region" <<
LogVar(
"detector", name) <<
LogVar(
"production_cut", cutValue));
244 auto* regionCuts =
new G4ProductionCuts;
245 regionCuts->SetProductionCut(cutValue * cm);
246 bool foundOne{
false};
247 for (
const auto& regionName : regions) {
248 auto* region = theRegionStore->GetRegion(regionName,
false);
250 B2WARNING(
"Cannot find Geant4 region for sub detector. Probably detector not present?"
251 <<
LogVar(
"detector", name) <<
LogVar(
"region", regionName));
254 region->SetProductionCuts(regionCuts);
257 if (!foundOne)
delete regionCuts;
283 SetVerboseLevel(verb);
332 RegisterPhysics(
new G4EmStandardPhysics());
334 RegisterPhysics(
new G4EmStandardPhysics_option1());
341 if (yesno) RegisterPhysics(
new G4OpticalPhysics());
347 if (yesno) G4cout <<
" High precision neutron option not yet ready " << G4endl;
353 RegisterPhysics(pLongLivedNeutral);