Geant4 11.3.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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// G4ParticleChange
27//
28// Class description:
29//
30// Concrete class for ParticleChange containing the results after
31// invocation of a physics process.
32// This includes final states of parent particle (momentum, energy,
33// etc) and secondary particles generated by the interaction.
34// The tracking assumes that all the values of energy and momentum
35// are in global reference system, therefore all the needed Lorentz
36// transformations must have been already computed when filling the
37// data-members of this class.
38//
39// IMPORTANT NOTE: Despite the name, what this class stores/returns
40// through its methods, are the "FINAL" values of the Position,
41// Momentum, etc.
42
43// Author: Hisaya Kurashige, 23 March 1998
44// --------------------------------------------------------------------
45#ifndef G4ParticleChange_hh
46#define G4ParticleChange_hh 1
47
48#include "globals.hh"
49#include "G4ios.hh"
50#include "G4ThreeVector.hh"
51#include "G4VParticleChange.hh"
52
54
56{
57 public:
58
60 // Default constructor
61
62 ~G4ParticleChange() override = default;
63 // Destructor
64
65 G4ParticleChange(const G4ParticleChange& right) = delete;
67
68 // --- the following methods are for updating G4Step -----
69 // Return the pointer to G4Step after updating the Step information
70 // by using final state of the track given by a physics process
71
72 G4Step* UpdateStepForAlongStep(G4Step* Step) override;
73 // A physics process gives the final state of the particle
74 // relative to the initial state at the beginning of the Step,
75 // i.e., based on information of G4Track (or equivalently
76 // the PreStepPoint).
77 // In this method, the differences (delta) between these two states
78 // are calculated, and are accumulated in PostStepPoint.
79 // Take note that the return type of GetMomentumChange() is a
80 // pointer to G4ParticleMomentum. Also it is a normalized
81 // momentum vector
82
83 G4Step* UpdateStepForAtRest(G4Step* Step) override;
84 G4Step* UpdateStepForPostStep(G4Step* Step) override;
85 // A physics process gives the final state of the particle
86 // based on information of G4Track (or equivalently the PreStepPoint)
87
88 void Initialize(const G4Track&) override;
89 // Initialize all propoerties by using G4Track information
90
91 // --- methods to keep information of the final state ---
92 //
93 // The ProposeXXX methods store (and return in GetXXX methods)
94 // the "FINAL" values of the Position, Momentum, etc.
95
96 inline const G4ThreeVector* GetMomentumDirection() const;
98 inline void ProposeMomentumDirection(const G4ThreeVector& Pfinal);
99 // Get/Propose the MomentumDirection vector: it is the final momentum
100 // direction
101
102 inline const G4ThreeVector* GetPolarization() const;
104 inline void ProposePolarization(const G4ThreeVector& finalPoralization);
105 // Get/Propose the final Polarization vector
106
107 inline G4double GetEnergy() const;
108 inline void ProposeEnergy(G4double finalEnergy);
109 // Get/Propose the final kinetic energy of the current particle
110
111 inline G4double GetVelocity() const;
112 inline void ProposeVelocity(G4double finalVelocity);
113 // Get/Propose the final velocity of the current particle
114
115 inline G4double GetProperTime() const;
116 inline void ProposeProperTime(G4double finalProperTime);
117 // Get/Propose the final ProperTime
118
119 inline const G4ThreeVector* GetPosition() const;
121 inline void ProposePosition(const G4ThreeVector& finalPosition);
122 // Get/Propose the final position of the current particle
123
126 // Get/Propose the final global/local Time.
127 // NOTE: DO NOT INVOKE both methods in a step
128 // Each method affects both local and global time
129
130 inline G4double GetGlobalTime(G4double timeDelay = 0.0) const;
131 inline G4double GetLocalTime(G4double timeDelay = 0.0) const;
132 // Convert the time delay to the glocbal/local time.
133 // Can get the final global/local time without argument
134
135 inline G4double GetMass() const;
136 inline void ProposeMass(G4double finalMass);
137 // Get/Propose the final dynamical mass in G4DynamicParticle
138
139 inline G4double GetCharge() const;
140 inline void ProposeCharge(G4double finalCharge);
141 // Get/Propose the final dynamical charge in G4DynamicParticle
142
144 inline void ProposeMagneticMoment(G4double finalMagneticMoment);
145 // Get/Propose the final MagneticMoment in G4DynamicParticle
146
147 inline G4ThreeVector
148 GetGlobalPosition(const G4ThreeVector& displacement) const;
149 // Convert the position displacement to the global position
150
152 G4double mass) const;
153 // Calculate momentum by using Energy, Momentum Direction, and Mass
154
155 // --- methods for adding secondaries ---
156
157 void AddSecondary(G4Track* aSecondary);
158 // Add a secondary particle to theListOfSecondaries
159
160 void AddSecondary(G4DynamicParticle* aSecondary,
161 G4bool IsGoodForTracking = false);
162 // Add a secondary particle to theListOfSecondaries.
163 // Position and time are same as thePositionChange and theTimeChange
164
166 G4bool IsGoodForTracking = false);
167 // Add a secondary particle to theListOfSecondaries.
168 // Global time are same as theTimeChange and theTimeChange
169
170 void AddSecondary(G4DynamicParticle* aSecondary, G4double time,
171 G4bool IsGoodForTracking = false);
172 // Add a secondary particle to theListOfSecondaries.
173 // Position and are same as thePositionChange
174
175 // --- Dump and debug methods ---
176
177 void DumpInfo() const override;
178
179 protected:
180
182 // Update the G4Step specific attributes
183 // (i.e. SteppingControl, LocalEnergyDeposit, and TrueStepLength)
184
186 // It is the vector containing the final momentum direction
187 // after the invoked process. The application of the change
188 // of the momentum direction of the particle is not done here.
189 // The responsibility to apply the change is up to the entity
190 // which invoked the process
191
193 // The changed (final) polarization of a given track
194
196 // The final kinetic energy of the current track
197
200 // The final velocity of the current track
201
203 // The changed (final) position of a given track
204
206 // The global time at Initial
208 // The local time at Initial
209
211 // The change of local time of a given particle
212
214 // The changed (final) proper time of a given track
215
217 // The Changed (final) mass of a given track
218
220 // The Changed (final) charge of a given track
221
223 // The Changed (final) MagneticMoment of a given track
224};
225
226#include "G4ParticleChange.icc"
227
228#endif
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
void AddSecondary(G4Track *aSecondary)
void ProposePolarization(G4double Px, G4double Py, G4double Pz)
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
G4double GetVelocity() const
void DumpInfo() const override
G4double GetEnergy() const
void ProposePosition(G4double x, G4double y, G4double z)
G4ThreeVector CalcMomentum(G4double energy, G4ThreeVector direction, G4double mass) const
G4Step * UpdateStepForAlongStep(G4Step *Step) override
const G4ThreeVector * GetPolarization() const
G4double GetProperTime() const
G4ThreeVector thePositionChange
G4ThreeVector theMomentumDirectionChange
G4double GetMagneticMoment() const
G4Step * UpdateStepInfo(G4Step *Step)
void ProposeLocalTime(G4double t)
void ProposeMagneticMoment(G4double finalMagneticMoment)
void Initialize(const G4Track &) override
const G4ThreeVector * GetMomentumDirection() const
void ProposeProperTime(G4double finalProperTime)
void ProposePosition(const G4ThreeVector &finalPosition)
void ProposeCharge(G4double finalCharge)
G4ThreeVector GetGlobalPosition(const G4ThreeVector &displacement) const
void ProposeVelocity(G4double finalVelocity)
G4ThreeVector thePolarizationChange
void ProposeEnergy(G4double finalEnergy)
~G4ParticleChange() override=default
G4double GetMass() const
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4Step * UpdateStepForAtRest(G4Step *Step) override
G4ParticleChange & operator=(const G4ParticleChange &right)=delete
void ProposePolarization(const G4ThreeVector &finalPoralization)
void ProposeGlobalTime(G4double t)
G4double theMagneticMomentChange
const G4ThreeVector * GetPosition() const
G4double GetCharge() const
G4double GetGlobalTime(G4double timeDelay=0.0) const
G4ParticleChange(const G4ParticleChange &right)=delete
void ProposeMass(G4double finalMass)
G4double GetLocalTime(G4double timeDelay=0.0) const
G4Step * UpdateStepForPostStep(G4Step *Step) override