ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PhysListEmPenelope.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PhysListEmPenelope.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 "PhysListEmPenelope.hh"
35 #include "G4BuilderType.hh"
36 #include "G4ParticleDefinition.hh"
37 #include "G4ProcessManager.hh"
38 #include "G4PhysicsListHelper.hh"
39 
40 // gamma
41 
42 #include "G4PhotoElectricEffect.hh"
44 
45 #include "G4ComptonScattering.hh"
47 
48 #include "G4GammaConversion.hh"
50 
51 #include "G4RayleighScattering.hh"
53 
54 // e-
55 
56 #include "G4eIonisation.hh"
59 
60 #include "G4eBremsstrahlung.hh"
62 
63 // e+
64 
65 #include "G4eplusAnnihilation.hh"
67 
68 // mu
69 
70 #include "G4MuIonisation.hh"
71 #include "G4MuBremsstrahlung.hh"
72 #include "G4MuPairProduction.hh"
73 
74 // hadrons, ions
75 
76 #include "G4hIonisation.hh"
77 #include "G4ionIonisation.hh"
78 
79 // deexcitation
80 
81 #include "G4LossTableManager.hh"
82 #include "G4UAtomicDeexcitation.hh"
83 
84 #include "G4SystemOfUnits.hh"
85 
86 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
87 
89  : G4VPhysicsConstructor(name)
90 {
92  param->SetDefaults();
93  param->SetMinEnergy(10*eV);
94  param->SetMaxEnergy(10*TeV);
95  param->SetNumberOfBinsPerDecade(10);
96  param->SetBuildCSDARange(true);
97  param->SetMaxEnergyForCSDARange(10*TeV);
99 
100  param->SetVerbose(0);
101  param->Dump();
102 }
103 
104 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
105 
107 { }
108 
109 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
110 
112 {
114 
115  // Add standard EM Processes
116 
118  particleIterator->reset();
119  while( (*particleIterator)() ){
121  G4String particleName = particle->GetParticleName();
122 
123  //Applicability range for Penelope models
124  //for higher energies, the Standard models are used
125  G4double highEnergyLimit = 1*GeV;
126 
127  if (particleName == "gamma") {
128  // gamma
129 
132  photModel = new G4PenelopePhotoElectricModel();
133  photModel->SetHighEnergyLimit(highEnergyLimit);
134  phot->AddEmModel(0, photModel);
135  list->RegisterProcess(phot, particle);
136 
139  comptModel = new G4PenelopeComptonModel();
140  comptModel->SetHighEnergyLimit(highEnergyLimit);
141  compt->AddEmModel(0, comptModel);
142  list->RegisterProcess(compt, particle);
143 
144  G4GammaConversion* conv = new G4GammaConversion();
146  convModel = new G4PenelopeGammaConversionModel();
147  convModel->SetHighEnergyLimit(highEnergyLimit);
148  conv->AddEmModel(0, convModel);
149  list->RegisterProcess(conv, particle);
150 
153  raylModel = new G4PenelopeRayleighModel();
154  raylModel->SetHighEnergyLimit(highEnergyLimit);
155  rayl->AddEmModel(0, raylModel);
156  list->RegisterProcess(rayl, particle);
157 
158  } else if (particleName == "e-") {
159  //electron
160 
161  G4eIonisation* eIoni = new G4eIonisation();
163  eIoniModel = new G4PenelopeIonisationModel();
164  eIoniModel->SetHighEnergyLimit(highEnergyLimit);
165  eIoni->AddEmModel(0, eIoniModel, new G4UniversalFluctuation() );
166  list->RegisterProcess(eIoni, particle);
167 
168  G4eBremsstrahlung* eBrem = new G4eBremsstrahlung();
170  eBremModel = new G4PenelopeBremsstrahlungModel();
171  eBremModel->SetHighEnergyLimit(highEnergyLimit);
172  eBrem->AddEmModel(0, eBremModel);
173  list->RegisterProcess(eBrem, particle);
174 
175  } else if (particleName == "e+") {
176  //positron
177  G4eIonisation* eIoni = new G4eIonisation();
179  eIoniModel = new G4PenelopeIonisationModel();
180  eIoniModel->SetHighEnergyLimit(highEnergyLimit);
181  eIoni->AddEmModel(0, eIoniModel, new G4UniversalFluctuation() );
182  list->RegisterProcess(eIoni, particle);
183 
184  G4eBremsstrahlung* eBrem = new G4eBremsstrahlung();
186  eBremModel = new G4PenelopeBremsstrahlungModel();
187  eBremModel->SetHighEnergyLimit(highEnergyLimit);
188  eBrem->AddEmModel(0, eBremModel);
189  list->RegisterProcess(eBrem, particle);
190 
193  eAnniModel = new G4PenelopeAnnihilationModel();
194  eAnniModel->SetHighEnergyLimit(highEnergyLimit);
195  eAnni->AddEmModel(0, eAnniModel);
196  list->RegisterProcess(eAnni, particle);
197 
198  } else if( particleName == "mu+" ||
199  particleName == "mu-" ) {
200  //muon
201  list->RegisterProcess(new G4MuIonisation, particle);
202  list->RegisterProcess(new G4MuBremsstrahlung, particle);
203  list->RegisterProcess(new G4MuPairProduction, particle);
204 
205  } else if( particleName == "alpha" || particleName == "GenericIon" ) {
206  list->RegisterProcess(new G4ionIonisation, particle);
207 
208  } else if ((!particle->IsShortLived()) &&
209  (particle->GetPDGCharge() != 0.0) &&
210  (particle->GetParticleName() != "chargedgeantino")) {
211  //all others charged particles except geantino
212  list->RegisterProcess(new G4hIonisation, particle);
213  }
214  }
215  // Deexcitation
216  //
219 }
220 
221 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
222