ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4EmStandardPhysicsGS.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4EmStandardPhysicsGS.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: G4EmStandardPhysicsGS
30 //
31 // Author: V.Ivanchenko 05.06.2015
32 //
33 // Modified:
34 //
35 // Class Description:
36 //
37 // Standard EM physics constructor for HEP applications with the Goudsmit
38 // -Saunderson MSC model for e-/e+ Coulomb scattering below 100 [MeV] (instead
39 // of the Urban model). Note, that the Goudsmit-Saunderson MSC model used here
40 // with its HEP settings (i.e. less accurate). The Goudsmit-Saunderson MSC
41 // model with its most accurate settings is used in the G4EmStandard_opt4
42 // physics constructor for e-/e+ Coulomb scattering.
43 //
44 //----------------------------------------------------------------------------
45 //
46 
47 #include "G4EmStandardPhysicsGS.hh"
48 #include "G4SystemOfUnits.hh"
49 #include "G4ParticleDefinition.hh"
50 #include "G4EmParameters.hh"
51 #include "G4LossTableManager.hh"
52 
53 #include "G4ComptonScattering.hh"
54 #include "G4GammaConversion.hh"
55 #include "G4PhotoElectricEffect.hh"
56 #include "G4RayleighScattering.hh"
58 
59 #include "G4eMultipleScattering.hh"
61 #include "G4hMultipleScattering.hh"
62 #include "G4CoulombScattering.hh"
64 #include "G4WentzelVIModel.hh"
65 #include "G4UrbanMscModel.hh"
67 
72 
73 #include "G4eIonisation.hh"
74 #include "G4eBremsstrahlung.hh"
75 #include "G4eplusAnnihilation.hh"
76 #include "G4UAtomicDeexcitation.hh"
77 
78 #include "G4MuIonisation.hh"
79 #include "G4MuBremsstrahlung.hh"
80 #include "G4MuPairProduction.hh"
81 #include "G4hBremsstrahlung.hh"
82 #include "G4hPairProduction.hh"
83 
84 #include "G4hIonisation.hh"
85 #include "G4ionIonisation.hh"
86 #include "G4alphaIonisation.hh"
87 
88 #include "G4ParticleTable.hh"
89 #include "G4Gamma.hh"
90 #include "G4Electron.hh"
91 #include "G4Positron.hh"
92 #include "G4MuonPlus.hh"
93 #include "G4MuonMinus.hh"
94 #include "G4PionPlus.hh"
95 #include "G4PionMinus.hh"
96 #include "G4KaonPlus.hh"
97 #include "G4KaonMinus.hh"
98 #include "G4Proton.hh"
99 #include "G4AntiProton.hh"
100 #include "G4Deuteron.hh"
101 #include "G4Triton.hh"
102 #include "G4He3.hh"
103 #include "G4Alpha.hh"
104 #include "G4GenericIon.hh"
105 
106 #include "G4PhysicsListHelper.hh"
107 #include "G4BuilderType.hh"
108 #include "G4EmModelActivator.hh"
109 
110 // factory
112 //
114 
115 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
116 
118  : G4VPhysicsConstructor("G4EmStandardGS"), verbose(ver)
119 {
121  param->SetDefaults();
122  param->SetVerbose(verbose);
123  param->SetMscRangeFactor(0.06);
124 // param->SetMscStepLimitType(fUseSafetyPlus); // corresponds to the error-free stepping
125 // param->SetFluo(true);
127 }
128 
129 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
130 
132 {}
133 
134 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
135 
137 {
138  // gamma
139  G4Gamma::Gamma();
140 
141  // leptons
146 
147  // mesons
152 
153  // barions
156 
157  // ions
160  G4He3::He3();
161  G4Alpha::Alpha();
163 }
164 
165 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
166 
168 {
169  if(verbose > 1) {
170  G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
171  }
173 
174  // muon & hadron bremsstrahlung and pair production
183 
184  // muon & hadron multiple scattering
186  mumsc->SetEmModel(new G4WentzelVIModel());
188 
190  pimsc->SetEmModel(new G4WentzelVIModel());
192 
194  kmsc->SetEmModel(new G4WentzelVIModel());
196 
197  G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
198 
199  // high energy limit for e+- scattering models
200  G4double highEnergyLimit = G4EmParameters::Instance()->MscEnergyLimit();
201 
202  // Add standard EM Processes
204  for(const auto& particleName : partList.PartNames()) {
205  G4ParticleDefinition* particle = table->FindParticle(particleName);
206  if (!particle) { continue; }
207  if (particleName == "gamma") {
208 
211  ph->RegisterProcess(pee, particle);
212 
213  ph->RegisterProcess(new G4ComptonScattering(), particle);
214  ph->RegisterProcess(new G4GammaConversion(), particle);
215  ph->RegisterProcess(new G4RayleighScattering(), particle);
216 
217  } else if (particleName == "e-") {
218 
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 
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  //
352 
354 }
355 
356 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......