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
G4EmLivermorePolarizedPhysics.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4EmLivermorePolarizedPhysics.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
#include "
G4EmLivermorePolarizedPhysics.hh
"
28
#include "
G4ParticleDefinition.hh
"
29
#include "
G4SystemOfUnits.hh
"
30
#include "
G4ParticleTable.hh
"
31
32
// *** Processes and models
33
34
// gamma
35
#include "
G4PhotoElectricEffect.hh
"
36
#include "
G4LivermorePolarizedPhotoElectricModel.hh
"
37
38
#include "
G4ComptonScattering.hh
"
39
#include "
G4LivermorePolarizedComptonModel.hh
"
40
41
#include "
G4GammaConversion.hh
"
42
#include "
G4LivermorePolarizedGammaConversionModel.hh
"
43
44
#include "
G4RayleighScattering.hh
"
45
#include "
G4LivermorePolarizedRayleighModel.hh
"
46
#include "
G4LivermorePhotoElectricModel.hh
"
47
#include "
G4PhotoElectricAngularGeneratorPolarized.hh
"
48
49
#include "
G4PEEffectFluoModel.hh
"
50
#include "
G4KleinNishinaModel.hh
"
51
52
// e+-
53
#include "
G4eMultipleScattering.hh
"
54
#include "
G4UniversalFluctuation.hh
"
55
56
#include "
G4eIonisation.hh
"
57
#include "
G4LivermoreIonisationModel.hh
"
58
59
#include "
G4eBremsstrahlung.hh
"
60
#include "
G4LivermoreBremsstrahlungModel.hh
"
61
#include "
G4Generator2BS.hh
"
62
#include "
G4SeltzerBergerModel.hh
"
63
64
// e+
65
#include "
G4eplusAnnihilation.hh
"
66
67
// mu+-
68
#include "
G4MuMultipleScattering.hh
"
69
#include "
G4MuIonisation.hh
"
70
#include "
G4MuBremsstrahlung.hh
"
71
#include "
G4MuPairProduction.hh
"
72
73
#include "
G4MuBremsstrahlungModel.hh
"
74
#include "
G4MuPairProductionModel.hh
"
75
#include "
G4hBremsstrahlungModel.hh
"
76
#include "
G4hPairProductionModel.hh
"
77
78
// hadrons
79
#include "
G4hMultipleScattering.hh
"
80
#include "
G4MscStepLimitType.hh
"
81
82
#include "
G4hBremsstrahlung.hh
"
83
#include "
G4hPairProduction.hh
"
84
#include "
G4ePairProduction.hh
"
85
86
#include "
G4hIonisation.hh
"
87
#include "
G4ionIonisation.hh
"
88
#include "
G4alphaIonisation.hh
"
89
#include "
G4IonParametrisedLossModel.hh
"
90
#include "
G4NuclearStopping.hh
"
91
92
// msc models
93
#include "
G4UrbanMscModel.hh
"
94
#include "
G4WentzelVIModel.hh
"
95
#include "
G4GoudsmitSaundersonMscModel.hh
"
96
#include "
G4CoulombScattering.hh
"
97
#include "
G4eCoulombScatteringModel.hh
"
98
99
// interfaces
100
#include "
G4LossTableManager.hh
"
101
#include "
G4EmParameters.hh
"
102
#include "
G4UAtomicDeexcitation.hh
"
103
104
// particles
105
#include "
G4Gamma.hh
"
106
#include "
G4Electron.hh
"
107
#include "
G4Positron.hh
"
108
#include "
G4MuonPlus.hh
"
109
#include "
G4MuonMinus.hh
"
110
#include "
G4PionPlus.hh
"
111
#include "
G4PionMinus.hh
"
112
#include "
G4KaonPlus.hh
"
113
#include "
G4KaonMinus.hh
"
114
#include "
G4Proton.hh
"
115
#include "
G4AntiProton.hh
"
116
#include "
G4Deuteron.hh
"
117
#include "
G4Triton.hh
"
118
#include "
G4He3.hh
"
119
#include "
G4Alpha.hh
"
120
#include "
G4GenericIon.hh
"
121
122
//
123
#include "
G4PhysicsListHelper.hh
"
124
#include "
G4BuilderType.hh
"
125
#include "
G4EmModelActivator.hh
"
126
127
// factory
128
#include "
G4PhysicsConstructorFactory.hh
"
129
//
130
G4_DECLARE_PHYSCONSTR_FACTORY
(
G4EmLivermorePolarizedPhysics
);
131
132
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
133
134
G4EmLivermorePolarizedPhysics::G4EmLivermorePolarizedPhysics
(
G4int
ver,
135
const
G4String
&)
136
:
G4VPhysicsConstructor
(
"G4EmLivermorePolarized"
), verbose(ver)
137
{
138
G4EmParameters
* param =
G4EmParameters::Instance
();
139
param->
SetDefaults
();
140
param->
SetVerbose
(
verbose
);
141
param->
SetMinEnergy
(100*
eV
);
142
param->
SetLowestElectronEnergy
(100*
eV
);
143
param->
SetNumberOfBinsPerDecade
(20);
144
param->
ActivateAngularGeneratorForIonisation
(
true
);
145
param->
SetStepFunction
(0.2, 10*
um
);
146
param->
SetStepFunctionMuHad
(0.1, 10*
um
);
147
param->
SetUseMottCorrection
(
true
);
148
param->
SetMscStepLimitType
(
fUseSafetyPlus
);
149
param->
SetMscSkin
(3);
150
param->
SetMscRangeFactor
(0.2);
151
param->
SetMuHadLateralDisplacement
(
true
);
152
param->
SetFluo
(
true
);
153
//param->SetAugerCascade(true);
154
SetPhysicsType
(
bElectromagnetic
);
155
}
156
157
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
158
159
G4EmLivermorePolarizedPhysics::~G4EmLivermorePolarizedPhysics
()
160
{}
161
162
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
163
164
void
G4EmLivermorePolarizedPhysics::ConstructParticle
()
165
{
166
// gamma
167
G4Gamma::Gamma
();
168
169
// leptons
170
G4Electron::Electron
();
171
G4Positron::Positron
();
172
G4MuonPlus::MuonPlus
();
173
G4MuonMinus::MuonMinus
();
174
175
// mesons
176
G4PionPlus::PionPlusDefinition
();
177
G4PionMinus::PionMinusDefinition
();
178
G4KaonPlus::KaonPlusDefinition
();
179
G4KaonMinus::KaonMinusDefinition
();
180
181
// baryons
182
G4Proton::Proton
();
183
G4AntiProton::AntiProton
();
184
185
// ions
186
G4Deuteron::Deuteron
();
187
G4Triton::Triton
();
188
G4He3::He3
();
189
G4Alpha::Alpha
();
190
G4GenericIon::GenericIonDefinition
();
191
}
192
193
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
194
195
void
G4EmLivermorePolarizedPhysics::ConstructProcess
()
196
{
197
if
(
verbose
> 1) {
198
G4cout
<<
"### "
<<
GetPhysicsName
() <<
" Construct Processes "
<<
G4endl
;
199
}
200
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
201
G4LossTableManager
* man =
G4LossTableManager::Instance
();
202
203
// muon & hadron bremsstrahlung and pair production
204
G4MuBremsstrahlung
* mub =
new
G4MuBremsstrahlung
();
205
G4MuPairProduction
*
mup
=
new
G4MuPairProduction
();
206
G4hBremsstrahlung
* pib =
new
G4hBremsstrahlung
();
207
G4hPairProduction
*
pip
=
new
G4hPairProduction
();
208
G4hBremsstrahlung
* kb =
new
G4hBremsstrahlung
();
209
G4hPairProduction
* kp =
new
G4hPairProduction
();
210
G4hBremsstrahlung
* pb =
new
G4hBremsstrahlung
();
211
G4hPairProduction
*
pp
=
new
G4hPairProduction
();
212
G4ePairProduction
* ee =
new
G4ePairProduction
();
213
214
// muon & hadron multiple scattering
215
G4MuMultipleScattering
* mumsc =
new
G4MuMultipleScattering
();
216
mumsc->
SetEmModel
(
new
G4WentzelVIModel
());
217
G4CoulombScattering
* muss =
new
G4CoulombScattering
();
218
219
G4hMultipleScattering
* pimsc =
new
G4hMultipleScattering
();
220
pimsc->
SetEmModel
(
new
G4WentzelVIModel
());
221
G4CoulombScattering
* piss =
new
G4CoulombScattering
();
222
223
G4hMultipleScattering
* kmsc =
new
G4hMultipleScattering
();
224
kmsc->
SetEmModel
(
new
G4WentzelVIModel
());
225
G4CoulombScattering
* kss =
new
G4CoulombScattering
();
226
227
G4hMultipleScattering
* hmsc =
new
G4hMultipleScattering
(
"ionmsc"
);
228
229
// high energy limit for e+- scattering models
230
G4double
highEnergyLimit =
G4EmParameters::Instance
()->
MscEnergyLimit
();
231
G4double
livEnergyLimit = 1*
GeV
;
232
233
// nuclear stopping
234
G4NuclearStopping
* pnuc =
new
G4NuclearStopping
();
235
G4NuclearStopping
* inuc =
new
G4NuclearStopping
();
236
237
// Add Livermore EM Processes
238
G4ParticleTable
* table =
G4ParticleTable::GetParticleTable
();
239
for
(
const
auto
& particleName :
partList
.
PartNames
()) {
240
G4ParticleDefinition
*
particle
= table->
FindParticle
(particleName);
241
if
(!particle) {
continue
; }
242
if
(particleName ==
"gamma"
) {
243
244
G4PhotoElectricEffect
* thePhotoElectricEffect =
new
G4PhotoElectricEffect
();
245
G4VEmModel
* mod =
new
G4LivermorePhotoElectricModel
();
246
mod->
SetAngularDistribution
(
new
G4PhotoElectricAngularGeneratorPolarized
());
247
thePhotoElectricEffect->
SetEmModel
(mod);
248
249
G4ComptonScattering
* theComptonScattering =
new
G4ComptonScattering
();
250
theComptonScattering->
SetEmModel
(
new
G4KleinNishinaModel
());
251
G4VEmModel
* comptLiv =
new
G4LivermorePolarizedComptonModel
();
252
comptLiv->
SetHighEnergyLimit
(livEnergyLimit);
253
theComptonScattering->
AddEmModel
(0, comptLiv);
254
255
G4GammaConversion
* theGammaConversion =
new
G4GammaConversion
();
256
G4VEmModel
* convLiv =
new
G4LivermorePolarizedGammaConversionModel
();
257
convLiv->
SetHighEnergyLimit
(livEnergyLimit);
258
theGammaConversion->
AddEmModel
(0, convLiv);
259
260
G4RayleighScattering
* theRayleigh =
new
G4RayleighScattering
();
261
theRayleigh->
SetEmModel
(
new
G4LivermorePolarizedRayleighModel
());
262
263
ph->
RegisterProcess
(thePhotoElectricEffect, particle);
264
ph->
RegisterProcess
(theComptonScattering, particle);
265
ph->
RegisterProcess
(theGammaConversion, particle);
266
ph->
RegisterProcess
(theRayleigh, particle);
267
268
}
else
if
(particleName ==
"e-"
) {
269
270
// multiple and single scattering
271
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
272
msc->
SetStepLimitType
(
fUseDistanceToBoundary
);
273
G4GoudsmitSaundersonMscModel
* msc1 =
new
G4GoudsmitSaundersonMscModel
();
274
G4WentzelVIModel
* msc2 =
new
G4WentzelVIModel
();
275
msc1->
SetHighEnergyLimit
(highEnergyLimit);
276
msc2->
SetLowEnergyLimit
(highEnergyLimit);
277
msc->
SetEmModel
(msc1);
278
msc->
SetEmModel
(msc2);
279
280
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
281
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
282
ss->
SetEmModel
(ssm);
283
ss->
SetMinKinEnergy
(highEnergyLimit);
284
ssm->
SetLowEnergyLimit
(highEnergyLimit);
285
ssm->
SetActivationLowEnergyLimit
(highEnergyLimit);
286
287
// Ionisation
288
G4eIonisation
* eioni =
new
G4eIonisation
();
289
G4LivermoreIonisationModel
* theIoniLivermore =
new
290
G4LivermoreIonisationModel
();
291
theIoniLivermore->
SetHighEnergyLimit
(0.1*
MeV
);
292
eioni->
AddEmModel
(0, theIoniLivermore,
new
G4UniversalFluctuation
() );
293
294
// Bremsstrahlung from standard
295
G4eBremsstrahlung
* brem =
new
G4eBremsstrahlung
();
296
G4SeltzerBergerModel
* br1 =
new
G4SeltzerBergerModel
();
297
G4eBremsstrahlungRelModel
* br2 =
new
G4eBremsstrahlungRelModel
();
298
br1->
SetAngularDistribution
(
new
G4Generator2BS
());
299
br2->
SetAngularDistribution
(
new
G4Generator2BS
());
300
brem->
SetEmModel
(br1);
301
brem->
SetEmModel
(br2);
302
br1->
SetHighEnergyLimit
(
GeV
);
303
304
// register processes
305
ph->
RegisterProcess
(msc, particle);
306
ph->
RegisterProcess
(eioni, particle);
307
ph->
RegisterProcess
(brem, particle);
308
ph->
RegisterProcess
(ee, particle);
309
ph->
RegisterProcess
(ss, particle);
310
311
}
else
if
(particleName ==
"e+"
) {
312
313
// multiple scattering
314
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
315
msc->
SetStepLimitType
(
fUseDistanceToBoundary
);
316
G4GoudsmitSaundersonMscModel
* msc1 =
new
G4GoudsmitSaundersonMscModel
();
317
G4WentzelVIModel
* msc2 =
new
G4WentzelVIModel
();
318
msc1->
SetHighEnergyLimit
(highEnergyLimit);
319
msc2->
SetLowEnergyLimit
(highEnergyLimit);
320
msc->
SetEmModel
(msc1);
321
msc->
SetEmModel
(msc2);
322
323
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
324
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
325
ss->
SetEmModel
(ssm);
326
ss->
SetMinKinEnergy
(highEnergyLimit);
327
ssm->
SetLowEnergyLimit
(highEnergyLimit);
328
ssm->
SetActivationLowEnergyLimit
(highEnergyLimit);
329
330
// Ionisation
331
G4eIonisation
* eioni =
new
G4eIonisation
();
332
333
// Bremsstrahlung from standard
334
G4eBremsstrahlung
* brem =
new
G4eBremsstrahlung
();
335
G4SeltzerBergerModel
* br1 =
new
G4SeltzerBergerModel
();
336
G4eBremsstrahlungRelModel
* br2 =
new
G4eBremsstrahlungRelModel
();
337
br1->
SetAngularDistribution
(
new
G4Generator2BS
());
338
br2->
SetAngularDistribution
(
new
G4Generator2BS
());
339
brem->
SetEmModel
(br1);
340
brem->
SetEmModel
(br2);
341
br1->
SetHighEnergyLimit
(
GeV
);
342
343
ph->
RegisterProcess
(msc, particle);
344
ph->
RegisterProcess
(eioni, particle);
345
ph->
RegisterProcess
(brem, particle);
346
ph->
RegisterProcess
(ee, particle);
347
ph->
RegisterProcess
(
new
G4eplusAnnihilation
(), particle);
348
ph->
RegisterProcess
(ss, particle);
349
350
}
else
if
(particleName ==
"mu+"
||
351
particleName ==
"mu-"
) {
352
353
G4MuIonisation
* muIoni =
new
G4MuIonisation
();
354
355
ph->
RegisterProcess
(mumsc, particle);
356
ph->
RegisterProcess
(muIoni, particle);
357
ph->
RegisterProcess
(mub, particle);
358
ph->
RegisterProcess
(mup, particle);
359
ph->
RegisterProcess
(muss, particle);
360
361
}
else
if
(particleName ==
"alpha"
||
362
particleName ==
"He3"
) {
363
364
G4hMultipleScattering
* msc =
new
G4hMultipleScattering
();
365
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
366
367
ph->
RegisterProcess
(msc, particle);
368
ph->
RegisterProcess
(ionIoni, particle);
369
ph->
RegisterProcess
(pnuc, particle);
370
371
}
else
if
(particleName ==
"GenericIon"
) {
372
373
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
374
ionIoni->
SetEmModel
(
new
G4IonParametrisedLossModel
());
375
ionIoni->
SetStepFunction
(0.1, 1*
um
);
376
377
ph->
RegisterProcess
(hmsc, particle);
378
ph->
RegisterProcess
(ionIoni, particle);
379
ph->
RegisterProcess
(inuc, particle);
380
381
}
else
if
(particleName ==
"pi+"
||
382
particleName ==
"pi-"
) {
383
384
G4hIonisation
* hIoni =
new
G4hIonisation
();
385
386
ph->
RegisterProcess
(pimsc, particle);
387
ph->
RegisterProcess
(hIoni, particle);
388
ph->
RegisterProcess
(pib, particle);
389
ph->
RegisterProcess
(pip, particle);
390
ph->
RegisterProcess
(piss, particle);
391
392
}
else
if
(particleName ==
"kaon+"
||
393
particleName ==
"kaon-"
) {
394
395
G4hIonisation
* hIoni =
new
G4hIonisation
();
396
397
ph->
RegisterProcess
(kmsc, particle);
398
ph->
RegisterProcess
(hIoni, particle);
399
ph->
RegisterProcess
(kb, particle);
400
ph->
RegisterProcess
(kp, particle);
401
ph->
RegisterProcess
(kss, particle);
402
403
}
else
if
(particleName ==
"proton"
||
404
particleName ==
"anti_proton"
) {
405
406
G4hMultipleScattering
* pmsc =
new
G4hMultipleScattering
();
407
pmsc->
SetEmModel
(
new
G4WentzelVIModel
());
408
G4hIonisation
* hIoni =
new
G4hIonisation
();
409
410
ph->
RegisterProcess
(pmsc, particle);
411
ph->
RegisterProcess
(hIoni, particle);
412
ph->
RegisterProcess
(pb, particle);
413
ph->
RegisterProcess
(pp, particle);
414
ph->
RegisterProcess
(
new
G4CoulombScattering
(), particle);
415
ph->
RegisterProcess
(pnuc, particle);
416
417
}
else
if
(particleName ==
"B+"
||
418
particleName ==
"B-"
||
419
particleName ==
"D+"
||
420
particleName ==
"D-"
||
421
particleName ==
"Ds+"
||
422
particleName ==
"Ds-"
||
423
particleName ==
"anti_He3"
||
424
particleName ==
"anti_alpha"
||
425
particleName ==
"anti_deuteron"
||
426
particleName ==
"anti_lambda_c+"
||
427
particleName ==
"anti_omega-"
||
428
particleName ==
"anti_sigma_c+"
||
429
particleName ==
"anti_sigma_c++"
||
430
particleName ==
"anti_sigma+"
||
431
particleName ==
"anti_sigma-"
||
432
particleName ==
"anti_triton"
||
433
particleName ==
"anti_xi_c+"
||
434
particleName ==
"anti_xi-"
||
435
particleName ==
"deuteron"
||
436
particleName ==
"lambda_c+"
||
437
particleName ==
"omega-"
||
438
particleName ==
"sigma_c+"
||
439
particleName ==
"sigma_c++"
||
440
particleName ==
"sigma+"
||
441
particleName ==
"sigma-"
||
442
particleName ==
"tau+"
||
443
particleName ==
"tau-"
||
444
particleName ==
"triton"
||
445
particleName ==
"xi_c+"
||
446
particleName ==
"xi-"
) {
447
ph->
RegisterProcess
(hmsc, particle);
448
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
449
ph->
RegisterProcess
(pnuc, particle);
450
}
451
}
452
453
// Nuclear stopping
454
pnuc->
SetMaxKinEnergy
(
MeV
);
455
inuc->
SetMaxKinEnergy
(
MeV
);
456
457
// Deexcitation
458
//
459
G4VAtomDeexcitation
* de =
new
G4UAtomicDeexcitation
();
460
man->
SetAtomDeexcitation
(de);
461
462
G4EmModelActivator
mact(
GetPhysicsName
());
463
}
464
465
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
source
physics_lists
constructors
electromagnetic
src
G4EmLivermorePolarizedPhysics.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:26
using
1.8.2 with
ECCE GitHub integration