Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EmStandardPhysics Class Reference

#include <G4EmStandardPhysics.hh>

Inheritance diagram for G4EmStandardPhysics:

Public Member Functions

 G4EmStandardPhysics (G4int ver=1, const G4String &name="")
 ~G4EmStandardPhysics () override
void ConstructParticle () override
void ConstructProcess () override
Public Member Functions inherited from G4VPhysicsConstructor
 G4VPhysicsConstructor (const G4String &="")
 G4VPhysicsConstructor (const G4String &name, G4int physics_type)
virtual ~G4VPhysicsConstructor ()
void SetPhysicsName (const G4String &="")
const G4StringGetPhysicsName () const
void SetPhysicsType (G4int)
G4int GetPhysicsType () const
G4int GetInstanceID () const
virtual void TerminateWorker ()
void SetVerboseLevel (G4int value)
G4int GetVerboseLevel () const

Additional Inherited Members

Static Public Member Functions inherited from G4VPhysicsConstructor
static const G4VPCManagerGetSubInstanceManager ()
Protected Types inherited from G4VPhysicsConstructor
using PhysicsBuilder_V = G4VPCData::PhysicsBuilders_V
Protected Member Functions inherited from G4VPhysicsConstructor
G4bool RegisterProcess (G4VProcess *process, G4ParticleDefinition *particle)
G4ParticleTable::G4PTblDicIteratorGetParticleIterator () const
PhysicsBuilder_V GetBuilders () const
void AddBuilder (G4PhysicsBuilderInterface *bld)
Protected Attributes inherited from G4VPhysicsConstructor
G4int verboseLevel = 0
G4String namePhysics = ""
G4int typePhysics = 0
G4ParticleTabletheParticleTable = nullptr
G4int g4vpcInstanceID = 0
Static Protected Attributes inherited from G4VPhysicsConstructor
static G4RUN_DLL G4VPCManager subInstanceManager

Detailed Description

Definition at line 51 of file G4EmStandardPhysics.hh.

Constructor & Destructor Documentation

◆ G4EmStandardPhysics()

G4EmStandardPhysics::G4EmStandardPhysics ( G4int ver = 1,
const G4String & name = "" )
explicit

Definition at line 86 of file G4EmStandardPhysics.cc.

87 : G4VPhysicsConstructor("G4EmStandard")
88{
89 SetVerboseLevel(ver);
90 G4EmParameters* param = G4EmParameters::Instance();
91 param->SetDefaults();
92 param->SetVerbose(ver);
93 param->SetGeneralProcessActive(true);
96}
@ bElectromagnetic
@ fUrbanFluctuation
static G4EmParameters * Instance()
void SetGeneralProcessActive(G4bool val)
void SetFluctuationType(G4EmFluctuationType val)
void SetVerbose(G4int val)
G4VPhysicsConstructor(const G4String &="")
void SetVerboseLevel(G4int value)

◆ ~G4EmStandardPhysics()

G4EmStandardPhysics::~G4EmStandardPhysics ( )
overridedefault

Member Function Documentation

◆ ConstructParticle()

void G4EmStandardPhysics::ConstructParticle ( )
overridevirtual

Implements G4VPhysicsConstructor.

Definition at line 104 of file G4EmStandardPhysics.cc.

105{
106 // minimal set of particles for EM physics
108}
static void ConstructMinimalEmSet()

◆ ConstructProcess()

void G4EmStandardPhysics::ConstructProcess ( )
overridevirtual

Implements G4VPhysicsConstructor.

Definition at line 112 of file G4EmStandardPhysics.cc.

113{
114 if(verboseLevel > 1) {
115 G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
116 }
118
119 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
120 G4EmParameters* param = G4EmParameters::Instance();
121
122 // processes used by several particles
123 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
124
125 // nuclear stopping is enabled if th eenergy limit above zero
126 G4double nielEnergyLimit = param->MaxNIELEnergy();
127 G4NuclearStopping* pnuc = nullptr;
128 if(nielEnergyLimit > 0.0) {
129 pnuc = new G4NuclearStopping();
130 pnuc->SetMaxKinEnergy(nielEnergyLimit);
131 }
132
133 // high energy limit for e+- scattering models and bremsstrahlung
134 G4double highEnergyLimit = param->MscEnergyLimit();
135
136 // Add gamma EM Processes
137 G4ParticleDefinition* particle = G4Gamma::Gamma();
138 G4bool polar = param->EnablePolarisation();
139
140 // Photoelectric
141 G4PhotoElectricEffect* pe = new G4PhotoElectricEffect();
142 G4VEmModel* peModel = new G4LivermorePhotoElectricModel();
143 pe->SetEmModel(peModel);
144 if(polar) {
145 peModel->SetAngularDistribution(new G4PhotoElectricAngularGeneratorPolarized());
146 }
147
148 // Compton scattering
149 G4ComptonScattering* cs = new G4ComptonScattering;
150 if(polar) {
151 cs->SetEmModel(new G4KleinNishinaModel());
152 }
153
154 // default Rayleigh scattering is Livermore
155 G4RayleighScattering* rl = new G4RayleighScattering();
156 if(polar) {
157 rl->SetEmModel(new G4LivermorePolarizedRayleighModel());
158 }
159
160 if(G4EmParameters::Instance()->GeneralProcessActive()) {
161 G4GammaGeneralProcess* sp = new G4GammaGeneralProcess();
162 sp->AddEmProcess(pe);
163 sp->AddEmProcess(cs);
164 sp->AddEmProcess(new G4GammaConversion());
165 sp->AddEmProcess(rl);
167 ph->RegisterProcess(sp, particle);
168
169 } else {
170 ph->RegisterProcess(pe, particle);
171 ph->RegisterProcess(cs, particle);
172 ph->RegisterProcess(new G4GammaConversion(), particle);
173 ph->RegisterProcess(rl, particle);
174 }
175
176 // e-
177 particle = G4Electron::Electron();
178
179 G4UrbanMscModel* msc1 = new G4UrbanMscModel();
180 G4WentzelVIModel* msc2 = new G4WentzelVIModel();
181 msc1->SetHighEnergyLimit(highEnergyLimit);
182 msc2->SetLowEnergyLimit(highEnergyLimit);
183 G4EmBuilder::ConstructElectronMscProcess(msc1, msc2, particle);
184
185 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel();
186 G4CoulombScattering* ss = new G4CoulombScattering();
187 ss->SetEmModel(ssm);
188 ss->SetMinKinEnergy(highEnergyLimit);
189 ssm->SetLowEnergyLimit(highEnergyLimit);
190 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
191
192 ph->RegisterProcess(new G4eIonisation(), particle);
193 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
194 ph->RegisterProcess(ss, particle);
195
196 // e+
197 particle = G4Positron::Positron();
198
199 msc1 = new G4UrbanMscModel();
200 msc2 = new G4WentzelVIModel();
201 msc1->SetHighEnergyLimit(highEnergyLimit);
202 msc2->SetLowEnergyLimit(highEnergyLimit);
203 G4EmBuilder::ConstructElectronMscProcess(msc1, msc2, particle);
204
205 ssm = new G4eCoulombScatteringModel();
206 ss = new G4CoulombScattering();
207 ss->SetEmModel(ssm);
208 ss->SetMinKinEnergy(highEnergyLimit);
209 ssm->SetLowEnergyLimit(highEnergyLimit);
210 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
211
212 // annihilation
213 auto anni = new G4eplusAnnihilation();
214 if (param->Use3GammaAnnihilationOnFly()) {
215 anni->SetEmModel(new G4eplusTo2or3GammaModel());
216 }
217
218 ph->RegisterProcess(new G4eIonisation(), particle);
219 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
220 ph->RegisterProcess(anni, particle);
221 ph->RegisterProcess(ss, particle);
222
223 // generic ion
224 particle = G4GenericIon::GenericIon();
225 G4ionIonisation* ionIoni = new G4ionIonisation();
226 ph->RegisterProcess(hmsc, particle);
227 ph->RegisterProcess(ionIoni, particle);
228 if(nullptr != pnuc) { ph->RegisterProcess(pnuc, particle); }
229
230 // muons, hadrons ions
232
233 // extra configuration
234 G4EmModelActivator mact(GetPhysicsName());
235}
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
static G4Electron * Electron()
Definition G4Electron.cc:91
static void ConstructCharged(G4hMultipleScattering *hmsc, G4NuclearStopping *nucStopping, G4bool isWVI=true)
static void ConstructElectronMscProcess(G4VMscModel *msc1, G4VMscModel *msc2, G4ParticleDefinition *particle)
static void PrepareEMPhysics()
G4bool EnablePolarisation() const
G4double MaxNIELEnergy() const
G4double MscEnergyLimit() const
G4bool Use3GammaAnnihilationOnFly() const
static G4Gamma * Gamma()
Definition G4Gamma.cc:81
static G4GenericIon * GenericIon()
static G4LossTableManager * Instance()
void SetGammaGeneralProcess(G4VEmProcess *)
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4PhysicsListHelper * GetPhysicsListHelper()
static G4Positron * Positron()
Definition G4Positron.cc:90
void SetHighEnergyLimit(G4double)
void SetActivationLowEnergyLimit(G4double)
void SetLowEnergyLimit(G4double)
void SetAngularDistribution(G4VEmAngularDistribution *)
void SetMinKinEnergy(G4double e)
void SetEmModel(G4VEmModel *, G4int index=0)
void SetMaxKinEnergy(G4double e)
const G4String & GetPhysicsName() const

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