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