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
G4VParticleChange.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4VParticleChange.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
// ------------------------------------------------------------
30
// GEANT 4 class header file
31
//
32
//
33
// ------------------------------------------------------------
34
// Implemented for the new scheme 23 Mar. 1998 H.Kurahige
35
//
36
// Class Description
37
// This class is the abstract class for ParticleChange.
38
//-
39
// The ParticleChange class ontains the results after invocation
40
// of a physics process. This includes final states of parent
41
// particle (momentum, energy, etc) and secondary particles generated
42
// by the interaction.
43
// The tracking assumes that all the values of energy and
44
// momentum are in global reference system, therefore all the
45
// needed Lorentz transformations must have been already Done
46
// when filling the data-members of this class.
47
//-
48
//-
49
// This abstract class has following four virtual methods
50
// virtual G4Step* UpdateStepForAtRest(G4Step* Step);
51
// virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
52
// virtual G4Step* UpdateStepForPostStep(G4Step* Step);
53
// virtual void Initialize(const G4Track&);
54
// The UpdateStep methods return the pointer to the G4Step
55
// after updating the given Step information by using final state
56
// information of the track given by a physics process.
57
// User must add methods to keep the final state information
58
// in his derived class as well as implement UpdateStep methods
59
// which he want to use.
60
//-
61
// The Initialize methods is provided to refresh the final
62
// state information and should be called by each process
63
// at the beginning of DoIt.
64
//
65
// ------------------------------------------------------------
66
// Implement Event Biasing Scheme 9 Nov.,98 H.Kurashige
67
// add CheckIt 13 Apr.,99 H.Kurashige
68
// add accuracy leveles 5 May, 99 H.Kurashige
69
// add check secondaries 11 June, 03 H.Kurashige
70
// add new methods of ProposeXXX 08 May, 04 H.Kurashige
71
// remove obsolete methods of SetXXX 19 Sep, 04 H.Kurashige
72
// add flag for first/last step in volume 30 Oct. 2006 H.Kurashige
73
// add nonIonizingEnergyLoss 26 Mar 2007 H.Kurashige
74
// modify/fix bugs related to weight 17 Sep. 2011 H.Kurashige
75
// fix bugs related to weight 29 Apr. 2012 H.Kurashige
76
//
77
78
#ifndef G4VParticleChange_h
79
#define G4VParticleChange_h 1
80
81
#include "
globals.hh
"
82
#include "
G4ios.hh
"
83
#include <cmath>
84
85
class
G4Track
;
86
class
G4Step
;
87
88
#include "
G4TrackFastVector.hh
"
89
#include "
G4TrackStatus.hh
"
90
#include "
G4SteppingControl.hh
"
91
92
93
class
G4VParticleChange
94
{
95
public
:
96
// default constructor
97
G4VParticleChange
();
98
99
// destructor
100
virtual
~G4VParticleChange
();
101
102
// equal/unequal operator
103
G4bool
operator==
(
const
G4VParticleChange
&
right
)
const
;
104
G4bool
operator!=
(
const
G4VParticleChange
&right)
const
;
105
// "equal" means that teo objects have the same pointer.
106
107
protected
:
108
// hide copy constructor and assignment operaor as protected
109
G4VParticleChange
(
const
G4VParticleChange
&right);
110
G4VParticleChange
&
operator=
(
const
G4VParticleChange
&right);
111
112
public
:
// with description
113
// --- the following methods are for updating G4Step -----
114
virtual
G4Step
*
UpdateStepForAtRest
(
G4Step
* Step);
115
virtual
G4Step
*
UpdateStepForAlongStep
(
G4Step
* Step);
116
virtual
G4Step
*
UpdateStepForPostStep
(
G4Step
* Step);
117
// Return the pointer to the G4Step after updating the Step information
118
// by using final state information of the track given by a physics
119
// process
120
121
protected
:
// with description
122
G4Step
*
UpdateStepInfo
(
G4Step
* Step);
123
// Update the G4Step specific attributes
124
// (i.e. SteppingControl, LocalEnergyDeposit, and TrueStepLength)
125
126
127
public
:
// with description
128
virtual
void
Initialize
(
const
G4Track
&);
129
// This methods will be called by each process at the beginning of DoIt
130
// if necessary.
131
132
protected
:
133
void
InitializeTrueStepLength
(
const
G4Track
&);
134
void
InitializeLocalEnergyDeposit
(
const
G4Track
&);
135
void
InitializeSteppingControl
(
const
G4Track
&);
136
void
InitializeParentWeight
(
const
G4Track
&);
137
void
InitializeParentGlobalTime
(
const
G4Track
&);
138
139
void
InitializeStatusChange
(
const
G4Track
&);
140
void
InitializeSecondaries
(
const
G4Track
&);
141
void
InitializeStepInVolumeFlags
(
const
G4Track
&);
142
// ------------------------------------------------------
143
144
public
:
// with description
145
//---- the following methods are for TruePathLength ----
146
G4double
GetTrueStepLength
()
const
;
147
void
ProposeTrueStepLength
(
G4double
truePathLength);
148
// Get/Propose theTrueStepLength
149
150
//---- the following methods are for LocalEnergyDeposit ----
151
G4double
GetLocalEnergyDeposit
()
const
;
152
void
ProposeLocalEnergyDeposit
(
G4double
anEnergyPart);
153
// Get/Propose the locally deposited energy
154
155
//---- the following methods are for nonIonizingEnergyDeposit ----
156
G4double
GetNonIonizingEnergyDeposit
()
const
;
157
void
ProposeNonIonizingEnergyDeposit
(
G4double
anEnergyPart);
158
// Get/Propose the non-ionizing deposited energy
159
160
//---- the following methods are for TrackStatus -----
161
G4TrackStatus
GetTrackStatus
()
const
;
162
void
ProposeTrackStatus
(
G4TrackStatus
status);
163
// Get/Propose the final TrackStatus of the current particle.
164
// ------------------------------------------------------
165
166
//---- the following methods are for managements of SteppingControl --
167
G4SteppingControl
GetSteppingControl
()
const
;
168
void
ProposeSteppingControl
(
G4SteppingControl
StepControlFlag);
169
// Set/Propose a flag to control stepping manager behavier
170
// ------------------------------------------------------
171
172
//---- the following methods are for managements of initial/last step
173
G4bool
GetFirstStepInVolume
()
const
;
174
G4bool
GetLastStepInVolume
()
const
;
175
void
ProposeFirstStepInVolume
(
G4bool
flag);
176
void
ProposeLastStepInVolume
(
G4bool
flag);
177
178
//---- the following methods are for managements of secondaries --
179
void
Clear
();
180
// Clear the contents of this objects
181
// This method should be called after the Tracking(Stepping)
182
// manager removes all secondaries in theListOfSecondaries
183
184
void
SetNumberOfSecondaries
(
G4int
totSecondaries);
185
// SetNumberOfSecondaries must be called just before AddSecondary()
186
// in order to secure memory space for theListOfSecondaries
187
// This method resets theNumberOfSecondaries to 0
188
// (that will be incremented at every AddSecondary() call).
189
190
G4int
GetNumberOfSecondaries
()
const
;
191
// Returns the number of secondaries current stored in
192
// G4TrackFastVector.
193
194
G4Track
*
GetSecondary
(
G4int
anIndex)
const
;
195
// Returns the pointer to the generated secondary particle
196
// which is specified by an Index.
197
198
void
AddSecondary
(
G4Track
* aSecondary);
199
// Add a secondary particle to theListOfSecondaries.
200
// ------------------------------------------------------
201
202
G4double
GetWeight
()
const
;
203
G4double
GetParentWeight
()
const
;
204
// Get weight of the parent (i.e. current) track
205
void
ProposeWeight
(
G4double
finalWeight);
206
void
ProposeParentWeight
(
G4double
finalWeight);
207
// Propse new weight of the parent (i.e. current) track
208
// As for AlongStepDoIt, the parent weight will be set
209
// in accumulated manner
210
// i.e.) If two processes propose weight of W1 and W2 respectively
211
// for the track with initial weight of W0
212
// the final weight is set to
213
// (W1/W0) * (W2/W0) * W0
214
215
void
SetSecondaryWeightByProcess
(
G4bool
);
216
G4bool
IsSecondaryWeightSetByProcess
()
const
;
217
// In default (fSecondaryWeightByProcess flag is false),
218
// the weight of secondary tracks will be set to
219
// the parent weight
220
// If fSecondaryWeightByProcess flag is true,
221
// the weight of secondary tracks will not be changed
222
// by the ParticleChange
223
// (i.e. the process determine the secodary weight)
224
// NOTE:
225
// Make sure that only one processe in AlongStepDoIt
226
// proposes the parent weight,
227
// If several processes in AlongStepDoIt proposes
228
// the parent weight and add secondaties with
229
// fSecondaryWeightByProcess is set to false,
230
// secondary weights may be wrong
231
232
void
SetParentWeightByProcess
(
G4bool
);
233
G4bool
IsParentWeightSetByProcess
()
const
;
234
// Obsolete
235
236
virtual
void
DumpInfo
()
const
;
237
// Print out information
238
239
void
SetVerboseLevel
(
G4int
vLevel);
240
G4int
GetVerboseLevel
()
const
;
241
242
protected
:
243
244
G4TrackFastVector
*
theListOfSecondaries
;
245
// The vector of secondaries.
246
247
G4int
theNumberOfSecondaries
;
248
// The total number of secondaries produced by each process.
249
250
G4int
theSizeOftheListOfSecondaries
;
251
// TheSizeOftheListOfSecondaries;
252
253
G4TrackStatus
theStatusChange
;
254
// The changed (final) track status of a given particle.
255
256
G4SteppingControl
theSteppingControlFlag
;
257
// a flag to control stepping manager behavior
258
259
G4double
theLocalEnergyDeposit
;
260
// It represents the part of the energy lost for discrete
261
// or semi-continuous processes which is due to secondaries
262
// not generated because they would have been below their cut
263
// threshold.
264
// The sum of the locally deposited energy + the delta-energy
265
// coming from the continuous processes gives the
266
// total energy loss localized in the current Step.
267
268
G4double
theNonIonizingEnergyDeposit
;
269
// non-ionizing energu deposit is defined as
270
// a part of local energy deposit, which does not cause
271
// ionization of atoms
272
273
G4double
theTrueStepLength
;
274
// The value of "True" Step Length
275
276
277
G4bool
theFirstStepInVolume
;
278
G4bool
theLastStepInVolume
;
279
// flag for initial/last step
280
281
G4double
theParentWeight
;
282
// Weight ofparent track
283
G4bool
isParentWeightProposed
;
284
// flags for Weight ofparent track
285
G4bool
fSetSecondaryWeightByProcess
;
286
// flag for setting weight of secondaries
287
288
G4double
theParentGlobalTime
;
289
// global time of the parent.
290
// This is used only for checking
291
292
G4int
verboseLevel
;
293
// The Verbose level
294
295
public
:
// with description
296
// CheckIt method is provided for debug
297
virtual
G4bool
CheckIt
(
const
G4Track
&);
298
299
// CheckIt method is activated
300
// if debug flag is set and 'G4VERBOSE' is defined
301
void
ClearDebugFlag
();
302
void
SetDebugFlag
();
303
G4bool
GetDebugFlag
()
const
;
304
305
protected
:
306
// CheckSecondary method is provided for debug
307
G4bool
CheckSecondary
(
G4Track
&);
308
309
G4double
GetAccuracyForWarning
()
const
;
310
G4double
GetAccuracyForException
()
const
;
311
312
protected
:
313
G4bool
debugFlag
;
314
315
// accuracy levels
316
static
const
G4double
accuracyForWarning
;
317
static
const
G4double
accuracyForException
;
318
319
320
};
321
322
#include "
G4Step.hh
"
323
#include "
G4Track.hh
"
324
#include "G4VParticleChange.icc"
325
326
#endif
geant4
tree
geant4-10.6-release
source
track
include
G4VParticleChange.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:53
using
1.8.2 with
ECCE GitHub integration