9#include <simulation/physicslist/Belle2PhysicsList.h>
10#include "G4SystemOfUnits.hh"
11#include "G4RegionStore.hh"
12#include "G4ProductionCuts.hh"
15#include "G4EmStandardPhysics.hh"
16#include "G4EmStandardPhysics_option1.hh"
17#include "G4OpticalPhysics.hh"
18#include "G4DecayPhysics.hh"
19#include <simulation/physicslist/Geant4ePhysics.h>
22#include <simulation/physicslist/ProtonPhysics.h>
23#include <simulation/physicslist/NeutronPhysics.h>
24#include <simulation/physicslist/PionPhysics.h>
25#include <simulation/physicslist/KaonPhysics.h>
26#include <simulation/physicslist/HyperonPhysics.h>
27#include <simulation/physicslist/AntiBaryonPhysics.h>
28#include <simulation/physicslist/IonPhysics.h>
29#include <simulation/physicslist/GammaLeptoNuclearPhysics.h>
32#include "G4BosonConstructor.hh"
33#include "G4LeptonConstructor.hh"
34#include "G4MesonConstructor.hh"
35#include "G4BaryonConstructor.hh"
36#include "G4IonConstructor.hh"
37#include "G4ShortLivedConstructor.hh"
40#include "simulation/longlivedneutral/G4LongLivedNeutralPhysics.h"
41#include <framework/logging/Logger.h>
46using namespace Simulation;
49Belle2PhysicsList::Belle2PhysicsList(
const G4String& physicsListName,
const G4int hadronicVerbosityLevel)
50 : G4VModularPhysicsList(), m_globalCutValue(0.07)
52 B2INFO(
"Using " << physicsListName <<
" physics list");
62 RegisterPhysics(
new G4DecayPhysics());
87 G4BosonConstructor pBosonConstructor;
88 pBosonConstructor.ConstructParticle();
90 G4LeptonConstructor pLeptonConstructor;
91 pLeptonConstructor.ConstructParticle();
93 G4MesonConstructor pMesonConstructor;
94 pMesonConstructor.ConstructParticle();
96 G4BaryonConstructor pBaryonConstructor;
97 pBaryonConstructor.ConstructParticle();
99 G4IonConstructor pIonConstructor;
100 pIonConstructor.ConstructParticle();
102 G4ShortLivedConstructor pShortLivedConstructor;
103 pShortLivedConstructor.ConstructParticle();
111 static G4ParticleDefinition* g4eParticle = NULL;
113 if (g4eParticle == NULL) {
115 G4double muBpositron = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.51099906 * CLHEP::MeV / CLHEP::c_squared);
116 G4double muBmuon = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.1056584 * CLHEP::GeV / CLHEP::c_squared);
117 G4double muNucleon = CLHEP::eplus * CLHEP::hbar_Planck / 2. / (CLHEP::proton_mass_c2 / CLHEP::c_squared);
119 g4eParticle =
new G4ParticleDefinition(
120 "g4e_gamma", 0.0 * CLHEP::MeV, 0.0 * CLHEP::MeV, 0.0,
123 "gamma", 0, 0, g4ePDGcode,
125 false,
"photon", g4ePDGcode
128 new G4ParticleDefinition(
129 "g4e_e-", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
132 "lepton", 1, 0, g4ePDGcode,
134 false,
"e", g4ePDGcode, -1.0011596521859 * muBpositron
137 new G4ParticleDefinition(
138 "g4e_e+", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
141 "lepton", -1, 0, g4ePDGcode,
143 false,
"e", g4ePDGcode, 1.0011596521859 * muBpositron
146 new G4ParticleDefinition(
147 "g4e_mu+", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, +1.0 * CLHEP::eplus,
150 "lepton", -1, 0, g4ePDGcode,
152 false,
"mu", g4ePDGcode, 1.0011659208 * muBmuon
155 new G4ParticleDefinition(
156 "g4e_mu-", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, -1.0 * CLHEP::eplus,
159 "lepton", 1, 0, g4ePDGcode,
161 false,
"mu", g4ePDGcode, -1.0011659208 * muBmuon
164 new G4ParticleDefinition(
165 "g4e_pi+", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
168 "meson", 0, 0, g4ePDGcode,
170 false,
"pi", g4ePDGcode
173 new G4ParticleDefinition(
174 "g4e_pi-", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
177 "meson", 0, 0, g4ePDGcode,
179 false,
"pi", g4ePDGcode
182 new G4ParticleDefinition(
183 "g4e_kaon+", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
186 "meson", 0, 0, g4ePDGcode,
188 false,
"kaon", g4ePDGcode
191 new G4ParticleDefinition(
192 "g4e_kaon-", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
195 "meson", 0, 0, g4ePDGcode,
197 false,
"kaon", g4ePDGcode
200 new G4ParticleDefinition(
201 "g4e_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
204 "baryon", 0, +1, g4ePDGcode,
206 false,
"nucleon", g4ePDGcode, 2.792847351 * muNucleon
209 new G4ParticleDefinition(
210 "g4e_anti_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
213 "baryon", 0, -1, g4ePDGcode,
215 false,
"nucleon", g4ePDGcode, -2.792847351 * muNucleon
218 new G4ParticleDefinition(
219 "g4e_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
222 "nucleus", 0, +2, g4ePDGcode,
224 false,
"static", g4ePDGcode, 0.857438230 * muNucleon
227 new G4ParticleDefinition(
228 "g4e_anti_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
231 "anti_nucleus", 0, -2, g4ePDGcode,
233 false,
"static", g4ePDGcode, -0.857438230 * muNucleon
240 G4RegionStore* theRegionStore = G4RegionStore::GetInstance();
244 B2INFO(
"Set production cut for detector region" <<
LogVar(
"detector", name) <<
LogVar(
"production_cut", cutValue));
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));
281 SetVerboseLevel(verb);
330 RegisterPhysics(
new G4EmStandardPhysics());
332 RegisterPhysics(
new G4EmStandardPhysics_option1());
339 if (yesno) RegisterPhysics(
new G4OpticalPhysics());
345 if (yesno) G4cout <<
" High precision neutron option not yet ready " << G4endl;
351 RegisterPhysics(pLongLivedNeutral);
LongLivedNeutral physics Class – to be registered in the physics list.
virtual void ConstructParticle()
Adds monopole and anti-monopole to GEANT4 with a pdg of +/-99666 and parameters taken from current cl...
Anti-baryon hadronic physics constructor for Belle II physics list.
void SetSVDProductionCutValue(G4double)
Set cut value for SVD envelope.
void SetProductionCutValue(G4double)
Use parameter to set global cut value.
void SetARICHTOPProductionCutValue(G4double)
Set cut value for ARICH and TOP envelopes.
G4ProductionCuts * m_regionCuts
Global pointer for the region cuts to avoid memory leak and side effects when deleting the pointer.
void ConstructG4eParticles()
Construct parallel particle types needed for reco.
~Belle2PhysicsList()
destructor
G4double m_klmCutValue
threshold for BKLM and EKLM
void setRegionCuts(const std::string &name, const std::vector< std::string > ®ions, double cutValue)
Set the produciton cuts to the given value for a list of regions belonging to a sub detector.
void SetECLProductionCutValue(G4double)
Set cut value for ECL barrel, forward and backward envelopes.
G4double m_globalCutValue
Secondary production thresholds.
virtual void SetCuts()
Set the secondary particle production thresholds.
void UseHighPrecisionNeutrons(G4bool)
Use high precision neutron models below 20 MeV.
void SetPXDProductionCutValue(G4double)
Set cut value for PXD envelope.
void UseLongLivedNeutralParticles()
Simulate neutral long-lived particles with given pdg and mass value.
void UseOpticalPhysics(G4bool)
Add optical photon physics.
G4double m_pxdCutValue
threshold for PXD
G4double m_svdCutValue
threshold for SVD
G4double m_arichtopCutValue
threshold for ARICH and TOP
void SetVerbosity(G4int verb)
Run/event verbosity level.
void SetCDCProductionCutValue(G4double)
Set cut value for CDC envelope.
virtual void ConstructParticle()
Build all particle types used in physics list.
void SetKLMProductionCutValue(G4double)
Set cut value for BKLM and EKLM envelopes.
void UseStandardEMPhysics(G4bool)
Use standard EM physics instead of EM option1.
G4double m_eclCutValue
threshold for ECL
G4double m_cdcCutValue
threshold for CDC
Gamma-nuclear, electro-nuclear and muon-nuclear physics constructor for Belle II physics list.
Define geant4e-specific physics.
Hyperon hadronic physics constructor for Belle II physics list.
Ion hadronic physics constructor for Belle II physics list.
Kaon hadronic physics constructor for Belle II physics list.
Neutron hadronic physics constructor for Belle II physics list.
Pion hadronic physics constructor for Belle II physics list.
Proton hadronic physics constructor for Belle II physics list.
Class to store variables with their name which were sent to the logging service.
Abstract base class for different kinds of events.