ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4EmLivermorePolarizedPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4EmLivermorePolarizedPhysics.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 
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"
40 
41 #include "G4GammaConversion.hh"
43 
44 #include "G4RayleighScattering.hh"
48 
49 #include "G4PEEffectFluoModel.hh"
50 #include "G4KleinNishinaModel.hh"
51 
52 // e+-
53 #include "G4eMultipleScattering.hh"
55 
56 #include "G4eIonisation.hh"
58 
59 #include "G4eBremsstrahlung.hh"
61 #include "G4Generator2BS.hh"
62 #include "G4SeltzerBergerModel.hh"
63 
64 // e+
65 #include "G4eplusAnnihilation.hh"
66 
67 // mu+-
69 #include "G4MuIonisation.hh"
70 #include "G4MuBremsstrahlung.hh"
71 #include "G4MuPairProduction.hh"
72 
77 
78 // hadrons
79 #include "G4hMultipleScattering.hh"
80 #include "G4MscStepLimitType.hh"
81 
82 #include "G4hBremsstrahlung.hh"
83 #include "G4hPairProduction.hh"
84 #include "G4ePairProduction.hh"
85 
86 #include "G4hIonisation.hh"
87 #include "G4ionIonisation.hh"
88 #include "G4alphaIonisation.hh"
90 #include "G4NuclearStopping.hh"
91 
92 // msc models
93 #include "G4UrbanMscModel.hh"
94 #include "G4WentzelVIModel.hh"
96 #include "G4CoulombScattering.hh"
98 
99 // interfaces
100 #include "G4LossTableManager.hh"
101 #include "G4EmParameters.hh"
102 #include "G4UAtomicDeexcitation.hh"
103 
104 // particles
105 #include "G4Gamma.hh"
106 #include "G4Electron.hh"
107 #include "G4Positron.hh"
108 #include "G4MuonPlus.hh"
109 #include "G4MuonMinus.hh"
110 #include "G4PionPlus.hh"
111 #include "G4PionMinus.hh"
112 #include "G4KaonPlus.hh"
113 #include "G4KaonMinus.hh"
114 #include "G4Proton.hh"
115 #include "G4AntiProton.hh"
116 #include "G4Deuteron.hh"
117 #include "G4Triton.hh"
118 #include "G4He3.hh"
119 #include "G4Alpha.hh"
120 #include "G4GenericIon.hh"
121 
122 //
123 #include "G4PhysicsListHelper.hh"
124 #include "G4BuilderType.hh"
125 #include "G4EmModelActivator.hh"
126 
127 // factory
129 //
131 
132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
133 
135  const G4String&)
136  : G4VPhysicsConstructor("G4EmLivermorePolarized"), verbose(ver)
137 {
139  param->SetDefaults();
140  param->SetVerbose(verbose);
141  param->SetMinEnergy(100*eV);
142  param->SetLowestElectronEnergy(100*eV);
143  param->SetNumberOfBinsPerDecade(20);
145  param->SetStepFunction(0.2, 10*um);
146  param->SetStepFunctionMuHad(0.1, 10*um);
147  param->SetUseMottCorrection(true);
149  param->SetMscSkin(3);
150  param->SetMscRangeFactor(0.2);
151  param->SetMuHadLateralDisplacement(true);
152  param->SetFluo(true);
153  //param->SetAugerCascade(true);
155 }
156 
157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
158 
160 {}
161 
162 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
163 
165 {
166  // gamma
167  G4Gamma::Gamma();
168 
169  // leptons
174 
175  // mesons
180 
181  // baryons
184 
185  // ions
188  G4He3::He3();
189  G4Alpha::Alpha();
191 }
192 
193 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
194 
196 {
197  if(verbose > 1) {
198  G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
199  }
202 
203  // muon & hadron bremsstrahlung and pair production
213 
214  // muon & hadron multiple scattering
216  mumsc->SetEmModel(new G4WentzelVIModel());
218 
220  pimsc->SetEmModel(new G4WentzelVIModel());
222 
224  kmsc->SetEmModel(new G4WentzelVIModel());
226 
227  G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
228 
229  // high energy limit for e+- scattering models
230  G4double highEnergyLimit = G4EmParameters::Instance()->MscEnergyLimit();
231  G4double livEnergyLimit = 1*GeV;
232 
233  // nuclear stopping
234  G4NuclearStopping* pnuc = new G4NuclearStopping();
235  G4NuclearStopping* inuc = new G4NuclearStopping();
236 
237  // Add Livermore EM Processes
239  for(const auto& particleName : partList.PartNames()) {
240  G4ParticleDefinition* particle = table->FindParticle(particleName);
241  if (!particle) { continue; }
242  if (particleName == "gamma") {
243 
244  G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
247  thePhotoElectricEffect->SetEmModel(mod);
248 
249  G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
250  theComptonScattering->SetEmModel(new G4KleinNishinaModel());
252  comptLiv->SetHighEnergyLimit(livEnergyLimit);
253  theComptonScattering->AddEmModel(0, comptLiv);
254 
255  G4GammaConversion* theGammaConversion = new G4GammaConversion();
257  convLiv->SetHighEnergyLimit(livEnergyLimit);
258  theGammaConversion->AddEmModel(0, convLiv);
259 
260  G4RayleighScattering* theRayleigh = new G4RayleighScattering();
261  theRayleigh->SetEmModel(new G4LivermorePolarizedRayleighModel());
262 
263  ph->RegisterProcess(thePhotoElectricEffect, particle);
264  ph->RegisterProcess(theComptonScattering, particle);
265  ph->RegisterProcess(theGammaConversion, particle);
266  ph->RegisterProcess(theRayleigh, particle);
267 
268  } else if (particleName == "e-") {
269 
270  // multiple and single scattering
274  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
275  msc1->SetHighEnergyLimit(highEnergyLimit);
276  msc2->SetLowEnergyLimit(highEnergyLimit);
277  msc->SetEmModel(msc1);
278  msc->SetEmModel(msc2);
279 
282  ss->SetEmModel(ssm);
283  ss->SetMinKinEnergy(highEnergyLimit);
284  ssm->SetLowEnergyLimit(highEnergyLimit);
285  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
286 
287  // Ionisation
288  G4eIonisation* eioni = new G4eIonisation();
289  G4LivermoreIonisationModel* theIoniLivermore = new
291  theIoniLivermore->SetHighEnergyLimit(0.1*MeV);
292  eioni->AddEmModel(0, theIoniLivermore, new G4UniversalFluctuation() );
293 
294  // Bremsstrahlung from standard
295  G4eBremsstrahlung* brem = new G4eBremsstrahlung();
300  brem->SetEmModel(br1);
301  brem->SetEmModel(br2);
302  br1->SetHighEnergyLimit(GeV);
303 
304  // register processes
305  ph->RegisterProcess(msc, particle);
306  ph->RegisterProcess(eioni, particle);
307  ph->RegisterProcess(brem, particle);
308  ph->RegisterProcess(ee, particle);
309  ph->RegisterProcess(ss, particle);
310 
311  } else if (particleName == "e+") {
312 
313  // multiple scattering
317  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
318  msc1->SetHighEnergyLimit(highEnergyLimit);
319  msc2->SetLowEnergyLimit(highEnergyLimit);
320  msc->SetEmModel(msc1);
321  msc->SetEmModel(msc2);
322 
325  ss->SetEmModel(ssm);
326  ss->SetMinKinEnergy(highEnergyLimit);
327  ssm->SetLowEnergyLimit(highEnergyLimit);
328  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
329 
330  // Ionisation
331  G4eIonisation* eioni = new G4eIonisation();
332 
333  // Bremsstrahlung from standard
334  G4eBremsstrahlung* brem = new G4eBremsstrahlung();
339  brem->SetEmModel(br1);
340  brem->SetEmModel(br2);
341  br1->SetHighEnergyLimit(GeV);
342 
343  ph->RegisterProcess(msc, particle);
344  ph->RegisterProcess(eioni, particle);
345  ph->RegisterProcess(brem, particle);
346  ph->RegisterProcess(ee, particle);
347  ph->RegisterProcess(new G4eplusAnnihilation(), particle);
348  ph->RegisterProcess(ss, particle);
349 
350  } else if (particleName == "mu+" ||
351  particleName == "mu-" ) {
352 
353  G4MuIonisation* muIoni = new G4MuIonisation();
354 
355  ph->RegisterProcess(mumsc, particle);
356  ph->RegisterProcess(muIoni, particle);
357  ph->RegisterProcess(mub, particle);
358  ph->RegisterProcess(mup, particle);
359  ph->RegisterProcess(muss, particle);
360 
361  } else if (particleName == "alpha" ||
362  particleName == "He3" ) {
363 
365  G4ionIonisation* ionIoni = new G4ionIonisation();
366 
367  ph->RegisterProcess(msc, particle);
368  ph->RegisterProcess(ionIoni, particle);
369  ph->RegisterProcess(pnuc, particle);
370 
371  } else if (particleName == "GenericIon") {
372 
373  G4ionIonisation* ionIoni = new G4ionIonisation();
374  ionIoni->SetEmModel(new G4IonParametrisedLossModel());
375  ionIoni->SetStepFunction(0.1, 1*um);
376 
377  ph->RegisterProcess(hmsc, particle);
378  ph->RegisterProcess(ionIoni, particle);
379  ph->RegisterProcess(inuc, particle);
380 
381  } else if (particleName == "pi+" ||
382  particleName == "pi-" ) {
383 
384  G4hIonisation* hIoni = new G4hIonisation();
385 
386  ph->RegisterProcess(pimsc, particle);
387  ph->RegisterProcess(hIoni, particle);
388  ph->RegisterProcess(pib, particle);
389  ph->RegisterProcess(pip, particle);
390  ph->RegisterProcess(piss, particle);
391 
392  } else if (particleName == "kaon+" ||
393  particleName == "kaon-" ) {
394 
395  G4hIonisation* hIoni = new G4hIonisation();
396 
397  ph->RegisterProcess(kmsc, particle);
398  ph->RegisterProcess(hIoni, particle);
399  ph->RegisterProcess(kb, particle);
400  ph->RegisterProcess(kp, particle);
401  ph->RegisterProcess(kss, particle);
402 
403  } else if (particleName == "proton" ||
404  particleName == "anti_proton") {
405 
407  pmsc->SetEmModel(new G4WentzelVIModel());
408  G4hIonisation* hIoni = new G4hIonisation();
409 
410  ph->RegisterProcess(pmsc, particle);
411  ph->RegisterProcess(hIoni, particle);
412  ph->RegisterProcess(pb, particle);
413  ph->RegisterProcess(pp, particle);
414  ph->RegisterProcess(new G4CoulombScattering(), particle);
415  ph->RegisterProcess(pnuc, particle);
416 
417  } else if (particleName == "B+" ||
418  particleName == "B-" ||
419  particleName == "D+" ||
420  particleName == "D-" ||
421  particleName == "Ds+" ||
422  particleName == "Ds-" ||
423  particleName == "anti_He3" ||
424  particleName == "anti_alpha" ||
425  particleName == "anti_deuteron" ||
426  particleName == "anti_lambda_c+" ||
427  particleName == "anti_omega-" ||
428  particleName == "anti_sigma_c+" ||
429  particleName == "anti_sigma_c++" ||
430  particleName == "anti_sigma+" ||
431  particleName == "anti_sigma-" ||
432  particleName == "anti_triton" ||
433  particleName == "anti_xi_c+" ||
434  particleName == "anti_xi-" ||
435  particleName == "deuteron" ||
436  particleName == "lambda_c+" ||
437  particleName == "omega-" ||
438  particleName == "sigma_c+" ||
439  particleName == "sigma_c++" ||
440  particleName == "sigma+" ||
441  particleName == "sigma-" ||
442  particleName == "tau+" ||
443  particleName == "tau-" ||
444  particleName == "triton" ||
445  particleName == "xi_c+" ||
446  particleName == "xi-" ) {
447  ph->RegisterProcess(hmsc, particle);
448  ph->RegisterProcess(new G4hIonisation(), particle);
449  ph->RegisterProcess(pnuc, particle);
450  }
451  }
452 
453  // Nuclear stopping
454  pnuc->SetMaxKinEnergy(MeV);
455  inuc->SetMaxKinEnergy(MeV);
456 
457  // Deexcitation
458  //
460  man->SetAtomDeexcitation(de);
461 
463 }
464 
465 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......