ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4EmLowEPPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4EmLowEPPhysics.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 #include "G4EmLowEPPhysics.hh"
28 #include "G4ParticleDefinition.hh"
29 #include "G4SystemOfUnits.hh"
30 #include "G4ParticleTable.hh"
31 
32 // *** Processes and models
33 
34 // gamma
35 #include "G4PhotoElectricEffect.hh"
37 
38 #include "G4ComptonScattering.hh"
39 #include "G4LowEPComptonModel.hh"
41 
42 #include "G4GammaConversion.hh"
44 
45 #include "G4RayleighScattering.hh"
47 
48 #include "G4PEEffectFluoModel.hh"
49 #include "G4KleinNishinaModel.hh"
50 
51 // e+-
52 #include "G4eMultipleScattering.hh"
54 
55 #include "G4eIonisation.hh"
57 
58 #include "G4eBremsstrahlung.hh"
60 #include "G4Generator2BS.hh"
61 #include "G4BetheHeitler5DModel.hh"
62 
63 // e+
64 #include "G4eplusAnnihilation.hh"
65 
66 // mu+-
68 #include "G4MuIonisation.hh"
69 #include "G4MuBremsstrahlung.hh"
70 #include "G4MuPairProduction.hh"
71 #include "G4SeltzerBergerModel.hh"
72 
73 // hadrons
74 #include "G4hMultipleScattering.hh"
75 #include "G4MscStepLimitType.hh"
76 
77 #include "G4hBremsstrahlung.hh"
78 #include "G4hPairProduction.hh"
79 #include "G4ePairProduction.hh"
80 
81 #include "G4hIonisation.hh"
82 #include "G4ionIonisation.hh"
83 #include "G4alphaIonisation.hh"
86 #include "G4NuclearStopping.hh"
87 
88 // msc models
89 #include "G4UrbanMscModel.hh"
90 #include "G4WentzelVIModel.hh"
91 #include "G4LowEWentzelVIModel.hh"
94 #include "G4CoulombScattering.hh"
95 
96 // interfaces
97 #include "G4LossTableManager.hh"
98 #include "G4UAtomicDeexcitation.hh"
99 #include "G4EmParameters.hh"
100 
101 // particles
102 
103 #include "G4Gamma.hh"
104 #include "G4Electron.hh"
105 #include "G4Positron.hh"
106 #include "G4MuonPlus.hh"
107 #include "G4MuonMinus.hh"
108 #include "G4PionPlus.hh"
109 #include "G4PionMinus.hh"
110 #include "G4KaonPlus.hh"
111 #include "G4KaonMinus.hh"
112 #include "G4Proton.hh"
113 #include "G4AntiProton.hh"
114 #include "G4Deuteron.hh"
115 #include "G4Triton.hh"
116 #include "G4He3.hh"
117 #include "G4Alpha.hh"
118 #include "G4GenericIon.hh"
119 
120 //
121 #include "G4PhysicsListHelper.hh"
122 #include "G4BuilderType.hh"
123 #include "G4EmModelActivator.hh"
124 
125 // factory
127 //
129 
130 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
131 
133  : G4VPhysicsConstructor("G4EmLowEPPhysics"), verbose(ver)
134 {
136  param->SetDefaults();
137  param->SetVerbose(verbose);
138  param->SetMinEnergy(100*eV);
139  param->SetLowestElectronEnergy(100*eV);
140  param->SetNumberOfBinsPerDecade(20);
142  param->SetStepFunction(0.2, 100*um);
143  param->SetStepFunctionMuHad(0.2, 50*um);
144  param->SetUseMottCorrection(true);
145  param->SetMscRangeFactor(0.04);
146  param->SetMuHadLateralDisplacement(true);
147  param->SetFluo(true);
148  param->SetUseICRU90Data(true);
149  // param->SetAugerCascade(true);
151 }
152 
153 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
154 
156 {}
157 
158 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
159 
161 {
162  // gamma
163  G4Gamma::Gamma();
164 
165  // leptons
170 
171  // mesons
176 
177  // baryons
180 
181  // ions
184  G4He3::He3();
185  G4Alpha::Alpha();
187 }
188 
189 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
190 
192 {
195 
196  // muon & hadron bremsstrahlung and pair production
206 
207  // muon & hadron multiple scattering
209  mumsc->SetEmModel(new G4LowEWentzelVIModel());
211  pimsc->SetEmModel(new G4LowEWentzelVIModel());
213  kmsc->SetEmModel(new G4LowEWentzelVIModel());
214 
216  hmsc->SetEmModel(new G4LowEWentzelVIModel());
217 
218  // nuclear stopping
219  G4NuclearStopping* pnuc = new G4NuclearStopping();
220  pnuc->SetMaxKinEnergy(MeV);
221 
222  // Add Livermore EM Processes
224  for(const auto& particleName : partList.PartNames()) {
225  G4ParticleDefinition* particle = table->FindParticle(particleName);
226  if (!particle) { continue; }
227  if (particleName == "gamma") {
228 
229  // Photoelectric effect - Livermore model only
231  G4VEmModel* theLivermorePEModel = new G4LivermorePhotoElectricModel();
232  pe->SetEmModel(theLivermorePEModel);
233 
234  // Compton scattering - Livermore model above 20 MeV, Monarsh's model below
236  cs->SetEmModel(new G4KleinNishinaModel());
237  G4VEmModel* theLowEPComptonModel = new G4LowEPComptonModel();
238  theLowEPComptonModel->SetHighEnergyLimit(20*MeV);
239  cs->AddEmModel(0, theLowEPComptonModel);
240 
241  // gamma conversion - 5D model below 80 GeV with Livermore x-sections
242  G4GammaConversion* theGammaConversion = new G4GammaConversion();
243  G4VEmModel* conv = new G4BetheHeitler5DModel();
244  theGammaConversion->SetEmModel(conv);
245 
246  // default Rayleigh scattering is Livermore
247  G4RayleighScattering* theRayleigh = new G4RayleighScattering();
248 
249  ph->RegisterProcess(pe, particle);
250  ph->RegisterProcess(cs, particle);
251  ph->RegisterProcess(theGammaConversion, particle);
252  ph->RegisterProcess(theRayleigh, particle);
253 
254  } else if (particleName == "e-") {
255 
256  // multiple scattering
258  msc->SetEmModel(new G4LowEWentzelVIModel());
259 
260  // Ionisation - Livermore should be used only for low energies
261  G4eIonisation* eioni = new G4eIonisation();
262  G4LivermoreIonisationModel* theIoniLivermore = new
264  theIoniLivermore->SetHighEnergyLimit(0.1*MeV);
265  eioni->AddEmModel(0, theIoniLivermore, new G4UniversalFluctuation() );
266 
267  // Bremsstrahlung
268  G4eBremsstrahlung* brem = new G4eBremsstrahlung();
273  brem->SetEmModel(br1);
274  brem->SetEmModel(br2);
275  br1->SetHighEnergyLimit(GeV);
276 
277  // register processes
278  ph->RegisterProcess(msc, particle);
279  ph->RegisterProcess(eioni, particle);
280  ph->RegisterProcess(brem, particle);
281 
282  } else if (particleName == "e+") {
283 
284  // multiple scattering
286  msc->SetEmModel(new G4LowEWentzelVIModel());
287 
288  // Standard ionisation
289  G4eIonisation* eioni = new G4eIonisation();
290 
291  // Bremsstrahlung
292  G4eBremsstrahlung* brem = new G4eBremsstrahlung();
297  brem->SetEmModel(br1);
298  brem->SetEmModel(br2);
299  br1->SetHighEnergyLimit(GeV);
300 
301  // register processes
302  ph->RegisterProcess(msc, particle);
303  ph->RegisterProcess(eioni, particle);
304  ph->RegisterProcess(brem, particle);
305  ph->RegisterProcess(ee, particle);
306  ph->RegisterProcess(new G4eplusAnnihilation(), particle);
307 
308  } else if (particleName == "mu+" ||
309  particleName == "mu-" ) {
310 
311  G4MuIonisation* muIoni = new G4MuIonisation();
312 
313  ph->RegisterProcess(mumsc, particle);
314  ph->RegisterProcess(muIoni, particle);
315  ph->RegisterProcess(mub, particle);
316  ph->RegisterProcess(mup, particle);
317 
318  } else if (particleName == "alpha" ||
319  particleName == "He3" ) {
320 
321  G4ionIonisation* ionIoni = new G4ionIonisation();
322 
323  ph->RegisterProcess(hmsc, particle);
324  ph->RegisterProcess(ionIoni, particle);
325  ph->RegisterProcess(pnuc, particle);
326 
327  } else if (particleName == "GenericIon") {
328 
329  G4ionIonisation* ionIoni = new G4ionIonisation();
332  mod1->SetHighEnergyLimit(10*MeV);
333  ionIoni->SetEmModel(mod1);
334  ionIoni->SetEmModel(mod2);
335  ionIoni->SetStepFunction(0.1, 1*um);
336 
337  ph->RegisterProcess(hmsc, particle);
338  ph->RegisterProcess(ionIoni, particle);
339  ph->RegisterProcess(new G4hBremsstrahlung(), particle);
340  ph->RegisterProcess(new G4hPairProduction(), particle);
341  ph->RegisterProcess(pnuc, particle);
342 
343  } else if (particleName == "pi+" ||
344  particleName == "pi-" ) {
345 
346  G4hIonisation* hIoni = new G4hIonisation();
347 
348  ph->RegisterProcess(pimsc, particle);
349  ph->RegisterProcess(hIoni, particle);
350  ph->RegisterProcess(pib, particle);
351  ph->RegisterProcess(pip, particle);
352 
353  } else if (particleName == "kaon+" ||
354  particleName == "kaon-" ) {
355 
356  G4hIonisation* hIoni = new G4hIonisation();
357 
358  ph->RegisterProcess(kmsc, particle);
359  ph->RegisterProcess(hIoni, particle);
360  ph->RegisterProcess(kb, particle);
361  ph->RegisterProcess(kp, particle);
362 
363  } else if (particleName == "proton" ||
364  particleName == "anti_proton") {
365 
367  pmsc->SetEmModel(new G4LowEWentzelVIModel());
368  G4hIonisation* hIoni = new G4hIonisation();
369 
370  ph->RegisterProcess(pmsc, particle);
371  ph->RegisterProcess(hIoni, particle);
372  ph->RegisterProcess(pb, particle);
373  ph->RegisterProcess(pp, particle);
374  ph->RegisterProcess(pnuc, particle);
375 
376  } else if (particleName == "B+" ||
377  particleName == "B-" ||
378  particleName == "D+" ||
379  particleName == "D-" ||
380  particleName == "Ds+" ||
381  particleName == "Ds-" ||
382  particleName == "anti_He3" ||
383  particleName == "anti_alpha" ||
384  particleName == "anti_deuteron" ||
385  particleName == "anti_lambda_c+" ||
386  particleName == "anti_omega-" ||
387  particleName == "anti_sigma_c+" ||
388  particleName == "anti_sigma_c++" ||
389  particleName == "anti_sigma+" ||
390  particleName == "anti_sigma-" ||
391  particleName == "anti_triton" ||
392  particleName == "anti_xi_c+" ||
393  particleName == "anti_xi-" ||
394  particleName == "deuteron" ||
395  particleName == "lambda_c+" ||
396  particleName == "omega-" ||
397  particleName == "sigma_c+" ||
398  particleName == "sigma_c++" ||
399  particleName == "sigma+" ||
400  particleName == "sigma-" ||
401  particleName == "tau+" ||
402  particleName == "tau-" ||
403  particleName == "triton" ||
404  particleName == "xi_c+" ||
405  particleName == "xi-" ) {
406 
407  ph->RegisterProcess(hmsc, particle);
408  ph->RegisterProcess(new G4hIonisation(), particle);
409  ph->RegisterProcess(pnuc, particle);
410  }
411  }
412  // Deexcitation
413  //
415  man->SetAtomDeexcitation(de);
416 
418 }
419 
420 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......