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