ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4EmStandardPhysics_option4_channeling.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4EmStandardPhysics_option4_channeling.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
// ClassName: G4EmStandardPhysics_option4_channeling
30
//
31
// Author: V.Ivanchenko 28.09.2012 from Option3 physics constructor
32
//
33
// Modified:
34
//
35
//----------------------------------------------------------------------------
36
//
37
38
#include "
G4EmStandardPhysics_option4_channeling.hh
"
39
40
#include "
G4SystemOfUnits.hh
"
41
#include "
G4ParticleDefinition.hh
"
42
#include "
G4LossTableManager.hh
"
43
#include "
G4EmParameters.hh
"
44
45
#include "
G4ComptonScattering.hh
"
46
#include "
G4GammaConversion.hh
"
47
#include "
G4PhotoElectricEffect.hh
"
48
#include "
G4RayleighScattering.hh
"
49
#include "
G4PEEffectFluoModel.hh
"
50
#include "
G4KleinNishinaModel.hh
"
51
#include "
G4LowEPComptonModel.hh
"
52
#include "
G4PenelopeGammaConversionModel.hh
"
53
#include "
G4LivermorePhotoElectricModel.hh
"
54
55
#include "
G4eMultipleScattering.hh
"
56
#include "
G4MuMultipleScattering.hh
"
57
#include "
G4hMultipleScattering.hh
"
58
#include "
G4MscStepLimitType.hh
"
59
#include "
G4UrbanMscModel.hh
"
60
#include "
G4DummyModel.hh
"
61
#include "
G4WentzelVIModel.hh
"
62
#include "
G4CoulombScattering.hh
"
63
#include "
G4eCoulombScatteringModel.hh
"
64
65
#include "
G4eIonisation.hh
"
66
#include "
G4eBremsstrahlung.hh
"
67
#include "
G4Generator2BS.hh
"
68
#include "
G4Generator2BN.hh
"
69
#include "
G4SeltzerBergerModel.hh
"
70
#include "
G4PenelopeIonisationModel.hh
"
71
#include "
G4UniversalFluctuation.hh
"
72
73
#include "
G4eplusAnnihilation.hh
"
74
#include "
G4UAtomicDeexcitation.hh
"
75
76
#include "
G4MuIonisation.hh
"
77
#include "
G4MuBremsstrahlung.hh
"
78
#include "
G4MuPairProduction.hh
"
79
#include "
G4hBremsstrahlung.hh
"
80
#include "
G4hPairProduction.hh
"
81
#include "
G4ePairProduction.hh
"
82
83
#include "
G4MuBremsstrahlungModel.hh
"
84
#include "
G4MuPairProductionModel.hh
"
85
#include "
G4hBremsstrahlungModel.hh
"
86
#include "
G4hPairProductionModel.hh
"
87
88
#include "
G4hIonisation.hh
"
89
#include "
G4ionIonisation.hh
"
90
#include "
G4IonParametrisedLossModel.hh
"
91
#include "
G4NuclearStopping.hh
"
92
93
#include "
G4Gamma.hh
"
94
#include "
G4Electron.hh
"
95
#include "
G4Positron.hh
"
96
#include "
G4MuonPlus.hh
"
97
#include "
G4MuonMinus.hh
"
98
#include "
G4PionPlus.hh
"
99
#include "
G4PionMinus.hh
"
100
#include "
G4KaonPlus.hh
"
101
#include "
G4KaonMinus.hh
"
102
#include "
G4Proton.hh
"
103
#include "
G4AntiProton.hh
"
104
#include "
G4Deuteron.hh
"
105
#include "
G4Triton.hh
"
106
#include "
G4He3.hh
"
107
#include "
G4Alpha.hh
"
108
#include "
G4GenericIon.hh
"
109
110
#include "
G4PhysicsListHelper.hh
"
111
#include "
G4BuilderType.hh
"
112
#include "
G4EmModelActivator.hh
"
113
114
// factory
115
#include "
G4PhysicsConstructorFactory.hh
"
116
//
117
G4_DECLARE_PHYSCONSTR_FACTORY
(
G4EmStandardPhysics_option4_channeling
);
118
119
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
120
121
G4EmStandardPhysics_option4_channeling::G4EmStandardPhysics_option4_channeling
(
G4int
ver,
122
const
G4String
&)
123
:
G4VPhysicsConstructor
(
"G4EmStandard_opt4_channeling"
), verbose(ver)
124
{
125
G4EmParameters
* param =
G4EmParameters::Instance
();
126
param->
SetDefaults
();
127
param->
SetVerbose
(
verbose
);
128
param->
SetMinEnergy
(100*
eV
);
129
param->
SetMaxEnergy
(10*
TeV
);
130
param->
SetLowestElectronEnergy
(10*
eV
);
131
param->
SetNumberOfBinsPerDecade
(20);
132
param->
ActivateAngularGeneratorForIonisation
(
true
);
133
param->
SetMscThetaLimit
(0.0);
134
param->
SetFluo
(
true
);
135
param->
SetAuger
(
true
);
136
param->
SetPixe
(
true
);
137
SetPhysicsType
(
bElectromagnetic
);
138
}
139
140
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
141
142
G4EmStandardPhysics_option4_channeling::~G4EmStandardPhysics_option4_channeling
()
143
{}
144
145
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
146
147
void
G4EmStandardPhysics_option4_channeling::ConstructParticle
()
148
{
149
// gamma
150
G4Gamma::Gamma
();
151
152
// leptons
153
G4Electron::Electron
();
154
G4Positron::Positron
();
155
G4MuonPlus::MuonPlus
();
156
G4MuonMinus::MuonMinus
();
157
158
// mesons
159
G4PionPlus::PionPlusDefinition
();
160
G4PionMinus::PionMinusDefinition
();
161
G4KaonPlus::KaonPlusDefinition
();
162
G4KaonMinus::KaonMinusDefinition
();
163
164
// barions
165
G4Proton::Proton
();
166
G4AntiProton::AntiProton
();
167
168
// ions
169
G4Deuteron::Deuteron
();
170
G4Triton::Triton
();
171
G4He3::He3
();
172
G4Alpha::Alpha
();
173
G4GenericIon::GenericIonDefinition
();
174
}
175
176
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
177
178
void
G4EmStandardPhysics_option4_channeling::ConstructProcess
()
179
{
180
if
(
verbose
> 1) {
181
G4cout
<<
"### "
<<
GetPhysicsName
() <<
" Construct Processes "
<<
G4endl
;
182
}
183
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
184
185
// muon & hadron bremsstrahlung and pair production
186
G4MuBremsstrahlung
* mub =
new
G4MuBremsstrahlung
();
187
G4MuPairProduction
*
mup
=
new
G4MuPairProduction
();
188
G4hBremsstrahlung
* pib =
new
G4hBremsstrahlung
();
189
G4hPairProduction
*
pip
=
new
G4hPairProduction
();
190
G4hBremsstrahlung
* kb =
new
G4hBremsstrahlung
();
191
G4hPairProduction
* kp =
new
G4hPairProduction
();
192
G4hBremsstrahlung
* pb =
new
G4hBremsstrahlung
();
193
G4hPairProduction
*
pp
=
new
G4hPairProduction
();
194
G4ePairProduction
* ee =
new
G4ePairProduction
();
195
196
// muon & hadron multiple scattering
197
G4CoulombScattering
* muss =
new
G4CoulombScattering
();
198
G4CoulombScattering
* piss =
new
G4CoulombScattering
();
199
G4CoulombScattering
* kss =
new
G4CoulombScattering
();
200
G4CoulombScattering
* pss =
new
G4CoulombScattering
();
201
202
// energy limits for e+- scattering models
203
//G4double highEnergyLimit = 100*MeV;
204
// energy limits for e+- ionisation models
205
G4double
penEnergyLimit = 1*
MeV
;
206
207
// nuclear stopping
208
G4NuclearStopping
* pnuc =
new
G4NuclearStopping
();
209
210
// Add standard EM Processes
211
auto
myParticleIterator=
GetParticleIterator
();
212
myParticleIterator->reset();
213
while
( (*myParticleIterator)() ){
214
G4ParticleDefinition
*
particle
= myParticleIterator->value();
215
G4String
particleName = particle->
GetParticleName
();
216
217
if
(particleName ==
"gamma"
) {
218
219
// Photoelectric
220
G4PhotoElectricEffect
* pe =
new
G4PhotoElectricEffect
();
221
G4VEmModel
* theLivermorePEModel =
new
G4LivermorePhotoElectricModel
();
222
pe->
SetEmModel
(theLivermorePEModel,1);
223
ph->
RegisterProcess
(pe, particle);
224
225
// Compton scattering
226
G4ComptonScattering
* cs =
new
G4ComptonScattering
;
227
cs->
SetEmModel
(
new
G4KleinNishinaModel
(),1);
228
G4VEmModel
* theLowEPComptonModel =
new
G4LowEPComptonModel
();
229
theLowEPComptonModel->
SetHighEnergyLimit
(20*
MeV
);
230
cs->
AddEmModel
(0, theLowEPComptonModel);
231
ph->
RegisterProcess
(cs, particle);
232
233
// Gamma conversion
234
G4GammaConversion
* gc =
new
G4GammaConversion
();
235
G4VEmModel
* thePenelopeGCModel =
new
G4PenelopeGammaConversionModel
();
236
thePenelopeGCModel->
SetHighEnergyLimit
(1*
GeV
);
237
gc->
SetEmModel
(thePenelopeGCModel,1);
238
ph->
RegisterProcess
(gc, particle);
239
240
// Rayleigh scattering
241
ph->
RegisterProcess
(
new
G4RayleighScattering
(), particle);
242
243
}
else
if
(particleName ==
"e-"
) {
244
245
// multiple scattering
246
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
247
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
248
ss->
SetEmModel
(ssm, 1);
249
250
// ionisation
251
G4eIonisation
* eIoni =
new
G4eIonisation
();
252
eIoni->
SetStepFunction
(0.2, 100*
um
);
253
G4PenelopeIonisationModel
* pen =
new
G4PenelopeIonisationModel
();
254
pen->
SetHighEnergyLimit
(penEnergyLimit);
255
eIoni->
AddEmModel
(0, pen,
new
G4UniversalFluctuation
());
256
257
// bremsstrahlung
258
G4eBremsstrahlung
* brem =
new
G4eBremsstrahlung
();
259
G4SeltzerBergerModel
* br1 =
new
G4SeltzerBergerModel
();
260
G4eBremsstrahlungRelModel
* br2 =
new
G4eBremsstrahlungRelModel
();
261
br1->
SetAngularDistribution
(
new
G4Generator2BS
());
262
br2->
SetAngularDistribution
(
new
G4Generator2BS
());
263
brem->
SetEmModel
(br1,1);
264
brem->
SetEmModel
(br2,2);
265
br2->
SetLowEnergyLimit
(
GeV
);
266
267
// register processes
268
ph->
RegisterProcess
(eIoni, particle);
269
ph->
RegisterProcess
(brem, particle);
270
ph->
RegisterProcess
(ee, particle);
271
ph->
RegisterProcess
(ss, particle);
272
273
}
else
if
(particleName ==
"e+"
) {
274
275
// multiple scattering
276
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
277
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
278
ss->
SetEmModel
(ssm, 1);
279
280
// ionisation
281
G4eIonisation
* eIoni =
new
G4eIonisation
();
282
eIoni->
SetStepFunction
(0.2, 100*
um
);
283
G4PenelopeIonisationModel
* pen =
new
G4PenelopeIonisationModel
();
284
pen->
SetHighEnergyLimit
(penEnergyLimit);
285
eIoni->
AddEmModel
(0, pen,
new
G4UniversalFluctuation
());
286
287
// bremsstrahlung
288
G4eBremsstrahlung
* brem =
new
G4eBremsstrahlung
();
289
G4SeltzerBergerModel
* br1 =
new
G4SeltzerBergerModel
();
290
G4eBremsstrahlungRelModel
* br2 =
new
G4eBremsstrahlungRelModel
();
291
br1->
SetAngularDistribution
(
new
G4Generator2BS
());
292
br2->
SetAngularDistribution
(
new
G4Generator2BS
());
293
brem->
SetEmModel
(br1,1);
294
brem->
SetEmModel
(br2,2);
295
br2->
SetLowEnergyLimit
(
GeV
);
296
297
// register processes
298
ph->
RegisterProcess
(eIoni, particle);
299
ph->
RegisterProcess
(brem, particle);
300
ph->
RegisterProcess
(ee, particle);
301
ph->
RegisterProcess
(
new
G4eplusAnnihilation
(), particle);
302
ph->
RegisterProcess
(ss, particle);
303
304
}
else
if
(particleName ==
"mu+"
||
305
particleName ==
"mu-"
) {
306
307
G4MuIonisation
* muIoni =
new
G4MuIonisation
();
308
muIoni->
SetStepFunction
(0.2, 50*
um
);
309
310
ph->
RegisterProcess
(muIoni, particle);
311
ph->
RegisterProcess
(mub, particle);
312
ph->
RegisterProcess
(mup, particle);
313
ph->
RegisterProcess
(muss, particle);
314
315
}
else
if
(particleName ==
"alpha"
||
316
particleName ==
"He3"
) {
317
318
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
319
ionIoni->
SetStepFunction
(0.1, 10*
um
);
320
321
ph->
RegisterProcess
(
new
G4CoulombScattering
(), particle);
322
ph->
RegisterProcess
(ionIoni, particle);
323
//ph->RegisterProcess(pnuc, particle);
324
325
}
else
if
(particleName ==
"GenericIon"
) {
326
327
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
328
ionIoni->
SetEmModel
(
new
G4IonParametrisedLossModel
());
329
ionIoni->
SetStepFunction
(0.1, 1*
um
);
330
331
ph->
RegisterProcess
(
new
G4CoulombScattering
(), particle);
332
ph->
RegisterProcess
(ionIoni, particle);
333
//ph->RegisterProcess(pnuc, particle);
334
335
}
else
if
(particleName ==
"pi+"
||
336
particleName ==
"pi-"
) {
337
338
//G4hMultipleScattering* pimsc = new G4hMultipleScattering();
339
G4hIonisation
* hIoni =
new
G4hIonisation
();
340
hIoni->
SetStepFunction
(0.2, 50*
um
);
341
342
ph->
RegisterProcess
(hIoni, particle);
343
ph->
RegisterProcess
(pib, particle);
344
ph->
RegisterProcess
(pip, particle);
345
ph->
RegisterProcess
(piss, particle);
346
347
}
else
if
(particleName ==
"kaon+"
||
348
particleName ==
"kaon-"
) {
349
350
//G4hMultipleScattering* kmsc = new G4hMultipleScattering();
351
G4hIonisation
* hIoni =
new
G4hIonisation
();
352
hIoni->
SetStepFunction
(0.2, 50*
um
);
353
354
ph->
RegisterProcess
(hIoni, particle);
355
ph->
RegisterProcess
(kb, particle);
356
ph->
RegisterProcess
(kp, particle);
357
ph->
RegisterProcess
(kss, particle);
358
359
}
else
if
(particleName ==
"proton"
||
360
particleName ==
"anti_proton"
) {
361
362
G4hIonisation
* hIoni =
new
G4hIonisation
();
363
hIoni->
SetStepFunction
(0.1, 20*
um
);
364
365
ph->
RegisterProcess
(hIoni, particle);
366
ph->
RegisterProcess
(pb, particle);
367
ph->
RegisterProcess
(pp, particle);
368
ph->
RegisterProcess
(pss, particle);
369
//ph->RegisterProcess(pnuc, particle);
370
371
}
else
if
(particleName ==
"B+"
||
372
particleName ==
"B-"
||
373
particleName ==
"D+"
||
374
particleName ==
"D-"
||
375
particleName ==
"Ds+"
||
376
particleName ==
"Ds-"
||
377
particleName ==
"anti_He3"
||
378
particleName ==
"anti_alpha"
||
379
particleName ==
"anti_deuteron"
||
380
particleName ==
"anti_lambda_c+"
||
381
particleName ==
"anti_omega-"
||
382
particleName ==
"anti_sigma_c+"
||
383
particleName ==
"anti_sigma_c++"
||
384
particleName ==
"anti_sigma+"
||
385
particleName ==
"anti_sigma-"
||
386
particleName ==
"anti_triton"
||
387
particleName ==
"anti_xi_c+"
||
388
particleName ==
"anti_xi-"
||
389
particleName ==
"deuteron"
||
390
particleName ==
"lambda_c+"
||
391
particleName ==
"omega-"
||
392
particleName ==
"sigma_c+"
||
393
particleName ==
"sigma_c++"
||
394
particleName ==
"sigma+"
||
395
particleName ==
"sigma-"
||
396
particleName ==
"tau+"
||
397
particleName ==
"tau-"
||
398
particleName ==
"triton"
||
399
particleName ==
"xi_c+"
||
400
particleName ==
"xi-"
) {
401
402
ph->
RegisterProcess
(
new
G4CoulombScattering
(), particle);
403
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
404
//ph->RegisterProcess(pnuc, particle);
405
}
406
}
407
408
// Nuclear stopping
409
pnuc->
SetMaxKinEnergy
(
MeV
);
410
411
// Deexcitation
412
G4VAtomDeexcitation
* de =
new
G4UAtomicDeexcitation
();
413
G4LossTableManager::Instance
()->
SetAtomDeexcitation
(de);
414
415
G4EmModelActivator
mact(
GetPhysicsName
());
416
}
417
418
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
examples
extended
exoticphysics
channeling
src
G4EmStandardPhysics_option4_channeling.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:04
using
1.8.2 with
ECCE GitHub integration