Geant4 9.6.0
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//
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