Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // G4ParticleChange << 27 // 26 // 28 // Class description: << 27 // $Id: G4ParticleChange.hh,v 1.13 2007-03-11 07:19:06 kurasige Exp $ >> 28 // GEANT4 tag $Name: not supported by cvs2svn $ 29 // 29 // 30 // Concrete class for ParticleChange containin << 30 // 31 // invocation of a physics process. << 31 // ------------------------------------------------------------ 32 // This includes final states of parent partic << 32 // GEANT 4 class header file 33 // etc) and secondary particles generated by t << 34 // The tracking assumes that all the values of << 35 // are in global reference system, therefore a << 36 // transformations must have been already comp << 37 // data-members of this class. << 38 // 33 // 39 // IMPORTANT NOTE: Despite the name, what this << 34 // 40 // through its methods, are the "FINAL" values << 35 // ------------------------------------------------------------ 41 // Momentum, etc. << 36 // Implemented for the new scheme 23 Mar. 1998 H.Kurahige 42 << 37 // 43 // Author: Hisaya Kurashige, 23 March 1998 << 38 // Class Description 44 // ------------------------------------------- << 39 // This class is a concrete class for ParticleChange which 45 #ifndef G4ParticleChange_hh << 40 // has all functionality in old scheme. 46 #define G4ParticleChange_hh 1 << 41 //- >> 42 // This class contains the results after invocation of a physics process. >> 43 // This includes final states of parent particle (momentum, energy, >> 44 // etc) and secondary particles generated by the interaction. >> 45 // The tracking assumes that all the values of energy and >> 46 // momentum are in global reference system, therefore all the >> 47 // needed Lorentz transformations must have been already Done >> 48 // when filling the data-members of this class. >> 49 //- >> 50 // --------------------------------------------------------------- >> 51 // IMPORTANT NOTE: Although the name of the class and methods are >> 52 // "Change", what it stores (and returns in get) are the "FINAL" >> 53 // values of the Position, Momentum, etc. >> 54 // >> 55 // ------------------------------------------------------------ >> 56 // modify AddSecondary methods for "GoodForTracking" flag >> 57 // 8 June 1998 H.Kurashige >> 58 // Add Track weight 12 Nov. 1998 H.Kurashige >> 59 // Add Get/SetMomentumDirectionChange 6 Feb. 1999 H.Kurashige >> 60 // Add Get/SetDynamicMass 5 Oct. 1999 H.Kurashige >> 61 // Add Get/SetDynamicCharge 5 Oct. 1999 H.Kurashige >> 62 // Rename SetXXX methods to ProposeXXX DynamicCharge Oct. 2005 H.Kurashige >> 63 // Add get/ProposeMagneticMoment Mar 2007 H.Kurashige >> 64 // Fix treatment of weight Mar 2007 H.Kurashige >> 65 // Add Get/ProposeVelocity Apr 2011 H.Kurashige >> 66 // ------------------------------------------------------------- >> 67 >> 68 #ifndef G4ParticleChange_h >> 69 #define G4ParticleChange_h 1 47 70 48 #include "globals.hh" 71 #include "globals.hh" 49 #include "G4ios.hh" 72 #include "G4ios.hh" 50 #include "G4ThreeVector.hh" 73 #include "G4ThreeVector.hh" 51 #include "G4VParticleChange.hh" << 74 #include "G4ThreeVector.hh" 52 << 53 class G4DynamicParticle; 75 class G4DynamicParticle; >> 76 #include "G4VParticleChange.hh" 54 77 55 class G4ParticleChange : public G4VParticleCha << 78 class G4ParticleChange: public G4VParticleChange 56 { << 79 { 57 public: 80 public: 58 << 81 // default constructor 59 G4ParticleChange(); 82 G4ParticleChange(); 60 // Default constructor << 83 // G4ParticleChange(G4bool useEB); 61 84 62 ~G4ParticleChange() override = default; << 85 // destructor 63 // Destructor << 86 virtual ~G4ParticleChange(); 64 87 65 G4ParticleChange(const G4ParticleChange& r << 88 protected: 66 G4ParticleChange& operator=(const G4Partic << 89 // hide copy constructor and assignment operaor as protected >> 90 G4ParticleChange(const G4ParticleChange &right); >> 91 G4ParticleChange & operator=(const G4ParticleChange &right); 67 92 68 // --- the following methods are for updatin << 93 public: 69 // Return the pointer to G4Step after updati << 94 // equal/unequal operator 70 // by using final state of the track given b << 95 G4bool operator==(const G4ParticleChange &right) const; 71 << 96 G4bool operator!=(const G4ParticleChange &right) const; 72 G4Step* UpdateStepForAlongStep(G4Step* Ste << 97 73 // A physics process gives the final sta << 98 public: // with description 74 // relative to the initial state at the << 99 // ---------------------------------------------------- 75 // i.e., based on information of G4Track << 100 // --- the following methods are for updating G4Step ----- 76 // the PreStepPoint). << 101 // Return the pointer to the G4Step after updating the Step information 77 // In this method, the differences (delt << 102 // by using final state information of the track given by a physics 78 // are calculated, and are accumulated i << 103 // process 79 // Take note that the return type of Get << 104 virtual G4Step* UpdateStepForAlongStep(G4Step* Step); 80 // pointer to G4ParticleMomentum. Also i << 105 // A physics process gives the final state of the particle 81 // momentum vector << 106 // relative to the initial state at the beginning of the Step, 82 << 107 // i.e., based on information of G4Track (or equivalently 83 G4Step* UpdateStepForAtRest(G4Step* Step) << 108 // the PreStepPoint) 84 G4Step* UpdateStepForPostStep(G4Step* Step << 109 // In this method, the differences (delta) between these two states 85 // A physics process gives the final sta << 110 // are calculated, and are accumulated in PostStepPoint. 86 // based on information of G4Track (or e << 111 // Take note that the return type of GetMomentumChange is a 87 << 112 // pointer to G4ParticleMometum. Also it is a normalized 88 void Initialize(const G4Track&) override; << 113 // momentum vector. 89 // Initialize all propoerties by using G << 114 virtual G4Step* UpdateStepForAtRest(G4Step* Step); 90 << 115 virtual G4Step* UpdateStepForPostStep(G4Step* Step); 91 // --- methods to keep information of the fi << 116 // A physics process gives the final state of the particle 92 // << 117 // based on information of G4Track (or equivalently the PreStepPoint) 93 // The ProposeXXX methods store (and return << 118 94 // the "FINAL" values of the Position, Mome << 119 virtual void Initialize(const G4Track&); 95 << 120 // Initialize all propoerties by using G4Track information 96 inline const G4ThreeVector* GetMomentumDir << 97 inline void ProposeMomentumDirection(G4dou << 98 inline void ProposeMomentumDirection(const << 99 // Get/Propose the MomentumDirection vec << 100 // direction << 101 << 102 inline const G4ThreeVector* GetPolarizatio << 103 inline void ProposePolarization(G4double P << 104 inline void ProposePolarization(const G4Th << 105 // Get/Propose the final Polarization ve << 106 << 107 inline G4double GetEnergy() const; << 108 inline void ProposeEnergy(G4double finalEn << 109 // Get/Propose the final kinetic energy << 110 << 111 inline G4double GetVelocity() const; << 112 inline void ProposeVelocity(G4double final << 113 // Get/Propose the final velocity of the << 114 << 115 inline G4double GetProperTime() const; << 116 inline void ProposeProperTime(G4double fin << 117 // Get/Propose the final ProperTime << 118 << 119 inline const G4ThreeVector* GetPosition() << 120 inline void ProposePosition(G4double x, G4 << 121 inline void ProposePosition(const G4ThreeV << 122 // Get/Propose the final position of the << 123 << 124 inline void ProposeGlobalTime(G4double t); << 125 inline void ProposeLocalTime(G4double t); << 126 // Get/Propose the final global/local Ti << 127 // NOTE: DO NOT INVOKE both methods in a << 128 // Each method affects both local << 129 << 130 inline G4double GetGlobalTime(G4double tim << 131 inline G4double GetLocalTime(G4double time << 132 // Convert the time delay to the glocbal << 133 // Can get the final global/local time w << 134 << 135 inline G4double GetMass() const; << 136 inline void ProposeMass(G4double finalMass << 137 // Get/Propose the final dynamical mass << 138 << 139 inline G4double GetCharge() const; << 140 inline void ProposeCharge(G4double finalCh << 141 // Get/Propose the final dynamical charg << 142 << 143 inline G4double GetMagneticMoment() const; << 144 inline void ProposeMagneticMoment(G4double << 145 // Get/Propose the final MagneticMoment << 146 << 147 inline G4ThreeVector << 148 GetGlobalPosition(const G4ThreeVector& dis << 149 // Convert the position displacement to << 150 << 151 inline G4ThreeVector CalcMomentum(G4double << 152 G4double << 153 // Calculate momentum by using Energy, M << 154 121 155 // --- methods for adding secondaries --- << 122 protected: // with description >> 123 G4Step* UpdateStepInfo(G4Step* Step); >> 124 // Update the G4Step specific attributes >> 125 // (i.e. SteppingControl, LocalEnergyDeposit, and TrueStepLength) 156 126 157 void AddSecondary(G4Track* aSecondary); << 127 public: // with description 158 // Add a secondary particle to theListOf << 128 >> 129 // ---------------------------------------------------- >> 130 //--- methods to keep information of the final state-- >> 131 // IMPORTANT NOTE: >> 132 // These ProposeXXX methods stores (and returns in GetXXX methods) >> 133 // the "FINAL" values of the Position, Momentum, etc. >> 134 >> 135 const G4ThreeVector* GetMomentumDirection() const; >> 136 void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz); >> 137 void ProposeMomentumDirection(const G4ThreeVector& Pfinal); >> 138 // Get/Propose the MomentumDirection vector: it is the final momentum direction. >> 139 >> 140 const G4ThreeVector* GetPolarization() const; >> 141 void ProposePolarization(G4double Px, G4double Py, G4double Pz); >> 142 void ProposePolarization(const G4ThreeVector& finalPoralization); >> 143 // Get/Propose the final Polarization vector. >> 144 >> 145 G4double GetEnergy() const; >> 146 void ProposeEnergy(G4double finalEnergy); >> 147 // Get/Propose the final kinetic energy of the current particle. >> 148 >> 149 G4double GetVelocity() const; >> 150 void ProposeVelocity(G4double finalVelocity); >> 151 // Get/Propose the final velocity of the current particle. >> 152 >> 153 G4double GetProperTime() const; >> 154 void ProposeProperTime(G4double finalProperTime); >> 155 // Get/Propose th final ProperTime >> 156 >> 157 const G4ThreeVector* GetPosition() const; >> 158 void ProposePosition(G4double x, G4double y, G4double z); >> 159 void ProposePosition(const G4ThreeVector& finalPosition); >> 160 // Get/Propose the final position of the current particle. >> 161 >> 162 void ProposeGlobalTime(G4double t); >> 163 void ProposeLocalTime(G4double t); >> 164 // Get/Propose the final global/local Time >> 165 // NOTE: DO NOT INVOKE both methods in a step >> 166 // Each method affects both local and global time >> 167 >> 168 G4double GetGlobalTime(G4double timeDelay=0.0) const; >> 169 G4double GetLocalTime(G4double timeDelay=0.0) const; >> 170 // Convert the time delay to the glocbal/local time. >> 171 // Can get the final global/local Time without argument >> 172 >> 173 G4double GetMass() const; >> 174 void ProposeMass(G4double finalMass); >> 175 // Get/Propose the final dynamical Mass in G4DynamicParticle >> 176 >> 177 G4double GetCharge() const; >> 178 void ProposeCharge(G4double finalCharge); >> 179 // Get/Propose the final dynamical Charge in G4DynamicParticle >> 180 >> 181 G4double GetMagneticMoment() const; >> 182 void ProposeMagneticMoment(G4double finalMagneticMoment); >> 183 // Get/Propose the final MagneticMoment in G4DynamicParticle >> 184 >> 185 G4ThreeVector GetGlobalPosition(const G4ThreeVector& displacement) const; >> 186 // Convert the position displacement to the global position. >> 187 >> 188 G4ThreeVector CalcMomentum(G4double energy, >> 189 G4ThreeVector direction, >> 190 G4double mass ) const; >> 191 // Calculate momentum by using Energy, Momentum Direction, and Mass 159 192 160 void AddSecondary(G4DynamicParticle* aSeco << 161 G4bool IsGoodForTracking << 162 // Add a secondary particle to theListOf << 163 // Position and time are same as thePosi << 164 << 165 void AddSecondary(G4DynamicParticle* aSeco << 166 G4bool IsGoodForTracking << 167 // Add a secondary particle to theListOf << 168 // Global time are same as theTimeChange << 169 << 170 void AddSecondary(G4DynamicParticle* aSeco << 171 G4bool IsGoodForTracking << 172 // Add a secondary particle to theListOf << 173 // Position and are same as thePositionC << 174 193 175 // --- Dump and debug methods --- << 176 194 177 void DumpInfo() const override; << 195 // ---------------------------------------------------- >> 196 // --- methods for adding secondaries >> 197 void AddSecondary(G4Track* aSecondary); >> 198 // Add a secondary particle to theListOfSecondaries. 178 199 179 protected: << 200 void AddSecondary(G4DynamicParticle* aSecondary, >> 201 G4bool IsGoodForTracking = false ); >> 202 // Add a secondary particle to theListOfSecondaries. >> 203 // position and time are same as thePositionChange and theTimeChange >> 204 >> 205 void AddSecondary(G4DynamicParticle* aSecondary, >> 206 G4ThreeVector position, >> 207 G4bool IsGoodForTracking = false ); >> 208 // Add a secondary particle to theListOfSecondaries. >> 209 // global time are same as theTimeChange and theTimeChange >> 210 >> 211 void AddSecondary(G4DynamicParticle* aSecondary, >> 212 G4double time, >> 213 G4bool IsGoodForTracking = false ); >> 214 // Add a secondary particle to theListOfSecondaries. >> 215 // position and are same as thePositionChange >> 216 // ---------------------------------------------------- 180 217 181 G4Step* UpdateStepInfo(G4Step* Step); << 218 public: 182 // Update the G4Step specific attributes << 219 virtual void DumpInfo() const; 183 // (i.e. SteppingControl, LocalEnergyDep << 184 220 >> 221 protected: 185 G4ThreeVector theMomentumDirectionChange; 222 G4ThreeVector theMomentumDirectionChange; 186 // It is the vector containing the final << 223 // It is the vector containing the final momentum direction 187 // after the invoked process. The applic << 224 // after the invoked process. The application of the change 188 // of the momentum direction of the part << 225 // of the momentum direction of the particle is not Done here. 189 // The responsibility to apply the chang << 226 // The responsibility to apply the change is up the entity 190 // which invoked the process << 227 // which invoked the process. 191 228 192 G4ThreeVector thePolarizationChange; 229 G4ThreeVector thePolarizationChange; 193 // The changed (final) polarization of a << 230 // The changed (final) polarization of a given track >> 231 >> 232 G4double theEnergyChange; >> 233 // The final kinetic energy of the current track >> 234 >> 235 G4double theVelocityChange; >> 236 G4bool isVelocityChanged; >> 237 // The final velocity of the current track >> 238 >> 239 G4ThreeVector thePositionChange; >> 240 // The changed (final) position of a given track >> 241 >> 242 G4double theGlobalTime0; >> 243 // The global time at Initial. >> 244 G4double theLocalTime0; >> 245 // The local time at Initial. >> 246 >> 247 G4double theTimeChange; >> 248 // The change of local time of a given particle. >> 249 >> 250 G4double theProperTimeChange; >> 251 // The changed (final) proper time of a given track >> 252 >> 253 G4double theMassChange; >> 254 // The Changed (final) mass of a given track >> 255 >> 256 G4double theChargeChange; >> 257 // The Changed (final) charge of a given track >> 258 >> 259 G4double theMagneticMomentChange; >> 260 // The Changed (final) MagneticMoment of a given track >> 261 >> 262 const G4Track* theCurrentTrack; >> 263 >> 264 public: >> 265 // for Debug >> 266 virtual G4bool CheckIt(const G4Track&); >> 267 }; >> 268 >> 269 #include "G4ParticleChange.icc" >> 270 >> 271 #endif >> 272 >> 273 >> 274 >> 275 >> 276 194 277 195 G4double theEnergyChange = 0.0; << 196 // The final kinetic energy of the curre << 197 278 198 G4double theVelocityChange = 0.0; << 199 G4bool isVelocityChanged = false; << 200 // The final velocity of the current tra << 201 279 202 G4ThreeVector thePositionChange; << 203 // The changed (final) position of a giv << 204 280 205 G4double theGlobalTime0 = 0.0; << 206 // The global time at Initial << 207 G4double theLocalTime0 = 0.0; << 208 // The local time at Initial << 209 281 210 G4double theTimeChange = 0.0; << 211 // The change of local time of a given p << 212 282 213 G4double theProperTimeChange = 0.0; << 214 // The changed (final) proper time of a << 215 283 216 G4double theMassChange = 0.0; << 217 // The Changed (final) mass of a given t << 218 284 219 G4double theChargeChange = 0.0; << 220 // The Changed (final) charge of a given << 221 285 222 G4double theMagneticMomentChange = 0.0; << 223 // The Changed (final) MagneticMoment of << 224 }; << 225 286 226 #include "G4ParticleChange.icc" << 227 287 228 #endif << 229 288