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
G4UniversalFluctuation.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4UniversalFluctuation.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: G4UniversalFluctuation
33
//
34
// Author: V.Ivanchenko make a class with the Laszlo Urban model
35
//
36
// Creation date: 03.01.2002
37
//
38
// Modifications:
39
//
40
//
41
// Class Description:
42
//
43
// Implementation of energy loss fluctuations
44
45
// -------------------------------------------------------------------
46
//
47
48
#ifndef G4UniversalFluctuation_h
49
#define G4UniversalFluctuation_h 1
50
51
52
#include "
G4VEmFluctuationModel.hh
"
53
#include "
G4ParticleDefinition.hh
"
54
#include "
G4Poisson.hh
"
55
#include <
CLHEP/Random/RandomEngine.h
>
56
57
class
G4UniversalFluctuation
:
public
G4VEmFluctuationModel
58
{
59
60
public
:
61
62
explicit
G4UniversalFluctuation
(
const
G4String
& nam =
"UniFluc"
);
63
64
virtual
~G4UniversalFluctuation
();
65
66
virtual
G4double
SampleFluctuations
(
const
G4MaterialCutsCouple
*,
67
const
G4DynamicParticle
*,
68
G4double
,
69
G4double
,
70
G4double
)
override
;
71
72
virtual
G4double
Dispersion
(
const
G4Material
*,
73
const
G4DynamicParticle
*,
74
G4double
,
75
G4double
)
override
;
76
77
virtual
void
InitialiseMe
(
const
G4ParticleDefinition
*)
final
;
78
79
// Initialisation prestep
80
virtual
void
SetParticleAndCharge
(
const
G4ParticleDefinition
*,
81
G4double
q2)
final
;
82
83
private
:
84
85
inline
void
AddExcitation
(
CLHEP::HepRandomEngine
* rndm,
86
G4double
a
,
G4double
e
,
G4double
& eav,
87
G4double
& eloss,
G4double
& esig2);
88
89
inline
void
SampleGauss
(
CLHEP::HepRandomEngine
* rndm,
90
G4double
eav,
G4double
esig2,
91
G4double
& eloss);
92
93
// hide assignment operator
94
G4UniversalFluctuation
&
operator=
(
const
G4UniversalFluctuation
&
right
) =
delete
;
95
G4UniversalFluctuation
(
const
G4UniversalFluctuation
&) =
delete
;
96
97
const
G4ParticleDefinition
*
particle
;
98
const
G4Material
*
lastMaterial
;
99
100
G4double
particleMass
;
101
102
// Derived quantities
103
G4double
m_Inv_particleMass
;
104
G4double
m_massrate
;
105
G4double
chargeSquare
;
106
107
// data members to speed up the fluctuation calculation
108
G4double
ipotFluct
;
109
G4double
electronDensity
;
110
111
G4double
f1Fluct
;
112
G4double
f2Fluct
;
113
G4double
e1Fluct
;
114
G4double
e2Fluct
;
115
G4double
e1LogFluct
;
116
G4double
e2LogFluct
;
117
G4double
ipotLogFluct
;
118
G4double
e0
;
119
G4double
esmall
;
120
121
G4double
e1
,
e2
;
122
123
G4double
minNumberInteractionsBohr
;
124
G4double
minLoss
;
125
G4double
nmaxCont
;
126
G4double
rate
,
a0
,
fw
;
127
128
G4int
sizearray
;
129
G4double
*
rndmarray
;
130
131
};
132
133
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
134
135
136
inline
void
137
G4UniversalFluctuation::AddExcitation
(
CLHEP::HepRandomEngine
* rndm,
138
G4double
ax
,
G4double
ex,
G4double
& eav,
139
G4double
& eloss,
G4double
& esig2)
140
{
141
if
(ax >
nmaxCont
) {
142
eav += ax*ex;
143
esig2 += ax*ex*ex;
144
}
else
{
145
G4int
p
=
G4Poisson
(ax);
146
if
(p > 0) { eloss += ((p + 1) - 2.*rndm->
flat
())*ex; }
147
}
148
}
149
150
inline
void
151
G4UniversalFluctuation::SampleGauss
(
CLHEP::HepRandomEngine
* rndm,
152
G4double
eav,
G4double
esig2,
153
G4double
& eloss)
154
{
155
G4double
x
= eav;
156
G4double
sig = std::sqrt(esig2);
157
if
(eav < 0.25*sig) {
158
x += (2.*rndm->
flat
() - 1.)*eav;
159
}
else
{
160
do
{
161
x =
G4RandGauss::shoot
(rndm, eav, sig);
162
}
while
(x < 0.0 || x > 2*eav);
163
// Loop checking, 23-Feb-2016, Vladimir Ivanchenko
164
}
165
eloss +=
x
;
166
}
167
168
#endif
169
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
standard
include
G4UniversalFluctuation.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:34
using
1.8.2 with
ECCE GitHub integration