27 std::vector<IAxis*> axes;
28 while (std::getline(input_stream, line)) {
31 if (line.find(
"axis") != std::string::npos)
34 if (line.find(
"data") != std::string::npos)
45 output_stream <<
"# BornAgain Intensity Data\n\n";
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";
57 output_stream <<
"\n# data\n";
59 output_stream << std::endl;
65 output_stream.imbue(std::locale::classic());
68 for (
size_t i = 0; i < data.
size(); ++i) {
71 if (ncol == n_columns) {
72 output_stream << std::endl;
80 return (std::fpclassify(value) == FP_SUBNORMAL) ? 0.0 : value;
Defines various functions to interact from numpy on Python side.
Defines a few helper functions.
Defines structs Bin1D, Bin1DCVector.
Stores radiation power per bin.
const IAxis & axis(size_t k) const
size_t size() const
Returns total size of data buffer (product of bin number in every dimension).
virtual IAxis * clone() const =0
virtual size_t size() const =0
Returns the number of bins.
Datafield * readDatafield(std::istream &input_stream)
void writeDatafield(const Datafield &data, std::ostream &output_stream)
static void writeDatafieldDoubles(const Datafield &data, std::ostream &output_stream, size_t n_columns)
static double ignoreDenormalized(double value)
std::string scientific(T value, int n=10)
Returns scientific string representing given value of any numeric type.
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.