Newer
Older
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
#include "MantidAlgorithms/ConvertTableToMatrixWorkspace.h"
#include "MantidAPI/ITableWorkspace.h"
#include "MantidKernel/UnitFactory.h"
#include "MantidKernel/Unit.h"
#include "MantidKernel/MandatoryValidator.h"
#include <boost/mpl/if.hpp>
#include <boost/type_traits.hpp>
#include <sstream>
namespace Mantid {
namespace Algorithms {
// Register the algorithm into the AlgorithmFactory
DECLARE_ALGORITHM(ConvertTableToMatrixWorkspace)
using namespace Kernel;
using namespace API;
void ConvertTableToMatrixWorkspace::init() {
declareProperty(new WorkspaceProperty<API::ITableWorkspace>(
"InputWorkspace", "", Direction::Input),
"An input TableWorkspace.");
declareProperty(
new WorkspaceProperty<>("OutputWorkspace", "", Direction::Output),
"An output Workspace2D.");
declareProperty("ColumnX", "",
boost::make_shared<MandatoryValidator<std::string>>(),
"The column name for the X vector.");
declareProperty("ColumnY", "",
boost::make_shared<MandatoryValidator<std::string>>(),
"The column name for the Y vector.");
declareProperty("ColumnE", "",
"The column name for the E vector (optional).");
void ConvertTableToMatrixWorkspace::exec() {
ITableWorkspace_const_sptr inputWorkspace = getProperty("InputWorkspace");
std::string columnX = getProperty("ColumnX");
std::string columnY = getProperty("ColumnY");
std::string columnE = getProperty("ColumnE");
size_t nrows = inputWorkspace->rowCount();
throw std::runtime_error("The input table is empty");
}
std::vector<double> X(nrows);
std::vector<double> Y(nrows);
inputWorkspace->getColumn(columnX)->numeric_fill(X);
inputWorkspace->getColumn(columnY)->numeric_fill(Y);
MatrixWorkspace_sptr outputWorkspace =
WorkspaceFactory::Instance().create("Workspace2D", 1, nrows, nrows);
outputWorkspace->dataX(0).assign(X.begin(), X.end());
outputWorkspace->dataY(0).assign(Y.begin(), Y.end());
if (!columnE.empty()) {
std::vector<double> E(nrows);
inputWorkspace->getColumn(columnE)->numeric_fill(E);
outputWorkspace->dataE(0).assign(E.begin(), E.end());
auto labelX = boost::dynamic_pointer_cast<Units::Label>(
UnitFactory::Instance().create("Label"));
labelX->setLabel(columnX);
outputWorkspace->getAxis(0)->unit() = labelX;
outputWorkspace->setYUnitLabel(columnY);
setProperty("OutputWorkspace", outputWorkspace);
}
} // namespace Algorithms
} // namespace Mantid