ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PhysListEmLivermore.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PhysListEmLivermore.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 //
28 //
29 //
30 //
31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
33 
34 #include "PhysListEmLivermore.hh"
35 #include "G4BuilderType.hh"
36 #include "G4ParticleDefinition.hh"
37 #include "G4ProcessManager.hh"
38 
39 // gamma
40 
41 #include "G4PhotoElectricEffect.hh"
43 
44 #include "G4ComptonScattering.hh"
46 
47 #include "G4GammaConversion.hh"
49 
50 #include "G4RayleighScattering.hh"
52 
53 // e-
54 
55 #include "G4eIonisation.hh"
58 
59 #include "G4eBremsstrahlung.hh"
61 
62 // e+
63 
64 #include "G4eplusAnnihilation.hh"
65 
66 // mu
67 
68 #include "G4MuIonisation.hh"
69 #include "G4MuBremsstrahlung.hh"
70 #include "G4MuPairProduction.hh"
71 
72 // hadrons, ions
73 
74 #include "G4hIonisation.hh"
75 #include "G4ionIonisation.hh"
76 
77 // deexcitation
78 
79 #include "G4LossTableManager.hh"
80 #include "G4UAtomicDeexcitation.hh"
81 
82 #include "G4SystemOfUnits.hh"
83 
84 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
85 
87  : G4VPhysicsConstructor(name)
88 {
90  param->SetDefaults();
91  param->SetMinEnergy(10*eV);
92  param->SetMaxEnergy(10*TeV);
93  param->SetNumberOfBinsPerDecade(10);
94 
95  param->SetVerbose(0);
96  param->Dump();
97  }
98 
99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
100 
102 { }
103 
104 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
105 
107 {
108  // Add Livermore EM Processes
109 
111  particleIterator->reset();
112  while( (*particleIterator)() ){
114  G4ProcessManager* pmanager = particle->GetProcessManager();
115  G4String particleName = particle->GetParticleName();
116 
117  //Applicability range for Livermore models
118  //for higher energies, the Standard models are used
119  G4double highEnergyLimit = 1*GeV;
120 
121  if (particleName == "gamma") {
122  // gamma
123 
126  photModel = new G4LivermorePhotoElectricModel();
127  photModel->SetHighEnergyLimit(highEnergyLimit);
128  phot->AddEmModel(0, photModel);
130  pmanager->AddDiscreteProcess(phot);
131 
134  comptModel = new G4LivermoreComptonModel();
135  comptModel->SetHighEnergyLimit(highEnergyLimit);
136  compt->AddEmModel(0, comptModel);
137  pmanager->AddDiscreteProcess(compt);
138 
139  G4GammaConversion* conv = new G4GammaConversion();
141  convModel = new G4LivermoreGammaConversionModel();
142  convModel->SetHighEnergyLimit(highEnergyLimit);
143  conv->AddEmModel(0, convModel);
144  pmanager->AddDiscreteProcess(conv);
145 
148  raylModel = new G4LivermoreRayleighModel();
149  raylModel->SetHighEnergyLimit(highEnergyLimit);
150  rayl->AddEmModel(0, raylModel);
151  pmanager->AddDiscreteProcess(rayl);
152 
153  } else if (particleName == "e-") {
154  //electron
155 
156  G4eIonisation* eIoni = new G4eIonisation();
158  eIoniModel = new G4LivermoreIonisationModel();
159  eIoniModel->SetHighEnergyLimit(highEnergyLimit);
160  eIoni->AddEmModel(0, eIoniModel, new G4UniversalFluctuation() );
161  pmanager->AddProcess(eIoni, -1,-1, 1);
162 
163  G4eBremsstrahlung* eBrem = new G4eBremsstrahlung();
165  eBremModel = new G4LivermoreBremsstrahlungModel();
166  eBremModel->SetHighEnergyLimit(highEnergyLimit);
167  eBrem->AddEmModel(0, eBremModel);
168  pmanager->AddProcess(eBrem, -1,-1, 2);
169 
170  } else if (particleName == "e+") {
171  //positron
172  pmanager->AddProcess(new G4eIonisation, -1,-1, 1);
173  pmanager->AddProcess(new G4eBremsstrahlung, -1,-1, 2);
174  pmanager->AddProcess(new G4eplusAnnihilation, 0,-1, 3);
175 
176  } else if( particleName == "mu+" ||
177  particleName == "mu-" ) {
178  //muon
179  pmanager->AddProcess(new G4MuIonisation, -1,-1, 1);
180  pmanager->AddProcess(new G4MuBremsstrahlung, -1,-1, 2);
181  pmanager->AddProcess(new G4MuPairProduction, -1,-1, 3);
182 
183  } else if( particleName == "alpha" || particleName == "GenericIon" ) {
184  pmanager->AddProcess(new G4ionIonisation, -1,-1, 1);
185 
186  } else if ((!particle->IsShortLived()) &&
187  (particle->GetPDGCharge() != 0.0) &&
188  (particle->GetParticleName() != "chargedgeantino")) {
189  //all others charged particles except geantino
190  pmanager->AddProcess(new G4hIonisation, -1,-1, 1);
191  }
192  }
193 
194  // Deexcitation
195  //
198 }
199 
200 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
201