Skip to content
Snippets Groups Projects
ComponentInfo.cpp 1.54 KiB
Newer Older
Owen Arnold's avatar
Owen Arnold committed
#include "MantidAPI/ComponentInfo.h"
#include "MantidGeometry/IComponent.h"
#include "MantidBeamline/ComponentInfo.h"
#include <boost/make_shared.hpp>
Owen Arnold's avatar
Owen Arnold committed
#include <exception>
#include <string>
#include <boost/make_shared.hpp>
Owen Arnold's avatar
Owen Arnold committed
#include <sstream>
Owen Arnold's avatar
Owen Arnold committed
namespace Mantid {
namespace API {


/**
 * Constructor
 * @brief ComponentInfo::ComponentInfo
 * @param componentInfo
Owen Arnold's avatar
Owen Arnold committed
 * @param componentIds : ComponentIDs ordered by component
Owen Arnold's avatar
Owen Arnold committed
ComponentInfo::ComponentInfo(
    const Mantid::Beamline::ComponentInfo &componentInfo,
Owen Arnold's avatar
Owen Arnold committed
    std::vector<Mantid::Geometry::IComponent *> componentIds)
    : m_componentInfo(componentInfo),
      m_componentIds(boost::make_shared<std::vector<Geometry::ComponentID>>(
          std::move(componentIds))),
      m_compIDToIndex(boost::make_shared<
          std::unordered_map<Geometry::IComponent *, size_t>>()) {
Owen Arnold's avatar
Owen Arnold committed
  /*
   * Ideally we would check here that componentIds.size() ==
   * m_componentInfo.size().
   * Currently that check would break too much in Mantid.
Owen Arnold's avatar
Owen Arnold committed
  for (size_t i = 0; i < m_componentInfo.size(); ++i) {
    (*m_compIDToIndex)[(*m_componentIds)[i]] = i;
Owen Arnold's avatar
Owen Arnold committed
  }
}

std::vector<size_t>
Owen Arnold's avatar
Owen Arnold committed
ComponentInfo::detectorIndices(size_t componentIndex) const {
  return m_componentInfo.detectorIndices(componentIndex);
std::vector<Geometry::IComponent *> ComponentInfo::componentIds() const {
  return *m_componentIds;
}

Owen Arnold's avatar
Owen Arnold committed
size_t ComponentInfo::size() const { return m_componentInfo.size(); }

size_t ComponentInfo::indexOf(Geometry::IComponent *id) const {
  return m_compIDToIndex->at(id);
Owen Arnold's avatar
Owen Arnold committed
}

} // namespace API
} // namespace Mantid