BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
DataUtils::Array Namespace Reference

Description

Array utility functions getShape.

Functions

std::unique_ptr< DatafieldcreatePField1D (const std::vector< double > &vec)
 
std::unique_ptr< DatafieldcreatePField2D (const std::vector< std::vector< double >> &vec)
 
std::vector< double > createVector1D (const Datafield &data)
 Creates 1D vector from Datafield. More...
 
std::vector< std::vector< double > > createVector2D (const Datafield &data)
 Creates 2D vector from Datafield. More...
 
std::pair< size_t, size_t > getShape (const std::vector< std::vector< double >> &data)
 Returns shape nrows, ncols of 2D array. More...
 

Function Documentation

◆ createPField1D()

std::unique_ptr< Datafield > DataUtils::Array::createPField1D ( const std::vector< double > &  vec)

Definition at line 32 of file ArrayUtils.cpp.

33 {
34  const size_t N = vec.size();
35  return std::unique_ptr<Datafield>(new Datafield{{
36  new FixedBinAxis("axis0", N, 0.0, (double)N)}, vec});
37 }
Stores radiation power per bin.
Definition: Datafield.h:30
Axis with fixed bin size.
Definition: FixedBinAxis.h:23
#define N
Definition: mixmax.h:31

References N.

Referenced by FitObjective::addSimulationAndData(), DataUtils::Data::importArrayToDatafield(), and ReadWriteNumpyTXT::readDatafield().

◆ createPField2D()

std::unique_ptr< Datafield > DataUtils::Array::createPField2D ( const std::vector< std::vector< double >> &  vec)

Definition at line 40 of file ArrayUtils.cpp.

41 {
42  auto shape = DataUtils::Array::getShape(vec);
43  const size_t nrows = shape.first;
44  const size_t ncols = shape.second;
45 
46  if (nrows == 0 || ncols == 0)
47  throw std::runtime_error(
48  "Error in DataUtils::Array::createDataImpl: input argument contains empty dimensions");
49 
50  auto* frame = new Frame({new FixedBinAxis("axis0", ncols, 0.0, (double)ncols),
51  new FixedBinAxis("axis1", nrows, 0.0, (double)nrows)});
52 
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];
58  }
59  }
60 
61  return std::make_unique<Datafield>(frame, out);
62 }
Holds one or two axes.
Definition: Frame.h:27
std::pair< size_t, size_t > getShape(const std::vector< std::vector< double >> &data)
Returns shape nrows, ncols of 2D array.
Definition: ArrayUtils.cpp:20

References getShape().

Referenced by FitObjective::addSimulationAndData(), DataUtils::Data::importArrayToDatafield(), and ReadWriteNumpyTXT::readDatafield().

Here is the call graph for this function:

◆ createVector1D()

std::vector< double > DataUtils::Array::createVector1D ( const Datafield data)

Creates 1D vector from Datafield.

Definition at line 64 of file ArrayUtils.cpp.

65 {
66  if (data.rank() != 1)
67  throw std::runtime_error("DataUtils::Array::createVector1D() -> Error. Not 1D data.");
68 
69  std::vector<double> result = data.flatVector();
70  return result;
71 }
std::vector< double > flatVector() const
Returns copy of raw data vector.
Definition: Datafield.cpp:119
size_t rank() const
Definition: Datafield.cpp:75

References Datafield::flatVector(), and Datafield::rank().

Here is the call graph for this function:

◆ createVector2D()

std::vector< std::vector< double > > DataUtils::Array::createVector2D ( const Datafield data)

Creates 2D vector from Datafield.

Definition at line 73 of file ArrayUtils.cpp.

74 {
75  std::vector<std::vector<double>> result;
76 
77  const size_t nrows = data.axis(1).size();
78  const size_t ncols = data.axis(0).size();
79 
80  result.resize(nrows);
81 
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];
87  }
88  }
89 
90  return result;
91 }
const IAxis & axis(size_t k) const
Definition: Datafield.cpp:91
virtual size_t size() const =0
Returns the number of bins.

References Datafield::axis(), and IAxis::size().

Referenced by DataUtils::Data::FindPeaks(), and ReadWriteNumpyTXT::write2DRepresentation().

Here is the call graph for this function:

◆ getShape()

std::pair< size_t, size_t > DataUtils::Array::getShape ( const std::vector< std::vector< double >> &  data)

Returns shape nrows, ncols of 2D array.

Definition at line 20 of file ArrayUtils.cpp.

21 {
22  size_t nrows = data.size();
23  size_t ncols(0);
24  if (nrows)
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);
30 }

Referenced by createPField2D().