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