Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // G4Ions class implementation << 27 // 23 // 28 // Authors: G.Cosmo, 4 April 1996 - Object mod << 24 // $Id: G4Ions.cc,v 1.9 2003/06/16 16:58:27 gunter Exp $ 29 // H.Kurashige, 27 June 1998 - First << 25 // GEANT4 tag $Name: geant4-07-01 $ 30 // ------------------------------------------- << 26 // 31 << 27 // 32 #include "G4Ions.hh" << 28 // ---------------------------------------------------------------------- 33 << 29 // GEANT 4 class implementation file 34 #include "G4PhysicalConstants.hh" << 30 // 35 #include "G4SystemOfUnits.hh" << 31 // History: first implementation, based on object model of >> 32 // 4th April 1996, G.Cosmo >> 33 // ********************************************************************** 36 34 37 #include <fstream> 35 #include <fstream> 38 #include <iomanip> 36 #include <iomanip> 39 37 40 // clang-format off << 38 #include "G4Ions.hh" >> 39 >> 40 // ###################################################################### >> 41 // ### Ions ### >> 42 // ###################################################################### >> 43 41 G4Ions::G4Ions( 44 G4Ions::G4Ions( 42 const G4String& aName, G4dou 45 const G4String& aName, G4double mass, 43 G4double width, G4dou 46 G4double width, G4double charge, 44 G4int iSpin, G4int 47 G4int iSpin, G4int iParity, 45 G4int iConjugation, G4int 48 G4int iConjugation, G4int iIsospin, 46 G4int iIsospin3, G4int 49 G4int iIsospin3, G4int gParity, 47 const G4String& pType, G4int 50 const G4String& pType, G4int lepton, 48 G4int baryon, G4int 51 G4int baryon, G4int encoding, 49 G4bool stable, G4dou 52 G4bool stable, G4double lifetime, 50 G4DecayTable *decaytable , G4boo << 53 G4DecayTable *decaytable ) 51 const G4String& subType, << 52 G4int anti_encoding, << 53 G4double excitation, << 54 G4int isomer << 55 ) << 56 : G4ParticleDefinition( aName,mass,width,cha 54 : G4ParticleDefinition( aName,mass,width,charge,iSpin,iParity, 57 iConjugation,iIsospi << 55 iConjugation,iIsospin,iIsospin3,gParity,pType, 58 lepton,baryon,encodi << 56 lepton,baryon,encoding,stable,lifetime,decaytable ) 59 shortlived, subType, anti_encoding), << 60 theExcitationEnergy(excitation), << 61 theIsomerLevel(isomer) << 62 // clang-format on << 63 { 57 { 64 if ((aName == "proton") || (aName == "neutro << 58 SetParticleSubType("generic"); 65 isGeneralIon = false; << 59 // initialize excitation energy/level 66 } << 60 theExcitationEnergy = 0.0; 67 else if ((aName == "GenericIon") || (aName = << 68 || (aName == "deuteron") || (aName << 69 { << 70 isGeneralIon = false; << 71 } << 72 else if ((aName == "anti_He3") || (aName == << 73 || (aName == "anti_alpha")) << 74 { << 75 isGeneralIon = false; << 76 } << 77 else if ((aName == "iron") || (aName == "oxy << 78 || (aName == "helium") || (aName == << 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 << 95 // isomer level isset to 9 << 96 // if isomer level is set to 0 for excited s << 97 // << 98 if ((theExcitationEnergy > 0.0) && (isomer = << 99 << 100 if (GetAtomicNumber() == 0) { << 101 // AtomicNumber/Mass is positive even for << 102 SetAtomicNumber(std::abs(G4int(GetPDGCharg << 103 SetAtomicMass(std::abs(GetBaryonNumber())) << 104 } << 105 } 61 } 106 62 107 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBas << 63 G4Ions* G4Ions::IonsDefinition() 108 { 64 { 109 G4Ions::G4FloatLevelBase flb = noFloat; << 65 return this; 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 } 66 } 173 67 174 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBas << 68 G4int G4Ions::GetAtomicNumber() const 175 { 69 { 176 // clang-format off << 70 return G4int(GetPDGCharge()/eplus); 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 } 71 } 184 72 185 char G4Ions::FloatLevelBaseChar(G4Ions::G4Floa << 73 G4int G4Ions::GetAtomicMass() const 186 { 74 { 187 // clang-format off << 75 return GetBaryonNumber(); 188 static char flbChar[] = {'\0', 'X', 'Y', 'Z' << 189 'S', 'T', 'A', 'B' << 190 // clang-format on << 191 return flbChar[static_cast<G4int>(flb)]; << 192 } 76 } 193 77