Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/lowenergy/src/G4eIonisationParameters.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/electromagnetic/lowenergy/src/G4eIonisationParameters.cc (Version 11.3.0) and /processes/electromagnetic/lowenergy/src/G4eIonisationParameters.cc (Version 11.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 //                                                 26 //
 27 //                                                 27 //
 28 // Author: Maria Grazia Pia (Maria.Grazia.Pia@     28 // Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
 29 //                                                 29 //
 30 // History:                                        30 // History:
 31 // -----------                                     31 // -----------
 32 // 31 Jul 2001   MGP        Created, with dumm     32 // 31 Jul 2001   MGP        Created, with dummy implementation
 33 // 12.09.01 V.Ivanchenko    Add param and inte     33 // 12.09.01 V.Ivanchenko    Add param and interpolation of parameters
 34 // 04.10.01 V.Ivanchenko    Add BindingEnergy      34 // 04.10.01 V.Ivanchenko    Add BindingEnergy method
 35 // 25.10.01 MGP             Many bug fixes, mo     35 // 25.10.01 MGP             Many bug fixes, mostly related to the
 36 //                          management of poin     36 //                          management of pointers
 37 // 29.11.01 V.Ivanchenko    New parametrisatio     37 // 29.11.01 V.Ivanchenko    New parametrisation + Excitation
 38 // 30.05.02 V.Ivanchenko    Format and names o     38 // 30.05.02 V.Ivanchenko    Format and names of the data files were
 39 //                          chenged to "ion-..     39 //                          chenged to "ion-..."
 40 // 17.02.04 V.Ivanchenko    Increase buffer si     40 // 17.02.04 V.Ivanchenko    Increase buffer size
 41 // 23.03.09 L.Pandola       Updated warning me     41 // 23.03.09 L.Pandola       Updated warning message
 42 // 03.12.10 V.Ivanchenko    Fixed memory leak      42 // 03.12.10 V.Ivanchenko    Fixed memory leak in LoadData
 43 //                                                 43 //
 44 // -------------------------------------------     44 // -------------------------------------------------------------------
 45                                                    45 
 46 #include "G4eIonisationParameters.hh"              46 #include "G4eIonisationParameters.hh"
 47 #include "G4SystemOfUnits.hh"                      47 #include "G4SystemOfUnits.hh"
 48 #include "G4VEMDataSet.hh"                         48 #include "G4VEMDataSet.hh"
 49 #include "G4ShellEMDataSet.hh"                     49 #include "G4ShellEMDataSet.hh"
 50 #include "G4EMDataSet.hh"                          50 #include "G4EMDataSet.hh"
 51 #include "G4CompositeEMDataSet.hh"                 51 #include "G4CompositeEMDataSet.hh"
 52 #include "G4LinInterpolation.hh"                   52 #include "G4LinInterpolation.hh"
 53 #include "G4LogLogInterpolation.hh"                53 #include "G4LogLogInterpolation.hh"
 54 #include "G4LinLogLogInterpolation.hh"             54 #include "G4LinLogLogInterpolation.hh"
 55 #include "G4SemiLogInterpolation.hh"               55 #include "G4SemiLogInterpolation.hh"
 56 #include "G4Material.hh"                           56 #include "G4Material.hh"
 57 #include "G4DataVector.hh"                         57 #include "G4DataVector.hh"
 58 #include <fstream>                                 58 #include <fstream>
 59 #include <sstream>                                 59 #include <sstream>
 60                                                    60 
 61 //....oooOO0OOooo........oooOO0OOooo........oo     61 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 62                                                    62 
 63 G4eIonisationParameters:: G4eIonisationParamet     63 G4eIonisationParameters:: G4eIonisationParameters()
 64 {                                                  64 {
 65   LoadData();                                      65   LoadData();
 66 }                                                  66 }
 67                                                    67 
 68 //....oooOO0OOooo........oooOO0OOooo........oo     68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 69                                                    69 
 70 G4eIonisationParameters::~G4eIonisationParamet     70 G4eIonisationParameters::~G4eIonisationParameters()
 71 {                                                  71 { 
 72   // Reset the map of data sets: remove the da     72   // Reset the map of data sets: remove the data sets from the map 
 73   for (auto& pos : param)                          73   for (auto& pos : param)
 74     {                                              74     {
 75       G4VEMDataSet* dataSet =  pos.second;         75       G4VEMDataSet* dataSet =  pos.second;
 76       delete dataSet;                              76       delete dataSet;
 77       dataSet = nullptr;                           77       dataSet = nullptr;
 78     }                                              78     }
 79   for (auto& pos : excit)                          79   for (auto& pos : excit)
 80     {                                              80     { 
 81       G4VEMDataSet* dataSet =  pos.second;         81       G4VEMDataSet* dataSet =  pos.second;
 82       delete dataSet;                              82       delete dataSet;
 83       dataSet = nullptr;                           83       dataSet = nullptr;
 84     }                                              84     }
 85   activeZ.clear();                                 85   activeZ.clear();
 86 }                                                  86 }
 87                                                    87 
 88 //....oooOO0OOooo........oooOO0OOooo........oo     88 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 89                                                    89 
 90 G4double G4eIonisationParameters::Parameter(G4     90 G4double G4eIonisationParameters::Parameter(G4int Z, G4int shellIndex, 
 91                                                    91                                                      G4int parameterIndex, 
 92                                                    92                                                      G4double e) const
 93 {                                                  93 {
 94   G4double value = 0.;                             94   G4double value = 0.;
 95   G4int id = Z*100 + parameterIndex;               95   G4int id = Z*100 + parameterIndex;
 96                                                    96 
 97   auto pos = param.find(id);                       97   auto pos = param.find(id);
 98   if (pos!= param.end()) {                         98   if (pos!= param.end()) {
 99     G4VEMDataSet* dataSet = (*pos).second;         99     G4VEMDataSet* dataSet = (*pos).second;
100     G4int nShells = (G4int)dataSet->NumberOfCo    100     G4int nShells = (G4int)dataSet->NumberOfComponents();
101                                                   101 
102     if(shellIndex < nShells) {                    102     if(shellIndex < nShells) { 
103       const G4VEMDataSet* component = dataSet-    103       const G4VEMDataSet* component = dataSet->GetComponent(shellIndex);
104       const G4DataVector ener = component->Get    104       const G4DataVector ener = component->GetEnergies(0);
105       G4double ee = std::max(ener.front(),std:    105       G4double ee = std::max(ener.front(),std::min(ener.back(),e));
106       value = component->FindValue(ee);           106       value = component->FindValue(ee);
107     } else {                                      107     } else {
108       G4cout << "WARNING: G4IonisationParamete    108       G4cout << "WARNING: G4IonisationParameters::FindParameter "
109              << "has no parameters for shell=     109              << "has no parameters for shell= " << shellIndex 
110              << "; Z= " << Z                      110              << "; Z= " << Z
111              << G4endl;                           111              << G4endl;
112     }                                             112     }
113   } else {                                        113   } else {
114     G4cout << "WARNING: G4IonisationParameters    114     G4cout << "WARNING: G4IonisationParameters::Parameter "
115            << "did not find ID = "                115            << "did not find ID = "
116            << shellIndex << G4endl;               116            << shellIndex << G4endl;
117   }                                               117   }
118                                                   118 
119   return value;                                   119   return value;
120 }                                                 120 }
121                                                   121 
122 //....oooOO0OOooo........oooOO0OOooo........oo    122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
123                                                   123 
124 G4double G4eIonisationParameters::Excitation(G    124 G4double G4eIonisationParameters::Excitation(G4int Z, G4double e) const
125 {                                                 125 {
126   G4double value = 0.;                            126   G4double value = 0.;
127   auto pos = excit.find(Z);                       127   auto pos = excit.find(Z);
128   if (pos!= excit.end()) {                        128   if (pos!= excit.end()) {
129     G4VEMDataSet* dataSet = (*pos).second;        129     G4VEMDataSet* dataSet = (*pos).second;
130                                                   130 
131     const G4DataVector ener = dataSet->GetEner    131     const G4DataVector ener = dataSet->GetEnergies(0);
132     G4double ee = std::max(ener.front(),std::m    132     G4double ee = std::max(ener.front(),std::min(ener.back(),e));
133     value = dataSet->FindValue(ee);               133     value = dataSet->FindValue(ee);
134   } else {                                        134   } else {
135     G4cout << "WARNING: G4IonisationParameters    135     G4cout << "WARNING: G4IonisationParameters::Excitation "
136            << "did not find ID = "                136            << "did not find ID = "
137            << Z << G4endl;                        137            << Z << G4endl;
138   }                                               138   }
139                                                   139 
140   return value;                                   140   return value;
141 }                                                 141 }
142                                                   142 
143 //....oooOO0OOooo........oooOO0OOooo........oo    143 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
144                                                   144 
145 void G4eIonisationParameters::LoadData()          145 void G4eIonisationParameters::LoadData()
146 {                                                 146 {
147   // ---------------------------------------      147   // ---------------------------------------
148   // Please document what are the parameters      148   // Please document what are the parameters 
149   // ---------------------------------------      149   // ---------------------------------------
150                                                   150 
151   // define active elements                       151   // define active elements
152                                                   152 
153   const G4MaterialTable* materialTable = G4Mat    153   const G4MaterialTable* materialTable = G4Material::GetMaterialTable();
154   if (materialTable == nullptr)                   154   if (materialTable == nullptr)
155      G4Exception("G4eIonisationParameters::Loa    155      G4Exception("G4eIonisationParameters::LoadData",
156         "em1001",FatalException,"Unable to fin    156         "em1001",FatalException,"Unable to find MaterialTable");
157                                                   157 
158   std::size_t nMaterials = G4Material::GetNumb    158   std::size_t nMaterials = G4Material::GetNumberOfMaterials();
159                                                   159   
160   for (std::size_t mLocal=0; mLocal<nMaterials    160   for (std::size_t mLocal=0; mLocal<nMaterials; ++mLocal) {
161                                                   161 
162     const G4Material* material= (*materialTabl    162     const G4Material* material= (*materialTable)[mLocal];        
163     const G4ElementVector* elementVector = mat    163     const G4ElementVector* elementVector = material->GetElementVector();
164     const std::size_t nElements = material->Ge    164     const std::size_t nElements = material->GetNumberOfElements();
165                                                   165       
166     for (std::size_t iEl=0; iEl<nElements; ++i    166     for (std::size_t iEl=0; iEl<nElements; ++iEl) {
167       G4double Z = (*elementVector)[iEl]->GetZ    167       G4double Z = (*elementVector)[iEl]->GetZ();
168       if (!(activeZ.contains(Z))) {               168       if (!(activeZ.contains(Z))) {
169   activeZ.push_back(Z);                           169   activeZ.push_back(Z);
170       }                                           170       }
171     }                                             171     }
172   }                                               172   }
173                                                   173   
174   const char* path = G4FindDataDir("G4LEDATA")    174   const char* path = G4FindDataDir("G4LEDATA");
175   if (!path)                                      175   if (!path)
176     {                                             176     { 
177       G4Exception("G4BremsstrahlungParameters:    177       G4Exception("G4BremsstrahlungParameters::LoadData",
178         "em0006",FatalException,"G4LEDATA envi    178         "em0006",FatalException,"G4LEDATA environment variable not set");
179       return;                                     179       return;
180     }                                             180     }
181                                                   181     
182   G4String pathString(path);                      182   G4String pathString(path);
183   G4String path2("/ioni/ion-sp-");                183   G4String path2("/ioni/ion-sp-");
184   pathString += path2;                            184   pathString += path2;  
185                                                   185   
186   G4double energy, sum;                           186   G4double energy, sum;
187                                                   187   
188   std::size_t nZ = activeZ.size();                188   std::size_t nZ = activeZ.size();
189                                                   189   
190   for (std::size_t i=0; i<nZ; ++i) {              190   for (std::size_t i=0; i<nZ; ++i) {
191                                                   191     
192     G4int Z = (G4int)activeZ[i];                  192     G4int Z = (G4int)activeZ[i];
193     std::ostringstream ost;                       193     std::ostringstream ost;
194     ost << pathString << Z << ".dat";             194     ost << pathString << Z << ".dat";
195     G4String name(ost.str());                     195     G4String name(ost.str());
196                                                   196 
197     std::ifstream file(name);                     197     std::ifstream file(name);
198     std::filebuf* lsdp = file.rdbuf();            198     std::filebuf* lsdp = file.rdbuf();
199                                                   199 
200     if (! (lsdp->is_open()) ) {                   200     if (! (lsdp->is_open()) ) {
201       G4String excep = G4String("data file: ")    201       G4String excep = G4String("data file: ")
202       + name + G4String(" not found");            202       + name + G4String(" not found");
203       G4Exception("G4eIonisationParameters::Lo    203       G4Exception("G4eIonisationParameters::LoadData",
204         "em0003",FatalException,excep);           204         "em0003",FatalException,excep);
205     }                                             205     }
206                                                   206 
207     // The file is organized into:                207     // The file is organized into:
208     // For each shell there are two lines:        208     // For each shell there are two lines:
209     //    1st line:                               209     //    1st line:
210     // 1st column is the energy of incident e-    210     // 1st column is the energy of incident e-,
211     // 2d  column is the parameter of screan t    211     // 2d  column is the parameter of screan term;
212     //    2d line:                                212     //    2d line:
213     // 3 energy (MeV) subdividing different ap    213     // 3 energy (MeV) subdividing different approximation area of the spectrum
214     // 20 point on the spectrum                   214     // 20 point on the spectrum
215     // The shell terminates with the pattern:     215     // The shell terminates with the pattern: -1   -1
216     // The file terminates with the pattern: -    216     // The file terminates with the pattern: -2   -2
217                                                   217 
218     std::vector<G4VEMDataSet*> p;                 218     std::vector<G4VEMDataSet*> p;
219     for (std::size_t k=0; k<length; ++k)          219     for (std::size_t k=0; k<length; ++k) 
220       {                                           220       {
221   G4VDataSetAlgorithm* inter = new G4LinLogLog    221   G4VDataSetAlgorithm* inter = new G4LinLogLogInterpolation();
222   G4VEMDataSet* composite = new G4CompositeEMD    222   G4VEMDataSet* composite = new G4CompositeEMDataSet(inter,1.,1.);
223   p.push_back(composite);                         223   p.push_back(composite);
224       }                                           224       }
225                                                   225 
226     G4int shell = 0;                              226     G4int shell = 0;
227     std::vector<G4DataVector*> a;                 227     std::vector<G4DataVector*> a;
228     a.resize(length);                             228     a.resize(length);
229     G4DataVector e;                               229     G4DataVector e;
230     G4bool isReady = false;                       230     G4bool isReady = false;
231     do {                                          231     do {
232       file >> energy >> sum;                      232       file >> energy >> sum;
233       //Check if energy is valid                  233       //Check if energy is valid
234       if (energy < -2)                            234       if (energy < -2)
235   {                                               235   {
236     G4String excep("invalid data file");          236     G4String excep("invalid data file");
237           G4Exception("G4eIonisationParameters    237           G4Exception("G4eIonisationParameters::LoadData",
238         "em0005",FatalException,excep);           238         "em0005",FatalException,excep);
239     return;                                       239     return;
240   }                                               240   }
241                                                   241 
242       if (energy == -2) break;                    242       if (energy == -2) break;
243                                                   243 
244       if (energy >  -1) {                         244       if (energy >  -1) {
245   // new energy                                   245   // new energy
246   if(!isReady) {                                  246   if(!isReady) {
247     isReady = true;                               247     isReady = true;
248     e.clear();                                    248     e.clear();
249     for (std::size_t j=0; j<length; ++j) {        249     for (std::size_t j=0; j<length; ++j) { 
250       a[j] = new G4DataVector();                  250       a[j] = new G4DataVector(); 
251     }                                             251     }  
252   }                                               252   }
253         e.push_back(energy);                      253         e.push_back(energy);
254         a[0]->push_back(sum);                     254         a[0]->push_back(sum);
255         for (std::size_t j=1; j<length; ++j) {    255         for (std::size_t j=1; j<length; ++j) {
256     G4double qRead;                               256     G4double qRead;
257     file >> qRead;                                257     file >> qRead;
258     a[j]->push_back(qRead);                       258     a[j]->push_back(qRead);
259   }                                               259   }    
260                                                   260 
261       } else {                                    261       } else {
262                                                   262 
263         // End of set for a shell, fill the ma    263         // End of set for a shell, fill the map
264   for (std::size_t k=0; k<length; ++k) {          264   for (std::size_t k=0; k<length; ++k) {
265                                                   265 
266           G4VDataSetAlgorithm* interp;            266           G4VDataSetAlgorithm* interp;
267           if(0 == k) { interp  = new G4LinLogL    267           if(0 == k) { interp  = new G4LinLogLogInterpolation(); }
268           else       { interp  = new G4LogLogI    268           else       { interp  = new G4LogLogInterpolation(); }
269                                                   269 
270     G4DataVector* eVector = new G4DataVector;     270     G4DataVector* eVector = new G4DataVector;
271     std::size_t eSize = e.size();                 271     std::size_t eSize = e.size();
272     for (std::size_t sLocal=0; sLocal<eSize; +    272     for (std::size_t sLocal=0; sLocal<eSize; ++sLocal) {
273       eVector->push_back(e[sLocal]);              273       eVector->push_back(e[sLocal]);
274     }                                             274     }
275     G4VEMDataSet* set = new G4EMDataSet(shell,    275     G4VEMDataSet* set = new G4EMDataSet(shell,eVector,a[k],interp,1.,1.);
276                                                   276 
277     p[k]->AddComponent(set);                      277     p[k]->AddComponent(set);
278   }                                               278   } 
279                                                   279     
280   // next shell                                   280   // next shell
281         ++shell;                                  281         ++shell;
282         isReady = false;                          282         isReady = false;
283       }                                           283       }
284     } while (energy > -2);                        284     } while (energy > -2);
285                                                   285     
286     file.close();                                 286     file.close();
287                                                   287 
288     for (G4int kk=0; kk<(G4int)length; ++kk)      288     for (G4int kk=0; kk<(G4int)length; ++kk) 
289       {                                           289       {
290         G4int id = Z*100 + kk;                    290         G4int id = Z*100 + kk;
291         param[id] = p[kk];                        291         param[id] = p[kk];
292       }                                           292       }
293   }                                               293   }
294                                                   294 
295   G4String pathString_a(path);                    295   G4String pathString_a(path);
296   G4String name_a = pathString_a + G4String("/    296   G4String name_a = pathString_a + G4String("/ioni/ion-ex-av.dat");  
297   std::ifstream file_a(name_a);                   297   std::ifstream file_a(name_a);
298   std::filebuf* lsdp_a = file_a.rdbuf();          298   std::filebuf* lsdp_a = file_a.rdbuf();
299   G4String pathString_b(path);                    299   G4String pathString_b(path);
300   G4String name_b = pathString_b + G4String("/    300   G4String name_b = pathString_b + G4String("/ioni/ion-ex-sig.dat");  
301   std::ifstream file_b(name_b);                   301   std::ifstream file_b(name_b);
302   std::filebuf* lsdp_b = file_b.rdbuf();          302   std::filebuf* lsdp_b = file_b.rdbuf();
303                                                   303   
304   if (! (lsdp_a->is_open()) ) {                   304   if (! (lsdp_a->is_open()) ) {
305      G4String excep = G4String("cannot open fi    305      G4String excep = G4String("cannot open file ")
306                     + name_a;                     306                     + name_a;
307      G4Exception("G4eIonisationParameters::Loa    307      G4Exception("G4eIonisationParameters::LoadData",
308         "em0003",FatalException,excep);           308         "em0003",FatalException,excep);
309   }                                               309   }  
310   if (! (lsdp_b->is_open()) ) {                   310   if (! (lsdp_b->is_open()) ) {
311      G4String excep = G4String("cannot open fi    311      G4String excep = G4String("cannot open file ")
312                     + name_b;                     312                     + name_b;
313      G4Exception("G4eIonisationParameters::Loa    313      G4Exception("G4eIonisationParameters::LoadData",
314         "em0003",FatalException,excep);           314         "em0003",FatalException,excep);
315   }                                               315   }  
316                                                   316 
317   // The file is organized into two columns:      317   // The file is organized into two columns:
318   // 1st column is the energy                     318   // 1st column is the energy
319   // 2nd column is the corresponding value        319   // 2nd column is the corresponding value
320   // The file terminates with the pattern: -1     320   // The file terminates with the pattern: -1   -1
321   //                                       -2     321   //                                       -2   -2
322                                                   322 
323   G4double ener, ener1, sig, sig1;                323   G4double ener, ener1, sig, sig1;
324   G4int z    = 0;                                 324   G4int z    = 0;
325                                                   325 
326   G4DataVector e;                                 326   G4DataVector e;
327   e.clear();                                      327   e.clear();
328   G4DataVector d;                                 328   G4DataVector d;
329   d.clear();                                      329   d.clear();
330                                                   330 
331   do {                                            331   do {
332     file_a >> ener >> sig;                        332     file_a >> ener >> sig;
333     file_b >> ener1 >> sig1;                      333     file_b >> ener1 >> sig1;
334                                                   334     
335     if(ener != ener1) {                           335     if(ener != ener1) {
336       G4cout << "G4eIonisationParameters: prob    336       G4cout << "G4eIonisationParameters: problem in excitation data "
337              << "ener= " << ener                  337              << "ener= " << ener
338              << " ener1= " << ener1               338              << " ener1= " << ener1
339              << G4endl;                           339              << G4endl;
340     }                                             340     }
341                                                   341 
342     // End of file                                342     // End of file
343     if (ener == -2) {                             343     if (ener == -2) {
344       break;                                      344       break;
345                                                   345 
346       // End of next element                      346       // End of next element
347     } else if (ener == -1) {                      347     } else if (ener == -1) {
348                                                   348 
349       z++;                                        349       z++;
350       G4double Z = (G4double)z;                   350       G4double Z = (G4double)z;
351                                                   351     
352   // fill map if Z is used                        352   // fill map if Z is used
353       if (activeZ.contains(Z)) {                  353       if (activeZ.contains(Z)) {
354                                                   354 
355   G4VDataSetAlgorithm* inter  = new G4LinInter    355   G4VDataSetAlgorithm* inter  = new G4LinInterpolation();
356   G4DataVector* eVector = new G4DataVector;       356   G4DataVector* eVector = new G4DataVector;
357   G4DataVector* dVector = new G4DataVector;       357   G4DataVector* dVector = new G4DataVector;
358   std::size_t eSize = e.size();                   358   std::size_t eSize = e.size();
359   for (std::size_t sLocal2=0; sLocal2<eSize; +    359   for (std::size_t sLocal2=0; sLocal2<eSize; ++sLocal2) {
360            eVector->push_back(e[sLocal2]);        360            eVector->push_back(e[sLocal2]);
361            dVector->push_back(d[sLocal2]);        361            dVector->push_back(d[sLocal2]);
362   }                                               362   }
363   G4VEMDataSet* set = new G4EMDataSet(z,eVecto    363   G4VEMDataSet* set = new G4EMDataSet(z,eVector,dVector,inter,1.,1.);
364       excit[z] = set;                             364       excit[z] = set; 
365       }                                           365       }
366       e.clear();                                  366       e.clear();
367       d.clear();                                  367       d.clear();
368                                                   368   
369     } else {                                      369     } else {
370                                                   370 
371       e.push_back(ener*MeV);                      371       e.push_back(ener*MeV);
372       d.push_back(sig1*sig*barn*MeV);             372       d.push_back(sig1*sig*barn*MeV);
373     }                                             373     }
374   } while (ener != -2);                           374   } while (ener != -2);
375                                                   375   
376   file_a.close();                                 376   file_a.close();
377                                                   377 
378 }                                                 378 }
379                                                   379 
380 //....oooOO0OOooo........oooOO0OOooo........oo    380 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
381                                                   381 
382 void G4eIonisationParameters::PrintData() cons    382 void G4eIonisationParameters::PrintData() const
383 {                                                 383 {
384   G4cout << G4endl;                               384   G4cout << G4endl;
385   G4cout << "===== G4eIonisationParameters ===    385   G4cout << "===== G4eIonisationParameters =====" << G4endl;
386   G4cout << G4endl;                               386   G4cout << G4endl;
387                                                   387 
388   std::size_t nZ = activeZ.size();                388   std::size_t nZ = activeZ.size();
389   std::map<G4int,G4VEMDataSet*,std::less<G4int    389   std::map<G4int,G4VEMDataSet*,std::less<G4int> >::const_iterator pos;
390                                                   390 
391   for (std::size_t i=0; i<nZ; i++) {              391   for (std::size_t i=0; i<nZ; i++) {
392     G4int Z = (G4int)activeZ[i];                  392     G4int Z = (G4int)activeZ[i];      
393                                                   393 
394     for (G4int j=0; j<(G4int)length; ++j) {       394     for (G4int j=0; j<(G4int)length; ++j) {
395                                                   395     
396       G4int index = Z*100 + j;                    396       G4int index = Z*100 + j;
397                                                   397 
398       pos = param.find(index);                    398       pos = param.find(index);
399       if (pos!= param.cend()) {                   399       if (pos!= param.cend()) {
400         G4VEMDataSet* dataSet = (*pos).second;    400         G4VEMDataSet* dataSet = (*pos).second;
401         std::size_t nShells = dataSet->NumberO    401         std::size_t nShells = dataSet->NumberOfComponents();
402                                                   402 
403         for (G4int k=0; k<(G4int)nShells; ++k)    403         for (G4int k=0; k<(G4int)nShells; ++k) {
404                                                   404 
405           G4cout << "===== Z= " << Z << " shel    405           G4cout << "===== Z= " << Z << " shell= " << k 
406                  << " parameter[" << j << "]      406                  << " parameter[" << j << "]  =====" 
407                  << G4endl;                       407                  << G4endl;
408           const G4VEMDataSet* comp = dataSet->    408           const G4VEMDataSet* comp = dataSet->GetComponent(k);
409           comp->PrintData();                      409           comp->PrintData();
410   }                                               410   }
411       }                                           411       }
412     }                                             412     }
413   }                                               413   }
414   G4cout << "=================================    414   G4cout << "====================================" << G4endl;
415 }                                                 415 }
416                                                   416 
417                                                   417 
418                                                   418