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 //
29 // ClassName: PhysListEm5DStandard
30 //
31 // Author: IgS 07.11.2017
32 //
33 // Modified:
34 // 17.11.2017 Created using PhysListEm5DStandard from V.Ivanchenko
35 //
36 //----------------------------------------------------------------------------
37 //
38 
39 #include "PhysListEm5DStandard.hh"
40 #include "G4SystemOfUnits.hh"
41 #include "G4ParticleDefinition.hh"
42 #include "G4EmParameters.hh"
43 #include "G4LossTableManager.hh"
44 
45 #include "G4ComptonScattering.hh"
46 #include "G4GammaConversion.hh"
47 #include "G4PhotoElectricEffect.hh"
48 #include "G4RayleighScattering.hh"
49 #include "G4BetheHeitler5DModel.hh"
50 
51 #include "G4eMultipleScattering.hh"
53 #include "G4hMultipleScattering.hh"
54 #include "G4CoulombScattering.hh"
56 #include "G4WentzelVIModel.hh"
57 #include "G4UrbanMscModel.hh"
58 
63 
64 #include "G4eIonisation.hh"
65 #include "G4eBremsstrahlung.hh"
66 #include "G4eplusAnnihilation.hh"
67 #include "G4UAtomicDeexcitation.hh"
68 
69 #include "G4MuIonisation.hh"
70 #include "G4MuBremsstrahlung.hh"
71 #include "G4MuPairProduction.hh"
72 #include "G4hBremsstrahlung.hh"
73 #include "G4hPairProduction.hh"
74 
75 #include "G4hIonisation.hh"
76 #include "G4ionIonisation.hh"
77 #include "G4alphaIonisation.hh"
78 
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 
99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
100 
102  : G4VPhysicsConstructor("G4EmStandard_5D"), verbose(ver)
103 {
105  param->SetDefaults();
106  param->SetVerbose(verbose);
107  param->SetNumberOfBinsPerDecade(10);
109  param->SetLateralDisplacementAlg96(false);
110  param->SetFluo(true);
112 }
113 
114 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
115 
117 {}
118 
119 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
120 
122 {
123  // gamma
124  G4Gamma::Gamma();
125 
126  // leptons
131 
132  // mesons
137 
138  // barions
141 
142  // ions
145  G4He3::He3();
146  G4Alpha::Alpha();
148 }
149 
150 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
151 
153 {
154  if(verbose > 1) {
155  G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
156  }
158 
159  // muon & hadron bremsstrahlung and pair production
168 
169  // muon & hadron multiple scattering
171  mumsc->AddEmModel(0, new G4WentzelVIModel());
173 
175  pimsc->AddEmModel(0, new G4WentzelVIModel());
177 
179  kmsc->AddEmModel(0, new G4WentzelVIModel());
181 
182  G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
183 
184  // high energy limit for e+- scattering models
185  G4double highEnergyLimit = 100*MeV;
186 
187  // Add standard EM Processes
188  auto myParticleIterator=GetParticleIterator();
189  myParticleIterator->reset();
190  while( (*myParticleIterator)() ){
191  G4ParticleDefinition* particle = myParticleIterator->value();
192  G4String particleName = particle->GetParticleName();
193 
194  if (particleName == "gamma") {
195 
196  // photo-effect and Compton
197  ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
198  ph->RegisterProcess(new G4ComptonScattering(), particle);
199 
200  // Gamma conversion
202  G4VEmModel* theGC5DModel = new G4BetheHeitler5DModel();
203  gc->SetEmModel(theGC5DModel);
204  ph->RegisterProcess(gc, particle);
205 
206  // Rayleigh scattering
207  ph->RegisterProcess(new G4RayleighScattering(), particle);
208 
209  } else if (particleName == "e-") {
210 
212  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
213  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
214  msc1->SetHighEnergyLimit(highEnergyLimit);
215  msc2->SetLowEnergyLimit(highEnergyLimit);
216  msc->AddEmModel(0, msc1);
217  msc->AddEmModel(0, msc2);
218 
221  ss->SetEmModel(ssm, 1);
222  ss->SetMinKinEnergy(highEnergyLimit);
223  ssm->SetLowEnergyLimit(highEnergyLimit);
224  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
225 
226  ph->RegisterProcess(msc, particle);
227  ph->RegisterProcess(new G4eIonisation(), particle);
228  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
229  ph->RegisterProcess(ss, particle);
230 
231  } else if (particleName == "e+") {
232 
234  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
235  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
236  msc1->SetHighEnergyLimit(highEnergyLimit);
237  msc2->SetLowEnergyLimit(highEnergyLimit);
238  msc->AddEmModel(0, msc1);
239  msc->AddEmModel(0, msc2);
240 
243  ss->SetEmModel(ssm, 1);
244  ss->SetMinKinEnergy(highEnergyLimit);
245  ssm->SetLowEnergyLimit(highEnergyLimit);
246  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
247 
248  ph->RegisterProcess(msc, particle);
249  ph->RegisterProcess(new G4eIonisation(), particle);
250  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
251  ph->RegisterProcess(new G4eplusAnnihilation(), particle);
252  ph->RegisterProcess(ss, particle);
253 
254  } else if (particleName == "mu+" ||
255  particleName == "mu-" ) {
256 
257  ph->RegisterProcess(mumsc, particle);
258  ph->RegisterProcess(new G4MuIonisation(), particle);
259  ph->RegisterProcess(mub, particle);
260  ph->RegisterProcess(mup, particle);
261  ph->RegisterProcess(muss, particle);
262 
263  } else if (particleName == "alpha" ||
264  particleName == "He3") {
265 
266  ph->RegisterProcess(new G4hMultipleScattering(), particle);
267  ph->RegisterProcess(new G4ionIonisation(), particle);
268 
269  } else if (particleName == "GenericIon") {
270 
271  ph->RegisterProcess(hmsc, particle);
272  ph->RegisterProcess(new G4ionIonisation(), particle);
273 
274  } else if (particleName == "pi+" ||
275  particleName == "pi-" ) {
276 
277  ph->RegisterProcess(pimsc, particle);
278  ph->RegisterProcess(new G4hIonisation(), particle);
279  ph->RegisterProcess(pib, particle);
280  ph->RegisterProcess(pip, particle);
281  ph->RegisterProcess(piss, particle);
282 
283  } else if (particleName == "kaon+" ||
284  particleName == "kaon-" ) {
285 
286  ph->RegisterProcess(kmsc, particle);
287  ph->RegisterProcess(new G4hIonisation(), particle);
288  ph->RegisterProcess(kb, particle);
289  ph->RegisterProcess(kp, particle);
290  ph->RegisterProcess(kss, particle);
291 
292  } else if (particleName == "proton" ||
293  particleName == "anti_proton") {
294 
296  pmsc->SetEmModel(new G4WentzelVIModel());
297  G4hIonisation* hIoni = new G4hIonisation();
298  hIoni->SetStepFunction(0.1, 10*um);
299 
300  ph->RegisterProcess(pmsc, particle);
301  ph->RegisterProcess(hIoni, particle);
302  ph->RegisterProcess(pb, particle);
303  ph->RegisterProcess(pp, particle);
304  ph->RegisterProcess(new G4CoulombScattering(), particle);
305 
306  } else if (particleName == "B+" ||
307  particleName == "B-" ||
308  particleName == "D+" ||
309  particleName == "D-" ||
310  particleName == "Ds+" ||
311  particleName == "Ds-" ||
312  particleName == "anti_He3" ||
313  particleName == "anti_alpha" ||
314  particleName == "anti_deuteron" ||
315  particleName == "anti_lambda_c+" ||
316  particleName == "anti_omega-" ||
317  particleName == "anti_sigma_c+" ||
318  particleName == "anti_sigma_c++" ||
319  particleName == "anti_sigma+" ||
320  particleName == "anti_sigma-" ||
321  particleName == "anti_triton" ||
322  particleName == "anti_xi_c+" ||
323  particleName == "anti_xi-" ||
324  particleName == "deuteron" ||
325  particleName == "lambda_c+" ||
326  particleName == "omega-" ||
327  particleName == "sigma_c+" ||
328  particleName == "sigma_c++" ||
329  particleName == "sigma+" ||
330  particleName == "sigma-" ||
331  particleName == "tau+" ||
332  particleName == "tau-" ||
333  particleName == "triton" ||
334  particleName == "xi_c+" ||
335  particleName == "xi-" ) {
336 
337  ph->RegisterProcess(hmsc, particle);
338  ph->RegisterProcess(new G4hIonisation(), particle);
339  }
340  }
341 
342  // Deexcitation
343  //
346 }
347 
348 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......