Belle II Software development
Geant4ePhysics Class Reference

Define geant4e-specific physics. More...

#include <Geant4ePhysics.h>

Inheritance diagram for Geant4ePhysics:

Public Member Functions

 Geant4ePhysics ()
 The Geant4ePhysics constructor.
 
virtual ~Geant4ePhysics ()
 The Geant4ePhysics destructor.
 
virtual void ConstructParticle () override
 ConstructParticle() defines the geant4e-specific particles.
 
virtual void ConstructProcess () override
 ConstructProcess() defines the geant4e-specific processes.
 

Private Attributes

ExtStepLengthLimitProcessm_StepLengthLimitProcess
 Process that limits the geant4e step length.
 
ExtMagFieldLimitProcessm_MagFieldLimitProcess
 Process that limits the geant4e step length in magnetic field.
 
ExtEnergyLossm_ELossProcess
 Process that limits the geant4e step length due to energy loss.
 
ExtMessengerm_Messenger
 Pointer to the ExtMessenger that is used to control geant4e.
 

Detailed Description

Define geant4e-specific physics.

Definition at line 31 of file Geant4ePhysics.h.

Constructor & Destructor Documentation

◆ Geant4ePhysics()

The Geant4ePhysics constructor.

Definition at line 28 of file Geant4ePhysics.cc.

28 :
29// G4VPhysicsConstructor("Geant4ePhysics"),
31 m_ELossProcess(NULL), m_Messenger(NULL)
32{
33 if (false) {
36 }
37}
ExtStepLengthLimitProcess * m_StepLengthLimitProcess
Process that limits the geant4e step length.
ExtMagFieldLimitProcess * m_MagFieldLimitProcess
Process that limits the geant4e step length in magnetic field.
virtual void ConstructParticle() override
ConstructParticle() defines the geant4e-specific particles.
ExtMessenger * m_Messenger
Pointer to the ExtMessenger that is used to control geant4e.
virtual void ConstructProcess() override
ConstructProcess() defines the geant4e-specific processes.
ExtEnergyLoss * m_ELossProcess
Process that limits the geant4e step length due to energy loss.

◆ ~Geant4ePhysics()

~Geant4ePhysics ( )
virtual

The Geant4ePhysics destructor.

Definition at line 39 of file Geant4ePhysics.cc.

Member Function Documentation

◆ ConstructParticle()

void ConstructParticle ( )
overridevirtual

ConstructParticle() defines the geant4e-specific particles.

Definition at line 48 of file Geant4ePhysics.cc.

49{
50 /*
51 // Create ext-specific copies of useful particles, in case we are
52 // running the geant4e extrapolator. These particles will have a
53 // limited process list and can coexist with geant4 particles: they
54 // are distinguished by their name having the prefix "g4e_" and their
55 // "PDG code" always being the reserved value of 0 (which means that
56 // the user must use FindParticle(name) rather than FindParticle(#)
57 // to look up these special particles.
58 // Arguments for G4ParticleDefinition() are as follows:
59 // name mass width charge
60 // 2*spin parity C-conjugation
61 // 2*Isospin 2*Isospin3 G-parity
62 // type lepton number baryon number PDG encoding
63 // stable lifetime decay table
64 // shortlived subType anti_encoding
65 // Values copied verbatim from geant4, except our particles don't decay
66 // and the names/PDGcodes are unique.
67
68 static G4ParticleDefinition* g4eParticle = NULL;
69
70 if (g4eParticle == NULL) {
71 // Bohr Magneton for positron and positive muon
72 G4double muBpositron = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.51099906 * CLHEP::MeV / CLHEP::c_squared);
73 G4double muBmuon = 0.5 * CLHEP::eplus * CLHEP::hbar_Planck / (0.1056584 * CLHEP::GeV / CLHEP::c_squared);
74 G4double muNucleon = CLHEP::eplus * CLHEP::hbar_Planck / 2. / (CLHEP::proton_mass_c2 / CLHEP::c_squared);
75 // Copied from G4Gamma.cc
76 g4eParticle = new G4ParticleDefinition(
77 "g4e_gamma", 0.0 * CLHEP::MeV, 0.0 * CLHEP::MeV, 0.0,
78 2, -1, -1,
79 0, 0, 0,
80 "gamma", 0, 0, g4ePDGcode,
81 true, 0.0, NULL,
82 false, "photon", g4ePDGcode
83 );
84 // Copied from G4Electron.cc
85 new G4ParticleDefinition(
86 "g4e_e-", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
87 1, 0, 0,
88 0, 0, 0,
89 "lepton", 1, 0, g4ePDGcode,
90 true, -1.0, NULL,
91 false, "e", g4ePDGcode, -1.0011596521859 * muBpositron
92 );
93 // Copied from G4Positron.cc
94 new G4ParticleDefinition(
95 "g4e_e+", 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
96 1, 0, 0,
97 0, 0, 0,
98 "lepton", -1, 0, g4ePDGcode,
99 true, -1.0, NULL,
100 false, "e", g4ePDGcode, 1.0011596521859 * muBpositron
101 );
102 // Copied from G4MuonPlus.cc
103 new G4ParticleDefinition(
104 "g4e_mu+", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, +1.0 * CLHEP::eplus,
105 1, 0, 0,
106 0, 0, 0,
107 "lepton", -1, 0, g4ePDGcode,
108 true, -1.0, NULL,
109 false, "mu", g4ePDGcode, 1.0011659208 * muBmuon
110 );
111 // Copied from G4MuonMinus.cc
112 new G4ParticleDefinition(
113 "g4e_mu-", 0.1056584 * CLHEP::GeV, 2.99591e-16 * CLHEP::MeV, -1.0 * CLHEP::eplus,
114 1, 0, 0,
115 0, 0, 0,
116 "lepton", 1, 0, g4ePDGcode,
117 true, -1.0, NULL,
118 false, "mu", g4ePDGcode, -1.0011659208 * muBmuon
119 );
120 // Copied from G4PionPlus.cc
121 new G4ParticleDefinition(
122 "g4e_pi+", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
123 0, -1, 0,
124 2, +2, -1,
125 "meson", 0, 0, g4ePDGcode,
126 true, -1.0, NULL,
127 false, "pi", g4ePDGcode
128 );
129 // Copied from G4PionMinus.cc
130 new G4ParticleDefinition(
131 "g4e_pi-", 0.1395700 * CLHEP::GeV, 2.5284e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
132 0, -1, 0,
133 2, -2, -1,
134 "meson", 0, 0, g4ePDGcode,
135 true, -1.0, NULL,
136 false, "pi", g4ePDGcode
137 );
138 // Copied from G4KaonPlus.cc
139 new G4ParticleDefinition(
140 "g4e_kaon+", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, +1.0 * CLHEP::eplus,
141 0, -1, 0,
142 1, +1, 0,
143 "meson", 0, 0, g4ePDGcode,
144 true, -1.0, NULL,
145 false, "kaon", g4ePDGcode
146 );
147 // Copied from G4KaonMinus.cc
148 new G4ParticleDefinition(
149 "g4e_kaon-", 0.493677 * CLHEP::GeV, 5.315e-14 * CLHEP::MeV, -1.0 * CLHEP::eplus,
150 0, -1, 0,
151 1, -1, 0,
152 "meson", 0, 0, g4ePDGcode,
153 true, -1.0, NULL,
154 false, "kaon", g4ePDGcode
155 );
156 // Copied from G4Proton.cc except use G4ParticleDefinition instead of G4Ions
157 new G4ParticleDefinition(
158 "g4e_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
159 1, +1, 0,
160 1, +1, 0,
161 "baryon", 0, +1, g4ePDGcode,
162 true, -1.0, NULL,
163 false, "nucleon", g4ePDGcode, 2.792847351 * muNucleon
164 );
165 // Copied from G4AntiProton.cc except use G4ParticleDefinition instead of G4Ions
166 new G4ParticleDefinition(
167 "g4e_anti_proton", 0.9382723 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
168 1, +1, 0,
169 1, -1, 0,
170 "baryon", 0, -1, g4ePDGcode,
171 true, -1.0, NULL,
172 false, "nucleon", g4ePDGcode, -2.792847351 * muNucleon
173 );
174 // copied from G4Deuteron.hh except use G4ParticleDefinition instead of G4Ions
175 new G4ParticleDefinition(
176 "g4e_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, +1.0 * CLHEP::eplus,
177 2, +1, 0,
178 0, 0, 0,
179 "nucleus", 0, +2, g4ePDGcode,
180 true, -1.0, NULL,
181 false, "static", g4ePDGcode, 0.857438230 * muNucleon
182
183 );
184 // copied from G4AntiDeuteron.hh except use G4ParticleDefinition instead of G4Ions
185 new G4ParticleDefinition(
186 "g4e_anti_deuteron", 1.875613 * CLHEP::GeV, 0.0 * CLHEP::MeV, -1.0 * CLHEP::eplus,
187 2, +1, 0,
188 0, 0, 0,
189 "anti_nucleus", 0, -2, g4ePDGcode,
190 true, -1.0, NULL,
191 false, "static", g4ePDGcode, -0.857438230 * muNucleon
192 );
193
194 }
195 */
196}

◆ ConstructProcess()

void ConstructProcess ( )
overridevirtual

ConstructProcess() defines the geant4e-specific processes.

Definition at line 199 of file Geant4ePhysics.cc.

200{
201 // Define the limited set of processes that will be suffered by the
202 // geant4e-specific particles
203 m_StepLengthLimitProcess = new ExtStepLengthLimitProcess;
204 m_MagFieldLimitProcess = new ExtMagFieldLimitProcess;
205 m_ELossProcess = new ExtEnergyLoss;
207 G4ParticleTable* myParticleTable = G4ParticleTable::GetParticleTable();
208 // theParticleIterator is a Geant4 macro since version 10.
209 G4ParticleTable::G4PTblDicIterator* myParticleIterator = myParticleTable->GetIterator();
210 myParticleIterator->reset();
211 while ((*myParticleIterator)()) {
212 G4ParticleDefinition* particle = myParticleIterator->value();
213 G4ProcessManager* pmanager = particle->GetProcessManager();
214 G4String particleName = particle->GetParticleName();
215 if (particleName.compare(0, 4, "g4e_") == 0) {
216 if (particleName == "g4e_gamma") {
217 pmanager->AddDiscreteProcess(new G4GammaConversion());
218 pmanager->AddDiscreteProcess(new G4ComptonScattering());
219 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect());
220 } else {
221 pmanager->AddContinuousProcess(m_ELossProcess, 1);
222 pmanager->AddDiscreteProcess(m_StepLengthLimitProcess, 2);
223 pmanager->AddDiscreteProcess(m_MagFieldLimitProcess, 3);
224 }
225 }
226 }
227}
std::string particleName(int pdgCode)
Returns the name of a particle with given pdg code.
Definition: EvtPDLUtil.cc:20

Member Data Documentation

◆ m_ELossProcess

ExtEnergyLoss* m_ELossProcess
private

Process that limits the geant4e step length due to energy loss.

Definition at line 56 of file Geant4ePhysics.h.

◆ m_MagFieldLimitProcess

ExtMagFieldLimitProcess* m_MagFieldLimitProcess
private

Process that limits the geant4e step length in magnetic field.

Definition at line 53 of file Geant4ePhysics.h.

◆ m_Messenger

ExtMessenger* m_Messenger
private

Pointer to the ExtMessenger that is used to control geant4e.

Definition at line 59 of file Geant4ePhysics.h.

◆ m_StepLengthLimitProcess

ExtStepLengthLimitProcess* m_StepLengthLimitProcess
private

Process that limits the geant4e step length.

Definition at line 50 of file Geant4ePhysics.h.


The documentation for this class was generated from the following files: