Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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
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)
G4double theProperTimeChange
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
Definition: G4Step.hh:62