BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
OutputDataReadWriteINT Class Reference

Class for reading and writing BornAgain native IntensityData from ASCII file. More...

Public Member Functions

OutputData< double > * readOutputData (std::istream &input_stream)
 
void writeOutputData (const OutputData< double > &data, std::ostream &output_stream)
 

Static Private Member Functions

static double ignoreDenormalized (double value)
 
static void writeOutputDataDoubles (const OutputData< double > &data, std::ostream &output_stream, size_t n_columns)
 

Detailed Description

Class for reading and writing BornAgain native IntensityData from ASCII file.

Definition at line 30 of file OutputDataReadWriteINT.h.

Member Function Documentation

◆ ignoreDenormalized()

double OutputDataReadWriteINT::ignoreDenormalized ( double  value)
staticprivate

Definition at line 77 of file OutputDataReadWriteINT.cpp.

78 {
79  return (std::fpclassify(value) == FP_SUBNORMAL) ? 0.0 : value;
80 }

Referenced by writeOutputDataDoubles().

◆ readOutputData()

OutputData< double > * OutputDataReadWriteINT::readOutputData ( std::istream &  input_stream)

Definition at line 20 of file OutputDataReadWriteINT.cpp.

21 {
23  std::string line;
24 
25  while (std::getline(input_stream, line)) {
26  line = StringUtils::trim(line);
27  if (line.find("axis") != std::string::npos) {
28  std::unique_ptr<IAxis> axis = DataFormatUtils::createAxis(input_stream);
29  result->addAxis(*axis);
30  }
31 
32  if (line.find("data") != std::string::npos)
33  DataFormatUtils::fillOutputData(result, input_stream);
34  }
35  return result;
36 }
void addAxis(const IAxis &new_axis)
Definition: OutputData.h:295
std::unique_ptr< IAxis > createAxis(std::istream &input_stream)
Creates axis of certain type from input stream.
void fillOutputData(OutputData< double > *data, std::istream &input_stream)
Fills output data raw buffer from input stream.
std::string trim(const std::string &str, const std::string &whitespace=" \t")
Cuts any of the chars given in whitespace from start and end of str.
Definition: StringUtils.cpp:98

References OutputData< T >::addAxis(), DataFormatUtils::createAxis(), DataFormatUtils::fillOutputData(), and StringUtils::trim().

Referenced by IntensityDataIOFactory::readOutputData().

Here is the call graph for this function:

◆ writeOutputData()

void OutputDataReadWriteINT::writeOutputData ( const OutputData< double > &  data,
std::ostream &  output_stream 
)

Definition at line 38 of file OutputDataReadWriteINT.cpp.

40 {
41  output_stream << "# BornAgain Intensity Data\n\n";
42 
43  for (size_t i = 0; i < data.rank(); ++i) {
44  std::string axis_name = std::string("axis") + std::to_string(i);
45  std::unique_ptr<IAxis> P_axis(data.axis(i).clone());
46  P_axis->setName(axis_name);
47  output_stream << std::endl;
48  output_stream << "# axis-" << i << "\n";
49  output_stream << (*P_axis) << "\n";
50  }
51  size_t n_columns = data.axis(data.rank() - 1).size();
52 
53  output_stream << "\n# data\n";
54  writeOutputDataDoubles(data, output_stream, n_columns);
55  output_stream << std::endl;
56 }
virtual IAxis * clone() const =0
clone function
virtual size_t size() const =0
retrieve the number of bins
static void writeOutputDataDoubles(const OutputData< double > &data, std::ostream &output_stream, size_t n_columns)
size_t rank() const
Returns number of dimensions.
Definition: OutputData.h:56
const IAxis & axis(size_t serial_number) const
returns axis with given serial number
Definition: OutputData.h:318

References OutputData< T >::axis(), IAxis::clone(), OutputData< T >::rank(), IAxis::size(), and writeOutputDataDoubles().

Referenced by IntensityDataIOFactory::writeOutputData().

Here is the call graph for this function:

◆ writeOutputDataDoubles()

void OutputDataReadWriteINT::writeOutputDataDoubles ( const OutputData< double > &  data,
std::ostream &  output_stream,
size_t  n_columns 
)
staticprivate

Definition at line 58 of file OutputDataReadWriteINT.cpp.

60 {
61 
63  output_stream.imbue(std::locale::classic());
64  output_stream << std::scientific << std::setprecision(12);
65  size_t ncol(0);
66  while (it != data.end()) {
67  ncol++;
68  double z_value = *it++;
69  output_stream << ignoreDenormalized(z_value) << " ";
70  if (ncol == n_columns) {
71  output_stream << std::endl;
72  ncol = 0;
73  }
74  }
75 }
static double ignoreDenormalized(double value)
iterator end()
Returns read/write iterator that points to the one past last element.
Definition: OutputData.h:93
iterator begin()
Returns read/write iterator that points to the first element.
Definition: OutputData.h:343
std::string scientific(const T value, int n=10)
Returns scientific string representing given value of any numeric type.
Definition: StringUtils.h:61

References OutputData< T >::begin(), OutputData< T >::end(), ignoreDenormalized(), and StringUtils::scientific().

Referenced by writeOutputData().

Here is the call graph for this function:

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