Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 5 // * The Geant4 software is copyright of th << 6 // * the Geant4 Collaboration. It is provided << 7 // * conditions of the Geant4 Software License << 8 // * LICENSE and available at http://cern.ch/ << 9 // * include a list of copyright holders. << 10 // * << 11 // * Neither the authors of this software syst << 12 // * institutes,nor the agencies providing fin << 13 // * work make any representation or warran << 14 // * regarding this software system or assum << 15 // * use. Please see the license in the file << 16 // * for the full disclaimer and the limitatio << 17 // * << 18 // * This code implementation is the result << 19 // * technical work of the GEANT4 collaboratio << 20 // * By using, copying, modifying or distri << 21 // * any work based on the software) you ag << 22 // * use in resulting scientific publicati << 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* << 25 // 7 // 26 // G4Ions class implementation << 8 // $Id: G4Ions.cc,v 1.3.6.1.2.2 1999/12/14 07:08:14 gunter Exp $ >> 9 // GEANT4 tag $Name: geant4-01-01 $ 27 // 10 // 28 // Authors: G.Cosmo, 4 April 1996 - Object mod << 11 // 29 // H.Kurashige, 27 June 1998 - First << 12 // ---------------------------------------------------------------------- 30 // ------------------------------------------- << 13 // GEANT 4 class implementation file >> 14 // >> 15 // For information related to this code contact: >> 16 // CERN, CN Division, ASD Group >> 17 // History: first implementation, based on object model of >> 18 // 4th April 1996, G.Cosmo >> 19 // ********************************************************************** 31 20 32 #include "G4Ions.hh" << 21 #include "g4std/fstream" >> 22 #include "g4std/iomanip" 33 23 34 #include "G4PhysicalConstants.hh" << 24 #include "G4Ions.hh" 35 #include "G4SystemOfUnits.hh" << 36 25 37 #include <fstream> << 26 // ###################################################################### 38 #include <iomanip> << 27 // ### Ions ### >> 28 // ###################################################################### 39 29 40 // clang-format off << 41 G4Ions::G4Ions( 30 G4Ions::G4Ions( 42 const G4String& aName, G4dou 31 const G4String& aName, G4double mass, 43 G4double width, G4dou 32 G4double width, G4double charge, 44 G4int iSpin, G4int 33 G4int iSpin, G4int iParity, 45 G4int iConjugation, G4int 34 G4int iConjugation, G4int iIsospin, 46 G4int iIsospin3, G4int 35 G4int iIsospin3, G4int gParity, 47 const G4String& pType, G4int 36 const G4String& pType, G4int lepton, 48 G4int baryon, G4int 37 G4int baryon, G4int encoding, 49 G4bool stable, G4dou 38 G4bool stable, G4double lifetime, 50 G4DecayTable *decaytable , G4boo << 39 G4DecayTable *decaytable ) 51 const G4String& subType, << 40 : G4ParticleWithCuts( aName,mass,width,charge,iSpin,iParity, 52 G4int anti_encoding, << 41 iConjugation,iIsospin,iIsospin3,gParity,pType, 53 G4double excitation, << 42 lepton,baryon,encoding,stable,lifetime,decaytable ) 54 G4int isomer << 55 ) << 56 : G4ParticleDefinition( aName,mass,width,cha << 57 iConjugation,iIsospi << 58 lepton,baryon,encodi << 59 shortlived, subType, anti_encoding), << 60 theExcitationEnergy(excitation), << 61 theIsomerLevel(isomer) << 62 // clang-format on << 63 { << 64 if ((aName == "proton") || (aName == "neutro << 65 isGeneralIon = false; << 66 } << 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 } << 106 << 107 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBas << 108 { 43 { 109 G4Ions::G4FloatLevelBase flb = noFloat; << 44 // initialize excitation energy/level 110 switch (flbChar) { << 45 theExcitationEnergy = 0.0; 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 } 46 } 173 47 174 G4Ions::G4FloatLevelBase G4Ions::FloatLevelBas << 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, << 181 // clang-format on << 182 return (flbIdx >= 0 && flbIdx < 15) ? flb[fl << 183 } << 184 48 185 char G4Ions::FloatLevelBaseChar(G4Ions::G4Floa << 49 G4Ions* G4Ions::IonsDefinition() 186 { 50 { 187 // clang-format off << 51 return this; 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 } 52 } 193 53