Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/lowenergy/src/G4ShellEMDataSet.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/G4ShellEMDataSet.cc (Version 11.3.0) and /processes/electromagnetic/lowenergy/src/G4ShellEMDataSet.cc (Version 1.1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 //                                                
 27 //                                                
 28 // Author: Maria Grazia Pia (Maria.Grazia.Pia@    
 29 //                                                
 30 // History:                                       
 31 // -----------                                    
 32 //  1 Aug 2001   MGP         Created              
 33 //                                                
 34 //  09.10.01   V.Ivanchenko  Add case z=0         
 35 //                                                
 36 //  9 Mar 2008   MGP         Cleaned up unread    
 37 //                           (Further clean-up    
 38 //                                                
 39 //  15 Jul 2009   Nicolas A. Karakatsanis         
 40 //                                                
 41 //                           - LoadNonLogData     
 42 //                             dataset. It is     
 43 //                                                
 44 //                           - LoadData method    
 45 //                             It retrieves th    
 46 //                             respective log     
 47 //                                                
 48 //                           - SetLogEnergiesD    
 49 //                             The EM data set    
 50 //                             These initializ    
 51 //                             operations         
 52 //                                                
 53 //                                                
 54 // -------------------------------------------    
 55                                                   
 56 #include "G4ShellEMDataSet.hh"                    
 57 #include "G4EMDataSet.hh"                         
 58 #include "G4VDataSetAlgorithm.hh"                 
 59 #include <fstream>                                
 60 #include <sstream>                                
 61                                                   
 62 //....oooOO0OOooo........oooOO0OOooo........oo    
 63 G4ShellEMDataSet::G4ShellEMDataSet(G4int zeta,    
 64            G4double eUnit,                        
 65            G4double dataUnit)                     
 66   :                                               
 67   algorithm(algo),                                
 68   unitEnergies(eUnit),                            
 69   unitData(dataUnit),                             
 70   z(zeta)                                         
 71 {                                                 
 72   if (algorithm == nullptr)                       
 73     G4Exception("G4ShellEMDataSet::G4ShellEMDa    
 74     FatalErrorInArgument, "Interpolation == 0"    
 75 }                                                 
 76                                                   
 77 //....oooOO0OOooo........oooOO0OOooo........oo    
 78 G4ShellEMDataSet::~G4ShellEMDataSet()             
 79 {                                                 
 80   CleanUpComponents();                            
 81   if (algorithm) delete algorithm;                
 82 }                                                 
 83                                                   
 84 //....oooOO0OOooo........oooOO0OOooo........oo    
 85 G4double G4ShellEMDataSet::FindValue(G4double     
 86 {                                                 
 87   // Returns the sum over the shells correspon    
 88   G4double value = 0.;                            
 89                                                   
 90   std::vector<G4VEMDataSet *>::const_iterator     
 91   std::vector<G4VEMDataSet *>::const_iterator     
 92                                                   
 93   while (i != end)                                
 94     {                                             
 95       value += (*i)->FindValue(energy);           
 96       i++;                                        
 97     }                                             
 98                                                   
 99   return value;                                   
100 }                                                 
101                                                   
102 //....oooOO0OOooo........oooOO0OOooo........oo    
103                                                   
104 void G4ShellEMDataSet::PrintData() const          
105 {                                                 
106   const G4int n = (G4int)NumberOfComponents();    
107                                                   
108   G4cout << "The data set has " << n << " comp    
109   G4cout << G4endl;                               
110                                                   
111   G4int i = 0;                                    
112                                                   
113   while (i < n)                                   
114     {                                             
115       G4cout << "--- Component " << i << " ---    
116       GetComponent(i)->PrintData();               
117       ++i;                                        
118     }                                             
119 }                                                 
120                                                   
121 //....oooOO0OOooo........oooOO0OOooo........oo    
122                                                   
123 void G4ShellEMDataSet::SetEnergiesData(G4DataV    
124                G4DataVector* data,                
125                G4int componentId)                 
126 {                                                 
127   G4VEMDataSet* component = components[compone    
128   if (component)                                  
129     {                                             
130       component->SetEnergiesData(energies, dat    
131       return;                                     
132     }                                             
133                                                   
134   G4String msg = "component ";                    
135   msg += static_cast<char>(componentId);          
136   msg += " not found";                            
137                                                   
138   G4Exception("G4ShellEMDataSet::SetEnergiesDa    
139 }                                                 
140                                                   
141 //....oooOO0OOooo........oooOO0OOooo........oo    
142                                                   
143 void G4ShellEMDataSet::SetLogEnergiesData(G4Da    
144                                           G4Da    
145                                           G4Da    
146                                           G4Da    
147                                           G4in    
148 {                                                 
149   G4VEMDataSet* component = components[compone    
150   if (component)                                  
151     {                                             
152       component->SetLogEnergiesData(energies,     
153       return;                                     
154     }                                             
155                                                   
156   G4String msg = "component ";                    
157   msg += static_cast<char>(componentId);          
158   msg += " not found";                            
159   G4Exception("G4ShellEMDataSet::SetLogEnergie    
160         FatalErrorInArgument ,msg);               
161 }                                                 
162                                                   
163 //....oooOO0OOooo........oooOO0OOooo........oo    
164                                                   
165 G4bool G4ShellEMDataSet::LoadData(const G4Stri    
166 {                                                 
167   CleanUpComponents();                            
168                                                   
169   G4String fullFileName = FullFileName(file);     
170   std::ifstream in(fullFileName);                 
171                                                   
172   if (!in.is_open())                              
173     {                                             
174       G4String message("Data file \"");           
175       message += fullFileName;                    
176       message += "\" not found";                  
177       G4Exception("G4ShellEMDataSet::LoadData(    
178       return 0;                                   
179     }                                             
180                                                   
181   G4DataVector* orig_shell_energies = 0;          
182   G4DataVector* orig_shell_data = 0;              
183   G4DataVector* log_shell_energies = 0;           
184   G4DataVector* log_shell_data = 0;               
185                                                   
186   G4double a = 0.;                                
187   G4int shellIndex = 0;                           
188   G4int k = 0;                                    
189   G4int nColumns = 2;                             
190                                                   
191   do                                              
192     {                                             
193       in >> a;                                    
194                                                   
195       if (a==0.) a=1e-300;                        
196                                                   
197       // The file is organized into four colum    
198       // 1st column contains the values of ene    
199       // 2nd column contains the corresponding    
200       // The file terminates with the pattern:    
201       //                                          
202       //                                          
203       if (a == -1)                                
204   {                                               
205     if ((k%nColumns == 0) && (orig_shell_energ    
206       {                                           
207        AddComponent(new G4EMDataSet(shellIndex    
208             orig_shell_data, log_shell_energie    
209             log_shell_data, algorithm->Clone()    
210             unitEnergies, unitData));             
211         orig_shell_energies = 0;                  
212         orig_shell_data = 0;                      
213               log_shell_energies = 0;             
214               log_shell_data = 0;                 
215       }                                           
216   }                                               
217       else if (a != -2)                           
218   {                                               
219     if (orig_shell_energies == 0)                 
220       {                                           
221        orig_shell_energies = new G4DataVector;    
222        orig_shell_data = new G4DataVector;        
223              log_shell_energies = new G4DataVe    
224              log_shell_data = new G4DataVector    
225       }                                           
226     if (k%nColumns == 0)                          
227             {                                     
228        orig_shell_energies->push_back(a*unitEn    
229        log_shell_energies->push_back(std::log1    
230             }                                     
231     else if (k%nColumns == 1)                     
232             {                                     
233        orig_shell_data->push_back(a*unitData);    
234              log_shell_data->push_back(std::lo    
235             }                                     
236           k++;                                    
237   }                                               
238       else k = 1;                                 
239     }                                             
240   while (a != -2);  // End of file                
241                                                   
242   delete orig_shell_energies;                     
243   delete orig_shell_data;                         
244   delete log_shell_energies;                      
245   delete log_shell_data;                          
246                                                   
247   return true;                                    
248 }                                                 
249                                                   
250 //....oooOO0OOooo........oooOO0OOooo........oo    
251                                                   
252 G4bool G4ShellEMDataSet::LoadNonLogData(const     
253 {                                                 
254   CleanUpComponents();                            
255                                                   
256   G4String fullFileName = FullFileName(file);     
257   std::ifstream in(fullFileName);                 
258                                                   
259   if (!in.is_open())                              
260     {                                             
261       G4String message("G4ShellEMDataSet::Load    
262       message += fullFileName;                    
263       message += "\" not found";                  
264       G4Exception("G4ShellEMDataSet::LoadNonLo    
265       return 0;                                   
266     }                                             
267                                                   
268   G4DataVector* orig_shell_energies = 0;          
269   G4DataVector* orig_shell_data = 0;              
270                                                   
271   G4double a = 0.;                                
272   G4int shellIndex = 0;                           
273   G4int k = 0;                                    
274   G4int nColumns = 2;                             
275                                                   
276   do                                              
277     {                                             
278       in >> a;                                    
279       // The file is organized into four colum    
280       // 1st column contains the values of ene    
281       // 2nd column contains the corresponding    
282       // The file terminates with the pattern:    
283       //                                          
284       //                                          
285       if (a == -1)                                
286   {                                               
287     if ((k%nColumns == 0) && (orig_shell_energ    
288       {                                           
289        AddComponent(new G4EMDataSet(shellIndex    
290             orig_shell_data, algorithm->Clone(    
291             unitEnergies, unitData));             
292         orig_shell_energies = 0;                  
293         orig_shell_data = 0;                      
294       }                                           
295   }                                               
296       else if (a != -2)                           
297   {                                               
298     if (orig_shell_energies == 0)                 
299       {                                           
300        orig_shell_energies = new G4DataVector;    
301        orig_shell_data = new G4DataVector;        
302       }                                           
303     if (k%nColumns == 0)                          
304             {                                     
305        orig_shell_energies->push_back(a*unitEn    
306             }                                     
307     else if (k%nColumns == 1)                     
308             {                                     
309        orig_shell_data->push_back(a*unitData);    
310             }                                     
311           k++;                                    
312   }                                               
313       else k = 1;                                 
314     }                                             
315   while (a != -2);  // End of file                
316                                                   
317                                                   
318   delete orig_shell_energies;                     
319   delete orig_shell_data;                         
320                                                   
321   return true;                                    
322 }                                                 
323                                                   
324 //....oooOO0OOooo........oooOO0OOooo........oo    
325                                                   
326 G4bool G4ShellEMDataSet::SaveData(const G4Stri    
327 {                                                 
328   G4String fullFileName = FullFileName(file);     
329   std::ofstream out(fullFileName);                
330                                                   
331   if (!out.is_open())                             
332     {                                             
333       G4String message("Cannot open \"");         
334       message += fullFileName;                    
335       message += "\"";                            
336       G4Exception("G4EMDataSet::SaveData()","e    
337     }                                             
338                                                   
339   const G4int n = (G4int)NumberOfComponents();    
340   G4int k = 0;                                    
341                                                   
342   while (k < n)                                   
343     {                                             
344       const G4VEMDataSet* component = GetCompo    
345                                                   
346       if (component)                              
347   {                                               
348     const G4DataVector& energies = component->    
349     const G4DataVector& data = component->GetD    
350                                                   
351     G4DataVector::const_iterator i = energies.    
352     G4DataVector::const_iterator endI = energi    
353     G4DataVector::const_iterator j = data.cbeg    
354                                                   
355     while (i != endI)                             
356       {                                           
357         out.precision(10);                        
358         out.width(15);                            
359         out.setf(std::ofstream::left);            
360         out << ((*i)/unitEnergies) << ' ';        
361                                                   
362         out.precision(10);                        
363         out.width(15);                            
364         out.setf(std::ofstream::left);            
365         out << ((*j)/unitData) << std::endl;      
366         i++;                                      
367         j++;                                      
368       }                                           
369   }                                               
370                                                   
371       out.precision(10);                          
372       out.width(15);                              
373       out.setf(std::ofstream::left);              
374       out << -1.f << ' ';                         
375                                                   
376       out.precision(10);                          
377       out.width(15);                              
378       out.setf(std::ofstream::left);              
379       out << -1.f << std::endl;                   
380                                                   
381       k++;                                        
382     }                                             
383                                                   
384   out.precision(10);                              
385   out.width(15);                                  
386   out.setf(std::ofstream::left);                  
387   out << -2.f << ' ';                             
388                                                   
389   out.precision(10);                              
390   out.width(15);                                  
391   out.setf(std::ofstream::left);                  
392   out << -2.f << std::endl;                       
393                                                   
394   return true;                                    
395 }                                                 
396                                                   
397 //....oooOO0OOooo........oooOO0OOooo........oo    
398                                                   
399 void G4ShellEMDataSet::CleanUpComponents()        
400 {                                                 
401   while (!components.empty())                     
402     {                                             
403       if (components.back()) delete components    
404       components.pop_back();                      
405     }                                             
406 }                                                 
407                                                   
408 //....oooOO0OOooo........oooOO0OOooo........oo    
409                                                   
410 G4String G4ShellEMDataSet::FullFileName(const     
411 {                                                 
412   const char* path = G4FindDataDir("G4LEDATA")    
413                                                   
414   if (!path)                                      
415   {                                               
416     G4Exception("G4ShellEMDataSet::FullFileNam    
417     return "";                                    
418   }                                               
419                                                   
420   std::ostringstream fullFileName;                
421                                                   
422   fullFileName << path << '/' << fileName << z    
423                                                   
424   return G4String(fullFileName.str().c_str());    
425 }                                                 
426