68 algorithm(argAlgorithm), unitEnergies(argUnitEnergies), unitData(argUnitData)
87 G4String fullFileName(FullFileName(argFileName));
88 std::ifstream in(fullFileName, std::ifstream::binary|std::ifstream::in);
93 message+=fullFileName;
94 message+=
"\" not found";
95 G4Exception(
"G4DNACrossSectionDataSet::LoadData",
"em0003",
100 std::vector<G4DataVector *> columns;
101 std::vector<G4DataVector *> log_columns;
103 auto stream(
new std::stringstream);
124 while (!stream->eof())
128 while (i>=columns.size())
134 columns[i]->push_back(value);
148 if (value <=0.) value = 1e-300;
149 log_columns[i]->push_back(std::log10(value));
155 stream=
new std::stringstream;
173 if (comment) {
break; }
174 if (space && (!first)) { (*stream) <<
' '; }
182 catch(
const std::ios::failure &e)
190 std::size_t maxI(columns.size());
195 message+=fullFileName;
196 message+=
"\" should have at least two columns";
197 G4Exception(
"G4DNACrossSectionDataSet::LoadData",
"em0005",
205 std::size_t maxJ(columns[i]->size());
207 if (maxJ!=columns[0]->size())
210 message+=fullFileName;
211 message+=
"\" has lines with a different number of columns";
212 G4Exception(
"G4DNACrossSectionDataSet::LoadData",
"em0005",
226 argEnergies->push_back(columns[0]->
operator[] (j)*GetUnitEnergies());
227 argData->push_back(columns[i]->
operator[] (j)*GetUnitData());
228 argLogEnergies->push_back(log_columns[0]->
operator[] (j) + std::log10(GetUnitEnergies()));
229 argLogData->push_back(log_columns[i]->
operator[] (j) + std::log10(GetUnitData()));
233 AddComponent(
new G4EMDataSet(
G4int(i-1), argEnergies, argData, argLogEnergies, argLogData, GetAlgorithm()->Clone(), GetUnitEnergies(), GetUnitData()));
243 delete log_columns[i];
254 G4String fullFileName(FullFileName(argFileName));
255 std::ifstream in(fullFileName, std::ifstream::binary|std::ifstream::in);
260 message+=fullFileName;
261 message+=
"\" not found";
262 G4Exception(
"G4DNACrossSectionDataSet::LoadData",
"em0003",
267 std::vector<G4DataVector *> columns;
269 auto stream(
new std::stringstream);
290 while (!stream->eof())
294 while (i>=columns.size())
299 columns[i]->push_back(value);
305 stream=
new std::stringstream;
323 if (comment) {
break; }
324 if (space && (!first)) { (*stream) <<
' '; }
332 catch(
const std::ios::failure &e)
340 std::size_t maxI(columns.size());
345 message+=fullFileName;
346 message+=
"\" should have at least two columns";
347 G4Exception(
"G4DNACrossSectionDataSet::LoadData",
"em0005",
355 std::size_t maxJ(columns[i]->size());
357 if (maxJ!=columns[0]->size())
360 message+=fullFileName;
361 message+=
"\" has lines with a different number of columns.";
362 G4Exception(
"G4DNACrossSectionDataSet::LoadData",
"em0005",
374 argEnergies->push_back(columns[0]->
operator[] (j)*GetUnitEnergies());
375 argData->push_back(columns[i]->
operator[] (j)*GetUnitData());
401 G4Exception(
"G4DNACrossSectionDataSet::SaveData",
"em0005",
407 G4String fullFileName(FullFileName(argFileName));
408 std::ofstream out(fullFileName);
413 message+=fullFileName;
415 G4Exception(
"G4DNACrossSectionDataSet::SaveData",
"em0005",
422 auto iData(
new G4DataVector::const_iterator[n]);
432 while (iEnergies!=iEnergiesEnd)
436 out.setf(std::ofstream::left);
437 out << ((*iEnergies)/GetUnitEnergies());
446 out.setf(std::ofstream::left);
447 out << ((*(iData[k]))/GetUnitData());
464G4String G4DNACrossSectionDataSet::FullFileName(
const G4String& argFileName)
const
469 G4Exception(
"G4DNACrossSectionDataSet::FullFileName",
"em0006",
475 std::ostringstream fullFileName;
477 fullFileName << path <<
"/" << argFileName <<
".dat";
479 return G4String(fullFileName.str().c_str());
488 auto i(components.begin());
489 auto end(components.end());
493 value+=(*i)->FindValue(argEnergy);
505 G4cout <<
"The data set has " << n <<
" components" <<
G4endl;
521 G4int argComponentId)
525 if (component !=
nullptr)
531 std::ostringstream message;
532 message <<
"Component " << argComponentId <<
" not found";
534 G4Exception(
"G4DNACrossSectionDataSet::SetEnergiesData",
"em0005",
544 G4int argComponentId)
548 if (component !=
nullptr)
554 std::ostringstream message;
555 message <<
"Component " << argComponentId <<
" not found";
557 G4Exception(
"G4DNACrossSectionDataSet::SetLogEnergiesData",
"em0005",
563void G4DNACrossSectionDataSet::CleanUpComponents()
565 while (!components.empty())
567 if (components.back() !=
nullptr)
delete components.back();
568 components.pop_back();
const char * G4FindDataDir(const char *)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4GLOB_DLL std::ostream G4cout
G4bool LoadData(const G4String &argFileName) override
G4DNACrossSectionDataSet()=delete
size_t NumberOfComponents() const override
~G4DNACrossSectionDataSet() override
void SetLogEnergiesData(G4DataVector *x, G4DataVector *values, G4DataVector *log_x, G4DataVector *log_values, G4int componentId) override
void SetEnergiesData(G4DataVector *x, G4DataVector *values, G4int componentId) override
const G4VEMDataSet * GetComponent(G4int componentId) const override
void PrintData() const override
const G4DataVector & GetEnergies(G4int componentId) const override
void AddComponent(G4VEMDataSet *dataSet) override
G4bool LoadNonLogData(const G4String &argFileName) override
G4bool SaveData(const G4String &argFileName) const override
G4double FindValue(G4double e, G4int componentId=0) const override
virtual void SetEnergiesData(G4DataVector *x, G4DataVector *data, G4int component=0)=0
virtual const G4DataVector & GetData(G4int componentId) const =0
virtual void SetLogEnergiesData(G4DataVector *x, G4DataVector *data, G4DataVector *Log_x, G4DataVector *Log_data, G4int component=0)=0
virtual void PrintData(void) const =0