16#include <boost/python/class.hpp>
17#include <boost/python/copy_const_reference.hpp>
18#include <boost/python/overloads.hpp>
19#include <boost/python/register_ptr_to_python.hpp>
20#include <boost/python/ssize_t.hpp>
24#define PY_ARRAY_UNIQUE_SYMBOL API_ARRAY_API
25#define NO_IMPORT_ARRAY
26#include <numpy/arrayobject.h>
55PyObject *extractAxisValues(
Axis &self) {
56 const auto nvalues =
static_cast<npy_intp
>(self.
length());
57 npy_intp arrayDims[1] = {nvalues};
63 array = PyArray_SimpleNew(1, arrayDims, NPY_DOUBLE);
64 }
else if (self.
isText()) {
65 array = PyList_New(
static_cast<Py_ssize_t
>(nvalues));
68 throw std::invalid_argument(
"Unknown axis type. Cannot extract to Numpy");
72 for (npy_intp i = 0; i < nvalues; ++i) {
74 PyObject *
value = PyFloat_FromDouble(self.
getValue(
static_cast<size_t>(i)));
76 PyArray_SETITEM(
reinterpret_cast<PyArrayObject *
>(array),
reinterpret_cast<char *
>(pos),
value);
78 const std::string s = self.
label(
static_cast<size_t>(i));
79 PyObject *
value = to_python_value<const std::string &>()(s);
80 PyList_SetItem(array, (Py_ssize_t)i,
value);
88 register_ptr_to_python<Axis *>();
91 class_<Axis, boost::noncopyable>(
"MantidAxis", no_init)
92 .def(
"length", &
Axis::length, arg(
"self"),
"Returns the length of the axis")
93 .def(
"title", (
const std::string &(
Axis::*)()
const) &
Axis::title, arg(
"self"),
94 return_value_policy<copy_const_reference>(),
"Get the axis title")
95 .def(
"isSpectra", &
Axis::isSpectra, arg(
"self"),
"Returns true if this is a SpectraAxis")
96 .def(
"isNumeric", &
Axis::isNumeric, arg(
"self"),
"Returns true if this is a NumericAxis")
97 .def(
"isText", &
Axis::isText, arg(
"self"),
"Returns true if this is a TextAxis")
98 .def(
"label", &
Axis::label, (arg(
"self"), arg(
"index")),
"Return the axis label")
100 return_value_policy<copy_const_reference>(),
"Returns the unit object for the axis")
102 Axis_getValue((arg(
"self"), arg(
"index"), arg(
"vertical_index")),
103 "Returns the value at the given point on the Axis. "
104 "The vertical axis index [default=0]"))
106 ((arg(
"self"), arg(
"value")), return_value_policy<copy_const_reference>(),
107 "Returns the index of the given value on the Axis. "))
108 .def(
"extractValues", &extractAxisValues, arg(
"self"),
"Return a numpy array of the axis values")
110 "Returns the index of the closest to the given value on the axis")
111 .def(
"setUnit", &
Axis::setUnit, (arg(
"self"), arg(
"unit_name")), return_value_policy<copy_const_reference>(),
112 "Set the unit for this axis by name.")
113 .def(
"setValue", &
Axis::setValue, (arg(
"self"), arg(
"index"), arg(
"value")),
"Set a value at the given index")
114 .def(
"getMin", &
Axis::getMin, arg(
"self"),
"Get min value specified on the axis")
115 .def(
"getMax", &
Axis::getMax, arg(
"self"),
"Get max value specified on the axis")
134 class_<SpectraAxis, bases<Axis>, boost::noncopyable>(
"SpectraAxis", no_init)
135 .def(
"create", &
createSpectraAxis, arg(
"workspace"), return_internal_reference<>(),
136 "Creates a new SpectraAxis referencing the given workspace")
137 .staticmethod(
"create");
153 class_<NumericAxis, bases<Axis>, boost::noncopyable>(
"NumericAxis", no_init)
155 "Creates a new NumericAxis of a specified length")
156 .staticmethod(
"create");
173 class_<BinEdgeAxis, bases<NumericAxis>, boost::noncopyable>(
"BinEdgeAxis", no_init)
175 "Creates a new BinEdgeAxis of a specified length")
176 .staticmethod(
"create");
191 class_<TextAxis, bases<Axis>, boost::noncopyable>(
"TextAxis", no_init)
193 "Set the label at the given entry")
194 .def(
"label", &
TextAxis::label, (arg(
"self"), arg(
"index")),
"Return the label at the given position")
195 .def(
"create", &
createTextAxis, arg(
"length"), return_internal_reference<>(),
196 "Creates a new TextAxis of a specified length")
197 .staticmethod(
"create");
double value
The value of the point.
#define GET_POINTER_SPECIALIZATION(TYPE)
tagPyArrayObject PyArrayObject
Axis * createBinEdgeAxis(int length)
Creates a BinEdgeAxis.
void export_BinEdgeAxis()
void export_NumericAxis()
void export_SpectraAxis()
Axis * createTextAxis(int length)
Creates a TextAxis.
Axis * createSpectraAxis(const MatrixWorkspace *const ws)
Creates a SpectraAxis referencing a given workspace.
Axis * createNumericAxis(int length)
Creates a NumericAxis.
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(valueAsPrettyStrOverloader, valueAsPrettyStr, 0, 2) void export_Property()
#define GNU_DIAG_OFF(x)
This is a collection of macros for turning compiler warnings off in a controlled manner.
Class to represent the axis of a workspace.
virtual double getMin() const =0
returns min value defined on axis
virtual double getMax() const =0
returns max value defined on axis
const std::string & title() const
Returns the user-defined title for this axis.
virtual const std::shared_ptr< Kernel::Unit > & setUnit(const std::string &unitName)
Set the unit on the Axis.
virtual std::string label(const std::size_t &index) const =0
Returns a text label of for a value Note that the index here is not the index of a value,...
virtual bool isText() const
Returns true if the axis is Text.
virtual size_t indexOfValue(const double value) const =0
Find the index of the given double value.
virtual std::size_t length() const =0
Get the length of the axis.
virtual void setValue(const std::size_t &index, const double &value)=0
Sets the value at the specified index.
virtual bool isNumeric() const
Returns true if the axis is numeric.
const std::shared_ptr< Kernel::Unit > & unit() const
The unit for this axis.
double getValue(const std::size_t &index, const std::size_t &verticalIndex=0) const
Gets the value at the specified index.
virtual bool isSpectra() const
Returns true is the axis is a Spectra axis.
Stores numeric values that are assumed to be bin edge values.
Base MatrixWorkspace Abstract Class.
Class to represent a numeric axis of a workspace.
Class to represent the spectra axis of a workspace.
Class to represent a text axis of a workspace.
void setLabel(const std::size_t &index, const std::string &lbl)
Set the label at the given index.
std::string label(const std::size_t &index) const override
Get the label at the specified index.
std::shared_ptr< Unit > Unit_sptr
Shared pointer to the Unit base class.
int32_t specnum_t
Typedef for a spectrum Number.