Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4EmStandardPhysics.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// $Id$
27//
28//---------------------------------------------------------------------------
29//
30// ClassName: G4EmStandardPhysics
31//
32// Author: V.Ivanchenko 09.11.2005
33//
34// Modified:
35// 05.12.2005 V.Ivanchenko add controlled verbosity
36// 13.11.2006 V.Ivanchenko use G4hMultipleScattering
37// 23.11.2006 V.Ivanchenko remove mscStepLimit option and improve cout
38// 13.02.2007 V.Ivanchenko use G4hMultipleScattering for muons
39// 13.02.2007 V.Ivanchenko set skin=0.0
40// 21.04.2008 V.Ivanchenko add long-lived D and B mesons
41//
42//----------------------------------------------------------------------------
43//
44
46#include "G4SystemOfUnits.hh"
48#include "G4LossTableManager.hh"
49#include "G4EmProcessOptions.hh"
50
52#include "G4GammaConversion.hh"
54
60#include "G4WentzelVIModel.hh"
61#include "G4UrbanMscModel95.hh"
62
67
68#include "G4eIonisation.hh"
69#include "G4eBremsstrahlung.hh"
72
73#include "G4MuIonisation.hh"
74#include "G4MuBremsstrahlung.hh"
75#include "G4MuPairProduction.hh"
76#include "G4hBremsstrahlung.hh"
77#include "G4hPairProduction.hh"
78
79#include "G4hIonisation.hh"
80#include "G4ionIonisation.hh"
81#include "G4alphaIonisation.hh"
82
83#include "G4Gamma.hh"
84#include "G4Electron.hh"
85#include "G4Positron.hh"
86#include "G4MuonPlus.hh"
87#include "G4MuonMinus.hh"
88#include "G4PionPlus.hh"
89#include "G4PionMinus.hh"
90#include "G4KaonPlus.hh"
91#include "G4KaonMinus.hh"
92#include "G4Proton.hh"
93#include "G4AntiProton.hh"
94#include "G4Deuteron.hh"
95#include "G4Triton.hh"
96#include "G4He3.hh"
97#include "G4Alpha.hh"
98#include "G4GenericIon.hh"
99
100#include "G4PhysicsListHelper.hh"
101#include "G4BuilderType.hh"
102
103// factory
105//
107
108//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
109
111 : G4VPhysicsConstructor("G4EmStandard"), verbose(ver)
112{
115}
116
117//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
118
120 : G4VPhysicsConstructor("G4EmStandard"), verbose(ver)
121{
124}
125
126//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
127
129{}
130
131//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
132
134{
135// gamma
137
138// leptons
143
144// mesons
149
150// barions
153
154// ions
157 G4He3::He3();
160}
161
162//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
163
165{
167
168 // muon & hadron bremsstrahlung and pair production
177
178 // muon & hadron multiple scattering
180 mumsc->AddEmModel(0, new G4WentzelVIModel());
182 pimsc->AddEmModel(0, new G4WentzelVIModel());
184 kmsc->AddEmModel(0, new G4WentzelVIModel());
186 pmsc->AddEmModel(0, new G4WentzelVIModel());
187 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
188
189 // high energy limit for e+- scattering models
190 G4double highEnergyLimit = 100*MeV;
191
192 // Add standard EM Processes
194 while( (*theParticleIterator)() ){
196 G4String particleName = particle->GetParticleName();
197 if(verbose > 1)
198 G4cout << "### " << GetPhysicsName() << " instantiates for "
199 << particleName << G4endl;
200
201 if (particleName == "gamma") {
202
203 ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
204 ph->RegisterProcess(new G4ComptonScattering(), particle);
205 ph->RegisterProcess(new G4GammaConversion(), particle);
206
207 } else if (particleName == "e-") {
208
212 msc1->SetHighEnergyLimit(highEnergyLimit);
213 msc2->SetLowEnergyLimit(highEnergyLimit);
214 msc->AddEmModel(0, msc1);
215 msc->AddEmModel(0, msc2);
216
219 ss->SetEmModel(ssm, 1);
220 ss->SetMinKinEnergy(highEnergyLimit);
221 ssm->SetLowEnergyLimit(highEnergyLimit);
222 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
223
224 ph->RegisterProcess(msc, particle);
225 ph->RegisterProcess(new G4eIonisation(), particle);
226 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
227 ph->RegisterProcess(ss, particle);
228
229 } else if (particleName == "e+") {
230
234 msc1->SetHighEnergyLimit(highEnergyLimit);
235 msc2->SetLowEnergyLimit(highEnergyLimit);
236 msc->AddEmModel(0, msc1);
237 msc->AddEmModel(0, msc2);
238
241 ss->SetEmModel(ssm, 1);
242 ss->SetMinKinEnergy(highEnergyLimit);
243 ssm->SetLowEnergyLimit(highEnergyLimit);
244 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
245
246 ph->RegisterProcess(msc, particle);
247 ph->RegisterProcess(new G4eIonisation(), particle);
248 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
249 ph->RegisterProcess(new G4eplusAnnihilation(), particle);
250 ph->RegisterProcess(ss, particle);
251
252 } else if (particleName == "mu+" ||
253 particleName == "mu-" ) {
254
255 ph->RegisterProcess(mumsc, particle);
256 ph->RegisterProcess(new G4MuIonisation(), particle);
257 ph->RegisterProcess(mub, particle);
258 ph->RegisterProcess(mup, particle);
259 ph->RegisterProcess(new G4CoulombScattering(), particle);
260
261 } else if (particleName == "alpha" ||
262 particleName == "He3") {
263
264 //ph->RegisterProcess(hmsc, particle);
265 ph->RegisterProcess(new G4hMultipleScattering(), particle);
266 ph->RegisterProcess(new G4ionIonisation(), particle);
267
268 } else if (particleName == "GenericIon") {
269
270 ph->RegisterProcess(hmsc, particle);
271 ph->RegisterProcess(new G4ionIonisation(), particle);
272
273 } else if (particleName == "pi+" ||
274 particleName == "pi-" ) {
275
276 //G4hMultipleScattering* pimsc = new G4hMultipleScattering();
277 ph->RegisterProcess(pimsc, particle);
278 ph->RegisterProcess(new G4hIonisation(), particle);
279 ph->RegisterProcess(pib, particle);
280 ph->RegisterProcess(pip, particle);
281
282 } else if (particleName == "kaon+" ||
283 particleName == "kaon-" ) {
284
285 //G4hMultipleScattering* kmsc = new G4hMultipleScattering();
286 ph->RegisterProcess(kmsc, particle);
287 ph->RegisterProcess(new G4hIonisation(), particle);
288 ph->RegisterProcess(kb, particle);
289 ph->RegisterProcess(kp, particle);
290
291 } else if (particleName == "proton" ||
292 particleName == "anti_proton") {
293
294 //G4hMultipleScattering* pmsc = new G4hMultipleScattering();
295 ph->RegisterProcess(pmsc, particle);
296 ph->RegisterProcess(new G4hIonisation(), particle);
297 ph->RegisterProcess(pb, particle);
298 ph->RegisterProcess(pp, particle);
299
300 } else if (particleName == "B+" ||
301 particleName == "B-" ||
302 particleName == "D+" ||
303 particleName == "D-" ||
304 particleName == "Ds+" ||
305 particleName == "Ds-" ||
306 particleName == "anti_He3" ||
307 particleName == "anti_alpha" ||
308 particleName == "anti_deuteron" ||
309 particleName == "anti_lambda_c+" ||
310 particleName == "anti_omega-" ||
311 particleName == "anti_sigma_c+" ||
312 particleName == "anti_sigma_c++" ||
313 particleName == "anti_sigma+" ||
314 particleName == "anti_sigma-" ||
315 particleName == "anti_triton" ||
316 particleName == "anti_xi_c+" ||
317 particleName == "anti_xi-" ||
318 particleName == "deuteron" ||
319 particleName == "lambda_c+" ||
320 particleName == "omega-" ||
321 particleName == "sigma_c+" ||
322 particleName == "sigma_c++" ||
323 particleName == "sigma+" ||
324 particleName == "sigma-" ||
325 particleName == "tau+" ||
326 particleName == "tau-" ||
327 particleName == "triton" ||
328 particleName == "xi_c+" ||
329 particleName == "xi-" ) {
330
331 ph->RegisterProcess(hmsc, particle);
332 ph->RegisterProcess(new G4hIonisation(), particle);
333 }
334 }
336 opt.SetVerbose(verbose);
337 opt.SetPolarAngleLimit(CLHEP::pi);
338
339 // Deexcitation
340 //
343}
344
345//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@ bElectromagnetic
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
static G4AntiProton * AntiProton()
Definition: G4AntiProton.cc:93
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:94
static G4Electron * Electron()
Definition: G4Electron.cc:94
void SetPolarAngleLimit(G4double val)
void SetVerbose(G4int val, const G4String &name="all")
virtual void ConstructParticle()
G4EmStandardPhysics(G4int ver=0)
virtual void ConstructProcess()
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
static G4GenericIon * GenericIonDefinition()
Definition: G4GenericIon.cc:87
static G4He3 * He3()
Definition: G4He3.cc:94
static G4KaonMinus * KaonMinusDefinition()
Definition: G4KaonMinus.cc:108
static G4KaonPlus * KaonPlusDefinition()
Definition: G4KaonPlus.cc:108
void SetAtomDeexcitation(G4VAtomDeexcitation *)
static G4LossTableManager * Instance()
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:100
static G4MuonPlus * MuonPlus()
Definition: G4MuonPlus.cc:99
const G4String & GetParticleName() const
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4PhysicsListHelper * GetPhysicsListHelper()
static G4PionMinus * PionMinusDefinition()
Definition: G4PionMinus.cc:93
static G4PionPlus * PionPlusDefinition()
Definition: G4PionPlus.cc:93
static G4Positron * Positron()
Definition: G4Positron.cc:94
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4Triton * Triton()
Definition: G4Triton.cc:95
void SetHighEnergyLimit(G4double)
Definition: G4VEmModel.hh:585
void SetActivationLowEnergyLimit(G4double)
Definition: G4VEmModel.hh:606
void SetLowEnergyLimit(G4double)
Definition: G4VEmModel.hh:592
void SetMinKinEnergy(G4double e)
void SetEmModel(G4VEmModel *, G4int index=1)
void AddEmModel(G4int order, G4VEmModel *, const G4Region *region=0)
const G4String & GetPhysicsName() const
G4ParticleTable::G4PTblDicIterator * theParticleIterator