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 // G4Ions 26 // G4Ions 27 // 27 // 28 // Class Description: 28 // Class Description: 29 // 29 // 30 // This is the base class for all nuclei inclu 30 // This is the base class for all nuclei including pre-defined 31 // light nuclei such as deuteron, alpha, and p 31 // light nuclei such as deuteron, alpha, and proton (Hydrogen). 32 // All nuclei/ions created on the fly are obje 32 // All nuclei/ions created on the fly are objects of this class. 33 // Atomic number and atomic mass are valid onl 33 // Atomic number and atomic mass are valid only for particles derived 34 // from this class. This class has Excitation 34 // from this class. This class has Excitation Energy in addition to 35 // the normal particle properties. 35 // the normal particle properties. 36 36 37 // Authors: G.Cosmo, 4 April 1996 - Design bas 37 // Authors: G.Cosmo, 4 April 1996 - Design based on object model 38 // H.Kurashige, 27 June 1998 - First 38 // H.Kurashige, 27 June 1998 - First implementation 39 // ------------------------------------------- 39 // -------------------------------------------------------------------- 40 #ifndef G4Ions_hh 40 #ifndef G4Ions_hh 41 #define G4Ions_hh 1 41 #define G4Ions_hh 1 42 42 43 #include "G4ParticleDefinition.hh" 43 #include "G4ParticleDefinition.hh" 44 #include "G4ios.hh" 44 #include "G4ios.hh" 45 #include "globals.hh" 45 #include "globals.hh" 46 46 47 class G4Ions : public G4ParticleDefinition 47 class G4Ions : public G4ParticleDefinition 48 { 48 { 49 public: 49 public: 50 // clang-format off 50 // clang-format off 51 G4Ions( 51 G4Ions( 52 const G4String& aName, G4dou 52 const G4String& aName, G4double mass, 53 G4double width, G4dou 53 G4double width, G4double charge, 54 G4int iSpin, G4int 54 G4int iSpin, G4int iParity, 55 G4int iConjugation, G4int 55 G4int iConjugation, G4int iIsospin, 56 G4int iIsospin3, G4int 56 G4int iIsospin3, G4int gParity, 57 const G4String& pType, G4int 57 const G4String& pType, G4int lepton, 58 G4int baryon, G4int 58 G4int baryon, G4int encoding, 59 G4bool stable, G4dou 59 G4bool stable, G4double lifetime, 60 G4DecayTable* decaytable, G4boo 60 G4DecayTable* decaytable, G4bool shortlived, 61 const G4String& subType ="", 61 const G4String& subType ="", 62 G4int anti_encoding =0, 62 G4int anti_encoding =0, 63 G4double excitation = 0.0, 63 G4double excitation = 0.0, 64 G4int isomer = 0 64 G4int isomer = 0 65 ); 65 ); 66 // clang-format on 66 // clang-format on 67 67 68 ~G4Ions() override = default; 68 ~G4Ions() override = default; 69 69 70 inline G4Ions* IonsDefinition(); 70 inline G4Ions* IonsDefinition(); 71 inline G4Ions* Ions(); 71 inline G4Ions* Ions(); 72 72 73 // Get excitation energy of nucleus 73 // Get excitation energy of nucleus 74 inline G4double GetExcitationEnergy() cons 74 inline G4double GetExcitationEnergy() const; 75 75 76 // Get Isomer level (=0 for ground state) 76 // Get Isomer level (=0 for ground state) 77 inline G4int GetIsomerLevel() const; 77 inline G4int GetIsomerLevel() const; 78 78 79 enum class G4FloatLevelBase // enumerator 79 enum class G4FloatLevelBase // enumerator for floating level base 80 { 80 { 81 no_Float = 0, 81 no_Float = 0, 82 plus_X, 82 plus_X, 83 plus_Y, 83 plus_Y, 84 plus_Z, 84 plus_Z, 85 plus_U, 85 plus_U, 86 plus_V, 86 plus_V, 87 plus_W, 87 plus_W, 88 plus_R, 88 plus_R, 89 plus_S, 89 plus_S, 90 plus_T, 90 plus_T, 91 plus_A, 91 plus_A, 92 plus_B, 92 plus_B, 93 plus_C, 93 plus_C, 94 plus_D, 94 plus_D, 95 plus_E 95 plus_E 96 }; 96 }; 97 97 98 static G4Ions::G4FloatLevelBase FloatLevel 98 static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar); 99 static G4Ions::G4FloatLevelBase FloatLevel 99 static G4Ions::G4FloatLevelBase FloatLevelBase(G4int flbIdx); 100 static char FloatLevelBaseChar(G4Ions::G4F 100 static char FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb); 101 101 102 // Set/Get methods for floating level base 102 // Set/Get methods for floating level base 103 // 103 // 104 inline G4Ions::G4FloatLevelBase GetFloatLe 104 inline G4Ions::G4FloatLevelBase GetFloatLevelBase() const; 105 inline G4int GetFloatLevelBaseIndex() cons 105 inline G4int GetFloatLevelBaseIndex() const; 106 inline void SetFloatLevelBase(G4Ions::G4Fl 106 inline void SetFloatLevelBase(G4Ions::G4FloatLevelBase flb); 107 inline void SetFloatLevelBase(char flbChar 107 inline void SetFloatLevelBase(char flbChar); 108 inline void SetFloatLevelBase(G4int flbIdx 108 inline void SetFloatLevelBase(G4int flbIdx); 109 109 110 protected: 110 protected: 111 G4Ions() = default; 111 G4Ions() = default; 112 112 113 private: 113 private: 114 G4double theExcitationEnergy = 0.0; 114 G4double theExcitationEnergy = 0.0; 115 G4int theIsomerLevel = 0; 115 G4int theIsomerLevel = 0; 116 G4FloatLevelBase floatLevelBase = G4FloatL 116 G4FloatLevelBase floatLevelBase = G4FloatLevelBase::no_Float; 117 }; 117 }; 118 118 119 #define noFloat G4Ions::G4FloatLevelBase::no_F 119 #define noFloat G4Ions::G4FloatLevelBase::no_Float 120 #define plusU G4Ions::G4FloatLevelBase::plus_U 120 #define plusU G4Ions::G4FloatLevelBase::plus_U 121 #define plusV G4Ions::G4FloatLevelBase::plus_V 121 #define plusV G4Ions::G4FloatLevelBase::plus_V 122 #define plusW G4Ions::G4FloatLevelBase::plus_W 122 #define plusW G4Ions::G4FloatLevelBase::plus_W 123 #define plusX G4Ions::G4FloatLevelBase::plus_X 123 #define plusX G4Ions::G4FloatLevelBase::plus_X 124 #define plusY G4Ions::G4FloatLevelBase::plus_Y 124 #define plusY G4Ions::G4FloatLevelBase::plus_Y 125 #define plusZ G4Ions::G4FloatLevelBase::plus_Z 125 #define plusZ G4Ions::G4FloatLevelBase::plus_Z 126 #define plusR G4Ions::G4FloatLevelBase::plus_R 126 #define plusR G4Ions::G4FloatLevelBase::plus_R 127 #define plusS G4Ions::G4FloatLevelBase::plus_S 127 #define plusS G4Ions::G4FloatLevelBase::plus_S 128 #define plusT G4Ions::G4FloatLevelBase::plus_T 128 #define plusT G4Ions::G4FloatLevelBase::plus_T 129 #define plusA G4Ions::G4FloatLevelBase::plus_A 129 #define plusA G4Ions::G4FloatLevelBase::plus_A 130 #define plusB G4Ions::G4FloatLevelBase::plus_B 130 #define plusB G4Ions::G4FloatLevelBase::plus_B 131 #define plusC G4Ions::G4FloatLevelBase::plus_C 131 #define plusC G4Ions::G4FloatLevelBase::plus_C 132 #define plusD G4Ions::G4FloatLevelBase::plus_D 132 #define plusD G4Ions::G4FloatLevelBase::plus_D 133 #define plusE G4Ions::G4FloatLevelBase::plus_E 133 #define plusE G4Ions::G4FloatLevelBase::plus_E 134 134 135 // ------------------------ 135 // ------------------------ 136 // Inline methods 136 // Inline methods 137 // ------------------------ 137 // ------------------------ 138 138 139 inline G4Ions* G4Ions::IonsDefinition() 139 inline G4Ions* G4Ions::IonsDefinition() 140 { 140 { 141 return this; 141 return this; 142 } 142 } 143 143 144 inline G4Ions* G4Ions::Ions() 144 inline G4Ions* G4Ions::Ions() 145 { 145 { 146 return this; 146 return this; 147 } 147 } 148 148 149 inline G4double G4Ions::GetExcitationEnergy() 149 inline G4double G4Ions::GetExcitationEnergy() const 150 { 150 { 151 return theExcitationEnergy; 151 return theExcitationEnergy; 152 } 152 } 153 153 154 inline G4int G4Ions::GetIsomerLevel() const 154 inline G4int G4Ions::GetIsomerLevel() const 155 { 155 { 156 return theIsomerLevel; 156 return theIsomerLevel; 157 } 157 } 158 158 159 inline G4Ions::G4FloatLevelBase G4Ions::GetFlo 159 inline G4Ions::G4FloatLevelBase G4Ions::GetFloatLevelBase() const 160 { 160 { 161 return floatLevelBase; 161 return floatLevelBase; 162 } 162 } 163 163 164 inline G4int G4Ions::GetFloatLevelBaseIndex() 164 inline G4int G4Ions::GetFloatLevelBaseIndex() const 165 { 165 { 166 return static_cast<G4int>(floatLevelBase); 166 return static_cast<G4int>(floatLevelBase); 167 } 167 } 168 168 169 inline void G4Ions::SetFloatLevelBase(G4Ions:: 169 inline void G4Ions::SetFloatLevelBase(G4Ions::G4FloatLevelBase flb) 170 { 170 { 171 floatLevelBase = flb; 171 floatLevelBase = flb; 172 } 172 } 173 173 174 inline void G4Ions::SetFloatLevelBase(char flb 174 inline void G4Ions::SetFloatLevelBase(char flbChar) 175 { 175 { 176 floatLevelBase = FloatLevelBase(flbChar); 176 floatLevelBase = FloatLevelBase(flbChar); 177 } 177 } 178 178 179 inline void G4Ions::SetFloatLevelBase(G4int fl 179 inline void G4Ions::SetFloatLevelBase(G4int flbIdx) 180 { 180 { 181 floatLevelBase = FloatLevelBase(flbIdx); 181 floatLevelBase = FloatLevelBase(flbIdx); 182 } 182 } 183 183 184 #endif 184 #endif 185 185