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
G4MuPairProductionModel.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4MuPairProductionModel.hh
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
// GEANT4 Class header file
30
//
31
//
32
// File name: G4MuPairProductionModel
33
//
34
// Author: Vladimir Ivanchenko on base of Laszlo Urban code
35
//
36
// Creation date: 18.05.2002
37
//
38
// Modifications:
39
//
40
// 23-12-02 Change interface in order to move to cut per region (V.Ivanchenko)
41
// 27-01-03 Make models region aware (V.Ivanchenko)
42
// 13-02-03 Add name (V.Ivanchenko)
43
// 10-02-04 Update parameterisation using R.Kokoulin model (V.Ivanchenko)
44
// 10-02-04 Add lowestKinEnergy (V.Ivanchenko)
45
// 13-02-06 Add ComputeCrossSectionPerAtom (mma)
46
// 12-05-06 Add parameter to SelectRandomAtom (A.Bogdanov)
47
// 11-10-07 Add ignoreCut flag (V.Ivanchenko)
48
// 28-02-08 Reorganized protected methods and members (V.Ivanchenko)
49
50
//
51
// Class Description:
52
//
53
// Implementation of e+e- pair production by muons
54
//
55
56
// -------------------------------------------------------------------
57
//
58
59
#ifndef G4MuPairProductionModel_h
60
#define G4MuPairProductionModel_h 1
61
62
#include "
G4VEmModel.hh
"
63
#include "
G4NistManager.hh
"
64
#include "
G4ElementData.hh
"
65
#include "
G4Physics2DVector.hh
"
66
#include <vector>
67
68
class
G4Element
;
69
class
G4ParticleChangeForLoss
;
70
class
G4ParticleChangeForGamma
;
71
72
class
G4MuPairProductionModel
:
public
G4VEmModel
73
{
74
public
:
75
76
explicit
G4MuPairProductionModel
(
const
G4ParticleDefinition
*
p
=
nullptr
,
77
const
G4String
& nam =
"muPairProd"
);
78
79
virtual
~G4MuPairProductionModel
();
80
81
virtual
void
Initialise
(
const
G4ParticleDefinition
*,
82
const
G4DataVector
&)
override
;
83
84
virtual
void
InitialiseLocal
(
const
G4ParticleDefinition
*,
85
G4VEmModel
* masterModel)
override
;
86
87
virtual
G4double
ComputeCrossSectionPerAtom
(
88
const
G4ParticleDefinition
*,
89
G4double
kineticEnergy,
90
G4double
Z
,
G4double
A
,
91
G4double
cutEnergy,
92
G4double
maxEnergy)
override
;
93
94
virtual
G4double
ComputeDEDXPerVolume
(
const
G4Material
*,
95
const
G4ParticleDefinition
*,
96
G4double
kineticEnergy,
97
G4double
cutEnergy)
override
;
98
99
virtual
void
SampleSecondaries
(std::vector<G4DynamicParticle*>*,
100
const
G4MaterialCutsCouple
*,
101
const
G4DynamicParticle
*,
102
G4double
tmin,
103
G4double
maxEnergy)
override
;
104
105
virtual
G4double
MinPrimaryEnergy
(
const
G4Material
*,
106
const
G4ParticleDefinition
*,
107
G4double
)
override
;
108
109
inline
void
SetLowestKineticEnergy
(
G4double
e
);
110
111
inline
void
SetParticle
(
const
G4ParticleDefinition
*);
112
113
// hide assignment operator and copy constructor
114
G4MuPairProductionModel
&
operator
=
115
(
const
G4MuPairProductionModel
&
right
) =
delete
;
116
G4MuPairProductionModel
(
const
G4MuPairProductionModel
&) =
delete
;
117
118
protected
:
119
120
G4double
ComputMuPairLoss
(
G4double
Z,
G4double
tkin,
G4double
cut,
121
G4double
tmax);
122
123
G4double
ComputeMicroscopicCrossSection
(
G4double
tkin,
124
G4double
Z,
125
G4double
cut);
126
127
virtual
G4double
128
ComputeDMicroscopicCrossSection
(
G4double
tkin,
G4double
Z,
129
G4double
pairEnergy);
130
131
inline
G4double
MaxSecondaryEnergyForElement
(
G4double
kineticEnergy,
132
G4double
Z);
133
134
private
:
135
136
void
MakeSamplingTables
();
137
138
void
StoreTables
()
const
;
139
140
G4bool
RetrieveTables
();
141
142
void
DataCorrupted
(
G4int
Z,
G4double
logTkin)
const
;
143
144
inline
G4double
FindScaledEnergy
(
G4int
Z,
G4double
rand,
G4double
logTkin,
145
G4double
yymin,
G4double
yymax);
146
147
protected
:
148
149
const
G4ParticleDefinition
*
particle
;
150
G4NistManager
*
nist
;
151
152
G4double
factorForCross
;
153
G4double
sqrte
;
154
G4double
particleMass
;
155
G4double
z13
;
156
G4double
z23
;
157
G4double
lnZ
;
158
G4int
currentZ
;
159
160
static
const
G4double
xgi
[8],
wgi
[8];
161
162
G4ParticleDefinition
*
theElectron
;
163
G4ParticleDefinition
*
thePositron
;
164
G4ParticleChangeForLoss
*
fParticleChange
;
165
166
G4double
minPairEnergy
;
167
G4double
lowestKinEnergy
;
168
169
G4int
nzdat
;
170
171
// gamma energy bins
172
G4int
nYBinPerDecade
;
173
size_t
nbiny
;
174
size_t
nbine
;
175
G4double
ymin
;
176
G4double
dy
;
177
G4double
emin
;
178
G4double
emax
;
179
180
G4bool
fTableToFile
;
181
};
182
183
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
184
185
inline
void
G4MuPairProductionModel::SetLowestKineticEnergy
(
G4double
e
)
186
{
187
lowestKinEnergy
=
e
;
188
}
189
190
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
191
192
inline
193
void
G4MuPairProductionModel::SetParticle
(
const
G4ParticleDefinition
*
p
)
194
{
195
if
(!
particle
) {
196
particle
=
p
;
197
particleMass
=
particle
->
GetPDGMass
();
198
}
199
}
200
201
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
202
203
inline
G4double
204
G4MuPairProductionModel::MaxSecondaryEnergyForElement
(
G4double
kineticEnergy,
205
G4double
ZZ)
206
{
207
G4int
Z
=
G4lrint
(ZZ);
208
if
(Z !=
currentZ
) {
209
currentZ
=
Z
;
210
z13
=
nist
->
GetZ13
(Z);
211
z23
=
z13
*
z13
;
212
lnZ
=
nist
->
GetLOGZ
(Z);
213
}
214
return
kineticEnergy +
particleMass
*(1.0 - 0.75*
sqrte
*
z13
);
215
}
216
217
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
218
219
inline
G4double
220
G4MuPairProductionModel::FindScaledEnergy
(
G4int
Z
,
G4double
rand,
221
G4double
logTkin,
222
G4double
yymin,
G4double
yymax)
223
{
224
G4double
res = yymin;
225
G4Physics2DVector
* pv =
fElementData
->
GetElement2DData
(Z);
226
if
(!pv) {
227
DataCorrupted
(Z, logTkin);
228
}
else
{
229
G4double
pmin = pv->
Value
(yymin, logTkin);
230
G4double
pmax = pv->
Value
(yymax, logTkin);
231
G4double
p0 = pv->
Value
(0.0, logTkin);
232
if
(p0 <= 0.0) {
DataCorrupted
(Z, logTkin); }
233
else
{ res = pv->
FindLinearX
((pmin + rand*(pmax - pmin))/p0, logTkin); }
234
}
235
return
res;
236
}
237
238
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
239
240
#endif
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
muons
include
G4MuPairProductionModel.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:33
using
1.8.2 with
ECCE GitHub integration