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  param->SetBuildCSDARange(true);
95 
96  param->SetVerbose(0);
97  param->Dump();
98  }
99 
100 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
101 
103 { }
104 
105 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
106 
108 {
109  // Add Livermore EM Processes
110 
112  particleIterator->reset();
113  while( (*particleIterator)() ){
115  G4ProcessManager* pmanager = particle->GetProcessManager();
116  G4String particleName = particle->GetParticleName();
117 
118  //Applicability range for Livermore models
119  //for higher energies, the Standard models are used
120  G4double highEnergyLimit = 1*GeV;
121 
122  if (particleName == "gamma") {
123  // gamma
124 
127  photModel = new G4LivermorePhotoElectricModel();
128  photModel->SetHighEnergyLimit(highEnergyLimit);
129  phot->AddEmModel(0, photModel);
131  pmanager->AddDiscreteProcess(phot);
132 
135  comptModel = new G4LivermoreComptonModel();
136  comptModel->SetHighEnergyLimit(highEnergyLimit);
137  compt->AddEmModel(0, comptModel);
138  pmanager->AddDiscreteProcess(compt);
139 
140  G4GammaConversion* conv = new G4GammaConversion();
142  convModel = new G4LivermoreGammaConversionModel();
143  convModel->SetHighEnergyLimit(highEnergyLimit);
144  conv->AddEmModel(0, convModel);
145  pmanager->AddDiscreteProcess(conv);
146 
149  raylModel = new G4LivermoreRayleighModel();
150  raylModel->SetHighEnergyLimit(highEnergyLimit);
151  rayl->AddEmModel(0, raylModel);
152  pmanager->AddDiscreteProcess(rayl);
153 
154  } else if (particleName == "e-") {
155  //electron
156 
157  G4eIonisation* eIoni = new G4eIonisation();
159  eIoniModel = new G4LivermoreIonisationModel();
160  eIoniModel->SetHighEnergyLimit(highEnergyLimit);
161  eIoni->AddEmModel(0, eIoniModel, new G4UniversalFluctuation() );
162  pmanager->AddProcess(eIoni, -1,-1, 1);
163 
164  G4eBremsstrahlung* eBrem = new G4eBremsstrahlung();
166  eBremModel = new G4LivermoreBremsstrahlungModel();
167  eBremModel->SetHighEnergyLimit(highEnergyLimit);
168  eBrem->AddEmModel(0, eBremModel);
169  pmanager->AddProcess(eBrem, -1,-1, 2);
170 
171  } else if (particleName == "e+") {
172  //positron
173  pmanager->AddProcess(new G4eIonisation, -1,-1, 1);
174  pmanager->AddProcess(new G4eBremsstrahlung, -1,-1, 2);
175  pmanager->AddProcess(new G4eplusAnnihilation, 0,-1, 3);
176 
177  } else if( particleName == "mu+" ||
178  particleName == "mu-" ) {
179  //muon
180  pmanager->AddProcess(new G4MuIonisation, -1,-1, 1);
181  pmanager->AddProcess(new G4MuBremsstrahlung, -1,-1, 2);
182  pmanager->AddProcess(new G4MuPairProduction, -1,-1, 3);
183 
184  } else if( particleName == "alpha" || particleName == "GenericIon" ) {
185  pmanager->AddProcess(new G4ionIonisation, -1,-1, 1);
186 
187  } else if ((!particle->IsShortLived()) &&
188  (particle->GetPDGCharge() != 0.0) &&
189  (particle->GetParticleName() != "chargedgeantino")) {
190  //all others charged particles except geantino
191  pmanager->AddProcess(new G4hIonisation, -1,-1, 1);
192  }
193  }
194 
195  // Deexcitation
196  //
199 }
200 
201 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
202