ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4EmStandardPhysicsWVI.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4EmStandardPhysicsWVI.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: G4EmStandardPhysicsWVI
30 //
31 // Author: V.Ivanchenko 09.11.2005
32 //
33 // Modified:
34 // 05.12.2005 V.Ivanchenko add controlled verbosity
35 // 13.11.2006 V.Ivanchenko use G4hMultipleScattering
36 // 23.11.2006 V.Ivanchenko remove mscStepLimit option and improve cout
37 // 13.02.2007 V.Ivanchenko use G4hMultipleScattering for muons
38 // 13.02.2007 V.Ivanchenko set skin=0.0
39 // 21.04.2008 V.Ivanchenko add long-lived D and B mesons
40 //
41 //----------------------------------------------------------------------------
42 //
43 
45 #include "G4SystemOfUnits.hh"
46 #include "G4ParticleDefinition.hh"
47 #include "G4EmParameters.hh"
48 #include "G4LossTableManager.hh"
49 
50 #include "G4ComptonScattering.hh"
51 #include "G4GammaConversion.hh"
52 #include "G4PhotoElectricEffect.hh"
53 #include "G4RayleighScattering.hh"
54 
55 #include "G4KleinNishinaModel.hh"
57 #include "G4eMultipleScattering.hh"
59 #include "G4hMultipleScattering.hh"
60 #include "G4CoulombScattering.hh"
61 #include "G4WentzelVIModel.hh"
62 #include "G4WentzelVIRelModel.hh"
64 
69 
70 #include "G4eIonisation.hh"
71 #include "G4eBremsstrahlung.hh"
72 #include "G4eplusAnnihilation.hh"
73 #include "G4UAtomicDeexcitation.hh"
74 
75 #include "G4MuIonisation.hh"
76 #include "G4MuBremsstrahlung.hh"
77 #include "G4MuPairProduction.hh"
78 #include "G4hBremsstrahlung.hh"
79 #include "G4hPairProduction.hh"
80 
81 #include "G4hIonisation.hh"
82 #include "G4ionIonisation.hh"
83 #include "G4alphaIonisation.hh"
85 #include "G4AtimaFluctuations.hh"
87 #include "G4BraggIonModel.hh"
88 #include "G4NuclearStopping.hh"
90 
91 #include "G4ParticleTable.hh"
92 #include "G4Gamma.hh"
93 #include "G4Electron.hh"
94 #include "G4Positron.hh"
95 #include "G4MuonPlus.hh"
96 #include "G4MuonMinus.hh"
97 #include "G4PionPlus.hh"
98 #include "G4PionMinus.hh"
99 #include "G4KaonPlus.hh"
100 #include "G4KaonMinus.hh"
101 #include "G4Proton.hh"
102 #include "G4AntiProton.hh"
103 #include "G4Deuteron.hh"
104 #include "G4Triton.hh"
105 #include "G4He3.hh"
106 #include "G4Alpha.hh"
107 #include "G4GenericIon.hh"
108 
109 
110 #include "G4PhysicsListHelper.hh"
111 #include "G4BuilderType.hh"
112 #include "G4EmModelActivator.hh"
113 
114 // factory
116 //
118 
119 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
120 
122  : G4VPhysicsConstructor("G4EmStandardWVI"), verbose(ver)
123 {
125  param->SetDefaults();
126  param->SetVerbose(verbose);
127  param->SetMinEnergy(10*eV);
128  param->SetLowestElectronEnergy(10*eV);
129  param->SetNumberOfBinsPerDecade(20);
131  param->SetStepFunction(0.2, 100*um);
132  param->SetStepFunctionMuHad(0.2, 50*um);
133  param->SetUseMottCorrection(true);
134  param->SetMuHadLateralDisplacement(true);
135  param->SetMscThetaLimit(0.15);
136  param->SetFluo(true);
138 }
139 
140 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
141 
143 {}
144 
145 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
146 
148 {
149  // gamma
150  G4Gamma::Gamma();
151 
152  // leptons
157 
158  // mesons
163 
164  // barions
167 
168  // ions
171  G4He3::He3();
172  G4Alpha::Alpha();
174 }
175 
176 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
177 
179 {
180  if(verbose > 1) {
181  G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
182  }
184 
185  // muon & hadron bremsstrahlung and pair production
194 
195  // muon & hadron multiple scattering
197  mumsc->SetEmModel(new G4WentzelVIRelModel());
200 
202  pimsc->SetEmModel(new G4WentzelVIRelModel());
205 
207  kmsc->SetEmModel(new G4WentzelVIRelModel());
210 
211  G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
212 
213  // nuclear stopping
214  G4NuclearStopping* pnuc = new G4NuclearStopping();
215  pnuc->SetMaxKinEnergy(MeV);
216 
217  // Add standard EM Processes
219  for(const auto& particleName : partList.PartNames()) {
220  G4ParticleDefinition* particle = table->FindParticle(particleName);
221  if (!particle) { continue; }
222  if (particleName == "gamma") {
223 
226 
228  cs->SetEmModel(new G4KleinNishinaModel());
229 
230  ph->RegisterProcess(pee, particle);
231  ph->RegisterProcess(cs, particle);
232  ph->RegisterProcess(new G4GammaConversion(), particle);
233  ph->RegisterProcess(new G4RayleighScattering(), particle);
234 
235  } else if (particleName == "e-") {
236 
238  msc->SetEmModel(new G4WentzelVIModel());
240 
241  ph->RegisterProcess(msc, particle);
242  ph->RegisterProcess(new G4eIonisation(), particle);
243  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
244  ph->RegisterProcess(ss, particle);
245 
246  } else if (particleName == "e+") {
247 
249  msc->SetEmModel(new G4WentzelVIModel());
251 
254 
255  ph->RegisterProcess(msc, particle);
256  ph->RegisterProcess(new G4eIonisation(), particle);
257  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
258  ph->RegisterProcess(ann, particle);
259  ph->RegisterProcess(ss, particle);
260 
261  } else if (particleName == "mu+" ||
262  particleName == "mu-" ) {
263 
264  ph->RegisterProcess(mumsc, particle);
265  ph->RegisterProcess(new G4MuIonisation(), particle);
266  ph->RegisterProcess(mub, particle);
267  ph->RegisterProcess(mup, particle);
268  ph->RegisterProcess(muss, particle);
269 
270  } else if (particleName == "alpha" ||
271  particleName == "He3") {
272 
273  ph->RegisterProcess(new G4hMultipleScattering(), particle);
274  ph->RegisterProcess(new G4ionIonisation(), particle);
275  ph->RegisterProcess(pnuc, particle);
276 
277  } else if (particleName == "GenericIon") {
278 
279  G4ionIonisation* ionIoni = new G4ionIonisation();
280  ionIoni->SetEmModel(new G4BraggIonModel(),0);
281  ionIoni->SetEmModel(new G4AtimaEnergyLossModel(),1);
282  ionIoni->SetFluctModel(new G4AtimaFluctuations());
283  ionIoni->SetStepFunction(0.1, 1*um);
284 
285  ph->RegisterProcess(hmsc, particle);
286  ph->RegisterProcess(ionIoni, particle);
287  ph->RegisterProcess(pnuc, particle);
288 
289  } else if (particleName == "pi+" ||
290  particleName == "pi-" ) {
291 
292  ph->RegisterProcess(pimsc, particle);
293  ph->RegisterProcess(new G4hIonisation(), particle);
294  ph->RegisterProcess(pib, particle);
295  ph->RegisterProcess(pip, particle);
296  ph->RegisterProcess(piss, particle);
297 
298  } else if (particleName == "kaon+" ||
299  particleName == "kaon-" ) {
300 
301  ph->RegisterProcess(kmsc, particle);
302  ph->RegisterProcess(new G4hIonisation(), particle);
303  ph->RegisterProcess(kb, particle);
304  ph->RegisterProcess(kp, particle);
305  ph->RegisterProcess(kss, particle);
306 
307  } else if (particleName == "proton" ||
308  particleName == "anti_proton") {
309 
311  pmsc->SetEmModel(new G4WentzelVIRelModel());
314 
315  ph->RegisterProcess(pmsc, particle);
316  ph->RegisterProcess(new G4hIonisation(), particle);
317  ph->RegisterProcess(pb, particle);
318  ph->RegisterProcess(pp, particle);
319  ph->RegisterProcess(pss, particle);
320 
321  } else if (particleName == "B+" ||
322  particleName == "B-" ||
323  particleName == "D+" ||
324  particleName == "D-" ||
325  particleName == "Ds+" ||
326  particleName == "Ds-" ||
327  particleName == "anti_He3" ||
328  particleName == "anti_alpha" ||
329  particleName == "anti_deuteron" ||
330  particleName == "anti_lambda_c+" ||
331  particleName == "anti_omega-" ||
332  particleName == "anti_sigma_c+" ||
333  particleName == "anti_sigma_c++" ||
334  particleName == "anti_sigma+" ||
335  particleName == "anti_sigma-" ||
336  particleName == "anti_triton" ||
337  particleName == "anti_xi_c+" ||
338  particleName == "anti_xi-" ||
339  particleName == "deuteron" ||
340  particleName == "lambda_c+" ||
341  particleName == "omega-" ||
342  particleName == "sigma_c+" ||
343  particleName == "sigma_c++" ||
344  particleName == "sigma+" ||
345  particleName == "sigma-" ||
346  particleName == "tau+" ||
347  particleName == "tau-" ||
348  particleName == "triton" ||
349  particleName == "xi_c+" ||
350  particleName == "xi-" ) {
351 
352  ph->RegisterProcess(hmsc, particle);
353  ph->RegisterProcess(new G4hIonisation(), particle);
354  ph->RegisterProcess(pnuc, particle);
355  }
356  }
357 
358  // Deexcitation
359  //
362 
364 }
365 
366 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......