ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PhysListEm19DStandard.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PhysListEm19DStandard.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: PhysListEm19DStandard
30 //
31 // Author: Jose Luis Rodriguez 18.04.2018
32 //
33 // Modified:
34 // 18.04.2018 Created from PhysListEm5DStandard
35 //
36 //----------------------------------------------------------------------------
37 //
38 
39 #include "PhysListEm19DStandard.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 #include "G4BraggIonModel.hh"
59 
64 
65 #include "G4eIonisation.hh"
66 #include "G4eBremsstrahlung.hh"
67 #include "G4eplusAnnihilation.hh"
68 #include "G4UAtomicDeexcitation.hh"
69 
70 #include "G4MuIonisation.hh"
71 #include "G4MuBremsstrahlung.hh"
72 #include "G4MuPairProduction.hh"
73 #include "G4hBremsstrahlung.hh"
74 #include "G4hPairProduction.hh"
75 
76 #include "G4hIonisation.hh"
77 #include "G4ionIonisation.hh"
78 #include "G4alphaIonisation.hh"
80 #include "G4AtimaFluctuations.hh"
82 
83 #include "G4Gamma.hh"
84 #include "G4Electron.hh"
85 #include "G4Positron.hh"
86 #include "G4MuonPlus.hh"
87 #include "G4MuonMinus.hh"
88 #include "G4PionPlus.hh"
89 #include "G4PionMinus.hh"
90 #include "G4KaonPlus.hh"
91 #include "G4KaonMinus.hh"
92 #include "G4Proton.hh"
93 #include "G4AntiProton.hh"
94 #include "G4Deuteron.hh"
95 #include "G4Triton.hh"
96 #include "G4He3.hh"
97 #include "G4Alpha.hh"
98 #include "G4GenericIon.hh"
99 
100 #include "G4PhysicsListHelper.hh"
101 #include "G4BuilderType.hh"
102 
103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
104 
106  : G4VPhysicsConstructor("G4EmStandard_ATIMA"), verbose(ver)
107 {
109  param->SetDefaults();
110  param->SetVerbose(verbose);
111  param->SetNumberOfBinsPerDecade(10);
113  param->SetLateralDisplacementAlg96(false);
114  param->SetFluo(true);
116 }
117 
118 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
119 
121 {}
122 
123 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
124 
126 {
127  // gamma
128  G4Gamma::Gamma();
129 
130  // leptons
135 
136  // mesons
141 
142  // barions
145 
146  // ions
149  G4He3::He3();
150  G4Alpha::Alpha();
152 }
153 
154 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
155 
157 {
158  if(verbose > 1) {
159  G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
160  }
162 
163  // muon & hadron bremsstrahlung and pair production
172 
173  // muon & hadron multiple scattering
175  mumsc->AddEmModel(0, new G4WentzelVIModel());
177 
179  pimsc->AddEmModel(0, new G4WentzelVIModel());
181 
183  kmsc->AddEmModel(0, new G4WentzelVIModel());
185 
186  G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
187 
188  // high energy limit for e+- scattering models
189  G4double highEnergyLimit = 100*MeV;
190 
191  // Add standard EM Processes
192  auto myParticleIterator=GetParticleIterator();
193  myParticleIterator->reset();
194  while( (*myParticleIterator)() ){
195  G4ParticleDefinition* particle = myParticleIterator->value();
196  G4String particleName = particle->GetParticleName();
197 
198  if (particleName == "gamma") {
199 
200  // photo-effect and Compton
201  ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
202  ph->RegisterProcess(new G4ComptonScattering(), particle);
203 
204  // Gamma conversion
206  G4VEmModel* theGC5DModel = new G4BetheHeitler5DModel();
207  gc->SetEmModel(theGC5DModel);
208  ph->RegisterProcess(gc, particle);
209 
210  // Rayleigh scattering
211  ph->RegisterProcess(new G4RayleighScattering(), particle);
212 
213  } else if (particleName == "e-") {
214 
216  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
217  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
218  msc1->SetHighEnergyLimit(highEnergyLimit);
219  msc2->SetLowEnergyLimit(highEnergyLimit);
220  msc->AddEmModel(0, msc1);
221  msc->AddEmModel(0, msc2);
222 
225  ss->SetEmModel(ssm, 1);
226  ss->SetMinKinEnergy(highEnergyLimit);
227  ssm->SetLowEnergyLimit(highEnergyLimit);
228  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
229 
230  ph->RegisterProcess(msc, particle);
231  ph->RegisterProcess(new G4eIonisation(), particle);
232  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
233  ph->RegisterProcess(ss, particle);
234 
235  } else if (particleName == "e+") {
236 
238  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
239  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
240  msc1->SetHighEnergyLimit(highEnergyLimit);
241  msc2->SetLowEnergyLimit(highEnergyLimit);
242  msc->AddEmModel(0, msc1);
243  msc->AddEmModel(0, msc2);
244 
247  ss->SetEmModel(ssm, 1);
248  ss->SetMinKinEnergy(highEnergyLimit);
249  ssm->SetLowEnergyLimit(highEnergyLimit);
250  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
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 
276  } else if (particleName == "GenericIon") {
277 
278  G4ionIonisation* ionIoni = new G4ionIonisation();
279  ionIoni->SetEmModel(new G4BraggIonModel(),0);
280  ionIoni->SetEmModel(new G4AtimaEnergyLossModel(),1);
281  ionIoni->SetFluctModel(new G4AtimaFluctuations());
282 
283  ph->RegisterProcess(hmsc, particle);
284  ph->RegisterProcess(ionIoni, particle);
285 
286  } else if (particleName == "pi+" ||
287  particleName == "pi-" ) {
288 
289  ph->RegisterProcess(pimsc, particle);
290  ph->RegisterProcess(new G4hIonisation(), particle);
291  ph->RegisterProcess(pib, particle);
292  ph->RegisterProcess(pip, particle);
293  ph->RegisterProcess(piss, particle);
294 
295  } else if (particleName == "kaon+" ||
296  particleName == "kaon-" ) {
297 
298  ph->RegisterProcess(kmsc, particle);
299  ph->RegisterProcess(new G4hIonisation(), particle);
300  ph->RegisterProcess(kb, particle);
301  ph->RegisterProcess(kp, particle);
302  ph->RegisterProcess(kss, particle);
303 
304  } else if (particleName == "proton" ||
305  particleName == "anti_proton") {
306 
308  pmsc->SetEmModel(new G4WentzelVIModel());
309  G4hIonisation* hIoni = new G4hIonisation();
310  hIoni->SetStepFunction(0.1, 10*um);
311 
312  ph->RegisterProcess(pmsc, particle);
313  ph->RegisterProcess(hIoni, particle);
314  ph->RegisterProcess(pb, particle);
315  ph->RegisterProcess(pp, particle);
316  ph->RegisterProcess(new G4CoulombScattering(), particle);
317 
318  } else if (particleName == "B+" ||
319  particleName == "B-" ||
320  particleName == "D+" ||
321  particleName == "D-" ||
322  particleName == "Ds+" ||
323  particleName == "Ds-" ||
324  particleName == "anti_He3" ||
325  particleName == "anti_alpha" ||
326  particleName == "anti_deuteron" ||
327  particleName == "anti_lambda_c+" ||
328  particleName == "anti_omega-" ||
329  particleName == "anti_sigma_c+" ||
330  particleName == "anti_sigma_c++" ||
331  particleName == "anti_sigma+" ||
332  particleName == "anti_sigma-" ||
333  particleName == "anti_triton" ||
334  particleName == "anti_xi_c+" ||
335  particleName == "anti_xi-" ||
336  particleName == "deuteron" ||
337  particleName == "lambda_c+" ||
338  particleName == "omega-" ||
339  particleName == "sigma_c+" ||
340  particleName == "sigma_c++" ||
341  particleName == "sigma+" ||
342  particleName == "sigma-" ||
343  particleName == "tau+" ||
344  particleName == "tau-" ||
345  particleName == "triton" ||
346  particleName == "xi_c+" ||
347  particleName == "xi-" ) {
348 
349  ph->RegisterProcess(hmsc, particle);
350  ph->RegisterProcess(new G4hIonisation(), particle);
351  }
352  }
353 
354  // Deexcitation
355  //
358 }
359 
360 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......