Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // G4Ions class implementation 27 // 28 // Authors: G.Cosmo, 4 April 1996 - Object model 29 // H.Kurashige, 27 June 1998 - First implementation 30 // -------------------------------------------------------------------- 31 32 #include "G4Ions.hh" 33 34 #include "G4PhysicalConstants.hh" 35 #include "G4SystemOfUnits.hh" 36 37 #include <fstream> 38 #include <iomanip> 39 40 // clang-format off 41 G4Ions::G4Ions( 42 const G4String& aName, G4double mass, 43 G4double width, G4double charge, 44 G4int iSpin, G4int iParity, 45 G4int iConjugation, G4int iIsospin, 46 G4int iIsospin3, G4int gParity, 47 const G4String& pType, G4int lepton, 48 G4int baryon, G4int encoding, 49 G4bool stable, G4double lifetime, 50 G4DecayTable *decaytable , G4bool shortlived, 51 const G4String& subType, 52 G4int anti_encoding, 53 G4double excitation, 54 G4int isomer 55 ) 56 : G4ParticleDefinition( aName,mass,width,charge,iSpin,iParity, 57 iConjugation,iIsospin,iIsospin3,gParity,pType, 58 lepton,baryon,encoding,stable,lifetime,decaytable, 59 shortlived, subType, anti_encoding), 60 theExcitationEnergy(excitation), 61 theIsomerLevel(isomer) 62 // clang-format on 63 { 64 if ((aName == "proton") || (aName == "neutron")) { 65 isGeneralIon = false; 66 } 67 else if ((aName == "GenericIon") || (aName == "alpha") || (aName == "He3") 68 || (aName == "deuteron") || (aName == "triton")) 69 { 70 isGeneralIon = false; 71 } 72 else if ((aName == "anti_He3") || (aName == "anti_deuteron") || (aName == "anti_triton") 73 || (aName == "anti_alpha")) 74 { 75 isGeneralIon = false; 76 } 77 else if ((aName == "iron") || (aName == "oxygen") || (aName == "nitrogen") || (aName == "carbon") 78 || (aName == "helium") || (aName == "alpha+") || (aName == "hydrogen") 79 || (aName == "Ps-1s") || (aName == "Ps-2s")) 80 { 81 isGeneralIon = false; 82 } 83 else if (aName == "hypertriton" || aName == "anti_hypertriton" || aName == "hyperalpha" 84 || aName == "anti_hyperalpha" || aName == "hyperH4" || aName == "anti_hyperH4" 85 || aName == "doublehyperH4" || aName == "anti_doublehyperH4" 86 || aName == "doublehyperdoubleneutron" || aName == "anti_doublehyperdoubleneutron" 87 || aName == "hyperHe5" || aName == "anti_hyperHe5") 88 { 89 isGeneralIon = false; 90 } 91 else { 92 isGeneralIon = true; 93 } 94 95 // isomer level isset to 9 96 // if isomer level is set to 0 for excited state 97 // 98 if ((theExcitationEnergy > 0.0) && (isomer == 0)) isomer = 9; 99 100 if (GetAtomicNumber() == 0) { 101 // AtomicNumber/Mass is positive even for anti_nulceus 102 SetAtomicNumber(std::abs(G4int(GetPDGCharge() / eplus))); 103 SetAtomicMass(std::abs(GetBaryonNumber())); 104 } 105 } 106 107 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(char flbChar) 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 174 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(G4int flbIdx) 175 { 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, plusD, plusE }; 181 // clang-format on 182 return (flbIdx >= 0 && flbIdx < 15) ? flb[flbIdx] : flb[0]; 183 } 184 185 char G4Ions::FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb) 186 { 187 // clang-format off 188 static char flbChar[] = {'\0', 'X', 'Y', 'Z', 'U', 'V', 'W', 'R', 189 'S', 'T', 'A', 'B', 'C', 'D', 'E'}; 190 // clang-format on 191 return flbChar[static_cast<G4int>(flb)]; 192 } 193