Skip to content
Snippets Groups Projects
BinEdges.cpp 902 B
Newer Older
#include "MantidKernel/Histogram/BinEdges.h"
#include "MantidKernel/Histogram/Points.h"

namespace Mantid {
namespace Kernel {

BinEdges::BinEdges(const Points &points) {
  if (!points)
    return;
  m_data = make_cow<std::vector<double>>();
  const size_t numPoints = points.size();
  const size_t numEdges = numPoints + 1;

  if (numPoints < 1)
    return;
  auto &data = m_data.access();
  data.resize(numEdges);

  if (numPoints == 1) {
    data[0] = points[0] - 0.5;
    data[numPoints] = points[0] + 0.5;
    return;
  }

  // Handle the front and back points outside
  for (size_t i = 0; i < numPoints - 1; ++i) {
    data[i + 1] = 0.5 * (points[i + 1] + points[i]);
  }
  // Now deal with the end points
  data[0] = points[0] - (data[1] - points[0]);
  data[numPoints] =
      points[numPoints - 1] + (points[numPoints - 1] - data[numEdges - 2]);
}

} // namespace Kernel
} // namespace Mantid