Geant4-11
G4DynamicParticle.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// G4DynamicParticle
27//
28// Class description:
29//
30// A G4DynamicParticle aggregates the information to describe the dynamics
31// of a G4Particle, such as energy, momentum, polarization and proper time,
32// as well as the "particle definition", holding all the static information.
33// It contains the purely dynamic aspects of a moving particle.
34
35// History:
36// - 2 December 1995, G.Cosmo - first design, based on object model.
37// - 29 January 1996, M.Asai - first implementation.
38// - 1996 - 2007, H.Kurashige - revisions.
39// - 15 March 2019, M.Novak - log-kinetic energy value is computed only
40// on demand if its stored value is not up-to-date.
41// --------------------------------------------------------------------
42#ifndef G4DynamicParticle_hh
43#define G4DynamicParticle_hh 1
44
45#include <cmath>
48
49#include "globals.hh"
50#include "G4ios.hh"
51
53#include "G4Allocator.hh"
54#include "G4LorentzVector.hh"
55#include "G4Log.hh"
56
57#include "G4ParticleMomentum.hh" // NOTE: means "momentum direction" not
58 // "momentum vector". It is a G4ThreeVector
60
62class G4DecayProducts;
63
65{
66 public:
67
68 //- constructors
70
71 G4DynamicParticle(const G4ParticleDefinition* aParticleDefinition,
72 const G4ThreeVector& aMomentumDirection,
73 G4double aKineticEnergy);
74 G4DynamicParticle(const G4ParticleDefinition* aParticleDefinition,
75 const G4ThreeVector& aParticleMomentum);
76 G4DynamicParticle(const G4ParticleDefinition* aParticleDefinition,
77 const G4LorentzVector& aParticleMomentum);
78 G4DynamicParticle(const G4ParticleDefinition* aParticleDefinition,
79 G4double aTotalEnergy,
80 const G4ThreeVector& aParticleMomentum);
81 G4DynamicParticle(const G4ParticleDefinition* aParticleDefinition,
82 const G4ThreeVector& aMomentumDirection,
83 G4double aKineticEnergy,
84 const G4double dynamicalMass);
85
87
88 //- destructor
90
91 //- operators
93 G4bool operator==(const G4DynamicParticle& right) const;
94 G4bool operator!=(const G4DynamicParticle& right) const;
95
96 //- Move constructor & operator
99
100 //- new/delete operators are oberloded to use G4Allocator
101 inline void* operator new(size_t);
102 inline void operator delete(void* aDynamicParticle);
103
104 //- Set/Get methods
105
106 inline const G4ThreeVector& GetMomentumDirection() const;
107 // Returns the normalized direction of the momentum
108 inline void SetMomentumDirection(const G4ThreeVector& aDirection);
109 // Sets the normalized direction of the momentum
111 // Sets the normalized direction of the momentum by coordinates
112
114 // Returns the current particle momentum vector
115 void SetMomentum( const G4ThreeVector& momentum);
116 // set the current particle momentum vector
117
119 // Returns the current particle energy-momentum 4vector
120 void Set4Momentum( const G4LorentzVector& momentum);
121 // Set the current particle energy-momentum 4vector
122
124 // Returns the module of the momentum vector
125 inline G4double GetTotalEnergy() const;
126 // Returns the total energy of the particle
127
129 // Returns the kinetic energy of a particle
131 // Returns:
132 // - natural logarithm of the particle kinetic energy (E_k) if E_k > 0
133 // - LOG_EKIN_MIN otherwise
134 inline void SetKineticEnergy(G4double aEnergy);
135 // Sets the kinetic energy of a particle
136 inline G4double GetBeta() const;
137 // Access Lorentz beta
138
139 inline G4double GetProperTime() const;
140 // Returns the current particle proper time
141 inline void SetProperTime( G4double );
142 // Set the current particle Proper Time
143
144 inline const G4ThreeVector& GetPolarization() const;
145 inline void SetPolarization(const G4ThreeVector&);
146 inline void SetPolarization(G4double polX, G4double polY, G4double polZ);
147 // Set/Get polarization vector
148
149 inline G4double GetMass() const;
150 inline void SetMass(G4double mass);
151 // Set/Get dynamical mass
152 // The dynamical mass is set to PDG mass in default
153
154 inline G4double GetCharge() const;
155 inline void SetCharge(G4double charge);
156 inline void SetCharge(G4int chargeInUnitOfEplus);
157 // Set/Get dynamical charge
158 // The dynamical mass is set to PDG charge in default
159
160 inline G4double GetSpin() const;
161 inline void SetSpin(G4double spin);
162 inline void SetSpin(G4int spinInUnitOfHalfInteger);
163 // Set/Get dynamical spin
164 // The dynamical spin is set to PDG spin in default
165
167 inline void SetMagneticMoment(G4double magneticMoment);
168 // Set/Get dynamical MagneticMoment
169 // The dynamical mass is set to PDG MagneticMoment in default
170
172 // Get electron occupancy
173 // ElectronOccupancy is valid only if the particle is ion
174 inline G4int GetTotalOccupancy() const;
175 inline G4int GetOccupancy(G4int orbit) const;
176 inline void AddElectron(G4int orbit, G4int number = 1);
177 inline void RemoveElectron(G4int orbit, G4int number = 1);
178
180 void SetDefinition(const G4ParticleDefinition* aParticleDefinition);
181 // Set/Get particle definition
182 // Following method of GetDefinition() remains
183 // because of backward compatiblity. May be removed in future
185
187 inline void SetPreAssignedDecayProducts(G4DecayProducts* aDecayProducts);
188 // Set/Get pre-assigned decay channel
189
192 // Set/Get pre-assigned proper time when the particle will decay
193
194 void DumpInfo(G4int mode = 0) const;
195 // Print out information
196 // - mode 0 : default )(minimum)
197 // - mode 1 : 0 + electron occupancy
198
199 inline void SetVerboseLevel(G4int value);
200 inline G4int GetVerboseLevel() const;
201 // Set/Get controle flag for output message
202 // - 0: Silent
203 // - 1: Warning message
204 // - 2: More
205
207 inline void SetPDGcode(G4int c);
208
210 // Return the pointer to the corresponding G4PrimaryParticle object
211 // if this particle is a primary particle OR is defined as a
212 // pre-assigned decay product. Otherwise return nullptr.
213
214 inline G4int GetPDGcode() const;
215 // Return the PDG code of this particle. If the particle is known to
216 // Geant4, its PDG code defined in G4ParticleDefinition is returned.
217 // If it is unknown (i.e. PDG code in G4ParticleDefinition is 0), the
218 // PDG code defined in the corresponding primary particle or
219 // pre-assigned decay product will be returned if available.
220 // Otherwise (e.g. for geantino) returns 0.
221
222 protected:
223
226
227 private:
228
229 inline void ComputeBeta() const;
230
232 // The normalized momentum vector
233
235
237 // Contains the static information of this particle
238
240
242
244 // This void pointer is used by G4EventManager to maintain the
245 // link between pre-assigned decay products and corresponding
246 // primary particle
247
249
251
252 mutable G4double theBeta = -1.0;
253
255
257
259
261
263
265
267
269};
270
271#include "G4DynamicParticle.icc"
272
273#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4int GetTotalOccupancy() const
G4double GetMass() const
void SetPreAssignedDecayProducts(G4DecayProducts *aDecayProducts)
G4double thePreAssignedDecayTime
void SetPolarization(const G4ThreeVector &)
G4ThreeVector thePolarization
void SetCharge(G4double charge)
void SetMomentumDirection(const G4ThreeVector &aDirection)
void DumpInfo(G4int mode=0) const
G4int GetOccupancy(G4int orbit) const
void SetPDGcode(G4int c)
const G4ThreeVector & GetMomentumDirection() const
void SetProperTime(G4double)
G4bool operator==(const G4DynamicParticle &right) const
G4PrimaryParticle * GetPrimaryParticle() const
G4double GetSpin() const
G4double GetCharge() const
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetSpin(G4int spinInUnitOfHalfInteger)
void SetMagneticMoment(G4double magneticMoment)
const G4ParticleDefinition * theParticleDefinition
void SetPolarization(G4double polX, G4double polY, G4double polZ)
void SetMass(G4double mass)
const G4DecayProducts * GetPreAssignedDecayProducts() const
G4double GetLogKineticEnergy() const
void SetCharge(G4int chargeInUnitOfEplus)
const G4ParticleDefinition * GetParticleDefinition() const
G4ParticleDefinition * GetDefinition() const
void SetSpin(G4double spin)
void SetMomentumDirection(G4double px, G4double py, G4double pz)
G4LorentzVector Get4Momentum() const
G4double GetKineticEnergy() const
G4double GetTotalEnergy() const
G4double GetBeta() const
G4bool operator!=(const G4DynamicParticle &right) const
G4ElectronOccupancy * theElectronOccupancy
void Set4Momentum(const G4LorentzVector &momentum)
void SetMomentum(const G4ThreeVector &momentum)
G4int GetVerboseLevel() const
G4DecayProducts * thePreAssignedDecayProducts
G4double GetProperTime() const
void SetPrimaryParticle(G4PrimaryParticle *p)
G4double theDynamicalMagneticMoment
G4ThreeVector theMomentumDirection
G4ThreeVector GetMomentum() const
void SetPreAssignedDecayProperTime(G4double)
G4DynamicParticle & operator=(const G4DynamicParticle &right)
G4double GetPreAssignedDecayProperTime() const
void ComputeBeta() const
G4double GetMagneticMoment() const
G4double GetTotalMomentum() const
void AddElectron(G4int orbit, G4int number=1)
G4double GetElectronMass() const
const G4ThreeVector & GetPolarization() const
void RemoveElectron(G4int orbit, G4int number=1)
void SetKineticEnergy(G4double aEnergy)
G4int GetPDGcode() const
const G4ElectronOccupancy * GetElectronOccupancy() const
G4PrimaryParticle * primaryParticle
void SetVerboseLevel(G4int value)
#define DBL_MAX
Definition: templates.hh:62