Geant4  10.03
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: G4ParticleChange.hh 68795 2013-04-05 13:24:46Z gcosmo $
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"
74 class G4DynamicParticle;
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
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
122  G4Step* UpdateStepInfo(G4Step* Step);
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 
134  const G4ThreeVector* GetMomentumDirection() const;
136  void ProposeMomentumDirection(const G4ThreeVector& Pfinal);
137  // Get/Propose the MomentumDirection vector: it is the final momentum direction.
138 
139  const G4ThreeVector* GetPolarization() const;
141  void ProposePolarization(const G4ThreeVector& finalPoralization);
142  // Get/Propose the final Polarization vector.
143 
144  G4double GetEnergy() const;
145  void ProposeEnergy(G4double finalEnergy);
146  // Get/Propose the final kinetic energy of the current particle.
147 
148  G4double GetVelocity() const;
149  void ProposeVelocity(G4double finalVelocity);
150  // Get/Propose the final velocity of the current particle.
151 
152  G4double GetProperTime() const;
153  void ProposeProperTime(G4double finalProperTime);
154  // Get/Propose th final ProperTime
155 
156  const G4ThreeVector* GetPosition() const;
158  void ProposePosition(const G4ThreeVector& finalPosition);
159  // Get/Propose the final position of the current particle.
160 
161  void ProposeGlobalTime(G4double t);
162  void ProposeLocalTime(G4double t);
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 
172  G4double GetMass() const;
173  void ProposeMass(G4double finalMass);
174  // Get/Propose the final dynamical Mass in G4DynamicParticle
175 
176  G4double GetCharge() const;
177  void ProposeCharge(G4double finalCharge);
178  // Get/Propose the final dynamical Charge in G4DynamicParticle
179 
180  G4double GetMagneticMoment() const;
181  void ProposeMagneticMoment(G4double finalMagneticMoment);
182  // Get/Propose the final MagneticMoment in G4DynamicParticle
183 
184  G4ThreeVector GetGlobalPosition(const G4ThreeVector& displacement) const;
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 
G4double theProperTimeChange
G4Step * UpdateStepInfo(G4Step *Step)
const G4ThreeVector * GetPosition() const
G4double GetVelocity() const
CLHEP::Hep3Vector G4ThreeVector
G4double GetMass() const
G4double GetCharge() const
G4double GetLocalTime(G4double timeDelay=0.0) const
G4ThreeVector GetGlobalPosition(const G4ThreeVector &displacement) const
void ProposePolarization(G4double Px, G4double Py, G4double Pz)
const G4ThreeVector * GetMomentumDirection() const
G4double GetGlobalTime(G4double timeDelay=0.0) const
G4double GetMagneticMoment() const
virtual ~G4ParticleChange()
G4ThreeVector CalcMomentum(G4double energy, G4ThreeVector direction, G4double mass) const
void ProposePosition(G4double x, G4double y, G4double z)
G4double theMagneticMomentChange
G4ThreeVector thePositionChange
G4ThreeVector thePolarizationChange
#define position
Definition: xmlparse.cc:622
virtual G4Step * UpdateStepForPostStep(G4Step *Step)
void ProposeMass(G4double finalMass)
bool G4bool
Definition: G4Types.hh:79
G4ParticleChange & operator=(const G4ParticleChange &right)
G4bool operator==(const G4ParticleChange &right) const
virtual G4Step * UpdateStepForAlongStep(G4Step *Step)
Definition: G4Step.hh:76
G4bool operator!=(const G4ParticleChange &right) const
virtual G4bool CheckIt(const G4Track &)
G4ThreeVector theMomentumDirectionChange
virtual void Initialize(const G4Track &)
void ProposeProperTime(G4double finalProperTime)
virtual void DumpInfo() const
void ProposeGlobalTime(G4double t)
virtual G4Step * UpdateStepForAtRest(G4Step *Step)
G4double energy(const ThreeVector &p, const G4double m)
G4double GetProperTime() const
void ProposeEnergy(G4double finalEnergy)
const G4Track * theCurrentTrack
Definition: Step.hh:41
void ProposeMagneticMoment(G4double finalMagneticMoment)
void AddSecondary(G4Track *aSecondary)
G4double GetEnergy() const
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
double G4double
Definition: G4Types.hh:76
const G4ThreeVector * GetPolarization() const
void ProposeVelocity(G4double finalVelocity)
void ProposeCharge(G4double finalCharge)
void ProposeLocalTime(G4double t)