ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4EmStandardPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4EmStandardPhysics.cc
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 //
27 //---------------------------------------------------------------------------
28 //
29 // ClassName: G4EmStandardPhysics
30 //
31 // Author: V.Ivanchenko 09.11.2005
32 //
33 // Modified:
34 //
35 //----------------------------------------------------------------------------
36 //
37 
38 #include "G4EmStandardPhysics.hh"
39 #include "G4SystemOfUnits.hh"
40 #include "G4ParticleDefinition.hh"
41 #include "G4EmParameters.hh"
42 #include "G4LossTableManager.hh"
43 
44 #include "G4ComptonScattering.hh"
45 #include "G4GammaConversion.hh"
46 #include "G4PhotoElectricEffect.hh"
47 #include "G4RayleighScattering.hh"
49 
50 #include "G4eMultipleScattering.hh"
52 #include "G4hMultipleScattering.hh"
53 #include "G4CoulombScattering.hh"
55 #include "G4WentzelVIModel.hh"
56 #include "G4UrbanMscModel.hh"
57 
62 
63 #include "G4eIonisation.hh"
64 #include "G4eBremsstrahlung.hh"
65 #include "G4eplusAnnihilation.hh"
66 #include "G4UAtomicDeexcitation.hh"
67 
68 #include "G4MuIonisation.hh"
69 #include "G4MuBremsstrahlung.hh"
70 #include "G4MuPairProduction.hh"
71 #include "G4hBremsstrahlung.hh"
72 #include "G4hPairProduction.hh"
73 
74 #include "G4hIonisation.hh"
75 #include "G4ionIonisation.hh"
76 #include "G4alphaIonisation.hh"
77 
78 #include "G4ParticleTable.hh"
79 #include "G4Gamma.hh"
80 #include "G4Electron.hh"
81 #include "G4Positron.hh"
82 #include "G4MuonPlus.hh"
83 #include "G4MuonMinus.hh"
84 #include "G4PionPlus.hh"
85 #include "G4PionMinus.hh"
86 #include "G4KaonPlus.hh"
87 #include "G4KaonMinus.hh"
88 #include "G4Proton.hh"
89 #include "G4AntiProton.hh"
90 #include "G4Deuteron.hh"
91 #include "G4Triton.hh"
92 #include "G4He3.hh"
93 #include "G4Alpha.hh"
94 #include "G4GenericIon.hh"
95 
96 #include "G4PhysicsListHelper.hh"
97 #include "G4BuilderType.hh"
98 #include "G4EmModelActivator.hh"
99 #include "G4GammaGeneralProcess.hh"
100 
101 // factory
103 //
105 
106 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
107 
109  : G4VPhysicsConstructor("G4EmStandard"), verbose(ver)
110 {
112  param->SetDefaults();
113  param->SetVerbose(verbose);
115 }
116 
117 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
118 
120 {}
121 
122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
123 
125 {
126  // gamma
127  G4Gamma::Gamma();
128 
129  // leptons
134 
135  // mesons
140 
141  // barions
144 
145  // ions
148  G4He3::He3();
149  G4Alpha::Alpha();
151 }
152 
153 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
154 
156 {
157  if(verbose > 1) {
158  G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
159  }
162 
163  // muon & hadron bremsstrahlung and pair production
172 
173  // muon & hadron multiple scattering
175  mumsc->SetEmModel(new G4WentzelVIModel());
177 
179  pimsc->SetEmModel(new G4WentzelVIModel());
181 
183  kmsc->SetEmModel(new G4WentzelVIModel());
185 
186  G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
187 
188  // high energy limit for e+- scattering models
189  G4double highEnergyLimit = G4EmParameters::Instance()->MscEnergyLimit();
190 
191  // Add standard EM Processes
193  for(const auto& particleName : partList.PartNames()) {
194  G4ParticleDefinition* particle = table->FindParticle(particleName);
195  if (!particle) { continue; }
196  if (particleName == "gamma") {
197 
200 
201  if(G4EmParameters::Instance()->GeneralProcessActive()) {
203  sp->AddEmProcess(pee);
205  sp->AddEmProcess(new G4GammaConversion());
207  man->SetGammaGeneralProcess(sp);
208  ph->RegisterProcess(sp, particle);
209 
210  } else {
211  ph->RegisterProcess(pee, particle);
212  ph->RegisterProcess(new G4ComptonScattering(), particle);
213  ph->RegisterProcess(new G4GammaConversion(), particle);
214  ph->RegisterProcess(new G4RayleighScattering(), particle);
215  }
216 
217  } else if (particleName == "e-") {
218 
220  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
221  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
222  msc1->SetHighEnergyLimit(highEnergyLimit);
223  msc2->SetLowEnergyLimit(highEnergyLimit);
224  msc->SetEmModel(msc1);
225  msc->SetEmModel(msc2);
226 
229  ss->SetEmModel(ssm);
230  ss->SetMinKinEnergy(highEnergyLimit);
231  ssm->SetLowEnergyLimit(highEnergyLimit);
232  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
233 
234  ph->RegisterProcess(msc, particle);
235  ph->RegisterProcess(new G4eIonisation(), particle);
236  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
237  ph->RegisterProcess(ss, particle);
238 
239  } else if (particleName == "e+") {
240 
242  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
243  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
244  msc1->SetHighEnergyLimit(highEnergyLimit);
245  msc2->SetLowEnergyLimit(highEnergyLimit);
246  msc->SetEmModel(msc1);
247  msc->SetEmModel(msc2);
248 
251  ss->SetEmModel(ssm);
252  ss->SetMinKinEnergy(highEnergyLimit);
253  ssm->SetLowEnergyLimit(highEnergyLimit);
254  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
255 
256  ph->RegisterProcess(msc, particle);
257  ph->RegisterProcess(new G4eIonisation(), particle);
258  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
259  ph->RegisterProcess(new G4eplusAnnihilation(), particle);
260  ph->RegisterProcess(ss, particle);
261 
262  } else if (particleName == "mu+" ||
263  particleName == "mu-" ) {
264 
265  ph->RegisterProcess(mumsc, particle);
266  ph->RegisterProcess(new G4MuIonisation(), particle);
267  ph->RegisterProcess(mub, particle);
268  ph->RegisterProcess(mup, particle);
269  ph->RegisterProcess(muss, particle);
270 
271  } else if (particleName == "alpha" ||
272  particleName == "He3") {
273 
274  ph->RegisterProcess(new G4hMultipleScattering(), particle);
275  ph->RegisterProcess(new G4ionIonisation(), particle);
276 
277  } else if (particleName == "GenericIon") {
278 
279  ph->RegisterProcess(hmsc, particle);
280  ph->RegisterProcess(new G4ionIonisation(), particle);
281 
282  } else if (particleName == "pi+" ||
283  particleName == "pi-" ) {
284 
285  ph->RegisterProcess(pimsc, particle);
286  ph->RegisterProcess(new G4hIonisation(), particle);
287  ph->RegisterProcess(pib, particle);
288  ph->RegisterProcess(pip, particle);
289  ph->RegisterProcess(piss, particle);
290 
291  } else if (particleName == "kaon+" ||
292  particleName == "kaon-" ) {
293 
294  ph->RegisterProcess(kmsc, particle);
295  ph->RegisterProcess(new G4hIonisation(), particle);
296  ph->RegisterProcess(kb, particle);
297  ph->RegisterProcess(kp, particle);
298  ph->RegisterProcess(kss, particle);
299 
300  } else if (particleName == "proton" ||
301  particleName == "anti_proton") {
302 
304  pmsc->SetEmModel(new G4WentzelVIModel());
305 
306  ph->RegisterProcess(pmsc, particle);
307  ph->RegisterProcess(new G4hIonisation(), particle);
308  ph->RegisterProcess(pb, particle);
309  ph->RegisterProcess(pp, particle);
310  ph->RegisterProcess(new G4CoulombScattering(), particle);
311 
312  } else if (particleName == "B+" ||
313  particleName == "B-" ||
314  particleName == "D+" ||
315  particleName == "D-" ||
316  particleName == "Ds+" ||
317  particleName == "Ds-" ||
318  particleName == "anti_He3" ||
319  particleName == "anti_alpha" ||
320  particleName == "anti_deuteron" ||
321  particleName == "anti_lambda_c+" ||
322  particleName == "anti_omega-" ||
323  particleName == "anti_sigma_c+" ||
324  particleName == "anti_sigma_c++" ||
325  particleName == "anti_sigma+" ||
326  particleName == "anti_sigma-" ||
327  particleName == "anti_triton" ||
328  particleName == "anti_xi_c+" ||
329  particleName == "anti_xi-" ||
330  particleName == "deuteron" ||
331  particleName == "lambda_c+" ||
332  particleName == "omega-" ||
333  particleName == "sigma_c+" ||
334  particleName == "sigma_c++" ||
335  particleName == "sigma+" ||
336  particleName == "sigma-" ||
337  particleName == "tau+" ||
338  particleName == "tau-" ||
339  particleName == "triton" ||
340  particleName == "xi_c+" ||
341  particleName == "xi-" ) {
342 
343  ph->RegisterProcess(hmsc, particle);
344  ph->RegisterProcess(new G4hIonisation(), particle);
345  }
346  }
347 
348  // Deexcitation
349  //
351 
353 }
354 
355 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......