Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // G4DynamicParticle << 27 // 23 // 28 // Class description: << 24 // $Id: G4DynamicParticle.hh,v 1.14 2004/12/02 08:08:58 kurasige Exp $ >> 25 // GEANT4 tag $Name: geant4-07-00-cand-03 $ 29 // 26 // 30 // A G4DynamicParticle aggregates the informat << 27 // 31 // of a G4Particle, such as energy, momentum, << 28 // ------------------------------------------------------------ 32 // as well as the "particle definition", holdi << 29 // GEANT 4 class header file 33 // It contains the purely dynamic aspects of a << 30 // 34 << 31 // History: first implementation, based on object model of 35 // History: << 32 // 2nd December 1995, G.Cosmo 36 // - 2 December 1995, G.Cosmo - first design, << 33 // ---------------- G4DynamicParticle ---------------- 37 // - 29 January 1996, M.Asai - first implement << 34 // first implementation by Makoto Asai, 29 January 1996 38 // - 1996 - 2007, H.Kurashige - revisions. << 35 // revised by G.Cosmo, 29 February 1996 39 // - 15 March 2019, M.Novak - log-kinetic en << 36 // revised by Hisaya Kurashige, 24 July 1996 40 // on demand if its stored << 37 // revised by Hisaya Kurashige, 19 Oct 1996 41 // ------------------------------------------- << 38 // revised by Hisaya Kurashige, 19 Feb 1997 42 #ifndef G4DynamicParticle_hh << 39 // ------------------------ 43 #define G4DynamicParticle_hh 1 << 40 // Add theDynamicCharge and theElectronOccupancy >> 41 // 17 AUg. 1999 H.Kurashige >> 42 // Add thePreAssignedDecayTime 18 Jan. 2001 H.Kurashige >> 43 // ------------------------------------------------------------ 44 44 45 #include "G4Allocator.hh" << 45 #ifndef G4DynamicParticle_h 46 #include "G4ElectronOccupancy.hh" << 46 #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 47 54 #include <CLHEP/Units/PhysicalConstants.h> << 55 #include <CLHEP/Units/SystemOfUnits.h> << 56 48 >> 49 #include "globals.hh" 57 #include <cmath> 50 #include <cmath> >> 51 #include "G4ios.hh" 58 52 59 class G4PrimaryParticle; << 53 #include "G4ParticleDefinition.hh" 60 class G4DecayProducts; << 54 #include "G4Allocator.hh" 61 << 55 #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 << 262 G4double theDynamicalSpin = 0.0; << 263 56 264 G4double theDynamicalMagneticMoment = 0.0; << 57 #include "G4ParticleMomentum.hh" >> 58 // G4ParticleMomentum is "momentum direction" not "momentum vector" >> 59 // The name is miss-leading so you should not use G4ParticleMomentum >> 60 // and you are recommended to use G4ThreeVector instead 265 61 266 G4double thePreAssignedDecayTime = -1.0; << 62 #include "G4ElectronOccupancy.hh" 267 63 268 G4int verboseLevel = 1; << 64 class G4VProcess; >> 65 class G4DecayProducts; >> 66 class G4PrimaryParticle; 269 67 270 G4int thePDGcode = 0; << 68 class G4DynamicParticle >> 69 { >> 70 // Class Description >> 71 // The dynamic particle is a class which contains the purely >> 72 // dynamic aspects of a moving particle. It also has a >> 73 // pointer to a G4ParticleDefinition object, which holds >> 74 // all the static information. >> 75 // >> 76 >> 77 public: // With Description >> 78 //- constructors >> 79 G4DynamicParticle(); >> 80 >> 81 G4DynamicParticle(G4ParticleDefinition * aParticleDefinition, >> 82 const G4ThreeVector& aMomentumDirection, >> 83 G4double aKineticEnergy); >> 84 G4DynamicParticle(G4ParticleDefinition * aParticleDefinition, >> 85 const G4ThreeVector& aParticleMomentum); >> 86 G4DynamicParticle(G4ParticleDefinition * aParticleDefinition, >> 87 const G4LorentzVector &aParticleMomentum); >> 88 G4DynamicParticle(G4ParticleDefinition * aParticleDefinition, >> 89 G4double aTotalEnergy, >> 90 const G4ThreeVector &aParticleMomentum); >> 91 >> 92 G4DynamicParticle(const G4DynamicParticle &right); >> 93 >> 94 //- destructor >> 95 ~G4DynamicParticle(); >> 96 >> 97 //- operators >> 98 G4DynamicParticle & operator=(const G4DynamicParticle &right); >> 99 G4int operator==(const G4DynamicParticle &right) const; >> 100 G4int operator!=(const G4DynamicParticle &right) const; >> 101 >> 102 // new/delete operators are oberloded to use G4Allocator >> 103 inline void *operator new(size_t); >> 104 inline void operator delete(void *aDynamicParticle); >> 105 >> 106 //- Set/Get methods >> 107 >> 108 const G4ThreeVector& GetMomentumDirection() const; >> 109 // Returns the normalized direction of the momentum >> 110 void SetMomentumDirection(const G4ThreeVector &aDirection); >> 111 // Sets the normalized direction of the momentum >> 112 void SetMomentumDirection(G4double px, G4double py, G4double pz); >> 113 // Sets the normalized direction of the momentum by coordinates >> 114 >> 115 G4ThreeVector GetMomentum() const; >> 116 // Returns the current particle momentum vector >> 117 void SetMomentum( const G4ThreeVector &momentum); >> 118 // set the current particle momentum vector >> 119 >> 120 G4LorentzVector Get4Momentum() const; >> 121 // Returns the current particle energy-momentum 4vector >> 122 void Set4Momentum( const G4LorentzVector &momentum); >> 123 // Set the current particle energy-momentum 4vector >> 124 >> 125 >> 126 G4double GetTotalMomentum() const; >> 127 // Returns the module of the momentum vector >> 128 G4double GetTotalEnergy() const; >> 129 // Returns the total energy of the particle >> 130 >> 131 G4double GetKineticEnergy() const; >> 132 // Returns the kinetic energy of a particle >> 133 void SetKineticEnergy(G4double aEnergy); >> 134 // Sets the kinetic energy of a particle >> 135 >> 136 >> 137 G4double GetProperTime() const; >> 138 // Returns the current particle proper time >> 139 void SetProperTime( G4double ); >> 140 // Set the current particle Proper Time >> 141 >> 142 >> 143 const G4ThreeVector& GetPolarization() const; >> 144 void SetPolarization(G4double polX, G4double polY, G4double polZ); >> 145 // Set/Get polarization vector >> 146 >> 147 >> 148 G4double GetMass() const; >> 149 void SetMass(G4double mass); >> 150 // set/get dynamical mass >> 151 // the dynamical mass is set to PDG mass in default >> 152 >> 153 >> 154 G4double GetCharge() const; >> 155 void SetCharge(G4double charge); >> 156 void SetCharge(G4int chargeInUnitOfEplus); >> 157 // set/get dynamical charge >> 158 // the dynamical mass is set to PDG charge in default >> 159 >> 160 const G4ElectronOccupancy* GetElectronOccupancy() const; >> 161 // Get electron occupancy >> 162 // ElectronOccupancy is valid only if the particle is ion >> 163 G4int GetTotalOccupancy() const; >> 164 G4int GetOccupancy(G4int orbit) const; >> 165 void AddElectron(G4int orbit, G4int number = 1); >> 166 void RemoveElectron(G4int orbit, G4int number = 1); >> 167 >> 168 G4ParticleDefinition* GetDefinition() const; >> 169 void SetDefinition(G4ParticleDefinition * aParticleDefinition); >> 170 // Set/Get particle definition >> 171 >> 172 >> 173 const G4DecayProducts *GetPreAssignedDecayProducts() const; >> 174 void SetPreAssignedDecayProducts(G4DecayProducts *aDecayProducts); >> 175 // Set/Get pre-assigned decay channel >> 176 >> 177 G4double GetPreAssignedDecayProperTime() const; >> 178 void SetPreAssignedDecayProperTime(G4double); >> 179 // Set/Get pre-assigned proper time when the particle will decay >> 180 >> 181 >> 182 //- print out information >> 183 void DumpInfo(G4int mode= 0) const; >> 184 // mode 0 : default )(minimum) >> 185 // mode 1 : 0 + electron occupancy >> 186 >> 187 private: >> 188 void AllocateElectronOccupancy(); >> 189 G4double GetElectronMass() const; >> 190 >> 191 private: >> 192 G4ThreeVector theMomentumDirection; >> 193 // The normalized momentum vector >> 194 >> 195 G4ParticleDefinition *theParticleDefinition; >> 196 // Contains the static information of this particle. >> 197 >> 198 G4ThreeVector thePolarization; >> 199 >> 200 G4double theKineticEnergy; >> 201 >> 202 G4double theProperTime; >> 203 >> 204 G4double theDynamicalMass; >> 205 >> 206 G4double theDynamicalCharge; >> 207 >> 208 G4ElectronOccupancy* theElectronOccupancy; >> 209 >> 210 G4DecayProducts *thePreAssignedDecayProducts; >> 211 >> 212 G4double thePreAssignedDecayTime; >> 213 >> 214 private: >> 215 G4int verboseLevel; >> 216 >> 217 public: // With Description >> 218 void SetVerboseLevel(G4int value); >> 219 G4int GetVerboseLevel() const; >> 220 // Set/Get controle flag for output message >> 221 // 0: Silent >> 222 // 1: Warning message >> 223 // 2: More >> 224 >> 225 private: >> 226 G4PrimaryParticle* primaryParticle; >> 227 // This void pointer is used by G4EventManager to maintain the >> 228 // link between pre-assigned decay products and corresponding >> 229 // primary particle. >> 230 >> 231 public: >> 232 inline void SetPrimaryParticle(G4PrimaryParticle* p) {primaryParticle=p;} >> 233 inline G4PrimaryParticle* GetPrimaryParticle() const {return primaryParticle;} 271 }; 234 }; 272 235 273 #include "G4DynamicParticle.icc" 236 #include "G4DynamicParticle.icc" 274 237 275 #endif 238 #endif 276 239