BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ArrayUtils Namespace Reference

Classes

class  CreateDataImpl
 

Functions

template<class T >
std::pair< size_t, size_t > getShape (const T &data)
 
template<class T >
CreateDataImpl::ReturnType< T > createData (const T &vec)
 
PyObjectcreateNumpyArray (const std::vector< double > &data)
 
template<class T >
decltype(auto) createVector1D (const T &data)
 
template<class T >
decltype(auto) createVector2D (const T &data)
 

Detailed Description

Array and Numpy utility functions getShape, createNumpyArray.

Function Documentation

◆ getShape()

template<class T >
std::pair< size_t, size_t > ArrayUtils::getShape ( const T &  data)

Returns shape nrows, ncols of 2D array.

Definition at line 123 of file ArrayUtils.h.

124 {
125  size_t nrows = data.size();
126  size_t ncols(0);
127  if (nrows)
128  ncols = data[0].size();
129  for (size_t row = 0; row < nrows; row++)
130  if (data[row].size() != ncols)
131  throw std::runtime_error("Util::getShape() -> Error. "
132  "Number of elements is different from row to row.");
133  return std::make_pair(nrows, ncols);
134 }

Referenced by Histogram2D::addContent(), ArrayUtils::CreateDataImpl::createDataImpl(), and Histogram2D::initFromShape().

◆ createData()

template<class T >
CreateDataImpl::ReturnType<T> ArrayUtils::createData ( const T &  vec)

Creates OutputData array from input vector.

Definition at line 61 of file ArrayUtils.h.

62 {
63  constexpr const int size = CreateDataImpl::nDim<T>::value;
64  static_assert(
65  size == 1 || size == 2,
66  "Error in ArrayUtils::createData: invalid dimensionality or type of the input argument");
67  static_assert(std::is_same<CreateDataImpl::ReturnType<T>,
68  decltype(CreateDataImpl::createDataImpl(vec))>::value,
69  "Error in ArrayUtils::createData: invalid return type.");
70  return CreateDataImpl::createDataImpl(vec);
71 }

Referenced by FitObjective::addSimulationAndData(), PyArrayImport::importArrayToOutputData(), and OutputDataReadNumpyTXTStrategy::readOutputData().

◆ createNumpyArray()

PyObject * ArrayUtils::createNumpyArray ( const std::vector< double > &  data)

Definition at line 20 of file ArrayUtils.cpp.

21 {
22  const size_t ndim(1);
23  npy_int ndim_numpy = ndim;
24  npy_intp* ndimsizes_numpy = new npy_intp[ndim];
25  ndimsizes_numpy[0] = data.size();
26 
27  // creating standalone numpy array
28  PyObject* pyarray = PyArray_SimpleNew(ndim_numpy, ndimsizes_numpy, NPY_DOUBLE);
29  delete[] ndimsizes_numpy;
30  if (pyarray == nullptr)
31  throw Exceptions::RuntimeErrorException("ExportOutputData() -> Panic in PyArray_SimpleNew");
32 
33  // getting pointer to data buffer of numpy array
34  double* array_buffer = (double*)PyArray_DATA((PyArrayObject*)pyarray);
35 
36  for (size_t index = 0; index < data.size(); ++index)
37  *array_buffer++ = data[index];
38 
39  return pyarray;
40 }
_object PyObject
Definition: PyObject.h:20

Referenced by Histogram1D::getBinCentersNumpy(), Histogram1D::getBinErrorsNumpy(), and Histogram1D::getBinValuesNumpy().

◆ createVector1D()

template<class T >
decltype(auto) ArrayUtils::createVector1D ( const T &  data)

Creates 1D vector from OutputData.

◆ createVector2D()

template<class T >
decltype(auto) ArrayUtils::createVector2D ( const T &  data)