22 size_t nrows = data.size();
25 ncols = data[0].size();
26 for (
size_t row = 0; row < nrows; row++)
27 if (data[row].size() != ncols)
28 throw std::runtime_error(
"Invalid data: not rectangular");
29 return std::make_pair(nrows, ncols);
34 const size_t N = vec.size();
35 return std::unique_ptr<Datafield>(
new Datafield{{
39 std::unique_ptr<Datafield>
43 const size_t nrows = shape.first;
44 const size_t ncols = shape.second;
46 if (nrows == 0 || ncols == 0)
47 throw std::runtime_error(
48 "Error in DataUtils::Array::createDataImpl: input argument contains empty dimensions");
53 std::vector<double> out(frame->size());
54 for (
size_t row = 0; row < nrows; ++row) {
55 for (
size_t col = 0; col < ncols; ++col) {
56 size_t iout = nrows - row - 1 + col * nrows;
57 out[iout] = vec[row][col];
61 return std::make_unique<Datafield>(frame, out);
67 throw std::runtime_error(
"DataUtils::Array::createVector1D() -> Error. Not 1D data.");
69 std::vector<double> result = data.
flatVector();
75 std::vector<std::vector<double>> result;
77 const size_t nrows = data.
axis(1).
size();
78 const size_t ncols = data.
axis(0).
size();
82 for (
size_t row = 0; row < nrows; ++row) {
83 result[row].resize(ncols, 0.0);
84 for (
size_t col = 0; col < ncols; ++col) {
85 size_t globalbin = nrows - row - 1 + col * nrows;
86 result[row][col] = data[globalbin];
Defines various functions to interact from numpy on Python side.
Defines class FixedBinAxis.
Defines and implements templated class Frame.
Stores radiation power per bin.
const IAxis & axis(size_t k) const
std::vector< double > flatVector() const
Returns copy of raw data vector.
Axis with fixed bin size.
virtual size_t size() const =0
Returns the number of bins.
std::pair< size_t, size_t > getShape(const std::vector< std::vector< double >> &data)
Returns shape nrows, ncols of 2D array.
std::vector< double > createVector1D(const Datafield &data)
Creates 1D vector from Datafield.
std::vector< std::vector< double > > createVector2D(const Datafield &data)
Creates 2D vector from Datafield.
std::unique_ptr< Datafield > createPField1D(const std::vector< double > &vec)
std::unique_ptr< Datafield > createPField2D(const std::vector< std::vector< double >> &vec)