示例#1
0
/// Constructs Points from BinEdges, where each point is a bin center.
Points::Points(const BinEdges &edges) {
  if (!edges)
    return;
  if (edges.size() == 1)
    throw std::logic_error("Points: Cannot construct from BinEdges of size 1");
  if (edges.empty()) {
    m_data = Kernel::make_cow<HistogramX>(0);
    return;
  }

  std::vector<double> data(edges.size() - 1);
  for (size_t i = 0; i < data.size(); ++i) {
    data[i] = (0.5 * (edges[i] + edges[i + 1]));
  }
  m_data = Kernel::make_cow<HistogramX>(std::move(data));
}
/// Move-constructs FrequencyStandardDeviations from CountStandardDeviations and
/// bin width based on BinEdges.
FrequencyStandardDeviations::FrequencyStandardDeviations(
    CountStandardDeviations &&counts, const BinEdges &edges) {
  if (!counts)
    return;
  if (!edges)
    throw std::logic_error("FrequencyStandardDeviations: Cannot construct from "
                           "CountStandardDeviations -- BinEdges are NULL.");
  if ((counts.size() + 1) != edges.size())
    if (counts.size() != 0 || edges.size() != 0)
      throw std::logic_error("FrequencyStandardDeviations: Cannot construct "
                             "from CountStandardDeviations -- BinEdges size "
                             "does not match.");
  // Cannot move counts private data since it is of different type.
  m_data = counts.cowData();
  counts = Kernel::cow_ptr<HistogramE>(nullptr);
  auto &data = m_data.access();
  for (size_t i = 0; i < data.size(); ++i) {
    data[i] /= edges[i + 1] - edges[i];
  }
}
示例#3
0
/// Move-constructs FrequencyVariances from CountVariances and bin width based
/// on BinEdges.
FrequencyVariances::FrequencyVariances(CountVariances &&counts,
                                       const BinEdges &edges) {
  if (!counts)
    return;
  if (!edges)
    throw std::logic_error("FrequencyVariances: Cannot construct from "
                           "CountVariances -- BinEdges are NULL.");
  if ((counts.size() + 1) != edges.size())
    if (!counts.empty() || !edges.empty())
      throw std::logic_error("FrequencyVariances: Cannot construct from "
                             "CountVariances -- BinEdges size does not match.");
  // Cannot move counts private data since it is of different type.
  m_data = counts.cowData();
  counts = Kernel::cow_ptr<HistogramE>(nullptr);
  auto &data = m_data.access();
  for (size_t i = 0; i < data.size(); ++i) {
    const auto width = edges[i + 1] - edges[i];
    data[i] /= width * width;
  }
}