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 10.7)


  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