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 // G4DynamicParticle << 27 // 26 // 28 // Class description: << 27 // $Id: G4DynamicParticle.hh,v 1.18 2007/03/11 07:17:35 kurasige Exp $ >> 28 // GEANT4 tag $Name: geant4-09-01-patch-01 $ 29 // 29 // 30 // A G4DynamicParticle aggregates the informat << 30 // 31 // of a G4Particle, such as energy, momentum, << 31 // ------------------------------------------------------------ 32 // as well as the "particle definition", holdi << 32 // GEANT 4 class header file 33 // It contains the purely dynamic aspects of a << 33 // 34 << 34 // History: first implementation, based on object model of 35 // History: << 35 // 2nd December 1995, G.Cosmo 36 // - 2 December 1995, G.Cosmo - first design, << 36 // ---------------- G4DynamicParticle ---------------- 37 // - 29 January 1996, M.Asai - first implement << 37 // first implementation by Makoto Asai, 29 January 1996 38 // - 1996 - 2007, H.Kurashige - revisions. << 38 // revised by G.Cosmo, 29 February 1996 39 // - 15 March 2019, M.Novak - log-kinetic en << 39 // revised by Hisaya Kurashige, 24 July 1996 40 // on demand if its stored << 40 // revised by Hisaya Kurashige, 19 Oct 1996 41 // ------------------------------------------- << 41 // revised by Hisaya Kurashige, 19 Feb 1997 42 #ifndef G4DynamicParticle_hh << 42 // ------------------------ 43 #define G4DynamicParticle_hh 1 << 43 // Add theDynamicCharge and theElectronOccupancy >> 44 // 17 AUg. 1999 H.Kurashige >> 45 // Add thePreAssignedDecayTime 18 Jan. 2001 H.Kurashige >> 46 // Added MagneticMoment Mar. 2007 >> 47 // ------------------------------------------------------------ 44 48 45 #include "G4Allocator.hh" << 49 #ifndef G4DynamicParticle_h 46 #include "G4ElectronOccupancy.hh" << 50 #define G4DynamicParticle_h 1 47 #include "G4Log.hh" << 48 #include "G4LorentzVector.hh" << 49 #include "G4ParticleDefinition.hh" << 50 #include "G4ParticleMomentum.hh" // NOTE: mea << 51 #include "G4ios.hh" << 52 #include "globals.hh" << 53 51 54 #include <CLHEP/Units/PhysicalConstants.h> << 55 #include <CLHEP/Units/SystemOfUnits.h> << 56 52 >> 53 #include "globals.hh" 57 #include <cmath> 54 #include <cmath> >> 55 #include "G4ios.hh" 58 56 59 class G4PrimaryParticle; << 57 #include "G4ParticleDefinition.hh" 60 class G4DecayProducts; << 58 #include "G4Allocator.hh" 61 << 59 #include "G4LorentzVector.hh" 62 class G4DynamicParticle << 63 { << 64 public: << 65 //- constructors << 66 G4DynamicParticle(); << 67 << 68 G4DynamicParticle(const G4ParticleDefiniti << 69 const G4ThreeVector& aMo << 70 G4DynamicParticle(const G4ParticleDefiniti << 71 const G4ThreeVector& aPa << 72 G4DynamicParticle(const G4ParticleDefiniti << 73 const G4LorentzVector& a << 74 G4DynamicParticle(const G4ParticleDefiniti << 75 const G4ThreeVector& aPa << 76 G4DynamicParticle(const G4ParticleDefiniti << 77 const G4ThreeVector& aMo << 78 const G4double dynamical << 79 << 80 G4DynamicParticle(const G4DynamicParticle& << 81 << 82 //- destructor << 83 ~G4DynamicParticle(); << 84 << 85 //- operators << 86 G4DynamicParticle& operator=(const G4Dynam << 87 G4bool operator==(const G4DynamicParticle& << 88 G4bool operator!=(const G4DynamicParticle& << 89 << 90 //- Move constructor & operator << 91 G4DynamicParticle(G4DynamicParticle&& from << 92 G4DynamicParticle& operator=(G4DynamicPart << 93 << 94 //- new/delete operators are oberloded to << 95 inline void* operator new(size_t); << 96 inline void operator delete(void* aDynamic << 97 << 98 //- Set/Get methods << 99 << 100 // Returns the normalized direction of the << 101 inline const G4ThreeVector& GetMomentumDir << 102 << 103 // Sets the normalized direction of the mo << 104 inline void SetMomentumDirection(const G4T << 105 << 106 // Sets the normalized direction of the mo << 107 inline void SetMomentumDirection(G4double << 108 << 109 // Returns the current particle momentum v << 110 inline G4ThreeVector GetMomentum() const; << 111 << 112 // set the current particle momentum vecto << 113 void SetMomentum(const G4ThreeVector& mome << 114 << 115 // Returns the current particle energy-mom << 116 inline G4LorentzVector Get4Momentum() cons << 117 << 118 // Set the current particle energy-momentu << 119 void Set4Momentum(const G4LorentzVector& m << 120 << 121 // Returns the module of the momentum vect << 122 inline G4double GetTotalMomentum() const; << 123 << 124 // Returns the total energy of the particl << 125 inline G4double GetTotalEnergy() const; << 126 << 127 // Returns the kinetic energy of a particl << 128 inline G4double GetKineticEnergy() const; << 129 << 130 // Returns: << 131 // - natural logarithm of the particle kin << 132 // - LOG_EKIN_MIN otherwise << 133 inline G4double GetLogKineticEnergy() cons << 134 << 135 // Sets the kinetic energy of a particle << 136 inline void SetKineticEnergy(G4double aEne << 137 << 138 // Access Lorentz beta << 139 inline G4double GetBeta() const; << 140 << 141 // Returns the current particle proper tim << 142 inline G4double GetProperTime() const; << 143 << 144 // Set the current particle Proper Time << 145 inline void SetProperTime(G4double); << 146 << 147 // Set/Get polarization vector << 148 inline const G4ThreeVector& GetPolarizatio << 149 inline void SetPolarization(const G4ThreeV << 150 inline void SetPolarization(G4double polX, << 151 << 152 // Set/Get dynamical mass << 153 // The dynamical mass is set to PDG mass i << 154 inline G4double GetMass() const; << 155 inline void SetMass(G4double mass); << 156 << 157 // Set/Get dynamical charge << 158 // The dynamical mass is set to PDG charge << 159 inline G4double GetCharge() const; << 160 inline void SetCharge(G4double charge); << 161 inline void SetCharge(G4int chargeInUnitOf << 162 << 163 // Set/Get dynamical spin << 164 // The dynamical spin is set to PDG spin i << 165 inline G4double GetSpin() const; << 166 inline void SetSpin(G4double spin); << 167 inline void SetSpin(G4int spinInUnitOfHalf << 168 << 169 // Set/Get dynamical MagneticMoment << 170 // The dynamical mass is set to PDG Magnet << 171 inline G4double GetMagneticMoment() const; << 172 inline void SetMagneticMoment(G4double mag << 173 << 174 // Get electron occupancy << 175 // ElectronOccupancy is valid only if the << 176 inline const G4ElectronOccupancy* GetElect << 177 inline G4int GetTotalOccupancy() const; << 178 inline G4int GetOccupancy(G4int orbit) con << 179 inline void AddElectron(G4int orbit, G4int << 180 inline void RemoveElectron(G4int orbit, G4 << 181 << 182 // Set/Get particle definition << 183 inline const G4ParticleDefinition* GetPart << 184 void SetDefinition(const G4ParticleDefinit << 185 << 186 // Following method of GetDefinition() rem << 187 // because of backward compatiblity. May b << 188 inline G4ParticleDefinition* GetDefinition << 189 << 190 // Set/Get pre-assigned decay channel << 191 inline const G4DecayProducts* GetPreAssign << 192 inline void SetPreAssignedDecayProducts(G4 << 193 << 194 // Set/Get pre-assigned proper time when t << 195 inline G4double GetPreAssignedDecayProperT << 196 inline void SetPreAssignedDecayProperTime( << 197 << 198 // Print out information << 199 // - mode 0 : default )(minimum) << 200 // - mode 1 : 0 + electron occupancy << 201 void DumpInfo(G4int mode = 0) const; << 202 << 203 // Set/Get controle flag for output messag << 204 // - 0: Silent << 205 // - 1: Warning message << 206 // - 2: More << 207 inline void SetVerboseLevel(G4int value); << 208 inline G4int GetVerboseLevel() const; << 209 << 210 inline void SetPrimaryParticle(G4PrimaryPa << 211 inline void SetPDGcode(G4int c); << 212 << 213 // Return the pointer to the corresponding << 214 // if this particle is a primary particle << 215 // pre-assigned decay product. Otherwise r << 216 inline G4PrimaryParticle* GetPrimaryPartic << 217 << 218 // Return the PDG code of this particle. I << 219 // Geant4, its PDG code defined in G4Parti << 220 // If it is unknown (i.e. PDG code in G4Pa << 221 // PDG code defined in the corresponding p << 222 // pre-assigned decay product will be retu << 223 // Otherwise (e.g. for geantino) returns 0 << 224 inline G4int GetPDGcode() const; << 225 << 226 protected: << 227 void AllocateElectronOccupancy(); << 228 G4double GetElectronMass() const; << 229 << 230 private: << 231 inline void ComputeBeta() const; << 232 << 233 // The normalized momentum vector << 234 G4ThreeVector theMomentumDirection; << 235 << 236 G4ThreeVector thePolarization; << 237 << 238 // Contains the static information of this << 239 const G4ParticleDefinition* theParticleDef << 240 << 241 G4ElectronOccupancy* theElectronOccupancy << 242 << 243 G4DecayProducts* thePreAssignedDecayProduc << 244 << 245 // This void pointer is used by G4EventMan << 246 // link between pre-assigned decay product << 247 // primary particle << 248 G4PrimaryParticle* primaryParticle = nullp << 249 << 250 G4double theKineticEnergy = 0.0; << 251 << 252 mutable G4double theLogKineticEnergy = DBL << 253 << 254 mutable G4double theBeta = -1.0; << 255 << 256 G4double theProperTime = 0.0; << 257 << 258 G4double theDynamicalMass = 0.0; << 259 << 260 G4double theDynamicalCharge = 0.0; << 261 60 262 G4double theDynamicalSpin = 0.0; << 61 #include "G4ParticleMomentum.hh" >> 62 // G4ParticleMomentum is "momentum direction" not "momentum vector" >> 63 // The name is miss-leading so you should not use G4ParticleMomentum >> 64 // and you are recommended to use G4ThreeVector instead 263 65 264 G4double theDynamicalMagneticMoment = 0.0; << 66 #include "G4ElectronOccupancy.hh" >> 67 #include "G4PrimaryParticle.hh" 265 68 266 G4double thePreAssignedDecayTime = -1.0; << 69 class G4VProcess; >> 70 class G4DecayProducts; 267 71 268 G4int verboseLevel = 1; << 72 class G4DynamicParticle >> 73 { >> 74 // Class Description >> 75 // The dynamic particle is a class which contains the purely >> 76 // dynamic aspects of a moving particle. It also has a >> 77 // pointer to a G4ParticleDefinition object, which holds >> 78 // all the static information. >> 79 // >> 80 >> 81 public: // With Description >> 82 //- constructors >> 83 G4DynamicParticle(); >> 84 >> 85 G4DynamicParticle(G4ParticleDefinition * aParticleDefinition, >> 86 const G4ThreeVector& aMomentumDirection, >> 87 G4double aKineticEnergy); >> 88 G4DynamicParticle(G4ParticleDefinition * aParticleDefinition, >> 89 const G4ThreeVector& aParticleMomentum); >> 90 G4DynamicParticle(G4ParticleDefinition * aParticleDefinition, >> 91 const G4LorentzVector &aParticleMomentum); >> 92 G4DynamicParticle(G4ParticleDefinition * aParticleDefinition, >> 93 G4double aTotalEnergy, >> 94 const G4ThreeVector &aParticleMomentum); >> 95 >> 96 G4DynamicParticle(const G4DynamicParticle &right); >> 97 >> 98 //- destructor >> 99 ~G4DynamicParticle(); >> 100 >> 101 //- operators >> 102 G4DynamicParticle & operator=(const G4DynamicParticle &right); >> 103 G4int operator==(const G4DynamicParticle &right) const; >> 104 G4int operator!=(const G4DynamicParticle &right) const; >> 105 >> 106 // new/delete operators are oberloded to use G4Allocator >> 107 inline void *operator new(size_t); >> 108 inline void operator delete(void *aDynamicParticle); >> 109 >> 110 //- Set/Get methods >> 111 >> 112 const G4ThreeVector& GetMomentumDirection() const; >> 113 // Returns the normalized direction of the momentum >> 114 void SetMomentumDirection(const G4ThreeVector &aDirection); >> 115 // Sets the normalized direction of the momentum >> 116 void SetMomentumDirection(G4double px, G4double py, G4double pz); >> 117 // Sets the normalized direction of the momentum by coordinates >> 118 >> 119 G4ThreeVector GetMomentum() const; >> 120 // Returns the current particle momentum vector >> 121 void SetMomentum( const G4ThreeVector &momentum); >> 122 // set the current particle momentum vector >> 123 >> 124 G4LorentzVector Get4Momentum() const; >> 125 // Returns the current particle energy-momentum 4vector >> 126 void Set4Momentum( const G4LorentzVector &momentum); >> 127 // Set the current particle energy-momentum 4vector >> 128 >> 129 >> 130 G4double GetTotalMomentum() const; >> 131 // Returns the module of the momentum vector >> 132 G4double GetTotalEnergy() const; >> 133 // Returns the total energy of the particle >> 134 >> 135 G4double GetKineticEnergy() const; >> 136 // Returns the kinetic energy of a particle >> 137 void SetKineticEnergy(G4double aEnergy); >> 138 // Sets the kinetic energy of a particle >> 139 >> 140 >> 141 G4double GetProperTime() const; >> 142 // Returns the current particle proper time >> 143 void SetProperTime( G4double ); >> 144 // Set the current particle Proper Time >> 145 >> 146 >> 147 const G4ThreeVector& GetPolarization() const; >> 148 void SetPolarization(G4double polX, G4double polY, G4double polZ); >> 149 // Set/Get polarization vector >> 150 >> 151 >> 152 G4double GetMass() const; >> 153 void SetMass(G4double mass); >> 154 // set/get dynamical mass >> 155 // the dynamical mass is set to PDG mass in default >> 156 >> 157 >> 158 G4double GetCharge() const; >> 159 void SetCharge(G4double charge); >> 160 void SetCharge(G4int chargeInUnitOfEplus); >> 161 // set/get dynamical charge >> 162 // the dynamical mass is set to PDG charge in default >> 163 >> 164 G4double GetSpin() const; >> 165 void SetSpin(G4double spin); >> 166 void SetSpin(G4int spinInUnitOfHalfInteger); >> 167 // set/get dynamical spin >> 168 // the dynamical spin is set to PDG spin in default >> 169 >> 170 G4double GetMagneticMoment() const; >> 171 void SetMagneticMoment(G4double magneticMoment); >> 172 // set/get dynamical MagneticMoment >> 173 // the dynamical mass is set to PDG MagneticMoment in default >> 174 >> 175 >> 176 const G4ElectronOccupancy* GetElectronOccupancy() const; >> 177 // Get electron occupancy >> 178 // ElectronOccupancy is valid only if the particle is ion >> 179 G4int GetTotalOccupancy() const; >> 180 G4int GetOccupancy(G4int orbit) const; >> 181 void AddElectron(G4int orbit, G4int number = 1); >> 182 void RemoveElectron(G4int orbit, G4int number = 1); >> 183 >> 184 G4ParticleDefinition* GetDefinition() const; >> 185 void SetDefinition(G4ParticleDefinition * aParticleDefinition); >> 186 // Set/Get particle definition >> 187 >> 188 >> 189 const G4DecayProducts *GetPreAssignedDecayProducts() const; >> 190 void SetPreAssignedDecayProducts(G4DecayProducts *aDecayProducts); >> 191 // Set/Get pre-assigned decay channel >> 192 >> 193 G4double GetPreAssignedDecayProperTime() const; >> 194 void SetPreAssignedDecayProperTime(G4double); >> 195 // Set/Get pre-assigned proper time when the particle will decay >> 196 >> 197 >> 198 //- print out information >> 199 void DumpInfo(G4int mode= 0) const; >> 200 // mode 0 : default )(minimum) >> 201 // mode 1 : 0 + electron occupancy >> 202 >> 203 private: >> 204 void AllocateElectronOccupancy(); >> 205 G4double GetElectronMass() const; >> 206 >> 207 private: >> 208 G4ThreeVector theMomentumDirection; >> 209 // The normalized momentum vector >> 210 >> 211 G4ParticleDefinition *theParticleDefinition; >> 212 // Contains the static information of this particle. >> 213 >> 214 G4ThreeVector thePolarization; >> 215 >> 216 G4double theKineticEnergy; >> 217 >> 218 G4double theProperTime; >> 219 >> 220 G4double theDynamicalMass; >> 221 >> 222 G4double theDynamicalCharge; >> 223 >> 224 G4double theDynamicalSpin; >> 225 >> 226 G4double theDynamicalMagneticMoment; >> 227 >> 228 G4ElectronOccupancy* theElectronOccupancy; >> 229 >> 230 G4DecayProducts *thePreAssignedDecayProducts; >> 231 >> 232 G4double thePreAssignedDecayTime; >> 233 >> 234 private: >> 235 G4int verboseLevel; >> 236 >> 237 public: // With Description >> 238 void SetVerboseLevel(G4int value); >> 239 G4int GetVerboseLevel() const; >> 240 // Set/Get controle flag for output message >> 241 // 0: Silent >> 242 // 1: Warning message >> 243 // 2: More >> 244 >> 245 private: >> 246 G4PrimaryParticle* primaryParticle; >> 247 // This void pointer is used by G4EventManager to maintain the >> 248 // link between pre-assigned decay products and corresponding >> 249 // primary particle. >> 250 >> 251 public: >> 252 void SetPrimaryParticle(G4PrimaryParticle* p); >> 253 void SetPDGcode(G4int c); >> 254 >> 255 public: // With Description >> 256 G4PrimaryParticle* GetPrimaryParticle() const; >> 257 // Return the pointer to the corresponding G4PrimaryParticle object >> 258 // if this particle is a primary particle OR is defined as a pre-assigned >> 259 // decay product. Otherwise return null. >> 260 >> 261 G4int GetPDGcode() const; >> 262 // Return the PDG code of this particle. If the particle is known to Geant4 >> 263 // its PDG code defined in G4ParticleDefinition is returned. If it is unknown >> 264 // (i.e. PDG code in G4ParticleDefinition is 0), PDG code defined in the >> 265 // corresponding primary particle or pre-assigned decay product will be >> 266 // returned if available. Otherwise (e.g. for geantino) returns 0. 269 267 270 G4int thePDGcode = 0; << 268 private: >> 269 G4int thePDGcode; 271 }; 270 }; 272 271 273 #include "G4DynamicParticle.icc" 272 #include "G4DynamicParticle.icc" 274 273 275 #endif 274 #endif 276 275