BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
ReadWriteINT Class Reference

Description

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

Definition at line 29 of file ReadWriteINT.h.

Public Member Functions

DatafieldreadDatafield (std::istream &input_stream)
 
void writeDatafield (const Datafield &data, std::ostream &output_stream)
 

Static Private Member Functions

static double ignoreDenormalized (double value)
 
static void writeDatafieldDoubles (const Datafield &data, std::ostream &output_stream, size_t n_columns)
 

Member Function Documentation

◆ ignoreDenormalized()

double ReadWriteINT::ignoreDenormalized ( double  value)
staticprivate

Definition at line 78 of file ReadWriteINT.cpp.

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

Referenced by writeDatafieldDoubles().

◆ readDatafield()

Datafield * ReadWriteINT::readDatafield ( std::istream &  input_stream)

Definition at line 23 of file ReadWriteINT.cpp.

24 {
25  std::string line;
26 
27  std::vector<IAxis*> axes;
28  while (std::getline(input_stream, line)) {
29  line = BaseUtils::String::trim(line);
30 
31  if (line.find("axis") != std::string::npos)
32  axes.emplace_back(DataUtils::Format::createAxis(input_stream));
33 
34  if (line.find("data") != std::string::npos)
35  break;
36  }
37  // std::cout << "Read " << axes.size() << " axes" << std::endl;
38  auto* result = new Datafield(axes);
39  DataUtils::Format::fillDatafield(result, input_stream);
40  return result;
41 }
Stores radiation power per bin.
Definition: Datafield.h:30
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:87
void fillDatafield(Datafield *data, std::istream &input_stream)
Fills output data raw buffer from input stream.
IAxis * createAxis(std::istream &input_stream)
Creates axis of certain type from input stream.

References DataUtils::Format::createAxis(), DataUtils::Format::fillDatafield(), and BaseUtils::String::trim().

Referenced by IOFactory::readDatafield().

Here is the call graph for this function:

◆ writeDatafield()

void ReadWriteINT::writeDatafield ( const Datafield data,
std::ostream &  output_stream 
)

Definition at line 43 of file ReadWriteINT.cpp.

44 {
45  output_stream << "# BornAgain Intensity Data\n\n";
46 
47  for (size_t i = 0; i < data.rank(); ++i) {
48  std::string axis_name = std::string("axis") + std::to_string(i);
49  std::unique_ptr<IAxis> axis(data.axis(i).clone());
50  axis->setAxisName(axis_name);
51  output_stream << std::endl;
52  output_stream << "# axis-" << i << "\n";
53  output_stream << (*axis) << "\n";
54  }
55  size_t n_columns = data.axis(data.rank() - 1).size();
56 
57  output_stream << "\n# data\n";
58  writeDatafieldDoubles(data, output_stream, n_columns);
59  output_stream << std::endl;
60 }
const IAxis & axis(size_t k) const
Definition: Datafield.cpp:91
size_t rank() const
Definition: Datafield.cpp:75
virtual IAxis * clone() const =0
virtual size_t size() const =0
Returns the number of bins.
static void writeDatafieldDoubles(const Datafield &data, std::ostream &output_stream, size_t n_columns)

References Datafield::axis(), IAxis::clone(), Datafield::rank(), IAxis::size(), and writeDatafieldDoubles().

Referenced by IOFactory::writeDatafield().

Here is the call graph for this function:

◆ writeDatafieldDoubles()

void ReadWriteINT::writeDatafieldDoubles ( const Datafield data,
std::ostream &  output_stream,
size_t  n_columns 
)
staticprivate

Definition at line 62 of file ReadWriteINT.cpp.

64 {
65  output_stream.imbue(std::locale::classic());
66  output_stream << std::scientific << std::setprecision(12);
67  size_t ncol = 0;
68  for (size_t i = 0; i < data.size(); ++i) {
69  ncol++;
70  output_stream << ignoreDenormalized(data[i]) << " ";
71  if (ncol == n_columns) {
72  output_stream << std::endl;
73  ncol = 0;
74  }
75  }
76 }
size_t size() const
Returns total size of data buffer (product of bin number in every dimension).
Definition: Datafield.cpp:80
static double ignoreDenormalized(double value)
std::string scientific(T value, int n=10)
Returns scientific string representing given value of any numeric type.
Definition: StringUtils.h:75

References ignoreDenormalized(), BaseUtils::String::scientific(), and Datafield::size().

Referenced by writeDatafield().

Here is the call graph for this function:

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