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
G4EmBiasingManager.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4EmBiasingManager.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: G4EmBiasingManager
33
//
34
// Author: Vladimir Ivanchenko
35
//
36
// Creation date: 28.07.2011
37
//
38
// Modifications:
39
//
40
// Class Description:
41
//
42
// It is a class providing step limit for forced process biasing
43
44
// -------------------------------------------------------------------
45
//
46
47
#ifndef G4EmBiasingManager_h
48
#define G4EmBiasingManager_h 1
49
50
#include "
globals.hh
"
51
#include "
G4ParticleDefinition.hh
"
52
#include "
G4DynamicParticle.hh
"
53
#include "
Randomize.hh
"
54
#include <vector>
55
56
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
57
58
class
G4Region
;
59
class
G4Track
;
60
class
G4VEnergyLossProcess
;
61
class
G4VEmModel
;
62
class
G4MaterialCutsCouple
;
63
class
G4ParticleChangeForLoss
;
64
class
G4ParticleChangeForGamma
;
65
66
class
G4EmBiasingManager
67
{
68
public
:
69
70
G4EmBiasingManager
();
71
72
~G4EmBiasingManager
();
73
74
void
Initialise
(
const
G4ParticleDefinition
&
part
,
75
const
G4String
& procName,
G4int
verbose);
76
77
// default parameters are possible
78
void
ActivateForcedInteraction
(
G4double
length
= 0.0,
79
const
G4String
&
r
=
""
);
80
81
// no default parameters
82
void
ActivateSecondaryBiasing
(
const
G4String
& region,
G4double
factor,
83
G4double
energyLimit);
84
85
// return forced step limit
86
G4double
GetStepLimit
(
G4int
coupleIdx,
G4double
previousStep);
87
88
// return weight of splitting or Russian roulette
89
// G4DynamicParticle may be deleted
90
// two functions are required because of the different ParticleChange
91
// ApplySecondaryBiasing() are wrappers
92
93
// for G4VEmProcess
94
G4double
ApplySecondaryBiasing
(std::vector<G4DynamicParticle*>&,
95
const
G4Track
&
track
,
96
G4VEmModel
* currentModel,
97
G4ParticleChangeForGamma
* pParticleChange,
98
G4double
& eloss,
99
G4int
coupleIdx,
100
G4double
tcut,
101
G4double
safety = 0.0);
102
103
// for G4VEnergyLossProcess
104
G4double
ApplySecondaryBiasing
(std::vector<G4DynamicParticle*>&,
105
const
G4Track
& track,
106
G4VEmModel
* currentModel,
107
G4ParticleChangeForLoss
* pParticleChange,
108
G4double
& eloss,
109
G4int
coupleIdx,
110
G4double
tcut,
111
G4double
safety = 0.0);
112
113
// for G4VEnergyLossProcess
114
G4double
ApplySecondaryBiasing
(std::vector<G4Track*>&,
115
G4int
coupleIdx);
116
117
inline
G4bool
SecondaryBiasingRegion
(
G4int
coupleIdx);
118
119
inline
G4bool
ForcedInteractionRegion
(
G4int
coupleIdx);
120
121
inline
void
ResetForcedInteraction
();
122
123
G4bool
CheckDirection
(
G4ThreeVector
pos
,
G4ThreeVector
momdir)
const
;
124
125
G4bool
GetDirectionalSplitting
() {
return
fDirectionalSplitting
; }
126
void
SetDirectionalSplitting
(
G4bool
v
) {
fDirectionalSplitting
=
v
; }
127
128
void
SetDirectionalSplittingTarget
(
G4ThreeVector
v
)
129
{
fDirectionalSplittingTarget
=
v
; }
130
void
SetDirectionalSplittingRadius
(
G4double
r
)
131
{
fDirectionalSplittingRadius
=
r
; }
132
G4double
GetWeight
(
G4int
i);
133
134
private
:
135
136
void
ApplyRangeCut
(std::vector<G4DynamicParticle*>& vd,
137
const
G4Track
& track,
138
G4double
& eloss,
139
G4double
safety);
140
141
G4double
ApplySplitting
(std::vector<G4DynamicParticle*>& vd,
142
const
G4Track
& track,
143
G4VEmModel
* currentModel,
144
G4int
index,
145
G4double
tcut);
146
147
G4double
ApplyDirectionalSplitting
(std::vector<G4DynamicParticle*>& vd,
148
const
G4Track
& track,
149
G4VEmModel
* currentModel,
150
G4int
index,
151
G4double
tcut,
152
G4ParticleChangeForGamma
* partChange);
153
154
G4double
ApplyDirectionalSplitting
(std::vector<G4DynamicParticle*>& vd,
155
const
G4Track
& track,
156
G4VEmModel
* currentModel,
157
G4int
index,
158
G4double
tcut);
159
160
inline
G4double
ApplyRussianRoulette
(std::vector<G4DynamicParticle*>& vd,
161
G4int
index);
162
163
// hide copy constructor and assignment operator
164
G4EmBiasingManager
(
G4EmBiasingManager
&) =
delete
;
165
G4EmBiasingManager
&
operator=
(
const
G4EmBiasingManager
&
right
) =
delete
;
166
167
G4int
nForcedRegions
;
168
G4int
nSecBiasedRegions
;
169
std::vector<const G4Region*>
forcedRegions
;
170
std::vector<G4double>
lengthForRegion
;
171
std::vector<const G4Region*>
secBiasedRegions
;
172
std::vector<G4double>
secBiasedWeight
;
173
std::vector<G4double>
secBiasedEnegryLimit
;
174
std::vector<G4int>
nBremSplitting
;
175
176
std::vector<G4int>
idxForcedCouple
;
177
std::vector<G4int>
idxSecBiasedCouple
;
178
179
std::vector<G4DynamicParticle*>
tmpSecondaries
;
180
181
G4VEnergyLossProcess
*
eIonisation
;
182
183
const
G4ParticleDefinition
*
theElectron
;
184
const
G4ParticleDefinition
*
theGamma
;
185
186
G4double
fSafetyMin
;
187
G4double
currentStepLimit
;
188
G4bool
startTracking
;
189
190
G4bool
fDirectionalSplitting
;
191
G4ThreeVector
fDirectionalSplittingTarget
;
192
G4double
fDirectionalSplittingRadius
;
193
std::vector<G4double>
fDirectionalSplittingWeights
;
194
};
195
196
inline
G4bool
197
G4EmBiasingManager::SecondaryBiasingRegion
(
G4int
coupleIdx)
198
{
199
G4bool
res =
false
;
200
if
(
nSecBiasedRegions
> 0) {
201
if
(
idxSecBiasedCouple
[coupleIdx] >= 0) { res =
true
; }
202
}
203
return
res;
204
}
205
206
inline
G4bool
G4EmBiasingManager::ForcedInteractionRegion
(
G4int
coupleIdx)
207
{
208
G4bool
res =
false
;
209
if
(
nForcedRegions
> 0) {
210
if
(
idxForcedCouple
[coupleIdx] >= 0) { res =
true
; }
211
}
212
return
res;
213
}
214
215
inline
void
G4EmBiasingManager::ResetForcedInteraction
()
216
{
217
startTracking
=
true
;
218
}
219
220
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
221
222
inline
G4double
223
G4EmBiasingManager::ApplyRussianRoulette
(std::vector<G4DynamicParticle*>& vd,
224
G4int
index)
225
{
226
size_t
n
= vd.size();
227
G4double
weight
=
secBiasedWeight
[index];
228
for
(
size_t
k
=0;
k
<
n
; ++
k
) {
229
if
(
G4UniformRand
()*weight > 1.0) {
230
const
G4DynamicParticle
* dp = vd[
k
];
231
delete
dp;
232
vd[
k
] =
nullptr
;
233
}
234
}
235
return
weight
;
236
}
237
238
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
239
240
#endif
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
utils
include
G4EmBiasingManager.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:35
using
1.8.2 with
ECCE GitHub integration