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 
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"
66 
67 // mu
68 
69 #include "G4MuIonisation.hh"
70 #include "G4MuBremsstrahlung.hh"
71 #include "G4MuPairProduction.hh"
72 
73 // hadrons, ions
74 
75 #include "G4hIonisation.hh"
76 #include "G4ionIonisation.hh"
77 
78 // deexcitation
79 
80 #include "G4LossTableManager.hh"
81 #include "G4UAtomicDeexcitation.hh"
82 
83 #include "G4SystemOfUnits.hh"
84 
85 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
86 
88  : G4VPhysicsConstructor(name)
89 {
91  param->SetDefaults();
92  param->SetMinEnergy(10*eV);
93  param->SetMaxEnergy(10*TeV);
94  param->SetNumberOfBinsPerDecade(10);
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 standard EM Processes
110 
112  particleIterator->reset();
113  while( (*particleIterator)() ){
115  G4ProcessManager* pmanager = particle->GetProcessManager();
116  G4String particleName = particle->GetParticleName();
117 
118  //Applicability range for Penelope 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 G4PenelopePhotoElectricModel();
128  photModel->SetHighEnergyLimit(highEnergyLimit);
129  phot->AddEmModel(0, photModel);
130  pmanager->AddDiscreteProcess(phot);
131 
134  comptModel = new G4PenelopeComptonModel();
135  comptModel->SetHighEnergyLimit(highEnergyLimit);
136  compt->AddEmModel(0, comptModel);
137  pmanager->AddDiscreteProcess(compt);
138 
139  G4GammaConversion* conv = new G4GammaConversion();
141  convModel = new G4PenelopeGammaConversionModel();
142  convModel->SetHighEnergyLimit(highEnergyLimit);
143  conv->AddEmModel(0, convModel);
144  pmanager->AddDiscreteProcess(conv);
145 
148  raylModel = new G4PenelopeRayleighModel();
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 G4PenelopeIonisationModel();
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 G4PenelopeBremsstrahlungModel();
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  G4eIonisation* eIoni = new G4eIonisation();
174  eIoniModel = new G4PenelopeIonisationModel();
175  eIoniModel->SetHighEnergyLimit(highEnergyLimit);
176  eIoni->AddEmModel(0, eIoniModel, new G4UniversalFluctuation() );
177  pmanager->AddProcess(eIoni, -1,-1, 1);
178 
179  G4eBremsstrahlung* eBrem = new G4eBremsstrahlung();
181  eBremModel = new G4PenelopeBremsstrahlungModel();
182  eBremModel->SetHighEnergyLimit(highEnergyLimit);
183  eBrem->AddEmModel(0, eBremModel);
184  pmanager->AddProcess(eBrem, -1,-1, 2);
185 
188  eAnniModel = new G4PenelopeAnnihilationModel();
189  eAnniModel->SetHighEnergyLimit(highEnergyLimit);
190  eAnni->AddEmModel(0, eAnniModel);
191  pmanager->AddProcess(eAnni, 0,-1, 3);
192 
193  } else if( particleName == "mu+" ||
194  particleName == "mu-" ) {
195  //muon
196  pmanager->AddProcess(new G4MuIonisation, -1,-1, 1);
197  pmanager->AddProcess(new G4MuBremsstrahlung, -1,-1, 2);
198  pmanager->AddProcess(new G4MuPairProduction, -1,-1, 3);
199 
200  } else if( particleName == "alpha" || particleName == "GenericIon" ) {
201  pmanager->AddProcess(new G4ionIonisation, -1,-1, 1);
202 
203  } else if ((!particle->IsShortLived()) &&
204  (particle->GetPDGCharge() != 0.0) &&
205  (particle->GetParticleName() != "chargedgeantino")) {
206  //all others charged particles except geantino
207  pmanager->AddProcess(new G4hIonisation, -1,-1, 1);
208  }
209  }
210 
211  // Deexcitation
212  //
215 }
216 
217 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
218