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