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 // neutron_hp -- source file 26 // neutron_hp -- source file 27 // J.P. Wellisch, Nov-1996 27 // J.P. Wellisch, Nov-1996 28 // A prototype of the low energy neutron trans 28 // A prototype of the low energy neutron transport model. 29 // 29 // 30 // 24-Jan-07 Enable to use exact data only and 30 // 24-Jan-07 Enable to use exact data only and add warnig when substitute file is used T. Koi 31 // 30-Jan-07 Modified method of searching subs 31 // 30-Jan-07 Modified method of searching substitute isotope data by T. Koi 32 // 07-06-12 fix memory leaking by T. Koi 32 // 07-06-12 fix memory leaking by T. Koi 33 // 07-06-25 Change data selection logic when G 33 // 07-06-25 Change data selection logic when G4NEUTRONHP_SKIP_MISSING_ISOTOPES is turn on 34 // Natural Abundance data are allowed 34 // Natural Abundance data are allowed. by T. Koi 35 // 07-07-06 Allow _nat_ final state even for i 35 // 07-07-06 Allow _nat_ final state even for isotoped cross sections by T. Koi 36 // 08-09-01 Add protection that deuteron data 36 // 08-09-01 Add protection that deuteron data do not selected for hydrogen and so on by T. Koi 37 // 37 // 38 // P. Arce, June-2014 Conversion neutron_hp to 38 // P. Arce, June-2014 Conversion neutron_hp to particle_hp 39 // June-2019 - E. Mendoza --> Modification to 39 // June-2019 - E. Mendoza --> Modification to allow using an incomplete data library if the 40 // G4NEUTRONHP_SKIP_MISSING_ISOTOPES environme 40 // G4NEUTRONHP_SKIP_MISSING_ISOTOPES environmental flag is defined. The missing XS are set to 0. 41 // Oct-2019 - E. Mendoza --> remove restrictio 41 // Oct-2019 - E. Mendoza --> remove restriction of using isotopes with Z>92 42 // 42 // 43 // V. Ivanchenko, July-2023 Basic revision of 43 // V. Ivanchenko, July-2023 Basic revision of particle HP classes 44 44 45 #include "G4ParticleHPNames.hh" 45 #include "G4ParticleHPNames.hh" 46 46 47 #include "G4HadronicException.hh" 47 #include "G4HadronicException.hh" 48 #include "G4HadronicParameters.hh" 48 #include "G4HadronicParameters.hh" 49 #include "G4ParticleHPManager.hh" 49 #include "G4ParticleHPManager.hh" 50 #include "G4SandiaTable.hh" 50 #include "G4SandiaTable.hh" 51 #include "G4ios.hh" 51 #include "G4ios.hh" 52 52 53 #include <fstream> 53 #include <fstream> 54 54 55 const G4String G4ParticleHPNames::theString[10 55 const G4String G4ParticleHPNames::theString[100] = { 56 "Hydrogen", "Helium", "Lithium", 56 "Hydrogen", "Helium", "Lithium", "Berylium", "Boron", "Carbon", 57 "Nitrogen", "Oxygen", "Fluorine", 57 "Nitrogen", "Oxygen", "Fluorine", "Neon", "Sodium", "Magnesium", 58 "Aluminum", "Silicon", "Phosphorous" 58 "Aluminum", "Silicon", "Phosphorous", "Sulfur", "Chlorine", "Argon", 59 "Potassium", "Calcium", "Scandium", 59 "Potassium", "Calcium", "Scandium", "Titanium", "Vanadium", "Chromium", 60 "Manganese", "Iron", "Cobalt", 60 "Manganese", "Iron", "Cobalt", "Nickel", "Copper", "Zinc", 61 "Gallium", "Germanium", "Arsenic", 61 "Gallium", "Germanium", "Arsenic", "Selenium", "Bromine", "Krypton", 62 "Rubidium", "Strontium", "Yttrium", 62 "Rubidium", "Strontium", "Yttrium", "Zirconium", "Niobium", "Molybdenum", 63 "Technetium", "Ruthenium", "Rhodium", 63 "Technetium", "Ruthenium", "Rhodium", "Palladium", "Silver", "Cadmium", 64 "Indium", "Tin", "Antimony", 64 "Indium", "Tin", "Antimony", "Tellurium", "Iodine", "Xenon", 65 "Cesium", "Barium", "Lanthanum", 65 "Cesium", "Barium", "Lanthanum", "Cerium", "Praseodymium", "Neodymium", 66 "Promethium", "Samarium", "Europium", 66 "Promethium", "Samarium", "Europium", "Gadolinium", "Terbium", "Dysprosium", 67 "Holmium", "Erbium", "Thulium", 67 "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutetium", "Hafnium", 68 "Tantalum", "Tungsten", "Rhenium", 68 "Tantalum", "Tungsten", "Rhenium", "Osmium", "Iridium", "Platinium", 69 "Gold", "Mercury", "Thallium", 69 "Gold", "Mercury", "Thallium", "Lead", "Bismuth", "Polonium", 70 "Astatine", "Radon", "Francium", 70 "Astatine", "Radon", "Francium", "Radium", "Actinium", "Thorium", 71 "Protactinium", "Uranium", "Neptunium", 71 "Protactinium", "Uranium", "Neptunium", "Plutonium", "Americium", "Curium", 72 "Berkelium", "Californium", "Einsteinium" 72 "Berkelium", "Californium", "Einsteinium", "Fermium"}; 73 73 74 G4ParticleHPNames::G4ParticleHPNames(G4int max 74 G4ParticleHPNames::G4ParticleHPNames(G4int maxOffSet) : theMaxOffSet(maxOffSet) 75 { 75 { 76 fManager = G4ParticleHPManager::GetInstance( 76 fManager = G4ParticleHPManager::GetInstance(); 77 } 77 } 78 78 79 G4String G4ParticleHPNames::GetName(G4int i) c << 79 G4String G4ParticleHPNames::GetName(G4int i) 80 { 80 { 81 return (i > 0 && i < 100) ? theString[i] : G 81 return (i > 0 && i < 100) ? theString[i] : G4String(""); 82 } 82 } 83 83 84 G4String G4ParticleHPNames::itoa(G4int current << 84 G4String G4ParticleHPNames::itoa(G4int current) 85 { 85 { 86 const char theDigits[11] = "0123456789"; 86 const char theDigits[11] = "0123456789"; 87 G4String result; 87 G4String result; 88 G4int digit; 88 G4int digit; 89 do { 89 do { 90 digit = current - 10 * (current / 10); 90 digit = current - 10 * (current / 10); 91 result = theDigits[digit] + result; 91 result = theDigits[digit] + result; 92 current /= 10; 92 current /= 10; 93 } while (current != 0); // Loop checking, 1 93 } while (current != 0); // Loop checking, 11.05.2015, T. Koi 94 return result; 94 return result; 95 } 95 } 96 96 97 G4ParticleHPDataUsed G4ParticleHPNames::GetNam 97 G4ParticleHPDataUsed G4ParticleHPNames::GetName(G4int A, G4int Z, G4int M, const G4String& base, 98 << 98 const G4String& rest, G4bool& aFlag) 99 { 99 { 100 // G4cout << Z << " " << A << " " << M << " 100 // G4cout << Z << " " << A << " " << M << " " << base << " " << rest << G4endl; 101 101 102 // Excited isomer indicator 102 // Excited isomer indicator 103 std::stringstream ss; 103 std::stringstream ss; 104 G4String sM; 104 G4String sM; 105 if (M > 0) { 105 if (M > 0) { 106 ss << "m"; 106 ss << "m"; 107 ss << M; 107 ss << M; 108 ss >> sM; 108 ss >> sM; 109 ss.clear(); 109 ss.clear(); 110 } 110 } 111 111 112 G4ParticleHPDataUsed result; 112 G4ParticleHPDataUsed result; 113 aFlag = true; 113 aFlag = true; 114 114 115 #ifdef G4VERBOSE 115 #ifdef G4VERBOSE 116 if (fManager->GetDEBUG()) 116 if (fManager->GetDEBUG()) 117 G4cout << "Names::GetName entered for Z = 117 G4cout << "Names::GetName entered for Z = " << Z << ", A = " << A << G4endl; 118 #endif 118 #endif 119 119 120 G4int myA = A; 120 G4int myA = A; 121 G4int myZ = Z; 121 G4int myZ = Z; 122 122 123 G4String* theName = nullptr; 123 G4String* theName = nullptr; 124 G4String theFileName(""); 124 G4String theFileName(""); 125 125 126 // G4int inc = 1; 126 // G4int inc = 1; 127 127 128 G4int flip_Z = 1; 128 G4int flip_Z = 1; 129 G4int delta_Z = 0; 129 G4int delta_Z = 0; 130 130 131 G4int flip_A = 1; 131 G4int flip_A = 1; 132 G4int delta_A = 0; 132 G4int delta_A = 0; 133 133 134 std::istringstream* check = nullptr; 134 std::istringstream* check = nullptr; 135 G4bool first = true; 135 G4bool first = true; 136 136 137 #ifdef G4VERBOSE 137 #ifdef G4VERBOSE 138 if (fManager->GetDEBUG()) 138 if (fManager->GetDEBUG()) 139 G4cout << "entered GetName!!!" << G4endl; 139 G4cout << "entered GetName!!!" << G4endl; 140 #endif 140 #endif 141 141 142 do { 142 do { 143 aFlag = true; 143 aFlag = true; 144 auto biff = new G4String(); // delete her 144 auto biff = new G4String(); // delete here as theName 145 *biff = base + "/CrossSection/" + itoa(myZ 145 *biff = base + "/CrossSection/" + itoa(myZ) + "_" + itoa(myA) + sM + "_" + theString[myZ - 1]; 146 146 147 delete theName; 147 delete theName; 148 theName = biff; 148 theName = biff; 149 result.SetName(*theName); 149 result.SetName(*theName); 150 result.SetA(myA); 150 result.SetA(myA); 151 result.SetZ(myZ); 151 result.SetZ(myZ); 152 result.SetM(M); 152 result.SetM(M); 153 delete check; 153 delete check; 154 154 155 check = new std::istringstream(std::ios::i 155 check = new std::istringstream(std::ios::in); 156 fManager->GetDataStream2(*theName, *check) 156 fManager->GetDataStream2(*theName, *check); 157 if (!(*check)) { 157 if (!(*check)) { 158 delete check; 158 delete check; 159 check = nullptr; 159 check = nullptr; 160 aFlag = false; 160 aFlag = false; 161 if (first) { 161 if (first) { 162 aFlag = true; 162 aFlag = true; 163 first = false; 163 first = false; 164 biff = new G4String(); // delete here 164 biff = new G4String(); // delete here as theName 165 *biff = base + "/CrossSection/" + itoa 165 *biff = base + "/CrossSection/" + itoa(myZ) + "_" + "nat" + "_" + theString[myZ - 1]; 166 delete theName; 166 delete theName; 167 theName = biff; 167 theName = biff; 168 result.SetName(*theName); 168 result.SetName(*theName); 169 G4double natA = myZ / G4SandiaTable::G 169 G4double natA = myZ / G4SandiaTable::GetZtoA(myZ); 170 result.SetA(natA); 170 result.SetA(natA); 171 result.SetZ(myZ); 171 result.SetZ(myZ); 172 result.SetM(M); 172 result.SetM(M); 173 // check = new std::ifstream(*theName) 173 // check = new std::ifstream(*theName); 174 check = new std::istringstream(std::io 174 check = new std::istringstream(std::ios::in); 175 fManager->GetDataStream2(*theName, *ch 175 fManager->GetDataStream2(*theName, *check); 176 if (!(*check)) { 176 if (!(*check)) { 177 // check->close(); 177 // check->close(); 178 delete check; 178 delete check; 179 check = nullptr; 179 check = nullptr; 180 aFlag = false; 180 aFlag = false; 181 } 181 } 182 else { 182 else { 183 biff = new G4String(); // delete he 183 biff = new G4String(); // delete here as theName 184 *biff = base + "/" + rest + "/" + it 184 *biff = base + "/" + rest + "/" + itoa(myZ) + "_" + "nat" + "_" + theString[myZ - 1]; 185 if (rest == "/CrossSection") 185 if (rest == "/CrossSection") 186 *biff = base + rest + "/" + itoa(m 186 *biff = base + rest + "/" + itoa(myZ) + "_" + "nat" + "_" + theString[myZ - 1]; 187 delete theName; 187 delete theName; 188 theName = biff; 188 theName = biff; 189 result.SetName(*theName); 189 result.SetName(*theName); 190 natA = myZ / G4SandiaTable::GetZtoA( 190 natA = myZ / G4SandiaTable::GetZtoA(myZ); 191 result.SetA(natA); 191 result.SetA(natA); 192 result.SetZ(myZ); 192 result.SetZ(myZ); 193 result.SetM(M); 193 result.SetM(M); 194 result.SetNaturalAbundanceFlag(); 194 result.SetNaturalAbundanceFlag(); 195 } 195 } 196 } 196 } 197 } 197 } 198 else { 198 else { 199 G4double tmpA = myA; 199 G4double tmpA = myA; 200 std::istringstream* file = nullptr; 200 std::istringstream* file = nullptr; 201 G4String fileName; 201 G4String fileName; 202 202 203 if (rest == "/CrossSection") { 203 if (rest == "/CrossSection") { 204 fileName = base + rest + "/" + itoa(my 204 fileName = base + rest + "/" + itoa(myZ) + "_" + itoa(myA) + sM + "_" + theString[myZ - 1]; 205 // if(fManager->GetDEBUG()) G4cout <<" 205 // if(fManager->GetDEBUG()) G4cout <<"HPWD 4a "<<*theName<<G4endl; 206 } 206 } 207 else { 207 else { 208 // For FS 208 // For FS 209 fileName = 209 fileName = 210 base + "/" + rest + "/" + itoa(myZ) 210 base + "/" + rest + "/" + itoa(myZ) + "_" + itoa(myA) + sM + "_" + theString[myZ - 1]; 211 file = new std::istringstream(std::ios 211 file = new std::istringstream(std::ios::in); 212 fManager->GetDataStream2(fileName, *fi 212 fManager->GetDataStream2(fileName, *file); 213 213 214 if (*file) { 214 if (*file) { 215 // isotope FS 215 // isotope FS 216 // if(fManager->GetDEBUG()) G4cout < 216 // if(fManager->GetDEBUG()) G4cout <<"HPWD 4b1 "<<*theName<<G4endl; 217 } 217 } 218 else { 218 else { 219 // _nat_ FS 219 // _nat_ FS 220 fileName = base + "/" + rest + "/" + 220 fileName = base + "/" + rest + "/" + itoa(myZ) + "_" + "nat" + "_" + theString[myZ - 1]; 221 221 222 delete file; 222 delete file; 223 file = new std::istringstream(std::i 223 file = new std::istringstream(std::ios::in); 224 G4ParticleHPManager::GetInstance()-> 224 G4ParticleHPManager::GetInstance()->GetDataStream2(fileName, *file); 225 if (*file) { 225 if (*file) { 226 // FS neither isotope nor _nat_ 226 // FS neither isotope nor _nat_ 227 // if(fManager->GetDEBUG()) G4cout 227 // if(fManager->GetDEBUG()) G4cout <<"HPWD 4b2a "<<*theName<<G4endl; 228 G4double natA = myZ / G4SandiaTabl 228 G4double natA = myZ / G4SandiaTable::GetZtoA(myZ); 229 tmpA = natA; 229 tmpA = natA; 230 } 230 } 231 else { 231 else { 232 // if(fManager->GetDEBUG()) G4cout 232 // if(fManager->GetDEBUG()) G4cout <<"HPWD 4b2c "<<*theName<<G4endl; 233 fileName = "INVALID"; 233 fileName = "INVALID"; 234 } 234 } 235 } 235 } 236 delete file; 236 delete file; 237 } 237 } 238 238 239 result.SetName(fileName); 239 result.SetName(fileName); 240 result.SetA(tmpA); 240 result.SetA(tmpA); 241 result.SetZ(myZ); 241 result.SetZ(myZ); 242 result.SetM(M); 242 result.SetM(M); 243 } 243 } 244 244 245 do { 245 do { 246 if (delta_Z > theMaxOffSet) { 246 if (delta_Z > theMaxOffSet) { 247 if (!fManager->GetSkipMissingIsotopes( 247 if (!fManager->GetSkipMissingIsotopes()) { 248 #ifdef G4VERBOSE 248 #ifdef G4VERBOSE 249 if (fManager->GetVerboseLevel() > 0) 249 if (fManager->GetVerboseLevel() > 0) { 250 G4cout << "G4ParticleHPNames: Ther 250 G4cout << "G4ParticleHPNames: There are no data available for some isotopes in this " 251 "material " 251 "material " 252 << G4endl; 252 << G4endl; 253 G4cout << "G4ParticleHPNames: nor 253 G4cout << "G4ParticleHPNames: nor are there data for nearby isotopes." << G4endl; 254 G4cout << "G4ParticleHPNames: Plea 254 G4cout << "G4ParticleHPNames: Please make sure G4NEUTRONHPDATA points to the directory " 255 << G4endl; 255 << G4endl; 256 G4cout << "G4ParticleHPNames: in w 256 G4cout << "G4ParticleHPNames: in which the neutron scattering data are located." 257 << G4endl; 257 << G4endl; 258 G4cout << "G4ParticleHPNames: The 258 G4cout << "G4ParticleHPNames: The material was A = " << A << ", Z = " << Z << G4endl; 259 } 259 } 260 #endif 260 #endif 261 G4ExceptionDescription ed; 261 G4ExceptionDescription ed; 262 ed << "Data for Z=" << Z << " A=" << A << 262 ed << "Data for Z=" << Z << " A=" << A << " M=" << M << " does not exist in G4NEUTRONHPDATA"; 263 G4Exception("G4ParticleHPName::Init(...)", 263 G4Exception("G4ParticleHPName::Init(...)","hadhp01", 264 JustWarning, ed, ""); 264 JustWarning, ed, ""); 265 } 265 } 266 check = new std::istringstream(std::io 266 check = new std::istringstream(std::ios::in); 267 break; 267 break; 268 } 268 } 269 if (delta_A > 2 * theMaxOffSet) { 269 if (delta_A > 2 * theMaxOffSet) { 270 delta_A = 0; 270 delta_A = 0; 271 flip_A = 1; 271 flip_A = 1; 272 272 273 first = true; 273 first = true; 274 274 275 if (flip_Z > 0) { 275 if (flip_Z > 0) { 276 delta_Z += 1; 276 delta_Z += 1; 277 } 277 } 278 myZ = Z + flip_Z * delta_Z; 278 myZ = Z + flip_Z * delta_Z; 279 flip_Z *= -1; 279 flip_Z *= -1; 280 280 281 myA = A; 281 myA = A; 282 if (myZ > 100) { 282 if (myZ > 100) { 283 myZ = 100; 283 myZ = 100; 284 } 284 } 285 if (myZ < 1) { 285 if (myZ < 1) { 286 myZ = 1; 286 myZ = 1; 287 } 287 } 288 288 289 // myZ += inc; 289 // myZ += inc; 290 } 290 } 291 else { 291 else { 292 if (flip_A > 0) { 292 if (flip_A > 0) { 293 delta_A += 1; 293 delta_A += 1; 294 } 294 } 295 myA = A + flip_A * delta_A; 295 myA = A + flip_A * delta_A; 296 flip_A *= -1; 296 flip_A *= -1; 297 297 298 if (myA < 1) { 298 if (myA < 1) { 299 myA = 1; 299 myA = 1; 300 } 300 } 301 301 302 // myA += inc; 302 // myA += inc; 303 } 303 } 304 304 305 } while (myZ == 0 || myA == 0); // No mea 305 } while (myZ == 0 || myA == 0); // No meaning // Loop checking, 11.05.2015, T. Koi 306 306 307 } while ((check == nullptr) || (!(*check))); 307 } while ((check == nullptr) || (!(*check))); // Loop checking, 11.05.2015, T. Koi 308 308 309 #ifdef G4VERBOSE 309 #ifdef G4VERBOSE 310 if (fManager->GetDEBUG()) 310 if (fManager->GetDEBUG()) 311 { 311 { 312 G4cout << "Names::GetName: last theName pr 312 G4cout << "Names::GetName: last theName proposal = " << G4endl; 313 G4cout << *theName << " " << A << " " << Z 313 G4cout << *theName << " " << A << " " << Z << " " << result.GetName() << G4endl; 314 } 314 } 315 #endif 315 #endif 316 316 317 // administration and anouncement for lackin 317 // administration and anouncement for lacking of exact data in NDL 318 if (Z != result.GetZ() || A != result.GetA() 318 if (Z != result.GetZ() || A != result.GetA()) { 319 if (rest == "/CrossSection") { 319 if (rest == "/CrossSection") { 320 G4String reac = base; 320 G4String reac = base; 321 const G4String& dir = fManager->GetNeutr << 321 G4String dir = fManager->GetNeutronHPPath(); 322 reac.erase(0, dir.length()); 322 reac.erase(0, dir.length()); 323 if (fManager->GetSkipMissingIsotopes() 323 if (fManager->GetSkipMissingIsotopes() 324 && (Z != result.GetZ() || !result.Is 324 && (Z != result.GetZ() || !result.IsThisNaturalAbundance())) 325 { 325 { 326 #ifdef G4VERBOSE 326 #ifdef G4VERBOSE 327 if (fManager->GetVerboseLevel() > 0) { 327 if (fManager->GetVerboseLevel() > 0) { 328 G4cout << "NeutronHP: " << reac << " 328 G4cout << "NeutronHP: " << reac << " file for Z = " << Z << ", A = " << A 329 << " is not found and CrossSe 329 << " is not found and CrossSection set to 0." << G4endl; 330 } 330 } 331 #endif 331 #endif 332 const G4String& new_name = base + "/" << 332 G4String new_name = base + "/" + rest + "/" + "0_0_Zero"; 333 result.SetName(new_name); 333 result.SetName(new_name); 334 } 334 } 335 else { 335 else { 336 // 080901 Add protection that deuteron 336 // 080901 Add protection that deuteron data do not selected for hydrogen and so on by T. Koi 337 // 160216 Increase protencted isotopes 337 // 160216 Increase protencted isotopes for fixing problem on charged particle HP 338 if ((reac.find("Inelastic") != reac.si 338 if ((reac.find("Inelastic") != reac.size() 339 && ((Z == 1 && A == 1) || (Z == 1 339 && ((Z == 1 && A == 1) || (Z == 1 && A == 2) || (Z == 1 && A == 3) 340 || (Z == 2 && A == 3) || (Z = 340 || (Z == 2 && A == 3) || (Z == 2 && A == 4))) 341 || (reac.find("Capture") != reac.s 341 || (reac.find("Capture") != reac.size() && ((Z == 1 && A == 3) || (Z == 2 && A == 4))) 342 || (reac.find("Fission") != reac.s 342 || (reac.find("Fission") != reac.size() 343 && ((Z == 88 && A == 224) || ( 343 && ((Z == 88 && A == 224) || (Z == 88 && A == 225) || (Z == 89 && A == 225) 344 || (Z == 88 && A == 226))) 344 || (Z == 88 && A == 226)))) 345 345 346 { 346 { 347 const G4String& new_name = base + "/ << 347 G4String new_name = base + "/" + rest + "/" + "0_0_Zero"; 348 result.SetName(new_name); 348 result.SetName(new_name); 349 } 349 } 350 else { 350 else { 351 #ifdef G4VERBOSE 351 #ifdef G4VERBOSE 352 if (fManager->GetVerboseLevel() > 0) 352 if (fManager->GetVerboseLevel() > 0) { 353 G4cout << "NeutronHP: " << reac << 353 G4cout << "NeutronHP: " << reac << " file for Z = " << Z << ", A = " << A 354 << " is not found and Neutr 354 << " is not found and NeutronHP will use " << result.GetName() << G4endl; 355 } 355 } 356 #endif 356 #endif 357 } 357 } 358 } 358 } 359 } 359 } 360 } 360 } 361 361 362 delete theName; 362 delete theName; 363 delete check; 363 delete check; 364 364 365 return result; 365 return result; 366 } 366 } 367 367