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.6)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // neutron_hp -- source file                       26 // neutron_hp -- source file
 27 // J.P. Wellisch, Nov-1996                         27 // J.P. Wellisch, Nov-1996
 28 // A prototype of the low energy neutron trans     28 // A prototype of the low energy neutron transport model.
 29 //                                                 29 //
 30 // 24-Jan-07 Enable to use exact data only and     30 // 24-Jan-07 Enable to use exact data only and add warnig when substitute file is used T. Koi
 31 // 30-Jan-07 Modified method of searching subs     31 // 30-Jan-07 Modified method of searching substitute isotope data by T. Koi
 32 // 07-06-12 fix memory leaking by T. Koi           32 // 07-06-12 fix memory leaking by T. Koi
 33 // 07-06-25 Change data selection logic when G     33 // 07-06-25 Change data selection logic when G4NEUTRONHP_SKIP_MISSING_ISOTOPES is turn on
 34 //          Natural Abundance data are allowed     34 //          Natural Abundance data are allowed. by T. Koi
 35 // 07-07-06 Allow _nat_ final state even for i     35 // 07-07-06 Allow _nat_ final state even for isotoped cross sections by T. Koi
 36 // 08-09-01 Add protection that deuteron data      36 // 08-09-01 Add protection that deuteron data do not selected for hydrogen and so on by T. Koi
 37 //                                                 37 //
 38 // P. Arce, June-2014 Conversion neutron_hp to     38 // P. Arce, June-2014 Conversion neutron_hp to particle_hp
 39 // June-2019 - E. Mendoza --> Modification to  <<  39 // June-2019 - E. Mendoza --> Modification to allow using an incomplete data library if the G4NEUTRONHP_SKIP_MISSING_ISOTOPES environmental flag is defined. The missing XS are set to 0.
 40 // G4NEUTRONHP_SKIP_MISSING_ISOTOPES environme << 
 41 // Oct-2019 - E. Mendoza --> remove restrictio     40 // Oct-2019 - E. Mendoza --> remove restriction of using isotopes with Z>92
 42 //                                             << 
 43 // V. Ivanchenko, July-2023 Basic revision of  << 
 44                                                    41 
 45 #include "G4ParticleHPNames.hh"                    42 #include "G4ParticleHPNames.hh"
 46                                                << 
 47 #include "G4HadronicException.hh"              << 
 48 #include "G4HadronicParameters.hh"             << 
 49 #include "G4ParticleHPManager.hh"                  43 #include "G4ParticleHPManager.hh"
 50 #include "G4SandiaTable.hh"                        44 #include "G4SandiaTable.hh"
 51 #include "G4ios.hh"                            <<  45 #include "G4HadronicException.hh"
 52                                                << 
 53 #include <fstream>                                 46 #include <fstream>
 54                                                    47 
 55 const G4String G4ParticleHPNames::theString[10 <<  48   const G4String G4ParticleHPNames::theString[100] = {"Hydrogen", "Helium",
 56   "Hydrogen",     "Helium",      "Lithium",    <<  49  "Lithium", "Berylium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluorine",
 57   "Nitrogen",     "Oxygen",      "Fluorine",   <<  50  "Neon", "Sodium", "Magnesium", "Aluminum", "Silicon", "Phosphorous", 
 58   "Aluminum",     "Silicon",     "Phosphorous" <<  51  "Sulfur", "Chlorine", "Argon", "Potassium", "Calcium", "Scandium",
 59   "Potassium",    "Calcium",     "Scandium",   <<  52  "Titanium", "Vanadium", "Chromium", "Manganese", "Iron", "Cobalt", "Nickel",
 60   "Manganese",    "Iron",        "Cobalt",     <<  53  "Copper", "Zinc", "Gallium", "Germanium", "Arsenic", "Selenium", "Bromine",
 61   "Gallium",      "Germanium",   "Arsenic",    <<  54  "Krypton", "Rubidium", "Strontium", "Yttrium", "Zirconium", "Niobium",
 62   "Rubidium",     "Strontium",   "Yttrium",    <<  55  "Molybdenum", "Technetium", "Ruthenium", "Rhodium", "Palladium", "Silver",
 63   "Technetium",   "Ruthenium",   "Rhodium",    <<  56  "Cadmium", "Indium", "Tin", "Antimony", "Tellurium", "Iodine", "Xenon",
 64   "Indium",       "Tin",         "Antimony",   <<  57  "Cesium", "Barium", "Lanthanum", "Cerium", "Praseodymium", "Neodymium",
 65   "Cesium",       "Barium",      "Lanthanum",  <<  58  "Promethium", "Samarium", "Europium", "Gadolinium", "Terbium", "Dysprosium",
 66   "Promethium",   "Samarium",    "Europium",   <<  59  "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutetium", "Hafnium",
 67   "Holmium",      "Erbium",      "Thulium",    <<  60  "Tantalum", "Tungsten", "Rhenium", "Osmium", "Iridium", "Platinium", "Gold",
 68   "Tantalum",     "Tungsten",    "Rhenium",    <<  61  "Mercury", "Thallium", "Lead", "Bismuth", "Polonium", "Astatine", "Radon", 
 69   "Gold",         "Mercury",     "Thallium",   <<  62  "Francium", "Radium", "Actinium", "Thorium", "Protactinium", "Uranium", 
 70   "Astatine",     "Radon",       "Francium",   <<  63  "Neptunium", "Plutonium", "Americium", "Curium", "Berkelium", "Californium",
 71   "Protactinium", "Uranium",     "Neptunium",  <<  64  "Einsteinium","Fermium"};
 72   "Berkelium",    "Californium", "Einsteinium" << 
 73                                                    65 
 74 G4ParticleHPNames::G4ParticleHPNames(G4int max << 
 75 {                                              << 
 76   fManager = G4ParticleHPManager::GetInstance( << 
 77 }                                              << 
 78                                                    66 
 79 G4String G4ParticleHPNames::GetName(G4int i) c <<  67   G4String G4ParticleHPNames::GetName(G4int i) { return theString[i]; }
 80 {                                              << 
 81   return (i > 0 && i < 100) ? theString[i] : G << 
 82 }                                              << 
 83                                                    68 
 84 G4String G4ParticleHPNames::itoa(G4int current <<  69 //G4ParticleHPDataUsed G4ParticleHPNames::GetName(G4int A, G4int Z, G4String base, G4String rest, G4bool & aFlag)
                                                   >>  70 G4ParticleHPDataUsed G4ParticleHPNames::GetName(G4int A, G4int Z, G4int M, G4String base, G4String rest, G4bool & aFlag)
 85 {                                                  71 {
 86   const char theDigits[11] = "0123456789";     <<  72   G4int verboseLevel = G4ParticleHPManager::GetInstance()->GetVerboseLevel();
 87   G4String result;                             << 
 88   G4int digit;                                 << 
 89   do {                                         << 
 90     digit = current - 10 * (current / 10);     << 
 91     result = theDigits[digit] + result;        << 
 92     current /= 10;                             << 
 93   } while (current != 0);  // Loop checking, 1 << 
 94   return result;                               << 
 95 }                                              << 
 96                                                    73 
 97 G4ParticleHPDataUsed G4ParticleHPNames::GetNam <<  74    //G4cout << Z << " " << A << " " << M << " " << base << " " << rest << G4endl;
 98                                                << 
 99 {                                              << 
100   // G4cout << Z << " " << A << " " << M << "  << 
101                                                    75 
102   // Excited isomer indicator                  <<  76   //Excited isomer indicator
103   std::stringstream ss;                            77   std::stringstream ss;
104   G4String sM;                                     78   G4String sM;
105   if (M > 0) {                                     79   if (M > 0) {
106     ss << "m";                                     80     ss << "m";
107     ss << M;                                       81     ss << M;
108     ss >> sM;                                      82     ss >> sM;
109     ss.clear();                                    83     ss.clear();
110   }                                                84   }
111                                                    85 
112   G4ParticleHPDataUsed result;                     86   G4ParticleHPDataUsed result;
113   aFlag = true;                                    87   aFlag = true;
114                                                <<  88   if (std::getenv("NeutronHPNames") ) G4cout << "Names::GetName entered for Z = " << Z << ", A = " << A <<G4endl;
115 #ifdef G4VERBOSE                               << 
116   if (fManager->GetDEBUG())                    << 
117     G4cout << "Names::GetName entered for Z =  << 
118 #endif                                         << 
119                                                    89 
120   G4int myA = A;                                   90   G4int myA = A;
121   G4int myZ = Z;                                   91   G4int myZ = Z;
122                                                    92 
123   G4String* theName = nullptr;                 <<  93   G4String * theName = 0;
124   G4String theFileName("");                        94   G4String theFileName("");
125                                                    95 
126   // G4int inc = 1;                            <<  96 //    G4int inc = 1;
127                                                    97 
128   G4int flip_Z = 1;                                98   G4int flip_Z = 1;
129   G4int delta_Z = 0;                               99   G4int delta_Z = 0;
130                                                   100 
131   G4int flip_A = 1;                               101   G4int flip_A = 1;
132   G4int delta_A = 0;                              102   G4int delta_A = 0;
133                                                << 103     
134   std::istringstream* check = nullptr;         << 104     //std::ifstream * check = new std::ifstream(".dummy");
                                                   >> 105   std::istringstream* check = NULL;
135   G4bool first = true;                            106   G4bool first = true;
                                                   >> 107   if (std::getenv("NeutronHPNames"))  G4cout << "entered GetName!!!"<<G4endl;
136                                                   108 
137 #ifdef G4VERBOSE                               << 109   do   
138   if (fManager->GetDEBUG())                    << 110     {
139     G4cout << "entered GetName!!!" << G4endl;  << 111        aFlag = true;
140 #endif                                         << 112        G4String * biff = new G4String(); // delete here as theName
141                                                << 113        *biff = base+"/CrossSection/"+itoa(myZ)+"_"+itoa(myA)+sM+"_"+theString[myZ-1];
142   do {                                         << 114       
143     aFlag = true;                              << 115        if(theName!=0) delete theName;
144     auto biff = new G4String();  // delete her << 116        theName = biff;
145     *biff = base + "/CrossSection/" + itoa(myZ << 117        result.SetName(*theName);
146                                                << 118        result.SetA(myA);
147     delete theName;                            << 119        result.SetZ(myZ);
148     theName = biff;                            << 120        result.SetM(M);
149     result.SetName(*theName);                  << 121 if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 1 "<<*theName<<G4endl;
150     result.SetA(myA);                          << 122 
151     result.SetZ(myZ);                          << 123      // T.K. debug for memory leak
152     result.SetM(M);                            << 124      if ( check != NULL ) {
153     delete check;                              << 125         //check->close();
154                                                << 126         delete check;
155     check = new std::istringstream(std::ios::i << 127      } 
156     fManager->GetDataStream2(*theName, *check) << 128 
157     if (!(*check)) {                           << 129        //check = new std::ifstream(*theName);
158       delete check;                            << 130        check = new std::istringstream(std::ios::in);
159       check = nullptr;                         << 131        G4ParticleHPManager::GetInstance()->GetDataStream2(*theName,*check);
160       aFlag = false;                           << 132        if ( !(*check) ) 
161       if (first) {                             << 133        {
162         aFlag = true;                          << 134     //check->close();
163         first = false;                         << 135     delete check;
164         biff = new G4String();  // delete here << 136           check = 0;
165         *biff = base + "/CrossSection/" + itoa << 
166         delete theName;                        << 
167         theName = biff;                        << 
168         result.SetName(*theName);              << 
169         G4double natA = myZ / G4SandiaTable::G << 
170         result.SetA(natA);                     << 
171         result.SetZ(myZ);                      << 
172         result.SetM(M);                        << 
173         // check = new std::ifstream(*theName) << 
174         check = new std::istringstream(std::io << 
175         fManager->GetDataStream2(*theName, *ch << 
176         if (!(*check)) {                       << 
177           // check->close();                   << 
178           delete check;                        << 
179           check = nullptr;                     << 
180           aFlag = false;                          137           aFlag = false;
181         }                                      << 138           if ( first )
182         else {                                 << 139           {
183           biff = new G4String();  // delete he << 140              aFlag = true;
184           *biff = base + "/" + rest + "/" + it << 141              first = false;
185           if (rest == "/CrossSection")         << 142              biff = new G4String(); // delete here as theName
186             *biff = base + rest + "/" + itoa(m << 143              *biff = base+"/CrossSection/"+itoa(myZ)+"_"+"nat"+"_"+theString[myZ-1];
187           delete theName;                      << 144              delete theName;
                                                   >> 145              theName = biff;
                                                   >> 146 if(std::getenv("NeutronHPNames"))    G4cout <<"HPWD 2 "<<*theName<<G4endl;
                                                   >> 147              result.SetName(*theName);
                                                   >> 148              G4double natA = myZ/G4SandiaTable::GetZtoA(myZ);
                                                   >> 149              result.SetA(natA);
                                                   >> 150              result.SetZ(myZ);
                                                   >> 151              result.SetM(M);
                                                   >> 152              //check = new std::ifstream(*theName);
                                                   >> 153              check = new std::istringstream(std::ios::in);
                                                   >> 154              G4ParticleHPManager::GetInstance()->GetDataStream2(*theName,*check);
                                                   >> 155              if ( !(*check) ) 
                                                   >> 156              {
                                                   >> 157                 //check->close();
                                                   >> 158           delete check;
                                                   >> 159                 check = 0;
                                                   >> 160                 aFlag = false;
                                                   >> 161              }
                                                   >> 162              else
                                                   >> 163              {
                                                   >> 164                 biff = new G4String(); // delete here as theName
                                                   >> 165                 *biff = base+"/"+rest+"/"+itoa(myZ)+"_"+"nat"+"_"+theString[myZ-1];  
                                                   >> 166                 if ( rest=="/CrossSection" ) *biff = base+rest+"/"+itoa(myZ)+"_"+"nat"+"_"+theString[myZ-1];  
                                                   >> 167                 delete theName;
                                                   >> 168                 theName = biff;
                                                   >> 169 if(std::getenv("NeutronHPNames"))    G4cout <<"HPWD 3 "<<*theName<<G4endl;
                                                   >> 170                 result.SetName(*theName);
                                                   >> 171                 natA = myZ/G4SandiaTable::GetZtoA(myZ);
                                                   >> 172                 result.SetA(natA);
                                                   >> 173                 result.SetZ(myZ);
                                                   >> 174                 result.SetM(M);
                                                   >> 175                 result.SetNaturalAbundanceFlag();
                                                   >> 176              }
                                                   >> 177           }
                                                   >> 178        }
                                                   >> 179        else
                                                   >> 180        {
                                                   >> 181 // 070706 T. Koi Modified 
                                                   >> 182 /*
                                                   >> 183           biff = new G4String(); // delete here as theName
                                                   >> 184           *biff = base+"/"+rest+itoa(myZ)+"_"+itoa(myA)+"_"+theString[myZ-1];  
                                                   >> 185           if(theName!=0) delete theName;
188           theName = biff;                         186           theName = biff;
                                                   >> 187 if(std::getenv("NeutronHPNames"))    G4cout <<"HPWD 4 "<<*theName<<G4endl;
189           result.SetName(*theName);               188           result.SetName(*theName);
190           natA = myZ / G4SandiaTable::GetZtoA( << 189           result.SetA(myA);
191           result.SetA(natA);                   << 
192           result.SetZ(myZ);                       190           result.SetZ(myZ);
193           result.SetM(M);                      << 191 */
194           result.SetNaturalAbundanceFlag();    << 192 
195         }                                      << 193           G4double tmpA = myA;
196       }                                        << 194           //std::ifstream* file = NULL;
                                                   >> 195           std::istringstream* file = NULL;
                                                   >> 196           G4String fileName;
                                                   >> 197 
                                                   >> 198           if ( rest == "/CrossSection" )
                                                   >> 199           {
                                                   >> 200 
                                                   >> 201              //fileName = base+"/"+rest+"/"+itoa(myZ)+"_"+itoa(myA)+sM+"_"+theString[myZ-1];
                                                   >> 202              fileName = base+rest+"/"+itoa(myZ)+"_"+itoa(myA)+sM+"_"+theString[myZ-1];
                                                   >> 203 if(std::getenv("NeutronHPNames"))    G4cout <<"HPWD 4a "<<*theName<<G4endl;
                                                   >> 204 
                                                   >> 205          } else {
                                                   >> 206 
                                                   >> 207 // For FS
                                                   >> 208            fileName = base+"/"+rest+"/"+itoa(myZ)+"_"+itoa(myA)+sM+"_"+theString[myZ-1];
                                                   >> 209            file = new std::istringstream(std::ios::in);
                                                   >> 210            G4ParticleHPManager::GetInstance()->GetDataStream2(fileName,*file);
                                                   >> 211 
                                                   >> 212            if (*file) {
                                                   >> 213 
                                                   >> 214 // isotope FS
                                                   >> 215 if(std::getenv("NeutronHPNames"))    G4cout <<"HPWD 4b1 "<<*theName<<G4endl;
                                                   >> 216            } else {
                                                   >> 217 
                                                   >> 218 // _nat_ FS
                                                   >> 219              fileName = base+"/"+rest+"/"+itoa(myZ)+"_"+"nat"+"_"+theString[myZ-1];
                                                   >> 220 
                                                   >> 221              delete file;
                                                   >> 222              //file = new std::ifstream(fileName);
                                                   >> 223              file = new std::istringstream(std::ios::in);
                                                   >> 224              G4ParticleHPManager::GetInstance()->GetDataStream2(fileName,*file);
                                                   >> 225              if (*file) {
                                                   >> 226 
                                                   >> 227 // FS neither isotope nor _nat_
                                                   >> 228 if(std::getenv("NeutronHPNames"))    G4cout <<"HPWD 4b2a "<<*theName<<G4endl;
                                                   >> 229                    G4double natA = myZ/G4SandiaTable::GetZtoA(myZ);
                                                   >> 230                    tmpA = natA;
                                                   >> 231              } else {
                                                   >> 232 if(std::getenv("NeutronHPNames"))    G4cout <<"HPWD 4b2c "<<*theName<<G4endl;
                                                   >> 233                    fileName="INVALID";
                                                   >> 234              }
                                                   >> 235            }
                                                   >> 236 
                                                   >> 237            delete file;
                                                   >> 238          }
                                                   >> 239 
                                                   >> 240          result.SetName(fileName);
                                                   >> 241          result.SetA(tmpA);
                                                   >> 242          result.SetZ(myZ);
                                                   >> 243          result.SetM(M);
                                                   >> 244        }
                                                   >> 245 
                                                   >> 246        do 
                                                   >> 247        {
                                                   >> 248          if (delta_Z > theMaxOffSet) {
                                                   >> 249            if (!G4ParticleHPManager::GetInstance()->GetSkipMissingIsotopes() ) {
                                                   >> 250              G4cout << "G4ParticleHPNames: There are no data available for some isotopes in this material " << G4endl;
                                                   >> 251              G4cout << "G4ParticleHPNames: nor are there data for nearby isotopes." << G4endl;
                                                   >> 252              G4cout << "G4ParticleHPNames: Please make sure G4NEUTRONHPDATA points to the directory " << G4endl;
                                                   >> 253              G4cout << "G4ParticleHPNames: in which the neutron scattering data are located." << G4endl;
                                                   >> 254              G4cout << "G4ParticleHPNames: The material was A = " << A << ", Z = " << Z << G4endl;
                                                   >> 255               throw G4HadronicException(__FILE__, __LINE__, "In case the data sets are at present not available in the neutron data library, please contact Hadron Group Coordinator");
                                                   >> 256            } else {
                                                   >> 257              check = new std::istringstream(std::ios::in);
                                                   >> 258              break;
                                                   >> 259            }
                                                   >> 260          }
                                                   >> 261 
                                                   >> 262           //if ( std::abs( myA - A ) > theMaxOffSet )
                                                   >> 263          if (delta_A > 2*theMaxOffSet) {
                                                   >> 264              delta_A = 0;
                                                   >> 265              flip_A = 1;
                                                   >> 266 
                                                   >> 267              first = true;
                                                   >> 268 
                                                   >> 269              if ( flip_Z > 0 ) 
                                                   >> 270              {
                                                   >> 271                 delta_Z +=1; 
                                                   >> 272              }
                                                   >> 273              myZ = Z + flip_Z * delta_Z;
                                                   >> 274              flip_Z *= -1;
                                                   >> 275              
                                                   >> 276              myA = A;
                                                   >> 277              if ( myZ > 100 ) 
                                                   >> 278              {
                                                   >> 279                 myZ = 100;
                                                   >> 280              }
                                                   >> 281              if ( myZ < 1 ) 
                                                   >> 282              {
                                                   >> 283                 myZ = 1;
                                                   >> 284              }
                                                   >> 285               
                                                   >> 286 //             myZ += inc;
                                                   >> 287          } else {
                                                   >> 288              if ( flip_A > 0 )
                                                   >> 289              {
                                                   >> 290                 delta_A += 1;
                                                   >> 291              }
                                                   >> 292              myA = A + flip_A * delta_A; 
                                                   >> 293              flip_A *= -1;
                                                   >> 294 
                                                   >> 295              if ( myA < 1 ) 
                                                   >> 296              {
                                                   >> 297                 myA = 1;
                                                   >> 298              }
                                                   >> 299               
                                                   >> 300 //             myA += inc;
                                                   >> 301          }
                                                   >> 302 
                                                   >> 303        }
                                                   >> 304        while( myZ == 0 || myA == 0 );  // No meaning // Loop checking, 11.05.2015, T. Koi
                                                   >> 305 
197     }                                             306     }
198     else {                                     << 307     while((!check) || (!(*check))); // Loop checking, 11.05.2015, T. Koi
199       G4double tmpA = myA;                     << 308 
200       std::istringstream* file = nullptr;      << 309     if(std::getenv("NeutronHPNamesLogging") || std::getenv("NeutronHPNames")) 
201       G4String fileName;                       << 310     {
202                                                << 311       G4cout << "Names::GetName: last theName proposal = "<< G4endl;
203       if (rest == "/CrossSection") {           << 312       G4cout << *theName <<" "<<A<<" "<<Z<<" "<<result.GetName()<<G4endl;
204         fileName = base + rest + "/" + itoa(my << 
205         // if(fManager->GetDEBUG()) G4cout <<" << 
206       }                                        << 
207       else {                                   << 
208         // For FS                              << 
209         fileName =                             << 
210           base + "/" + rest + "/" + itoa(myZ)  << 
211         file = new std::istringstream(std::ios << 
212         fManager->GetDataStream2(fileName, *fi << 
213                                                << 
214         if (*file) {                           << 
215           // isotope FS                        << 
216           // if(fManager->GetDEBUG()) G4cout < << 
217         }                                      << 
218         else {                                 << 
219           // _nat_ FS                          << 
220           fileName = base + "/" + rest + "/" + << 
221                                                << 
222           delete file;                         << 
223           file = new std::istringstream(std::i << 
224           G4ParticleHPManager::GetInstance()-> << 
225           if (*file) {                         << 
226             // FS neither isotope nor _nat_    << 
227             // if(fManager->GetDEBUG()) G4cout << 
228             G4double natA = myZ / G4SandiaTabl << 
229             tmpA = natA;                       << 
230           }                                    << 
231           else {                               << 
232             // if(fManager->GetDEBUG()) G4cout << 
233             fileName = "INVALID";              << 
234           }                                    << 
235         }                                      << 
236         delete file;                           << 
237       }                                        << 
238                                                << 
239       result.SetName(fileName);                << 
240       result.SetA(tmpA);                       << 
241       result.SetZ(myZ);                        << 
242       result.SetM(M);                          << 
243     }                                             313     }
244                                                   314 
245     do {                                       << 315 // administration and anouncement for lacking of exact data in NDL 
246       if (delta_Z > theMaxOffSet) {            << 316     if ( Z != result.GetZ() || A != result.GetA() )
247         if (!fManager->GetSkipMissingIsotopes( << 317     {
248 #ifdef G4VERBOSE                               << 318        if ( rest == "/CrossSection" )
249           if (fManager->GetVerboseLevel() > 0) << 319        {
250             G4cout << "G4ParticleHPNames: Ther << 320           G4String reac = base;
251                       "material "              << 321           G4String dir = std::getenv("G4NEUTRONHPDATA"); 
252                    << G4endl;                  << 322           reac.erase ( 0 , dir.length() );
253             G4cout << "G4ParticleHPNames: nor  << 323           if ( G4ParticleHPManager::GetInstance()->GetSkipMissingIsotopes() && !( Z == result.GetZ() && result.IsThisNaturalAbundance() ) )
254             G4cout << "G4ParticleHPNames: Plea << 324           {
255                    << G4endl;                  << 325              if ( verboseLevel > 0 ) {
256             G4cout << "G4ParticleHPNames: in w << 326                 G4cout << "NeutronHP: " << reac << " file for Z = " << Z << ", A = " << A << " is not found and CrossSection set to 0." << G4endl;
257                    << G4endl;                  << 327              }
258             G4cout << "G4ParticleHPNames: The  << 328              G4String new_name = base+"/"+rest+"/"+"0_0_Zero";  
                                                   >> 329              result.SetName( new_name );
259           }                                       330           }
260 #endif                                         << 331           else
261     G4ExceptionDescription ed;                 << 332           { 
262     ed << "Data for Z=" << Z << " A=" << A <<  << 333              //080901 Add protection that deuteron data do not selected for hydrogen and so on by T. Koi
263     G4Exception("G4ParticleHPName::Init(...)", << 334              //160216 Increase protencted isotopes for fixing problem on charged particle HP
264           JustWarning, ed, "");                << 335              if ( ( reac.find("Inelastic") != reac.size() && ( (Z == 1 && A == 1) || (Z == 1 && A == 2) || (Z == 1 && A == 3) || (Z == 2 && A == 3) || (Z == 2 && A == 4) ) ) 
265         }                                      << 336                || ( reac.find("Capture")   != reac.size() && ( (Z == 1 && A == 3) || (Z == 2 && A == 4) ) )  
266         check = new std::istringstream(std::io << 337                || ( reac.find("Fission")   != reac.size() && ( (Z == 88 && A == 224) || (Z == 88 && A == 225) || (Z == 89 && A == 225) || (Z == 88 && A == 226) ) ) ) 
267         break;                                 << 338                    
268       }                                        << 339              {
269       if (delta_A > 2 * theMaxOffSet) {        << 340                 G4String new_name = base+"/"+rest+"/"+"0_0_Zero";
270         delta_A = 0;                           << 341                 result.SetName( new_name );
271         flip_A = 1;                            << 342              }
272                                                << 343              else
273         first = true;                          << 344              {
274                                                << 345                 if ( verboseLevel > 0 ) {
275         if (flip_Z > 0) {                      << 346                    G4cout << "NeutronHP: " << reac << " file for Z = " << Z << ", A = " << A << " is not found and NeutronHP will use " << result.GetName() << G4endl;
276           delta_Z += 1;                        << 347                 }
277         }                                      << 348              }
278         myZ = Z + flip_Z * delta_Z;            << 
279         flip_Z *= -1;                          << 
280                                                << 
281         myA = A;                               << 
282         if (myZ > 100) {                       << 
283           myZ = 100;                           << 
284         }                                      << 
285         if (myZ < 1) {                         << 
286           myZ = 1;                             << 
287         }                                      << 
288                                                << 
289         // myZ += inc;                         << 
290       }                                        << 
291       else {                                   << 
292         if (flip_A > 0) {                      << 
293           delta_A += 1;                        << 
294         }                                      << 
295         myA = A + flip_A * delta_A;            << 
296         flip_A *= -1;                          << 
297                                                << 
298         if (myA < 1) {                         << 
299           myA = 1;                             << 
300         }                                      << 
301                                                << 
302         // myA += inc;                         << 
303       }                                        << 
304                                                << 
305     } while (myZ == 0 || myA == 0);  // No mea << 
306                                                << 
307   } while ((check == nullptr) || (!(*check))); << 
308                                                << 
309 #ifdef G4VERBOSE                               << 
310   if (fManager->GetDEBUG())                    << 
311   {                                            << 
312     G4cout << "Names::GetName: last theName pr << 
313     G4cout << *theName << " " << A << " " << Z << 
314   }                                            << 
315 #endif                                         << 
316                                                << 
317   // administration and anouncement for lackin << 
318   if (Z != result.GetZ() || A != result.GetA() << 
319     if (rest == "/CrossSection") {             << 
320       G4String reac = base;                    << 
321       const G4String& dir = fManager->GetNeutr << 
322       reac.erase(0, dir.length());             << 
323       if (fManager->GetSkipMissingIsotopes()   << 
324           && (Z != result.GetZ() || !result.Is << 
325       {                                        << 
326 #ifdef G4VERBOSE                               << 
327         if (fManager->GetVerboseLevel() > 0) { << 
328           G4cout << "NeutronHP: " << reac << " << 
329                  << " is not found and CrossSe << 
330         }                                      << 
331 #endif                                         << 
332         const G4String& new_name = base + "/"  << 
333         result.SetName(new_name);              << 
334       }                                        << 
335       else {                                   << 
336         // 080901 Add protection that deuteron << 
337         // 160216 Increase protencted isotopes << 
338         if ((reac.find("Inelastic") != reac.si << 
339              && ((Z == 1 && A == 1) || (Z == 1 << 
340                  || (Z == 2 && A == 3) || (Z = << 
341             || (reac.find("Capture") != reac.s << 
342             || (reac.find("Fission") != reac.s << 
343                 && ((Z == 88 && A == 224) || ( << 
344                     || (Z == 88 && A == 226))) << 
345                                                << 
346         {                                      << 
347           const G4String& new_name = base + "/ << 
348           result.SetName(new_name);            << 
349         }                                      << 
350         else {                                 << 
351 #ifdef G4VERBOSE                               << 
352           if (fManager->GetVerboseLevel() > 0) << 
353             G4cout << "NeutronHP: " << reac << << 
354                    << " is not found and Neutr << 
355           }                                       349           }
356 #endif                                         << 350        }
357         }                                      << 
358       }                                        << 
359     }                                             351     }
360   }                                            << 
361                                                << 
362   delete theName;                              << 
363   delete check;                                << 
364                                                   352 
365   return result;                               << 353     delete theName;
366 }                                              << 354     if(aFlag)
                                                   >> 355     {
                                                   >> 356       //check->close();
                                                   >> 357       delete check;
                                                   >> 358       check = NULL;
                                                   >> 359     }
                                                   >> 360     return result;
                                                   >> 361   }
367                                                   362