Skip to content
Snippets Groups Projects
IncreasingAxisValidator.cpp 1.38 KiB
Newer Older
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
//     NScD Oak Ridge National Laboratory, European Spallation Source
//     & Institut Laue - Langevin
// SPDX - License - Identifier: GPL - 3.0 +
#include "MantidAPI/IncreasingAxisValidator.h"
#include "MantidAPI/Axis.h"
#include "MantidAPI/MatrixWorkspace_fwd.h"

namespace Mantid {
namespace API {

/// Clone the current state
Kernel::IValidator_sptr IncreasingAxisValidator::clone() const {
  return boost::make_shared<IncreasingAxisValidator>(*this);
}

/**
 * Checks that X axis is in the right direction.
 *
 * @param value The workspace to check
 * @return "" if is valid, otherwise a user level description of a problem
 */
std::string IncreasingAxisValidator::checkValidity(
    const MatrixWorkspace_sptr &value) const {
  const Axis *xAxis{nullptr};
  try {
    // 0 for X axis
    xAxis = value->getAxis(0);
  } catch (Kernel::Exception::IndexError &) {
    return "No X axis available in the workspace";
  }

  // Left-most axis value should be less than the right-most, if ws has
  // more than one X axis value
  if (xAxis->length() > 1 &&
      xAxis->getValue(0) >= xAxis->getValue(xAxis->length() - 1))
    return "X axis of the workspace should be increasing from left to "
  else
    return "";
}

} // namespace API
} // namespace Mantid