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 class implementation 26 // G4Ions class implementation 27 // 27 // 28 // Authors: G.Cosmo, 4 April 1996 - Object mod 28 // Authors: G.Cosmo, 4 April 1996 - Object model 29 // H.Kurashige, 27 June 1998 - First 29 // H.Kurashige, 27 June 1998 - First implementation 30 // ------------------------------------------- 30 // -------------------------------------------------------------------- 31 31 32 #include "G4Ions.hh" << 32 #include <fstream> >> 33 #include <iomanip> 33 34 >> 35 #include "G4Ions.hh" 34 #include "G4PhysicalConstants.hh" 36 #include "G4PhysicalConstants.hh" 35 #include "G4SystemOfUnits.hh" 37 #include "G4SystemOfUnits.hh" 36 38 37 #include <fstream> << 39 // ###################################################################### 38 #include <iomanip> << 40 // ### Ions ### >> 41 // ###################################################################### 39 42 40 // clang-format off << 41 G4Ions::G4Ions( 43 G4Ions::G4Ions( 42 const G4String& aName, G4dou 44 const G4String& aName, G4double mass, 43 G4double width, G4dou 45 G4double width, G4double charge, 44 G4int iSpin, G4int 46 G4int iSpin, G4int iParity, 45 G4int iConjugation, G4int 47 G4int iConjugation, G4int iIsospin, 46 G4int iIsospin3, G4int 48 G4int iIsospin3, G4int gParity, 47 const G4String& pType, G4int 49 const G4String& pType, G4int lepton, 48 G4int baryon, G4int 50 G4int baryon, G4int encoding, 49 G4bool stable, G4dou 51 G4bool stable, G4double lifetime, 50 G4DecayTable *decaytable , G4boo 52 G4DecayTable *decaytable , G4bool shortlived, 51 const G4String& subType, 53 const G4String& subType, 52 G4int anti_encoding, 54 G4int anti_encoding, 53 G4double excitation, 55 G4double excitation, 54 G4int isomer 56 G4int isomer 55 ) 57 ) 56 : G4ParticleDefinition( aName,mass,width,cha 58 : G4ParticleDefinition( aName,mass,width,charge,iSpin,iParity, 57 iConjugation,iIsospi 59 iConjugation,iIsospin,iIsospin3,gParity,pType, 58 lepton,baryon,encodi 60 lepton,baryon,encoding,stable,lifetime,decaytable, 59 shortlived, subType, anti_encoding), 61 shortlived, subType, anti_encoding), 60 theExcitationEnergy(excitation), 62 theExcitationEnergy(excitation), 61 theIsomerLevel(isomer) << 63 theIsomerLevel(isomer), 62 // clang-format on << 64 floatLevelBase(G4FloatLevelBase::no_Float) 63 { 65 { 64 if ((aName == "proton") || (aName == "neutro << 66 if ((aName == "proton") || (aName == "neutron")) { 65 isGeneralIon = false; << 67 isGeneralIon = false ; 66 } << 68 } else if ( (aName == "GenericIon") || (aName == "alpha") 67 else if ((aName == "GenericIon") || (aName = << 69 || (aName == "He3") || (aName == "deuteron")|| (aName == "triton")) { 68 || (aName == "deuteron") || (aName << 70 isGeneralIon = false ; 69 { << 71 } else if ( (aName == "anti_He3") || (aName == "anti_deuteron") 70 isGeneralIon = false; << 72 || (aName == "anti_triton") || (aName == "anti_alpha") ) { 71 } << 73 isGeneralIon = false ; 72 else if ((aName == "anti_He3") || (aName == << 74 } else if ( (aName == "iron") || (aName == "oxygen") || (aName == "nitrogen") 73 || (aName == "anti_alpha")) << 75 || (aName == "carbon") || (aName == "helium") || (aName == "alpha+") 74 { << 76 || (aName == "hydrogen") || (aName == "Ps-1s") || (aName == "Ps-2s")) { 75 isGeneralIon = false; << 77 isGeneralIon = false ; 76 } << 78 } else { 77 else if ((aName == "iron") || (aName == "oxy << 79 isGeneralIon = true; 78 || (aName == "helium") || (aName == << 80 } 79 || (aName == "Ps-1s") || (aName == << 80 { << 81 isGeneralIon = false; << 82 } << 83 else if (aName == "hypertriton" || aName == << 84 || aName == "anti_hyperalpha" || aN << 85 || aName == "doublehyperH4" || aNam << 86 || aName == "doublehyperdoubleneutr << 87 || aName == "hyperHe5" || aName == << 88 { << 89 isGeneralIon = false; << 90 } << 91 else { << 92 isGeneralIon = true; << 93 } << 94 81 95 // isomer level isset to 9 << 82 // isomer level isset to 9 96 // if isomer level is set to 0 for excited s 83 // if isomer level is set to 0 for excited state 97 // 84 // 98 if ((theExcitationEnergy > 0.0) && (isomer = << 85 if ((theExcitationEnergy > 0.0) && (isomer==0)) isomer =9; 99 86 100 if (GetAtomicNumber() == 0) { << 87 if (GetAtomicNumber() == 0 ) 101 // AtomicNumber/Mass is positive even for << 88 { 102 SetAtomicNumber(std::abs(G4int(GetPDGCharg << 89 // AtomicNumber/Mass is positive even for anti_nulceus 103 SetAtomicMass(std::abs(GetBaryonNumber())) << 90 SetAtomicNumber( std::abs(G4int(GetPDGCharge()/eplus)) ); 104 } << 91 SetAtomicMass( std::abs(GetBaryonNumber()) ); >> 92 } >> 93 } >> 94 >> 95 G4Ions::G4Ions() >> 96 { >> 97 } >> 98 >> 99 G4Ions::~G4Ions() >> 100 { 105 } 101 } 106 102 107 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBas 103 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(char flbChar) 108 { 104 { 109 G4Ions::G4FloatLevelBase flb = noFloat; 105 G4Ions::G4FloatLevelBase flb = noFloat; 110 switch (flbChar) { << 106 switch(flbChar) 111 case 'x': << 107 { 112 case 'X': << 108 case 'x': case 'X': 113 flb = plusX; << 109 flb = plusX; 114 break; << 110 break; 115 case 'y': << 111 case 'y': case 'Y': 116 case 'Y': << 112 flb = plusY; 117 flb = plusY; << 113 break; 118 break; << 114 case 'z': case 'Z': 119 case 'z': << 115 flb = plusZ; 120 case 'Z': << 116 break; 121 flb = plusZ; << 117 case 'u': case 'U': 122 break; << 118 flb = plusU; 123 case 'u': << 119 break; 124 case 'U': << 120 case 'v': case 'V': 125 flb = plusU; << 121 flb = plusV; 126 break; << 122 break; 127 case 'v': << 123 case 'w': case 'W': 128 case 'V': << 124 flb = plusW; 129 flb = plusV; << 125 break; 130 break; << 126 case 'r': case 'R': 131 case 'w': << 127 flb = plusR; 132 case 'W': << 128 break; 133 flb = plusW; << 129 case 's': case 'S': 134 break; << 130 flb = plusS; 135 case 'r': << 131 break; 136 case 'R': << 132 case 't': case 'T': 137 flb = plusR; << 133 flb = plusT; 138 break; << 134 break; 139 case 's': << 135 case 'a': case 'A': 140 case 'S': << 136 flb = plusA; 141 flb = plusS; << 137 break; 142 break; << 138 case 'b': case 'B': 143 case 't': << 139 flb = plusB; 144 case 'T': << 140 break; 145 flb = plusT; << 141 case 'c': case 'C': 146 break; << 142 flb = plusC; 147 case 'a': << 143 break; 148 case 'A': << 144 case 'd': case 'D': 149 flb = plusA; << 145 flb = plusD; 150 break; << 146 break; 151 case 'b': << 147 case 'e': case 'E': 152 case 'B': << 148 flb = plusE; 153 flb = plusB; << 149 break; 154 break; << 150 case '\0': default: 155 case 'c': << 151 break; 156 case 'C': << 157 flb = plusC; << 158 break; << 159 case 'd': << 160 case 'D': << 161 flb = plusD; << 162 break; << 163 case 'e': << 164 case 'E': << 165 flb = plusE; << 166 break; << 167 case '\0': << 168 default: << 169 break; << 170 } 152 } 171 return flb; 153 return flb; 172 } 154 } 173 155 174 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBas 156 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(G4int flbIdx) 175 { 157 { 176 // clang-format off << 177 static G4Ions::G4FloatLevelBase flb[] = 158 static G4Ions::G4FloatLevelBase flb[] = 178 { noFloat, 159 { noFloat, 179 plusX, plusY, plusZ, plusU, plusV, plusW, 160 plusX, plusY, plusZ, plusU, plusV, plusW, 180 plusR, plusS, plusT, plusA, plusB, plusC, 161 plusR, plusS, plusT, plusA, plusB, plusC, plusD, plusE }; 181 // clang-format on << 162 return flb[flbIdx]; 182 return (flbIdx >= 0 && flbIdx < 15) ? flb[fl << 183 } 163 } 184 164 185 char G4Ions::FloatLevelBaseChar(G4Ions::G4Floa 165 char G4Ions::FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb) 186 { 166 { 187 // clang-format off << 167 static char flbChar[] = {'\0','X','Y','Z','U','V','W', 188 static char flbChar[] = {'\0', 'X', 'Y', 'Z' << 168 'R','S','T','A','B','C','D','E'}; 189 'S', 'T', 'A', 'B' << 190 // clang-format on << 191 return flbChar[static_cast<G4int>(flb)]; 169 return flbChar[static_cast<G4int>(flb)]; 192 } 170 } 193 171