ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PhysListEmStandardNR.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PhysListEmStandardNR.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 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32 
33 #include "PhysListEmStandardNR.hh"
34 
35 #include "G4SystemOfUnits.hh"
36 #include "G4ParticleDefinition.hh"
37 #include "G4LossTableManager.hh"
38 #include "G4EmProcessOptions.hh"
39 
40 #include "G4ComptonScattering.hh"
41 #include "G4GammaConversion.hh"
42 #include "G4PhotoElectricEffect.hh"
43 #include "G4RayleighScattering.hh"
44 #include "G4PEEffectFluoModel.hh"
45 #include "G4KleinNishinaModel.hh"
46 #include "G4LowEPComptonModel.hh"
49 
50 #include "G4eMultipleScattering.hh"
52 #include "G4hMultipleScattering.hh"
53 #include "G4CoulombScattering.hh"
55 #include "G4UrbanMscModel.hh"
56 
57 #include "G4eIonisation.hh"
58 #include "G4eBremsstrahlung.hh"
59 #include "G4Generator2BS.hh"
60 #include "G4SeltzerBergerModel.hh"
63 
64 #include "G4eplusAnnihilation.hh"
65 #include "G4UAtomicDeexcitation.hh"
66 
67 #include "G4MuIonisation.hh"
68 #include "G4MuBremsstrahlung.hh"
69 #include "G4MuPairProduction.hh"
70 
71 #include "G4hIonisation.hh"
72 #include "G4ionIonisation.hh"
74 
76 
77 #include "G4PhysicsListHelper.hh"
78 #include "G4BuilderType.hh"
79 
80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
81 
83  : G4VPhysicsConstructor(name)
84 {
87 }
88 
89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
90 
92 {}
93 
94 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
95 
97 {
99 
100  // muon & hadron bremsstrahlung and pair production
103 
105  G4double energyLimit = 100.*MeV;
106  nucr->SetMaxEnergyForScattering(energyLimit);
108  csm->SetActivationLowEnergyLimit(energyLimit);
109 
111  particleIterator->reset();
112  while( (*particleIterator)() ){
114  G4String particleName = particle->GetParticleName();
115 
116  if (particleName == "gamma") {
117 
118  // Compton scattering
120  cs->SetEmModel(new G4KleinNishinaModel(),1);
121  ph->RegisterProcess(cs, particle);
122 
123  // Photoelectric
125  G4VEmModel* theLivermorePEModel = new G4LivermorePhotoElectricModel();
126  theLivermorePEModel->SetHighEnergyLimit(10*GeV);
127  pe->SetEmModel(theLivermorePEModel,1);
128  ph->RegisterProcess(pe, particle);
129 
130  // Gamma conversion
132  G4VEmModel* thePenelopeGCModel = new G4PenelopeGammaConversionModel();
133  thePenelopeGCModel->SetHighEnergyLimit(1*GeV);
134  gc->SetEmModel(thePenelopeGCModel,1);
135  ph->RegisterProcess(gc, particle);
136 
137  // Rayleigh scattering
138  ph->RegisterProcess(new G4RayleighScattering(), particle);
139 
140  } else if (particleName == "e-") {
141 
142  // ionisation
143  G4eIonisation* eIoni = new G4eIonisation();
144  eIoni->SetStepFunction(0.2, 100*um);
145 
146  // bremsstrahlung
147  G4eBremsstrahlung* eBrem = new G4eBremsstrahlung();
148 
149  ph->RegisterProcess(new G4eMultipleScattering(), particle);
150  ph->RegisterProcess(eIoni, particle);
151  ph->RegisterProcess(eBrem, particle);
152 
153  } else if (particleName == "e+") {
154  // ionisation
155  G4eIonisation* eIoni = new G4eIonisation();
156  eIoni->SetStepFunction(0.2, 100*um);
157 
158  // bremsstrahlung
159  G4eBremsstrahlung* eBrem = new G4eBremsstrahlung();
160 
161  ph->RegisterProcess(new G4eMultipleScattering(), particle);
162  ph->RegisterProcess(eIoni, particle);
163  ph->RegisterProcess(eBrem, particle);
164 
165  // annihilation at rest and in flight
166  ph->RegisterProcess(new G4eplusAnnihilation(), particle);
167 
168  } else if (particleName == "mu+" ||
169  particleName == "mu-" ) {
170 
171  G4MuIonisation* muIoni = new G4MuIonisation();
172  muIoni->SetStepFunction(0.2, 50*um);
173 
174  ph->RegisterProcess(muIoni, particle);
175  ph->RegisterProcess(mub, particle);
176  ph->RegisterProcess(mup, particle);
177  ph->RegisterProcess(new G4CoulombScattering(), particle);
178 
179  } else if (particleName == "alpha" || particleName == "He3") {
180 
183  model->SetActivationLowEnergyLimit(energyLimit);
184  msc->SetEmModel(model, 1);
185  ph->RegisterProcess(msc, particle);
186 
187  G4ionIonisation* ionIoni = new G4ionIonisation();
188  ionIoni->SetStepFunction(0.1, 10*um);
189  ph->RegisterProcess(ionIoni, particle);
190 
191  ph->RegisterProcess(nucr, particle);
192 
193  } else if (particleName == "GenericIon" ) {
194 
197  model->SetActivationLowEnergyLimit(energyLimit);
198  msc->SetEmModel(model, 1);
199  ph->RegisterProcess(msc, particle);
200 
201  G4ionIonisation* ionIoni = new G4ionIonisation();
202  ionIoni->SetEmModel(new G4IonParametrisedLossModel());
203  ionIoni->SetStepFunction(0.1, 1*um);
204  ph->RegisterProcess(ionIoni, particle);
205 
206  ph->RegisterProcess(nucr, particle);
207 
208  } else if (particleName == "proton" ||
209  particleName == "deuteron" ||
210  particleName == "triton") {
211 
214  model->SetActivationLowEnergyLimit(energyLimit);
215  msc->SetEmModel(model, 1);
216  ph->RegisterProcess(msc, particle);
217 
218  G4hIonisation* hIoni = new G4hIonisation();
219  hIoni->SetStepFunction(0.05, 1*um);
220  ph->RegisterProcess(hIoni, particle);
221 
222  ph->RegisterProcess(nucr, particle);
223 
224  } else if ((!particle->IsShortLived()) &&
225  (particle->GetPDGCharge() != 0.0) &&
226  (particle->GetParticleName() != "chargedgeantino")) {
227  //all others charged particles except geantino
228 
229  ph->RegisterProcess(new G4hMultipleScattering(), particle);
230  ph->RegisterProcess(new G4hIonisation(), particle);
231  }
232  }
233 
234  // Em options
235  //
236  // Main options and setting parameters are shown here.
237  // Several of them have default values.
238  //
239  G4EmProcessOptions emOptions;
240 
241  //physics tables
242  //
243  emOptions.SetMinEnergy(10*eV);
244  emOptions.SetMaxEnergy(10*TeV);
245  emOptions.SetDEDXBinning(12*20);
246  emOptions.SetLambdaBinning(12*20);
247 
248  // scattering
249  emOptions.SetPolarAngleLimit(0.0);
250 
251  // Deexcitation
254  de->SetFluo(true);
255 }
256 
257 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
258