ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PhysicsList.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PhysicsList.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 //
26 // -------------------------------------------------------------------
27 // -------------------------------------------------------------------
28 
29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
30 
31 #include "PhysicsList.hh"
32 #include "G4SystemOfUnits.hh"
33 
34 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
35 
37 {
43 
44  SetVerboseLevel(1);
45 }
46 
47 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
48 
50 {}
51 
52 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
53 
55 {
59 }
60 
61 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
62 
64 {
65  // gamma
67 }
68  //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
69 
71 {
72  // leptons
75 }
76 
77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
78 
80 {
81  // baryons
84 }
85 
86 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
87 
89 {
91  ConstructEM();
93 }
94 
95 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
96 
97 // Geant4-MicroElec MODELS
98 
99 #include "G4MicroElecElastic.hh"
101 
102 #include "G4MicroElecInelastic.hh"
104 //
105 
106 #include "G4LossTableManager.hh"
107 #include "G4EmConfigurator.hh"
108 #include "G4VEmModel.hh"
109 #include "G4DummyModel.hh"
110 #include "G4eIonisation.hh"
111 #include "G4hIonisation.hh"
112 #include "G4ionIonisation.hh"
113 #include "G4eMultipleScattering.hh"
114 #include "G4hMultipleScattering.hh"
115 #include "G4BraggModel.hh"
116 #include "G4BraggIonModel.hh"
117 #include "G4BetheBlochModel.hh"
118 #include "G4UrbanMscModel.hh"
119 #include "G4MollerBhabhaModel.hh"
120 #include "G4IonFluctuations.hh"
121 #include "G4UniversalFluctuation.hh"
122 
123 #include "G4ElectronCapture.hh"
124 
125 #include "G4UAtomicDeexcitation.hh"
126 
127 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
128 
130 {
131 
133  particleIterator->reset();
134 
135  while( (*particleIterator)() )
136  {
137 
139  G4ProcessManager* pmanager = particle->GetProcessManager();
140  G4String particleName = particle->GetParticleName();
141 
142  // *********************************
143  // 1) Processes for the World region
144  // *********************************
145 
146  if (particleName == "e-") {
147 
148  // STANDARD msc is active in the world
150  msc->AddEmModel(1, new G4UrbanMscModel());
151  pmanager->AddProcess(msc, -1, 1, -1);
152 
153  // STANDARD ionisation is active in the world
154  G4eIonisation* eion = new G4eIonisation();
155  pmanager->AddProcess(eion, -1, 2, 2);
156 
157  // MicroElec elastic is not active in the world
158  G4MicroElecElastic* theMicroElecElasticProcess = new G4MicroElecElastic("e-_G4MicroElecElastic");
159  theMicroElecElasticProcess->SetEmModel(new G4DummyModel(),1);
160  pmanager->AddDiscreteProcess(theMicroElecElasticProcess);
161 
162  // MicroElec ionisation is not active in the world
163  G4MicroElecInelastic* microelecioni = new G4MicroElecInelastic("e-_G4MicroElecInelastic");
164  microelecioni->SetEmModel(new G4DummyModel(),1);
165  pmanager->AddDiscreteProcess(microelecioni);
166 
167  // THE FOLLOWING PROCESS WILL KILL ALL ELECTRONS BELOW A SELECTED ENERY THRESHOLD
168  // Capture of low-energy e-
169  G4ElectronCapture* ecap = new G4ElectronCapture("Target", 16.7*eV);
170  pmanager->AddDiscreteProcess(ecap);
171 
172  } else if ( particleName == "proton" ) {
173 
174  // STANDARD msc is active in the world
176  msc->AddEmModel(1, new G4UrbanMscModel());
177  pmanager->AddProcess(msc, -1, 1, -1);
178 
179  // STANDARD ionisation is active in the world
180  G4hIonisation* hion = new G4hIonisation();
181  pmanager->AddProcess(hion, -1, 2, 2);
182 
183  // MicroElec ionisation is not active in the world
184  G4MicroElecInelastic* microelecioni = new G4MicroElecInelastic("p_G4MicroElecInelastic");
185  microelecioni->SetEmModel(new G4DummyModel(),1);
186  microelecioni->SetEmModel(new G4DummyModel(),2);
187  pmanager->AddDiscreteProcess(microelecioni);
188 
189  } else if (particleName == "GenericIon") {
190 
191  // STANDARD msc is active in the world
193  msc->AddEmModel(1, new G4UrbanMscModel());
194  pmanager->AddProcess(new G4hMultipleScattering, -1, 1, -1);
195 
196  // STANDARD ionisation is active in the world
197  G4ionIonisation* hion = new G4ionIonisation();
198  pmanager->AddProcess(hion, -1, 2, 2);
199 
200  // MicroElec ionisation is not active in the world
201  G4MicroElecInelastic* microelecioni = new G4MicroElecInelastic("ion_G4MicroElecInelastic");
202  microelecioni->SetEmModel(new G4DummyModel(),1);
203  microelecioni->SetEmModel(new G4DummyModel(),2);
204  pmanager->AddDiscreteProcess(microelecioni);
205  }
206  }
207 
208  // **************************************
209  // 2) Define processes for Target region
210  // **************************************
211 
212  // STANDARD EM processes should be inactivated when corresponding MicroElec processes are used
213  // - STANDARD EM e- processes are inactivated below 100 MeV
214  // - STANDARD EM proton & ion processes are inactivated below standEnergyLimit
215  //
217 
218  G4VEmModel* mod;
219  // *** e-
220 
221  // ---> STANDARD EM processes are inactivated below 100 MeV
222 
223  G4UrbanMscModel* msc = new G4UrbanMscModel();
225  em_config->SetExtraEmModel("e-","msc",msc,"Target");
226 
227  mod = new G4MollerBhabhaModel();
229  em_config->SetExtraEmModel("e-","eIoni",mod,"Target",0.0,10*TeV, new G4UniversalFluctuation());
230 
231  // ---> MicroElec processes activated
232 
233  mod = new G4MicroElecElasticModel();
234  em_config->SetExtraEmModel("e-","e-_G4MicroElecElastic",mod,"Target",0.0,100*MeV);
235 
236  mod = new G4MicroElecInelasticModel();
237  em_config->SetExtraEmModel("e-","e-_G4MicroElecInelastic",mod,"Target",16.7*eV,100*MeV);
238 
239  // *** proton
240 
241  // ---> STANDARD EM processes inactivated below standEnergyLimit
242 
243  // STANDARD msc is still active
244  // Inactivate following STANDARD processes
245 
246  mod = new G4BraggModel();
248  em_config->SetExtraEmModel("proton","hIoni",mod,"Target",0.0,2*MeV, new G4IonFluctuations());
249 
250  mod = new G4BetheBlochModel();
252  em_config->SetExtraEmModel("proton","hIoni",mod,"Target",2*MeV,10*TeV, new G4IonFluctuations());
253 
254  // ---> MicroElec processes activated
255  mod = new G4MicroElecInelasticModel();
257  em_config->SetExtraEmModel("proton","p_G4MicroElecInelastic",mod,"Target",0.0,10*GeV);
258  em_config->SetExtraEmModel("proton","p_G4MicroElecInelastic",new G4DummyModel,
259  "Target",10*GeV,10*TeV);
260 
261  // *** ion
262 
263  // ---> STANDARD EM processes inactivated below standEnergyLimit
264 
265  // STANDARD msc is still active
266  // Inactivate following STANDARD processes
267 
268  mod = new G4BraggIonModel();
270  em_config->SetExtraEmModel("GenericIon","ionIoni",mod,"Target",0.0,2*MeV, new G4IonFluctuations());
271 
272  mod = new G4BetheBlochModel();
274  em_config->SetExtraEmModel("GenericIon","ionIoni",mod,"Target",2*MeV,10*TeV, new G4IonFluctuations());
275 
276  // ---> MicroElec processes activated
277  mod = new G4MicroElecInelasticModel();
279  em_config->SetExtraEmModel("GenericIon","ion_G4MicroElecInelastic",mod,
280  "Target",0.0,10*GeV);
281  em_config->SetExtraEmModel("GenericIon","ion_G4MicroElecInelastic",new G4DummyModel,
282  "Target",10*GeV,10*TeV);
283 
284  // Deexcitation
285  //
288  de->SetFluo(true);
289  de->SetAuger(true);
290  de->SetPIXE(true);
291  de->InitialiseForNewRun();
292 
293 
294 }
295 
296 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
297 
299 { }
300 
301 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
302 
304 {
305  if (verboseLevel >0)
306  {
307  G4cout << "PhysicsList::SetCuts:";
308  G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
309  }
310 
311  // set cut values for gamma at first and for e- second and next for e+,
312  // because some processes for e+/e- need cut values for gamma
313  SetCutValue(cutForGamma, "gamma");
316  SetCutValue(cutForProton, "proton");
317 
318  if (verboseLevel>0) { DumpCutValuesTable(); }
319 }