Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EmLivermorePhysics.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26
29#include "G4SystemOfUnits.hh"
30
31// *** Processes and models
32
33// gamma
36
39
40#include "G4GammaConversion.hh"
43
46
49
50// e+-
53
54#include "G4eIonisation.hh"
56
57#include "G4eBremsstrahlung.hh"
59#include "G4Generator2BS.hh"
62
63// e+
65
66// hadrons
68#include "G4MscStepLimitType.hh"
69
70#include "G4ePairProduction.hh"
71
72#include "G4hIonisation.hh"
73#include "G4ionIonisation.hh"
75#include "G4NuclearStopping.hh"
76
77// msc models
78#include "G4UrbanMscModel.hh"
79#include "G4WentzelVIModel.hh"
83
84// interfaces
85#include "G4EmParameters.hh"
86#include "G4EmBuilder.hh"
87
88// particles
89
90#include "G4Gamma.hh"
91#include "G4Electron.hh"
92#include "G4Positron.hh"
93#include "G4GenericIon.hh"
94
95//
97#include "G4BuilderType.hh"
98#include "G4EmModelActivator.hh"
99
100// factory
102//
104
105//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
106
108 : G4VPhysicsConstructor(pname), verbose(ver)
109{
111 param->SetDefaults();
112 param->SetVerbose(verbose);
113 param->SetMinEnergy(100*CLHEP::eV);
114 param->SetLowestElectronEnergy(100*CLHEP::eV);
115 param->SetNumberOfBinsPerDecade(20);
117 param->SetStepFunction(0.2, 10*CLHEP::um);
118 param->SetStepFunctionMuHad(0.1, 50*CLHEP::um);
119 param->SetStepFunctionLightIons(0.1, 20*CLHEP::um);
120 param->SetStepFunctionIons(0.1, 1*CLHEP::um);
121 param->SetUseMottCorrection(true);
123 param->SetMscSkin(3);
124 param->SetMscRangeFactor(0.08);
125 param->SetMuHadLateralDisplacement(true);
126 param->SetFluo(true);
127 param->SetMaxNIELEnergy(1*CLHEP::MeV);
129}
130
131//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
132
134{}
135
136//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
137
139{
140 // minimal set of particles for EM physics
142}
143
144//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
145
147{
148 if(verbose > 1) {
149 G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
150 }
153
154 // processes used by several particles
156 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
157
158 // high energy limit for e+- scattering models
160 G4double livEnergyLimit = 1*GeV;
161
162 // nuclear stopping
163 G4double nielEnergyLimit = G4EmParameters::Instance()->MaxNIELEnergy();
165 pnuc->SetMaxKinEnergy(nielEnergyLimit);
166
167 // Add Livermore EM Processes
168
169 // Add gamma EM Processes
171
172 // photoelectric effect - Livermore model only
173 G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
174 thePhotoElectricEffect->SetEmModel(new G4LivermorePhotoElectricModel());
175
176 // Compton scattering - Livermore model only
177 G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
178 theComptonScattering->SetEmModel(new G4KleinNishinaModel());
179 G4VEmModel* comptLiv = new G4LivermoreComptonModel();
180 comptLiv->SetHighEnergyLimit(livEnergyLimit);
181 theComptonScattering->AddEmModel(0, comptLiv);
182
183 // gamma conversion
184 G4GammaConversion* theGammaConversion = new G4GammaConversion();
186 theGammaConversion->SetEmModel(convLiv);
187
188 // default Rayleigh scattering is Livermore
189 G4RayleighScattering* theRayleigh = new G4RayleighScattering();
190
191 ph->RegisterProcess(thePhotoElectricEffect, particle);
192 ph->RegisterProcess(theComptonScattering, particle);
193 ph->RegisterProcess(theGammaConversion, particle);
194 ph->RegisterProcess(theRayleigh, particle);
195
196 // e-
197 particle = G4Electron::Electron();
198
199 // multiple and single scattering
203 msc1->SetHighEnergyLimit(highEnergyLimit);
204 msc2->SetLowEnergyLimit(highEnergyLimit);
205 msc->SetEmModel(msc1);
206 msc->SetEmModel(msc2);
207
210 ss->SetEmModel(ssm);
211 ss->SetMinKinEnergy(highEnergyLimit);
212 ssm->SetLowEnergyLimit(highEnergyLimit);
213 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
214
215 // Ionisation - Livermore should be used only for low energies
216 G4eIonisation* eioni = new G4eIonisation();
217 G4VEmModel* theIoniLiv = new G4LivermoreIonisationModel();
218 theIoniLiv->SetHighEnergyLimit(0.1*CLHEP::MeV);
219 eioni->AddEmModel(0, theIoniLiv, new G4UniversalFluctuation() );
220
221 // Bremsstrahlung
227 brem->SetEmModel(br1);
228 brem->SetEmModel(br2);
229 br1->SetHighEnergyLimit(GeV);
230
231 // register processes
232 ph->RegisterProcess(msc, particle);
233 ph->RegisterProcess(eioni, particle);
234 ph->RegisterProcess(brem, particle);
235 ph->RegisterProcess(ee, particle);
236 ph->RegisterProcess(ss, particle);
237
238 // e+
239 particle = G4Positron::Positron();
240
241 // multiple and single scattering
242 msc = new G4eMultipleScattering;
243 msc1 = new G4GoudsmitSaundersonMscModel();
244 msc2 = new G4WentzelVIModel();
245 msc1->SetHighEnergyLimit(highEnergyLimit);
246 msc2->SetLowEnergyLimit(highEnergyLimit);
247 msc->SetEmModel(msc1);
248 msc->SetEmModel(msc2);
249
250 ssm = new G4eCoulombScatteringModel();
251 ss = new G4CoulombScattering();
252 ss->SetEmModel(ssm);
253 ss->SetMinKinEnergy(highEnergyLimit);
254 ssm->SetLowEnergyLimit(highEnergyLimit);
255 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
256
257 // ionisation
258 eioni = new G4eIonisation();
259
260 // Bremsstrahlung from standard
261 brem = new G4eBremsstrahlung();
262 br1 = new G4SeltzerBergerModel();
263 br2 = new G4eBremsstrahlungRelModel();
266 brem->SetEmModel(br1);
267 brem->SetEmModel(br2);
268 br1->SetHighEnergyLimit(GeV);
269
270 // register processes
271 ph->RegisterProcess(msc, particle);
272 ph->RegisterProcess(eioni, particle);
273 ph->RegisterProcess(brem, particle);
274 ph->RegisterProcess(ee, particle);
275 ph->RegisterProcess(new G4eplusAnnihilation(), particle);
276 ph->RegisterProcess(ss, particle);
277
278 // generic ion
279 particle = G4GenericIon::GenericIon();
280 G4ionIonisation* ionIoni = new G4ionIonisation();
282 ph->RegisterProcess(hmsc, particle);
283 ph->RegisterProcess(ionIoni, particle);
284 ph->RegisterProcess(pnuc, particle);
285
286 // muons, hadrons, ions
288
289 // extra configuration
291
292}
293
294//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@ bElectromagnetic
@ fUseSafetyPlus
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static G4Electron * Electron()
Definition: G4Electron.cc:93
static void ConstructCharged(G4hMultipleScattering *hmsc, G4NuclearStopping *nucStopping, G4bool isWVI=true)
Definition: G4EmBuilder.cc:170
static void ConstructMinimalEmSet()
Definition: G4EmBuilder.cc:234
static void PrepareEMPhysics()
Definition: G4EmBuilder.cc:259
void ConstructProcess() override
void ConstructParticle() override
G4EmLivermorePhysics(G4int ver=1, const G4String &name="G4EmLivermore")
void SetMinEnergy(G4double val)
void SetLowestElectronEnergy(G4double val)
void SetStepFunctionLightIons(G4double v1, G4double v2)
void SetNumberOfBinsPerDecade(G4int val)
static G4EmParameters * Instance()
G4double MaxNIELEnergy() const
G4double MscEnergyLimit() const
void SetMuHadLateralDisplacement(G4bool val)
void ActivateAngularGeneratorForIonisation(G4bool val)
void SetStepFunction(G4double v1, G4double v2)
void SetFluo(G4bool val)
void SetStepFunctionMuHad(G4double v1, G4double v2)
void SetVerbose(G4int val)
void SetMscSkin(G4double val)
void SetMaxNIELEnergy(G4double val)
void SetStepFunctionIons(G4double v1, G4double v2)
void SetMscStepLimitType(G4MscStepLimitType val)
void SetUseMottCorrection(G4bool val)
void SetMscRangeFactor(G4double val)
static G4Gamma * Gamma()
Definition: G4Gamma.cc:85
static G4GenericIon * GenericIon()
Definition: G4GenericIon.cc:92
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4PhysicsListHelper * GetPhysicsListHelper()
static G4Positron * Positron()
Definition: G4Positron.cc:93
void SetHighEnergyLimit(G4double)
Definition: G4VEmModel.hh:757
void SetActivationLowEnergyLimit(G4double)
Definition: G4VEmModel.hh:778
void SetLowEnergyLimit(G4double)
Definition: G4VEmModel.hh:764
void SetAngularDistribution(G4VEmAngularDistribution *)
Definition: G4VEmModel.hh:618
void SetMinKinEnergy(G4double e)
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=nullptr)
void SetEmModel(G4VEmModel *, G4int index=0)
void SetMaxKinEnergy(G4double e)
void SetEmModel(G4VEmModel *, G4int index=0)
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *fluc=0, const G4Region *region=nullptr)
void SetEmModel(G4VMscModel *, size_t index=0)
const G4String & GetPhysicsName() const