Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 5 // * The Geant4 software is copyright of th << 6 // * the Geant4 Collaboration. It is provided << 7 // * conditions of the Geant4 Software License << 8 // * LICENSE and available at http://cern.ch/ << 9 // * include a list of copyright holders. << 10 // * << 11 // * Neither the authors of this software syst << 12 // * institutes,nor the agencies providing fin << 13 // * work make any representation or warran << 14 // * regarding this software system or assum << 15 // * use. Please see the license in the file << 16 // * for the full disclaimer and the limitatio << 17 // * << 18 // * This code implementation is the result << 19 // * technical work of the GEANT4 collaboratio << 20 // * By using, copying, modifying or distri << 21 // * any work based on the software) you ag << 22 // * use in resulting scientific publicati << 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* << 25 // 7 // 26 // original by H.P. Wellisch << 8 // $Id: G4Nucleus.hh,v 1.3 2000/12/14 08:56:46 hpw Exp $ 27 // modified by J.L. Chuma, TRIUMF, 19-Nov-1996 << 9 // GEANT4 tag $Name: geant4-03-00 $ 28 // last modified: 27-Mar-1997 << 10 // 29 // Chr. Volcker, 10-Nov-1997: new methods and << 11 // original by H.P. Wellisch >> 12 // modified by J.L. Chuma, TRIUMF, 19-Nov-1996 >> 13 // last modified: 27-Mar-1997 >> 14 // Chr. Volcker, 10-Nov-1997: new methods and class variables. 30 // M.G. Pia, 2 Oct 1998: modified GetFermiMome 15 // M.G. Pia, 2 Oct 1998: modified GetFermiMomentum (original design was 31 // the source of memory 16 // the source of memory leaks) 32 // G.Folger, spring 2010: add integer A/Z int << 17 33 // A. Ribon, autumn 2021: extended to hypernu << 34 << 35 #ifndef G4Nucleus_h 18 #ifndef G4Nucleus_h 36 #define G4Nucleus_h 1 19 #define G4Nucleus_h 1 37 // Class Description 20 // Class Description 38 // This class knows how to describe a nucleus; 21 // This class knows how to describe a nucleus; 39 // to be used in your physics implementation ( 22 // to be used in your physics implementation (not physics list) in case you need this physics. 40 // Class Description - End 23 // Class Description - End 41 24 42 25 43 #include "globals.hh" 26 #include "globals.hh" 44 #include "G4ThreeVector.hh" 27 #include "G4ThreeVector.hh" 45 #include "G4ParticleTypes.hh" 28 #include "G4ParticleTypes.hh" 46 #include "G4ReactionProduct.hh" 29 #include "G4ReactionProduct.hh" 47 #include "G4DynamicParticle.hh" 30 #include "G4DynamicParticle.hh" 48 #include "G4ReactionProductVector.hh" 31 #include "G4ReactionProductVector.hh" 49 #include "Randomize.hh" 32 #include "Randomize.hh" 50 33 51 class G4Nucleus << 34 class G4Nucleus 52 { << 35 { 53 public: << 36 public: 54 << 37 55 G4Nucleus(); << 38 G4Nucleus() { pnBlackTrackEnergy = dtaBlackTrackEnergy = 0.0; 56 G4Nucleus(const G4double A, const G4double << 39 excitationEnergy = 0.0; 57 G4Nucleus(const G4int A, const G4int Z, co << 40 momentum = G4ThreeVector(0.,0.,0.); 58 G4Nucleus(const G4Material* aMaterial); << 41 fermiMomentum = 1.52*hbarc/fermi; >> 42 theTemp = 293.16*kelvin; >> 43 } 59 44 60 ~G4Nucleus(); << 45 G4Nucleus( const G4double A, const G4double Z ) >> 46 { >> 47 SetParameters( A, Z ); >> 48 pnBlackTrackEnergy = dtaBlackTrackEnergy = 0.0; >> 49 excitationEnergy = 0.0; >> 50 momentum = G4ThreeVector(0.,0.,0.); >> 51 fermiMomentum = 1.52*hbarc/fermi; >> 52 theTemp = 293.16*kelvin; >> 53 } >> 54 >> 55 G4Nucleus( const G4Material *aMaterial ) >> 56 { >> 57 ChooseParameters( aMaterial ); >> 58 pnBlackTrackEnergy = dtaBlackTrackEnergy = 0.0; >> 59 excitationEnergy = 0.0; >> 60 momentum = G4ThreeVector(0.,0.,0.); >> 61 fermiMomentum = 1.52*hbarc/fermi; >> 62 theTemp = aMaterial->GetTemperature(); >> 63 } >> 64 >> 65 ~G4Nucleus() {} 61 66 62 inline G4Nucleus( const G4Nucleus &right ) 67 inline G4Nucleus( const G4Nucleus &right ) 63 { *this = right; } 68 { *this = right; } 64 69 65 inline G4Nucleus& operator = (const G4Nucl << 70 inline G4Nucleus & operator=( const G4Nucleus &right ) 66 { << 71 { 67 if (this != &right) { << 72 if( this != &right ) 68 theA=right.theA; << 73 { 69 theZ=right.theZ; << 74 aEff=right.aEff; 70 theL=right.theL; << 75 zEff=right.zEff; 71 aEff=right.aEff; << 76 pnBlackTrackEnergy=right.pnBlackTrackEnergy; 72 zEff=right.zEff; << 77 dtaBlackTrackEnergy=right.dtaBlackTrackEnergy; 73 fIsotope = right.fIsotope; << 78 theTemp = right.theTemp; 74 pnBlackTrackEnergy=right.pnBlackTrackE << 79 } 75 dtaBlackTrackEnergy=right.dtaBlackTrac << 80 return *this; 76 pnBlackTrackEnergyfromAnnihilation = << 81 } 77 right.pnBlackTrackEnergyf << 82 78 dtaBlackTrackEnergyfromAnnihilation = << 79 right.dtaBlackTrackEnergy << 80 theTemp = right.theTemp; << 81 excitationEnergy = right.excitationEne << 82 momentum = right.momentum; << 83 fermiMomentum = right.fermiMomentum; << 84 } << 85 return *this; << 86 } << 87 << 88 inline G4bool operator==( const G4Nucleus 83 inline G4bool operator==( const G4Nucleus &right ) const 89 { return ( this == (G4Nucleus *) &right ); 84 { return ( this == (G4Nucleus *) &right ); } 90 85 91 inline G4bool operator!=( const G4Nucleus 86 inline G4bool operator!=( const G4Nucleus &right ) const 92 { return ( this != (G4Nucleus *) &right ); 87 { return ( this != (G4Nucleus *) &right ); } 93 88 94 void ChooseParameters( const G4Material *a 89 void ChooseParameters( const G4Material *aMaterial ); 95 90 96 void SetParameters( const G4double A, cons << 91 void SetParameters( const G4double A, const G4double Z ); 97 void SetParameters( const G4int A, const G << 92 98 << 93 inline G4double GetN() const 99 inline G4int GetA_asInt() const << 94 { return aEff; } 100 { return theA; } << 95 101 << 96 inline G4double GetZ() const 102 inline G4int GetN_asInt() const << 97 { return zEff; } 103 { return theA-theZ-theL; } << 98 104 << 105 inline G4int GetZ_asInt() const << 106 { return theZ; } << 107 << 108 inline G4int GetL() const // Number of La << 109 { return theL; } << 110 << 111 inline const G4Isotope* GetIsotope() << 112 { return fIsotope; } << 113 << 114 inline void SetIsotope(const G4Isotope* is << 115 { << 116 fIsotope = iso; << 117 if(iso) { << 118 theZ = iso->GetZ(); << 119 theA = iso->GetN(); << 120 theL = 0; << 121 aEff = theA; << 122 zEff = theZ; << 123 } << 124 } << 125 << 126 G4DynamicParticle *ReturnTargetParticle() 99 G4DynamicParticle *ReturnTargetParticle() const; 127 100 128 G4double AtomicMass( const G4double A, con << 101 G4double AtomicMass( const G4double A, const G4double Z ) const; 129 G4double AtomicMass( const G4int A, const << 130 << 131 G4double GetThermalPz( const G4double mass << 132 102 133 G4ReactionProduct GetThermalNucleus(G4doub << 103 G4double GetThermalPz( const G4double mass, const G4double temp ) const; 134 104 135 G4ReactionProduct GetBiasedThermalNucleus( << 105 G4ReactionProduct GetThermalNucleus(G4double aMass) const; 136 106 137 void DoKinematicsOfThermalNucleus(const G4 << 138 G4Reacti << 139 << 140 G4double Cinema( G4double kineticEnergy ); 107 G4double Cinema( G4double kineticEnergy ); 141 108 142 G4double EvaporationEffects( G4double kine 109 G4double EvaporationEffects( G4double kineticEnergy ); 143 << 144 G4double AnnihilationEvaporationEffects(G4 << 145 110 146 inline G4double GetPNBlackTrackEnergy() co 111 inline G4double GetPNBlackTrackEnergy() const 147 { return pnBlackTrackEnergy; } 112 { return pnBlackTrackEnergy; } 148 113 149 inline G4double GetDTABlackTrackEnergy() c 114 inline G4double GetDTABlackTrackEnergy() const 150 { return dtaBlackTrackEnergy; } 115 { return dtaBlackTrackEnergy; } 151 116 152 inline G4double GetAnnihilationPNBlackTrac << 153 { return pnBlackTrackEnergyfromAnnihilatio << 154 << 155 inline G4double GetAnnihilationDTABlackTra << 156 { return dtaBlackTrackEnergyfromAnnihilati << 157 << 158 // ****************** methods introduced by C 117 // ****************** methods introduced by ChV *********************** 159 // return fermi momentum 118 // return fermi momentum 160 G4ThreeVector GetFermiMomentum(); 119 G4ThreeVector GetFermiMomentum(); 161 120 162 /* 121 /* 163 // return particle to be absorbed. 122 // return particle to be absorbed. 164 G4DynamicParticle* ReturnAbsorbingParticl 123 G4DynamicParticle* ReturnAbsorbingParticle(G4double weight); 165 */ 124 */ 166 125 167 // final nucleus fragmentation. Return List 126 // final nucleus fragmentation. Return List of particles 168 // which should be used for further tracking 127 // which should be used for further tracking. 169 G4ReactionProductVector* Fragmentate(); 128 G4ReactionProductVector* Fragmentate(); 170 129 171 130 172 // excitation Energy... 131 // excitation Energy... 173 void AddExcitationEnergy(G4double anEnerg 132 void AddExcitationEnergy(G4double anEnergy); 174 133 175 134 176 // momentum of absorbed Particles .. 135 // momentum of absorbed Particles .. 177 void AddMomentum(const G4ThreeVector aMom 136 void AddMomentum(const G4ThreeVector aMomentum); 178 137 179 // return excitation Energy 138 // return excitation Energy 180 G4double GetEnergyDeposit() {return excit 139 G4double GetEnergyDeposit() {return excitationEnergy; } 181 140 182 141 183 142 184 // ****************************** end ChV **** 143 // ****************************** end ChV ****************************** 185 144 186 145 187 private: 146 private: 188 147 189 G4int theA; << 190 G4int theZ; << 191 G4int theL; // Number of Lambdas (in t << 192 G4double aEff; // effective atomic weight 148 G4double aEff; // effective atomic weight 193 G4double zEff; // effective atomic number 149 G4double zEff; // effective atomic number 194 << 195 const G4Isotope* fIsotope; << 196 150 197 G4double pnBlackTrackEnergy; // the kinet 151 G4double pnBlackTrackEnergy; // the kinetic energy available for 198 // proton/ne << 152 // proton/neutron black track particles 199 G4double dtaBlackTrackEnergy; // the kinet 153 G4double dtaBlackTrackEnergy; // the kinetic energy available for 200 // deuteron/ << 154 // deuteron/triton/alpha particles 201 G4double pnBlackTrackEnergyfromAnnihilatio << 202 // kinetic energy availab << 203 // track particles based << 204 G4double dtaBlackTrackEnergyfromAnnihilati << 205 // kinetic energy availab << 206 // black track particles << 207 155 208 156 209 // ************************** member variables 157 // ************************** member variables by ChV ******************* 210 // Excitation Energy leading to evaporation 158 // Excitation Energy leading to evaporation or deexcitation. 211 G4double excitationEnergy; 159 G4double excitationEnergy; 212 160 213 // Momentum, accumulated by absorbing Partic 161 // Momentum, accumulated by absorbing Particles 214 G4ThreeVector momentum; 162 G4ThreeVector momentum; 215 163 216 // Fermi Gas model: at present, we assume co 164 // Fermi Gas model: at present, we assume constant nucleon density for all 217 // nuclei. The radius of a nucleon is taken 165 // nuclei. The radius of a nucleon is taken to be 1 fm. 218 // see for example S.Fl"ugge, Encyclopedia o 166 // see for example S.Fl"ugge, Encyclopedia of Physics, Vol XXXIX, 219 // Structure of Atomic Nuclei (Berlin-Gottin 167 // Structure of Atomic Nuclei (Berlin-Gottingen-Heidelberg, 1957) page 426. 220 168 221 // maximum momentum possible from fermi gas 169 // maximum momentum possible from fermi gas model: 222 G4double fermiMomentum; 170 G4double fermiMomentum; 223 G4double theTemp; // temperature 171 G4double theTemp; // temperature 224 // ****************************** end ChV **** 172 // ****************************** end ChV ****************************** 225 173 226 }; 174 }; 227 175 228 #endif 176 #endif 229 177 230 178