From 1b70f1475ef41dfaa91b4fc75c70a6a3186c022f Mon Sep 17 00:00:00 2001 From: Anton Piccardo-Selg <anton.piccardo-selg@tessella.com> Date: Mon, 12 Oct 2015 13:46:00 +0100 Subject: [PATCH] Refs #13872 Add frame name to builder --- .../MDGeometry/MDHistoDimension.h | 1 + .../MDGeometry/MDHistoDimensionBuilder.h | 3 ++ .../MDGeometry/MDHistoDimensionBuilder.cpp | 21 +++++++++-- .../test/MDHistoDimensionBuilderTest.h | 36 ++++++++++++++++++- .../Geometry/test/MDHistoDimensionTest.h | 22 ++++++------ 5 files changed, 70 insertions(+), 13 deletions(-) diff --git a/Framework/Geometry/inc/MantidGeometry/MDGeometry/MDHistoDimension.h b/Framework/Geometry/inc/MantidGeometry/MDGeometry/MDHistoDimension.h index b1f79d2c1cb..6e719ea6833 100644 --- a/Framework/Geometry/inc/MantidGeometry/MDGeometry/MDHistoDimension.h +++ b/Framework/Geometry/inc/MantidGeometry/MDGeometry/MDHistoDimension.h @@ -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 diff --git a/Framework/Geometry/inc/MantidGeometry/MDGeometry/MDHistoDimensionBuilder.h b/Framework/Geometry/inc/MantidGeometry/MDGeometry/MDHistoDimensionBuilder.h index 26ffcbab3bf..cc7e302beae 100644 --- a/Framework/Geometry/inc/MantidGeometry/MDGeometry/MDHistoDimensionBuilder.h +++ b/Framework/Geometry/inc/MantidGeometry/MDGeometry/MDHistoDimensionBuilder.h @@ -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. diff --git a/Framework/Geometry/src/MDGeometry/MDHistoDimensionBuilder.cpp b/Framework/Geometry/src/MDGeometry/MDHistoDimensionBuilder.cpp index ff3e0a28571..57d5fe5db8f 100644 --- a/Framework/Geometry/src/MDGeometry/MDHistoDimensionBuilder.cpp +++ b/Framework/Geometry/src/MDGeometry/MDHistoDimensionBuilder.cpp @@ -1,6 +1,7 @@ #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); } diff --git a/Framework/Geometry/test/MDHistoDimensionBuilderTest.h b/Framework/Geometry/test/MDHistoDimensionBuilderTest.h index 77fe43e78a5..e627b4e7523 100644 --- a/Framework/Geometry/test/MDHistoDimensionBuilderTest.h +++ b/Framework/Geometry/test/MDHistoDimensionBuilderTest.h @@ -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() { diff --git a/Framework/Geometry/test/MDHistoDimensionTest.h b/Framework/Geometry/test/MDHistoDimensionTest.h index 63474366e71..65329f94d1f 100644 --- a/Framework/Geometry/test/MDHistoDimensionTest.h +++ b/Framework/Geometry/test/MDHistoDimensionTest.h @@ -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)); -- GitLab