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