Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/particle_hp/src/G4ParticleHPNames.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/hadronic/models/particle_hp/src/G4ParticleHPNames.cc (Version 11.3.0) and /processes/hadronic/models/particle_hp/src/G4ParticleHPNames.cc (Version 11.2.2)


  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