Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4ParticleChange.hh
Go to the documentation of this file.
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// $Id$
28//
29//
30// ------------------------------------------------------------
31// GEANT 4 class header file
32//
33//
34// ------------------------------------------------------------
35// Implemented for the new scheme 23 Mar. 1998 H.Kurahige
36//
37// Class Description
38// This class is a concrete class for ParticleChange which
39// has all functionality in old scheme.
40//-
41// This class contains the results after invocation of a physics process.
42// This includes final states of parent particle (momentum, energy,
43// etc) and secondary particles generated by the interaction.
44// The tracking assumes that all the values of energy and
45// momentum are in global reference system, therefore all the
46// needed Lorentz transformations must have been already Done
47// when filling the data-members of this class.
48//-
49// ---------------------------------------------------------------
50// IMPORTANT NOTE: Although the name of the class and methods are
51// "Change", what it stores (and returns in get) are the "FINAL"
52// values of the Position, Momentum, etc.
53//
54// ------------------------------------------------------------
55// modify AddSecondary methods for "GoodForTracking" flag
56// 8 June 1998 H.Kurashige
57// Add Track weight 12 Nov. 1998 H.Kurashige
58// Add Get/SetMomentumDirectionChange 6 Feb. 1999 H.Kurashige
59// Add Get/SetDynamicMass 5 Oct. 1999 H.Kurashige
60// Add Get/SetDynamicCharge 5 Oct. 1999 H.Kurashige
61// Rename SetXXX methods to ProposeXXX DynamicCharge Oct. 2005 H.Kurashige
62// Add get/ProposeMagneticMoment Mar 2007 H.Kurashige
63// Fix treatment of weight Mar 2007 H.Kurashige
64// Add Get/ProposeVelocity Apr 2011 H.Kurashige
65// -------------------------------------------------------------
66
67#ifndef G4ParticleChange_h
68#define G4ParticleChange_h 1
69
70#include "globals.hh"
71#include "G4ios.hh"
72#include "G4ThreeVector.hh"
73#include "G4ThreeVector.hh"
75#include "G4VParticleChange.hh"
76
78{
79 public:
80 // default constructor
82// G4ParticleChange(G4bool useEB);
83
84 // destructor
85 virtual ~G4ParticleChange();
86
87 protected:
88 // hide copy constructor and assignment operaor as protected
91
92 public:
93 // equal/unequal operator
94 G4bool operator==(const G4ParticleChange &right) const;
95 G4bool operator!=(const G4ParticleChange &right) const;
96
97 public: // with description
98 // ----------------------------------------------------
99 // --- the following methods are for updating G4Step -----
100 // Return the pointer to the G4Step after updating the Step information
101 // by using final state information of the track given by a physics
102 // process
103 virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
104 // A physics process gives the final state of the particle
105 // relative to the initial state at the beginning of the Step,
106 // i.e., based on information of G4Track (or equivalently
107 // the PreStepPoint)
108 // In this method, the differences (delta) between these two states
109 // are calculated, and are accumulated in PostStepPoint.
110 // Take note that the return type of GetMomentumChange is a
111 // pointer to G4ParticleMometum. Also it is a normalized
112 // momentum vector.
113 virtual G4Step* UpdateStepForAtRest(G4Step* Step);
114 virtual G4Step* UpdateStepForPostStep(G4Step* Step);
115 // A physics process gives the final state of the particle
116 // based on information of G4Track (or equivalently the PreStepPoint)
117
118 virtual void Initialize(const G4Track&);
119 // Initialize all propoerties by using G4Track information
120
121 protected: // with description
123 // Update the G4Step specific attributes
124 // (i.e. SteppingControl, LocalEnergyDeposit, and TrueStepLength)
125
126 public: // with description
127
128 // ----------------------------------------------------
129 //--- methods to keep information of the final state--
130 // IMPORTANT NOTE:
131 // These ProposeXXX methods stores (and returns in GetXXX methods)
132 // the "FINAL" values of the Position, Momentum, etc.
133
137 // Get/Propose the MomentumDirection vector: it is the final momentum direction.
138
141 void ProposePolarization(const G4ThreeVector& finalPoralization);
142 // Get/Propose the final Polarization vector.
143
145 void ProposeEnergy(G4double finalEnergy);
146 // Get/Propose the final kinetic energy of the current particle.
147
149 void ProposeVelocity(G4double finalVelocity);
150 // Get/Propose the final velocity of the current particle.
151
153 void ProposeProperTime(G4double finalProperTime);
154 // Get/Propose th final ProperTime
155
158 void ProposePosition(const G4ThreeVector& finalPosition);
159 // Get/Propose the final position of the current particle.
160
163 // Get/Propose the final global/local Time
164 // NOTE: DO NOT INVOKE both methods in a step
165 // Each method affects both local and global time
166
167 G4double GetGlobalTime(G4double timeDelay=0.0) const;
168 G4double GetLocalTime(G4double timeDelay=0.0) const;
169 // Convert the time delay to the glocbal/local time.
170 // Can get the final global/local Time without argument
171
173 void ProposeMass(G4double finalMass);
174 // Get/Propose the final dynamical Mass in G4DynamicParticle
175
177 void ProposeCharge(G4double finalCharge);
178 // Get/Propose the final dynamical Charge in G4DynamicParticle
179
181 void ProposeMagneticMoment(G4double finalMagneticMoment);
182 // Get/Propose the final MagneticMoment in G4DynamicParticle
183
185 // Convert the position displacement to the global position.
186
188 G4ThreeVector direction,
189 G4double mass ) const;
190 // Calculate momentum by using Energy, Momentum Direction, and Mass
191
192
193
194 // ----------------------------------------------------
195 // --- methods for adding secondaries
196 void AddSecondary(G4Track* aSecondary);
197 // Add a secondary particle to theListOfSecondaries.
198
199 void AddSecondary(G4DynamicParticle* aSecondary,
200 G4bool IsGoodForTracking = false );
201 // Add a secondary particle to theListOfSecondaries.
202 // position and time are same as thePositionChange and theTimeChange
203
204 void AddSecondary(G4DynamicParticle* aSecondary,
206 G4bool IsGoodForTracking = false );
207 // Add a secondary particle to theListOfSecondaries.
208 // global time are same as theTimeChange and theTimeChange
209
210 void AddSecondary(G4DynamicParticle* aSecondary,
211 G4double time,
212 G4bool IsGoodForTracking = false );
213 // Add a secondary particle to theListOfSecondaries.
214 // position and are same as thePositionChange
215 // ----------------------------------------------------
216
217 public:
218 virtual void DumpInfo() const;
219
220 protected:
222 // It is the vector containing the final momentum direction
223 // after the invoked process. The application of the change
224 // of the momentum direction of the particle is not Done here.
225 // The responsibility to apply the change is up the entity
226 // which invoked the process.
227
229 // The changed (final) polarization of a given track
230
232 // The final kinetic energy of the current track
233
236 // The final velocity of the current track
237
239 // The changed (final) position of a given track
240
242 // The global time at Initial.
244 // The local time at Initial.
245
247 // The change of local time of a given particle.
248
250 // The changed (final) proper time of a given track
251
253 // The Changed (final) mass of a given track
254
256 // The Changed (final) charge of a given track
257
259 // The Changed (final) MagneticMoment of a given track
260
262
263 public:
264 // for Debug
265 virtual G4bool CheckIt(const G4Track&);
266};
267
268#include "G4ParticleChange.icc"
269
270#endif
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
double G4double
Definition: G4Types.hh:64
bool G4bool
Definition: G4Types.hh:67
virtual G4Step * UpdateStepForAtRest(G4Step *Step)
void AddSecondary(G4Track *aSecondary)
G4bool operator==(const G4ParticleChange &right) const
void ProposePolarization(G4double Px, G4double Py, G4double Pz)
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
G4double GetVelocity() const
G4double GetEnergy() const
void ProposePosition(G4double x, G4double y, G4double z)
G4ThreeVector CalcMomentum(G4double energy, G4ThreeVector direction, G4double mass) const
const G4ThreeVector * GetPolarization() const
virtual void DumpInfo() const
G4double GetProperTime() const
virtual ~G4ParticleChange()
G4ThreeVector thePositionChange
G4ThreeVector theMomentumDirectionChange
G4double GetMagneticMoment() const
G4Step * UpdateStepInfo(G4Step *Step)
void ProposeLocalTime(G4double t)
void ProposeMagneticMoment(G4double finalMagneticMoment)
const G4ThreeVector * GetMomentumDirection() const
void ProposeProperTime(G4double finalProperTime)
G4double theProperTimeChange
void ProposePosition(const G4ThreeVector &finalPosition)
void ProposeCharge(G4double finalCharge)
virtual G4Step * UpdateStepForPostStep(G4Step *Step)
virtual G4bool CheckIt(const G4Track &)
G4ThreeVector GetGlobalPosition(const G4ThreeVector &displacement) const
void ProposeVelocity(G4double finalVelocity)
G4ThreeVector thePolarizationChange
void ProposeEnergy(G4double finalEnergy)
virtual G4Step * UpdateStepForAlongStep(G4Step *Step)
G4double GetMass() const
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
void ProposePolarization(const G4ThreeVector &finalPoralization)
void ProposeGlobalTime(G4double t)
G4double theMagneticMomentChange
G4bool operator!=(const G4ParticleChange &right) const
const G4ThreeVector * GetPosition() const
virtual void Initialize(const G4Track &)
G4double GetCharge() const
const G4Track * theCurrentTrack
G4ParticleChange & operator=(const G4ParticleChange &right)
G4double GetGlobalTime(G4double timeDelay=0.0) const
void ProposeMass(G4double finalMass)
G4double GetLocalTime(G4double timeDelay=0.0) const
Definition: G4Step.hh:78