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