ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PhysListEm5DStandard.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PhysListEm5DStandard.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 // ClassName: PhysListEm5DStandard
29 //
30 // Author: IgS 07.11.2017
31 //
32 // Modified:
33 // 17.11.2017 Created using PhysListEm5DStandard from V.Ivanchenko
34 //
35 //----------------------------------------------------------------------------
36 //
37 
38 #include "PhysListEm5DStandard.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"
48 #include "G4BetheHeitler5DModel.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 "G4Gamma.hh"
79 #include "G4Electron.hh"
80 #include "G4Positron.hh"
81 #include "G4MuonPlus.hh"
82 #include "G4MuonMinus.hh"
83 #include "G4PionPlus.hh"
84 #include "G4PionMinus.hh"
85 #include "G4KaonPlus.hh"
86 #include "G4KaonMinus.hh"
87 #include "G4Proton.hh"
88 #include "G4AntiProton.hh"
89 #include "G4Deuteron.hh"
90 #include "G4Triton.hh"
91 #include "G4He3.hh"
92 #include "G4Alpha.hh"
93 #include "G4GenericIon.hh"
94 
95 #include "G4PhysicsListHelper.hh"
96 #include "G4BuilderType.hh"
97 
98 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
99 
101  : G4VPhysicsConstructor("G4EmStandard_5D"), fVerbose(ver)
102 {
104  param->SetDefaults();
105  param->SetVerbose(fVerbose);
106  param->SetNumberOfBinsPerDecade(10);
108  param->SetLateralDisplacementAlg96(false);
109  param->SetFluo(true);
111 }
112 
113 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
114 
116 {}
117 
118 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
119 
121 {
122  // gamma
123  G4Gamma::Gamma();
124 
125  // leptons
130 
131  // mesons
136 
137  // barions
140 
141  // ions
144  G4He3::He3();
145  G4Alpha::Alpha();
147 }
148 
149 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
150 
152 {
153  if(fVerbose > 1) {
154  G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
155  }
157 
158  // muon & hadron bremsstrahlung and pair production
167 
168  // muon & hadron multiple scattering
170  mumsc->AddEmModel(0, new G4WentzelVIModel());
172 
174  pimsc->AddEmModel(0, new G4WentzelVIModel());
176 
178  kmsc->AddEmModel(0, new G4WentzelVIModel());
180 
181  G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
182 
183  // high energy limit for e+- scattering models
184  G4double highEnergyLimit = 100*MeV;
185 
186  // Add standard EM Processes
187  auto myParticleIterator=GetParticleIterator();
188  myParticleIterator->reset();
189  while( (*myParticleIterator)() ){
190  G4ParticleDefinition* particle = myParticleIterator->value();
191  G4String particleName = particle->GetParticleName();
192 
193  if (particleName == "gamma") {
194 
195  // photo-effect and Compton
196  ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
197  ph->RegisterProcess(new G4ComptonScattering(), particle);
198 
199  // Gamma conversion
201  G4VEmModel* theGC5DModel = new G4BetheHeitler5DModel();
202  gc->SetEmModel(theGC5DModel);
203  ph->RegisterProcess(gc, particle);
204 
205  // Rayleigh scattering
206  ph->RegisterProcess(new G4RayleighScattering(), particle);
207 
208  } else if (particleName == "e-") {
209 
211  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
212  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
213  msc1->SetHighEnergyLimit(highEnergyLimit);
214  msc2->SetLowEnergyLimit(highEnergyLimit);
215  msc->AddEmModel(0, msc1);
216  msc->AddEmModel(0, msc2);
217 
220  ss->SetEmModel(ssm, 1);
221  ss->SetMinKinEnergy(highEnergyLimit);
222  ssm->SetLowEnergyLimit(highEnergyLimit);
223  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
224 
225  ph->RegisterProcess(msc, particle);
226  ph->RegisterProcess(new G4eIonisation(), particle);
227  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
228  ph->RegisterProcess(ss, particle);
229 
230  } else if (particleName == "e+") {
231 
233  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
234  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
235  msc1->SetHighEnergyLimit(highEnergyLimit);
236  msc2->SetLowEnergyLimit(highEnergyLimit);
237  msc->AddEmModel(0, msc1);
238  msc->AddEmModel(0, msc2);
239 
242  ss->SetEmModel(ssm, 1);
243  ss->SetMinKinEnergy(highEnergyLimit);
244  ssm->SetLowEnergyLimit(highEnergyLimit);
245  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
246 
247  ph->RegisterProcess(msc, particle);
248  ph->RegisterProcess(new G4eIonisation(), particle);
249  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
250  ph->RegisterProcess(new G4eplusAnnihilation(), particle);
251  ph->RegisterProcess(ss, particle);
252 
253  } else if (particleName == "mu+" ||
254  particleName == "mu-" ) {
255 
256  ph->RegisterProcess(mumsc, particle);
257  ph->RegisterProcess(new G4MuIonisation(), particle);
258  ph->RegisterProcess(mub, particle);
259  ph->RegisterProcess(mup, particle);
260  ph->RegisterProcess(muss, particle);
261 
262  } else if (particleName == "alpha" ||
263  particleName == "He3") {
264 
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  ph->RegisterProcess(pimsc, particle);
277  ph->RegisterProcess(new G4hIonisation(), particle);
278  ph->RegisterProcess(pib, particle);
279  ph->RegisterProcess(pip, particle);
280  ph->RegisterProcess(piss, particle);
281 
282  } else if (particleName == "kaon+" ||
283  particleName == "kaon-" ) {
284 
285  ph->RegisterProcess(kmsc, particle);
286  ph->RegisterProcess(new G4hIonisation(), particle);
287  ph->RegisterProcess(kb, particle);
288  ph->RegisterProcess(kp, particle);
289  ph->RegisterProcess(kss, particle);
290 
291  } else if (particleName == "proton" ||
292  particleName == "anti_proton") {
293 
295  pmsc->SetEmModel(new G4WentzelVIModel());
296  G4hIonisation* hIoni = new G4hIonisation();
297  hIoni->SetStepFunction(0.1, 10*um);
298 
299  ph->RegisterProcess(pmsc, particle);
300  ph->RegisterProcess(hIoni, particle);
301  ph->RegisterProcess(pb, particle);
302  ph->RegisterProcess(pp, particle);
303  ph->RegisterProcess(new G4CoulombScattering(), particle);
304 
305  } else if (particleName == "B+" ||
306  particleName == "B-" ||
307  particleName == "D+" ||
308  particleName == "D-" ||
309  particleName == "Ds+" ||
310  particleName == "Ds-" ||
311  particleName == "anti_He3" ||
312  particleName == "anti_alpha" ||
313  particleName == "anti_deuteron" ||
314  particleName == "anti_lambda_c+" ||
315  particleName == "anti_omega-" ||
316  particleName == "anti_sigma_c+" ||
317  particleName == "anti_sigma_c++" ||
318  particleName == "anti_sigma+" ||
319  particleName == "anti_sigma-" ||
320  particleName == "anti_triton" ||
321  particleName == "anti_xi_c+" ||
322  particleName == "anti_xi-" ||
323  particleName == "deuteron" ||
324  particleName == "lambda_c+" ||
325  particleName == "omega-" ||
326  particleName == "sigma_c+" ||
327  particleName == "sigma_c++" ||
328  particleName == "sigma+" ||
329  particleName == "sigma-" ||
330  particleName == "tau+" ||
331  particleName == "tau-" ||
332  particleName == "triton" ||
333  particleName == "xi_c+" ||
334  particleName == "xi-" ) {
335 
336  ph->RegisterProcess(hmsc, particle);
337  ph->RegisterProcess(new G4hIonisation(), particle);
338  }
339  }
340 
341  // Deexcitation
342  //
345 }
346 
347 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......