Skip to content
Snippets Groups Projects
Commit 1b70f147 authored by Anton Piccardo-Selg's avatar Anton Piccardo-Selg
Browse files

Refs #13872 Add frame name to builder

parent a88e424a
No related branches found
No related tags found
No related merge requests found
......@@ -23,6 +23,7 @@ namespace Geometry {
*/
class MANTID_GEOMETRY_DLL MDHistoDimension : public IMDDimension {
public:
/** Constructor for simple MDHistoDimension
* @param name :: full name of the axis
* @param ID :: identifier string
......
......@@ -28,6 +28,7 @@ public:
void setMin(double min);
void setMax(double max);
void setNumBins(size_t nbins);
void setFrameName(std::string frameName);
size_t getNumBins() const { return m_nbins; }
MDHistoDimension *createRaw();
......@@ -52,6 +53,8 @@ private:
bool m_minSet;
/// Flag indicating that max has been set.
bool m_maxSet;
/// Frame name
std::string m_frameName;
};
/// Handy typedef for collection of builders.
......
#include "MantidGeometry/MDGeometry/MDHistoDimensionBuilder.h"
#include "MantidKernel/Strings.h"
#include "MantidKernel/UnitLabelTypes.h"
#include "MantidGeometry/MDGeometry/MDFrameFactory.h"
namespace Mantid {
namespace Geometry {
......@@ -8,7 +9,7 @@ namespace Geometry {
/// Constructor
MDHistoDimensionBuilder::MDHistoDimensionBuilder()
: m_units(Kernel::Units::Symbol::EmptyLabel), m_min(0), m_max(0),
m_nbins(0), m_minSet(false), m_maxSet(false) {}
m_nbins(0), m_minSet(false), m_maxSet(false), m_frameName("") {}
/// Destructor
MDHistoDimensionBuilder::~MDHistoDimensionBuilder() {}
......@@ -38,6 +39,7 @@ operator=(const MDHistoDimensionBuilder &other) {
m_nbins = other.m_nbins;
m_maxSet = other.m_maxSet;
m_minSet = other.m_minSet;
m_frameName = other.m_frameName;
}
return *this;
}
......@@ -89,6 +91,14 @@ Setter for the dimension nbins
*/
void MDHistoDimensionBuilder::setNumBins(size_t nbins) { m_nbins = nbins; }
/**
* Setter for the frame name
* @param frameName: the frame name
*/
void MDHistoDimensionBuilder::setFrameName(std::string frameName) {
m_frameName = frameName;
}
/*
Creational method
@return fully constructed MDHistoDimension instance.
......@@ -122,7 +132,14 @@ MDHistoDimension *MDHistoDimensionBuilder::createRaw() {
throw std::invalid_argument(
"Cannot create MDHistogramDimension without setting a n bins.");
}
return new MDHistoDimension(m_name, m_id, m_units, coord_t(m_min),
// Select a Mantid Frame. Use FrameName if available else just use name.
auto frameFactory = Mantid::Geometry::makeMDFrameFactoryChain();
std::string frameNameForFactory = m_frameName.empty() ? m_name : m_frameName;
Mantid::Geometry::MDFrameArgument frameArgument(frameNameForFactory, m_units);
auto frame = frameFactory->create(frameArgument);
return new MDHistoDimension(m_name, m_id, *frame, coord_t(m_min),
coord_t(m_max), m_nbins);
}
......
......@@ -3,6 +3,8 @@
#include <cxxtest/TestSuite.h>
#include "MantidGeometry/MDGeometry/MDHistoDimensionBuilder.h"
#include "MantidGeometry/MDGeometry/QLab.h"
#include "MantidGeometry/MDGeometry/QSample.h"
using Mantid::Geometry::MDHistoDimension;
using Mantid::Geometry::MDHistoDimensionBuilder;
......@@ -18,15 +20,20 @@ public:
builder.setMin(0);
builder.setMax(2);
builder.setNumBins(1);
builder.setFrameName("QLab");
MDHistoDimension *product = builder.createRaw();
TS_ASSERT_EQUALS("testDimName", product->getName());
TS_ASSERT_EQUALS("testDimId", product->getDimensionId());
TS_ASSERT_EQUALS("A^-1", product->getUnits().ascii());
Mantid::Kernel::InverseAngstromsUnit expectedUnit;
TS_ASSERT_EQUALS(expectedUnit.getUnitLabel(), product->getUnits().ascii());
TS_ASSERT_EQUALS(0, product->getMinimum());
TS_ASSERT_EQUALS(2, product->getMaximum());
TS_ASSERT_EQUALS(1, product->getNBins());
TSM_ASSERT_THROWS_NOTHING(
"Should have selected QLab as the frame",
dynamic_cast<const Mantid::Geometry::QLab &>(product->getMDFrame()));
delete product;
}
......@@ -38,6 +45,30 @@ public:
builder.setMin(0);
builder.setMax(2);
builder.setNumBins(1);
builder.setFrameName("QSample");
IMDDimension_sptr product;
TS_ASSERT_THROWS_NOTHING(product = builder.create());
TS_ASSERT_EQUALS("testDimName", product->getName());
TS_ASSERT_EQUALS("testDimId", product->getDimensionId());
Mantid::Kernel::InverseAngstromsUnit expectedUnit;
TS_ASSERT_EQUALS(expectedUnit.getUnitLabel(), product->getUnits().ascii());
TS_ASSERT_EQUALS(0, product->getMinimum());
TS_ASSERT_EQUALS(2, product->getMaximum());
TS_ASSERT_EQUALS(1, product->getNBins());
TSM_ASSERT_THROWS_NOTHING(
"Should have selected QSample as the frame",
dynamic_cast<const Mantid::Geometry::QSample &>(product->getMDFrame()));
}
void testConstruct_without_frame_name() {
MDHistoDimensionBuilder builder;
builder.setName("testDimName");
builder.setId("testDimId");
builder.setUnits("A^-1");
builder.setMin(0);
builder.setMax(2);
builder.setNumBins(1);
IMDDimension_sptr product;
TS_ASSERT_THROWS_NOTHING(product = builder.create());
......@@ -47,6 +78,9 @@ public:
TS_ASSERT_EQUALS(0, product->getMinimum());
TS_ASSERT_EQUALS(2, product->getMaximum());
TS_ASSERT_EQUALS(1, product->getNBins());
TSM_ASSERT_THROWS_NOTHING(
"Should have selected GeneralFrame as the frame",
dynamic_cast<const Mantid::Geometry::GeneralFrame &>(product->getMDFrame()));
}
void testCopy() {
......
......@@ -18,13 +18,15 @@ public:
void test_constructor_throws() {
coord_t min = 10;
coord_t max = 1; // min > max !
Mantid::Geometry::GeneralFrame frame("My General Frame", "Furlongs");
TSM_ASSERT_THROWS("Should throw if min > max!",
MDHistoDimension("name", "id", "Furlongs", min, max, 15),
MDHistoDimension("name", "id", frame, min, max, 15),
std::invalid_argument);
}
void test_constructor() {
MDHistoDimension d("name", "id", "Furlongs", -10, 20.0, 15);
Mantid::Geometry::GeneralFrame frame("My General Frame", "Furlongs");
MDHistoDimension d("name", "id", frame, -10, 20.0, 15);
TS_ASSERT_EQUALS(d.getName(), "name");
TS_ASSERT_EQUALS(d.getDimensionId(), "id");
TS_ASSERT_EQUALS(d.getUnits(), "Furlongs");
......@@ -37,14 +39,14 @@ public:
void test_toXMLStringIntegrated() {
std::string expectedXML =
std::string("<Dimension ID=\"id\">") + "<Name>name</Name>" +
"<Units>Furlongs</Units>" + "<Frame>Unknown frame</Frame>" +
"<Units>Furlongs</Units>" + "<Frame>My General Frame</Frame>" +
"<UpperBounds>20.0000</UpperBounds>" +
"<LowerBounds>-10.0000</LowerBounds>" +
"<NumberOfBins>1</NumberOfBins>" + "<Integrated>" +
"<UpperLimit>20.0000</UpperLimit>" +
"<LowerLimit>-10.0000</LowerLimit>" + "</Integrated>" + "</Dimension>";
MDHistoDimension dimension("name", "id", "Furlongs", -10, 20.0, 1);
Mantid::Geometry::GeneralFrame frame("Furlongs", "Furlongs");
MDHistoDimension dimension("name", "id", frame, -10, 20.0, 1);
std::string actualXML = dimension.toXMLString();
TS_ASSERT_EQUALS(expectedXML, actualXML);
}
......@@ -52,20 +54,20 @@ public:
void test_toXMLStringNotIntegrated() {
std::string expectedXML =
std::string("<Dimension ID=\"id\">") + "<Name>name</Name>" +
"<Units>Furlongs</Units>" + "<Frame>Unknown frame</Frame>" +
"<Units>Furlongs</Units>" + "<Frame>My General Frame</Frame>" +
"<UpperBounds>20.0000</UpperBounds>" +
"<LowerBounds>-10.0000</LowerBounds>" +
"<NumberOfBins>15</NumberOfBins>" + "</Dimension>";
MDHistoDimension dimension("name", "id", "Furlongs", -10, 20.0, 15);
Mantid::Geometry::GeneralFrame frame("My General Frame", "Furlongs");
MDHistoDimension dimension("name", "id", frame, -10, 20.0, 15);
std::string actualXML = dimension.toXMLString();
TS_ASSERT_EQUALS(expectedXML, actualXML);
}
void test_getMDUnits_gives_label_unit() {
Kernel::UnitLabel unitLabel("Meters");
MDHistoDimension dimension("Distance", "Dist", unitLabel, 0, 10, 1);
Mantid::Geometry::GeneralFrame frame("Length", unitLabel);
MDHistoDimension dimension("Distance", "Dist", frame, 0, 10, 1);
const Mantid::Kernel::MDUnit &unit = dimension.getMDUnits();
TS_ASSERT_EQUALS(unit.getUnitLabel(), unitLabel);
TS_ASSERT(dynamic_cast<const Mantid::Kernel::LabelUnit *>(&unit));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment