Geant4  10.02.p03
G4ShellEMDataSet Class Reference

#include <G4ShellEMDataSet.hh>

Inheritance diagram for G4ShellEMDataSet:
Collaboration diagram for G4ShellEMDataSet:

Public Member Functions

 G4ShellEMDataSet (G4int Z, G4VDataSetAlgorithm *algo, G4double eUnit=CLHEP::MeV, G4double dataUnit=CLHEP::barn)
 
virtual ~G4ShellEMDataSet ()
 
virtual G4double FindValue (G4double energy, G4int componentId=0) const
 
virtual void PrintData (void) const
 
virtual const G4VEMDataSetGetComponent (G4int componentId) const
 
virtual void AddComponent (G4VEMDataSet *dataSet)
 
virtual size_t NumberOfComponents (void) const
 
virtual const G4DataVectorGetEnergies (G4int componentId) const
 
virtual const G4DataVectorGetData (G4int componentId) const
 
virtual const G4DataVectorGetLogEnergies (G4int componentId) const
 
virtual const G4DataVectorGetLogData (G4int componentId) const
 
virtual void SetEnergiesData (G4DataVector *energies, G4DataVector *data, G4int componentId)
 
virtual void SetLogEnergiesData (G4DataVector *energies, G4DataVector *data, G4DataVector *log_energies, G4DataVector *log_data, G4int componentId)
 
virtual G4bool LoadData (const G4String &fileName)
 
virtual G4bool LoadNonLogData (const G4String &fileName)
 
virtual G4bool SaveData (const G4String &fileName) const
 
virtual G4double RandomSelect (G4int) const
 
- Public Member Functions inherited from G4VEMDataSet
 G4VEMDataSet ()
 
virtual ~G4VEMDataSet ()
 

Protected Member Functions

G4double GetUnitEnergies () const
 
G4double GetUnitData () const
 
const G4VDataSetAlgorithmGetAlgorithm () const
 
void CleanUpComponents (void)
 

Private Member Functions

G4String FullFileName (const G4String &fileName) const
 
 G4ShellEMDataSet ()
 
 G4ShellEMDataSet (const G4ShellEMDataSet &copy)
 
G4ShellEMDataSetoperator= (const G4ShellEMDataSet &right)
 

Private Attributes

std::vector< G4VEMDataSet * > components
 
G4int z
 
G4VDataSetAlgorithmalgorithm
 
G4double unitEnergies
 
G4double unitData
 

Detailed Description

Definition at line 60 of file G4ShellEMDataSet.hh.

Constructor & Destructor Documentation

◆ G4ShellEMDataSet() [1/3]

G4ShellEMDataSet::G4ShellEMDataSet ( G4int  Z,
G4VDataSetAlgorithm algo,
G4double  eUnit = CLHEP::MeV,
G4double  dataUnit = CLHEP::barn 
)

Definition at line 64 of file G4ShellEMDataSet.cc.

67  :
68  z(zeta),
69  algorithm(algo),
70  unitEnergies(eUnit),
71  unitData(dataUnit)
72 {
73  if (algorithm == 0) G4Exception("G4ShellEMDataSet::G4ShellEMDataSet()","em0007",FatalErrorInArgument, "Interpolation == 0");
74 }
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4VDataSetAlgorithm * algorithm
Here is the call graph for this function:

◆ ~G4ShellEMDataSet()

G4ShellEMDataSet::~G4ShellEMDataSet ( )
virtual

Definition at line 77 of file G4ShellEMDataSet.cc.

78 {
80  if (algorithm) delete algorithm;
81 }
void CleanUpComponents(void)
G4VDataSetAlgorithm * algorithm
Here is the call graph for this function:

◆ G4ShellEMDataSet() [2/3]

G4ShellEMDataSet::G4ShellEMDataSet ( )
private
Here is the caller graph for this function:

◆ G4ShellEMDataSet() [3/3]

G4ShellEMDataSet::G4ShellEMDataSet ( const G4ShellEMDataSet copy)
private

Member Function Documentation

◆ AddComponent()

virtual void G4ShellEMDataSet::AddComponent ( G4VEMDataSet dataSet)
inlinevirtual

Implements G4VEMDataSet.

Definition at line 75 of file G4ShellEMDataSet.hh.

75 { components.push_back(dataSet); }
std::vector< G4VEMDataSet * > components
Here is the caller graph for this function:

◆ CleanUpComponents()

void G4ShellEMDataSet::CleanUpComponents ( void  )
protected

Definition at line 389 of file G4ShellEMDataSet.cc.

390 {
391  while (!components.empty())
392  {
393  if (components.back()) delete components.back();
394  components.pop_back();
395  }
396 }
std::vector< G4VEMDataSet * > components
Here is the caller graph for this function:

◆ FindValue()

G4double G4ShellEMDataSet::FindValue ( G4double  energy,
G4int  componentId = 0 
) const
virtual

Implements G4VEMDataSet.

Definition at line 84 of file G4ShellEMDataSet.cc.

85 {
86  // Returns the sum over the shells corresponding to e
87  G4double value = 0.;
88 
89  std::vector<G4VEMDataSet *>::const_iterator i(components.begin());
90  std::vector<G4VEMDataSet *>::const_iterator end(components.end());
91 
92  while (i != end)
93  {
94  value += (*i)->FindValue(energy);
95  i++;
96  }
97 
98  return value;
99 }
std::vector< G4VEMDataSet * > components
double energy
Definition: plottest35.C:25
double G4double
Definition: G4Types.hh:76

◆ FullFileName()

G4String G4ShellEMDataSet::FullFileName ( const G4String fileName) const
private

Definition at line 399 of file G4ShellEMDataSet.cc.

400 {
401  char* path = getenv("G4LEDATA");
402 
403  if (!path)
404  {
405  G4Exception("G4ShellEMDataSet::FullFileName()","em0006",JustWarning,"Please set G4LEDATA");
406  return "";
407  }
408 
409  std::ostringstream fullFileName;
410 
411  fullFileName << path << '/' << fileName << z << ".dat";
412 
413  return G4String(fullFileName.str().c_str());
414 }
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetAlgorithm()

const G4VDataSetAlgorithm* G4ShellEMDataSet::GetAlgorithm ( ) const
inlineprotected

Definition at line 101 of file G4ShellEMDataSet.hh.

101 { return algorithm; }
G4VDataSetAlgorithm * algorithm
Here is the call graph for this function:

◆ GetComponent()

virtual const G4VEMDataSet* G4ShellEMDataSet::GetComponent ( G4int  componentId) const
inlinevirtual

Implements G4VEMDataSet.

Definition at line 74 of file G4ShellEMDataSet.hh.

74 { return components[componentId]; }
std::vector< G4VEMDataSet * > components
Here is the caller graph for this function:

◆ GetData()

virtual const G4DataVector& G4ShellEMDataSet::GetData ( G4int  componentId) const
inlinevirtual

Implements G4VEMDataSet.

Definition at line 79 of file G4ShellEMDataSet.hh.

79 { return GetComponent(componentId)->GetData(0); }
virtual const G4DataVector & GetData(G4int componentId) const =0
virtual const G4VEMDataSet * GetComponent(G4int componentId) const
Here is the call graph for this function:

◆ GetEnergies()

virtual const G4DataVector& G4ShellEMDataSet::GetEnergies ( G4int  componentId) const
inlinevirtual

Implements G4VEMDataSet.

Definition at line 78 of file G4ShellEMDataSet.hh.

78 { return GetComponent(componentId)->GetEnergies(0); }
virtual const G4DataVector & GetEnergies(G4int componentId) const =0
virtual const G4VEMDataSet * GetComponent(G4int componentId) const
Here is the call graph for this function:

◆ GetLogData()

virtual const G4DataVector& G4ShellEMDataSet::GetLogData ( G4int  componentId) const
inlinevirtual

Implements G4VEMDataSet.

Definition at line 81 of file G4ShellEMDataSet.hh.

81 { return GetComponent(componentId)->GetLogData(0); }
virtual const G4DataVector & GetLogData(G4int componentId) const =0
virtual const G4VEMDataSet * GetComponent(G4int componentId) const
Here is the call graph for this function:

◆ GetLogEnergies()

virtual const G4DataVector& G4ShellEMDataSet::GetLogEnergies ( G4int  componentId) const
inlinevirtual

Implements G4VEMDataSet.

Definition at line 80 of file G4ShellEMDataSet.hh.

80 { return GetComponent(componentId)->GetLogEnergies(0); }
virtual const G4DataVector & GetLogEnergies(G4int componentId) const =0
virtual const G4VEMDataSet * GetComponent(G4int componentId) const
Here is the call graph for this function:

◆ GetUnitData()

G4double G4ShellEMDataSet::GetUnitData ( ) const
inlineprotected

Definition at line 100 of file G4ShellEMDataSet.hh.

100 { return unitData; }

◆ GetUnitEnergies()

G4double G4ShellEMDataSet::GetUnitEnergies ( ) const
inlineprotected

Definition at line 99 of file G4ShellEMDataSet.hh.

99 { return unitEnergies; }

◆ LoadData()

G4bool G4ShellEMDataSet::LoadData ( const G4String fileName)
virtual

Implements G4VEMDataSet.

Definition at line 160 of file G4ShellEMDataSet.cc.

161 {
163 
164  G4String fullFileName = FullFileName(file);
165  std::ifstream in(fullFileName);
166 
167  if (!in.is_open())
168  {
169  G4String message("Data file \"");
170  message += fullFileName;
171  message += "\" not found";
172  G4Exception("G4ShellEMDataSet::LoadData()", "em0003",FatalException, message);
173  return 0;
174  }
175 
176  G4DataVector* orig_shell_energies = 0;
177  G4DataVector* orig_shell_data = 0;
178  G4DataVector* log_shell_energies = 0;
179  G4DataVector* log_shell_data = 0;
180 
181  G4double a = 0.;
182  G4int shellIndex = 0;
183  G4int k = 0;
184  G4int nColumns = 2;
185 
186  do
187  {
188  in >> a;
189 
190  if (a==0.) a=1e-300;
191 
192  // The file is organized into four columns:
193  // 1st column contains the values of energy
194  // 2nd column contains the corresponding data value
195  // The file terminates with the pattern: -1 -1
196  // -2 -2
197  //
198  if (a == -1)
199  {
200  if ((k%nColumns == 0) && (orig_shell_energies != 0) )
201  {
202  AddComponent(new G4EMDataSet(shellIndex, orig_shell_energies, orig_shell_data, log_shell_energies, log_shell_data, algorithm->Clone(), unitEnergies, unitData));
203  orig_shell_energies = 0;
204  orig_shell_data = 0;
205  log_shell_energies = 0;
206  log_shell_data = 0;
207  }
208  }
209  else if (a != -2)
210  {
211  if (orig_shell_energies == 0)
212  {
213  orig_shell_energies = new G4DataVector;
214  orig_shell_data = new G4DataVector;
215  log_shell_energies = new G4DataVector;
216  log_shell_data = new G4DataVector;
217  }
218  if (k%nColumns == 0)
219  {
220  orig_shell_energies->push_back(a*unitEnergies);
221  log_shell_energies->push_back(std::log10(a) + std::log10(unitEnergies));
222  }
223  else if (k%nColumns == 1)
224  {
225  orig_shell_data->push_back(a*unitData);
226  log_shell_data->push_back(std::log10(a) + std::log10(unitData));
227  }
228  k++;
229  }
230  else k = 1;
231  }
232  while (a != -2); // End of file
233 
234 
235  delete orig_shell_energies;
236  delete orig_shell_data;
237  delete log_shell_energies;
238  delete log_shell_data;
239 
240  return true;
241 }
void CleanUpComponents(void)
ifstream in
Definition: comparison.C:7
TFile * file
int G4int
Definition: G4Types.hh:78
virtual G4VDataSetAlgorithm * Clone() const =0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4VDataSetAlgorithm * algorithm
G4String FullFileName(const G4String &fileName) const
double G4double
Definition: G4Types.hh:76
virtual void AddComponent(G4VEMDataSet *dataSet)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ LoadNonLogData()

G4bool G4ShellEMDataSet::LoadNonLogData ( const G4String fileName)
virtual

Implements G4VEMDataSet.

Definition at line 244 of file G4ShellEMDataSet.cc.

245 {
247 
248  G4String fullFileName = FullFileName(file);
249  std::ifstream in(fullFileName);
250 
251  if (!in.is_open())
252  {
253  G4String message("G4ShellEMDataSet::LoadData - data file \"");
254  message += fullFileName;
255  message += "\" not found";
256  G4Exception("G4ShellEMDataSet::LoadNonLogData()", "em0003",FatalException, message);
257  return 0;
258  }
259 
260  G4DataVector* orig_shell_energies = 0;
261  G4DataVector* orig_shell_data = 0;
262 
263  G4double a = 0.;
264  G4int shellIndex = 0;
265  G4int k = 0;
266  G4int nColumns = 2;
267 
268  do
269  {
270  in >> a;
271 
272  // The file is organized into four columns:
273  // 1st column contains the values of energy
274  // 2nd column contains the corresponding data value
275  // The file terminates with the pattern: -1 -1
276  // -2 -2
277  //
278  if (a == -1)
279  {
280  if ((k%nColumns == 0) && (orig_shell_energies != 0) )
281  {
282  AddComponent(new G4EMDataSet(shellIndex, orig_shell_energies, orig_shell_data, algorithm->Clone(), unitEnergies, unitData));
283  orig_shell_energies = 0;
284  orig_shell_data = 0;
285  }
286  }
287  else if (a != -2)
288  {
289  if (orig_shell_energies == 0)
290  {
291  orig_shell_energies = new G4DataVector;
292  orig_shell_data = new G4DataVector;
293  }
294  if (k%nColumns == 0)
295  {
296  orig_shell_energies->push_back(a*unitEnergies);
297  }
298  else if (k%nColumns == 1)
299  {
300  orig_shell_data->push_back(a*unitData);
301  }
302  k++;
303  }
304  else k = 1;
305  }
306  while (a != -2); // End of file
307 
308 
309  delete orig_shell_energies;
310  delete orig_shell_data;
311 
312  return true;
313 }
void CleanUpComponents(void)
ifstream in
Definition: comparison.C:7
TFile * file
int G4int
Definition: G4Types.hh:78
virtual G4VDataSetAlgorithm * Clone() const =0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4VDataSetAlgorithm * algorithm
G4String FullFileName(const G4String &fileName) const
double G4double
Definition: G4Types.hh:76
virtual void AddComponent(G4VEMDataSet *dataSet)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ NumberOfComponents()

virtual size_t G4ShellEMDataSet::NumberOfComponents ( void  ) const
inlinevirtual

Implements G4VEMDataSet.

Definition at line 76 of file G4ShellEMDataSet.hh.

76 { return components.size(); }
std::vector< G4VEMDataSet * > components
Here is the caller graph for this function:

◆ operator=()

G4ShellEMDataSet& G4ShellEMDataSet::operator= ( const G4ShellEMDataSet right)
private
Here is the caller graph for this function:

◆ PrintData()

void G4ShellEMDataSet::PrintData ( void  ) const
virtual

Implements G4VEMDataSet.

Definition at line 102 of file G4ShellEMDataSet.cc.

103 {
104  const size_t n = NumberOfComponents();
105 
106  G4cout << "The data set has " << n << " components" << G4endl;
107  G4cout << G4endl;
108 
109  size_t i = 0;
110 
111  while (i < n)
112  {
113  G4cout << "--- Component " << i << " ---" << G4endl;
114  GetComponent(i)->PrintData();
115  i++;
116  }
117 }
Char_t n[5]
G4GLOB_DLL std::ostream G4cout
virtual void PrintData(void) const =0
virtual size_t NumberOfComponents(void) const
#define G4endl
Definition: G4ios.hh:61
virtual const G4VEMDataSet * GetComponent(G4int componentId) const
Here is the call graph for this function:

◆ RandomSelect()

virtual G4double G4ShellEMDataSet::RandomSelect ( G4int  ) const
inlinevirtual

Implements G4VEMDataSet.

Definition at line 95 of file G4ShellEMDataSet.hh.

95 { return -1.; };

◆ SaveData()

G4bool G4ShellEMDataSet::SaveData ( const G4String fileName) const
virtual

Implements G4VEMDataSet.

Definition at line 317 of file G4ShellEMDataSet.cc.

318 {
319  G4String fullFileName = FullFileName(file);
320  std::ofstream out(fullFileName);
321 
322  if (!out.is_open())
323  {
324  G4String message("Cannot open \"");
325  message += fullFileName;
326  message += "\"";
327  G4Exception("G4EMDataSet::SaveData()","em0005",FatalException,message);
328  }
329 
330  const size_t n = NumberOfComponents();
331  size_t k = 0;
332 
333  while (k < n)
334  {
335  const G4VEMDataSet* component = GetComponent(k);
336 
337  if (component)
338  {
339  const G4DataVector& energies = component->GetEnergies(0);
340  const G4DataVector& data = component->GetData(0);
341 
342  G4DataVector::const_iterator i = energies.begin();
343  G4DataVector::const_iterator endI = energies.end();
344  G4DataVector::const_iterator j = data.begin();
345 
346  while (i != endI)
347  {
348  out.precision(10);
349  out.width(15);
350  out.setf(std::ofstream::left);
351  out << ((*i)/unitEnergies) << ' ';
352 
353  out.precision(10);
354  out.width(15);
355  out.setf(std::ofstream::left);
356  out << ((*j)/unitData) << std::endl;
357  i++;
358  j++;
359  }
360  }
361 
362  out.precision(10);
363  out.width(15);
364  out.setf(std::ofstream::left);
365  out << -1.f << ' ';
366 
367  out.precision(10);
368  out.width(15);
369  out.setf(std::ofstream::left);
370  out << -1.f << std::endl;
371 
372  k++;
373  }
374 
375  out.precision(10);
376  out.width(15);
377  out.setf(std::ofstream::left);
378  out << -2.f << ' ';
379 
380  out.precision(10);
381  out.width(15);
382  out.setf(std::ofstream::left);
383  out << -2.f << std::endl;
384 
385  return true;
386 }
virtual const G4DataVector & GetEnergies(G4int componentId) const =0
virtual const G4DataVector & GetData(G4int componentId) const =0
TFile * file
Char_t n[5]
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
virtual size_t NumberOfComponents(void) const
G4String FullFileName(const G4String &fileName) const
virtual const G4VEMDataSet * GetComponent(G4int componentId) const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetEnergiesData()

void G4ShellEMDataSet::SetEnergiesData ( G4DataVector energies,
G4DataVector data,
G4int  componentId 
)
virtual

Implements G4VEMDataSet.

Definition at line 120 of file G4ShellEMDataSet.cc.

123 {
124  G4VEMDataSet* component = components[componentId];
125 
126  if (component)
127  {
128  component->SetEnergiesData(energies, data, 0);
129  return;
130  }
131 
132  G4String msg = "component " + (G4String)componentId + " not found";
133 
134  G4Exception("G4ShellEMDataSet::SetEnergiesData()","em0008", FatalErrorInArgument ,msg);
135 }
std::vector< G4VEMDataSet * > components
virtual void SetEnergiesData(G4DataVector *x, G4DataVector *data, G4int component=0)=0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetLogEnergiesData()

void G4ShellEMDataSet::SetLogEnergiesData ( G4DataVector energies,
G4DataVector data,
G4DataVector log_energies,
G4DataVector log_data,
G4int  componentId 
)
virtual

Implements G4VEMDataSet.

Definition at line 138 of file G4ShellEMDataSet.cc.

143 {
144  G4VEMDataSet* component = components[componentId];
145 
146  if (component)
147  {
148  component->SetLogEnergiesData(energies, data, log_energies, log_data, 0);
149  return;
150  }
151 
152  G4String msg = "component " + (G4String)componentId + " not found";
153 
154  G4Exception("G4ShellEMDataSet::SetLogEnergiesData()","em0008", FatalErrorInArgument ,msg);
155 
156 }
std::vector< G4VEMDataSet * > components
virtual void SetLogEnergiesData(G4DataVector *x, G4DataVector *data, G4DataVector *Log_x, G4DataVector *Log_data, G4int component=0)=0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ algorithm

G4VDataSetAlgorithm* G4ShellEMDataSet::algorithm
private

Definition at line 118 of file G4ShellEMDataSet.hh.

◆ components

std::vector<G4VEMDataSet*> G4ShellEMDataSet::components
private

Definition at line 114 of file G4ShellEMDataSet.hh.

◆ unitData

G4double G4ShellEMDataSet::unitData
private

Definition at line 121 of file G4ShellEMDataSet.hh.

◆ unitEnergies

G4double G4ShellEMDataSet::unitEnergies
private

Definition at line 120 of file G4ShellEMDataSet.hh.

◆ z

G4int G4ShellEMDataSet::z
private

Definition at line 116 of file G4ShellEMDataSet.hh.


The documentation for this class was generated from the following files: