From a88e424a644b8b447e6b666467c06c11c9318f26 Mon Sep 17 00:00:00 2001 From: Anton Piccardo-Selg <anton.piccardo-selg@tessella.com> Date: Mon, 12 Oct 2015 12:09:14 +0100 Subject: [PATCH] Refs #13872 Removal of string-based constructor for MDHistoDim --- .../ReflectometryTransform.h | 3 +- .../src/ReflectometryTransform.cpp | 6 +- .../DataObjects/test/MDEventWorkspaceTest.h | 10 ++- .../DataObjects/test/MDHistoWorkspaceTest.h | 82 +++++++++++-------- .../src/ConvertToReflectometryQ.cpp | 18 +++- .../test/ConvertToReflectometryQTest.h | 27 ++++++ 6 files changed, 98 insertions(+), 48 deletions(-) diff --git a/Framework/DataObjects/inc/MantidDataObjects/ReflectometryTransform.h b/Framework/DataObjects/inc/MantidDataObjects/ReflectometryTransform.h index df759cbde18..c05985fe62b 100644 --- a/Framework/DataObjects/inc/MantidDataObjects/ReflectometryTransform.h +++ b/Framework/DataObjects/inc/MantidDataObjects/ReflectometryTransform.h @@ -75,7 +75,8 @@ public: // Execute the strategy to produce a transformed, output MDWorkspace Mantid::API::IMDEventWorkspace_sptr executeMD(Mantid::API::MatrixWorkspace_const_sptr inputWs, - Mantid::API::BoxController_sptr boxController) const; + Mantid::API::BoxController_sptr boxController, + Mantid::Geometry::MDFrame_uptr frame) const; // Execute the strategy to produce a transformed, output group of Matrix (2D) // Workspaces diff --git a/Framework/DataObjects/src/ReflectometryTransform.cpp b/Framework/DataObjects/src/ReflectometryTransform.cpp index c07b6481867..67e826a32c6 100644 --- a/Framework/DataObjects/src/ReflectometryTransform.cpp +++ b/Framework/DataObjects/src/ReflectometryTransform.cpp @@ -208,12 +208,12 @@ void createVerticalAxis(MatrixWorkspace *const ws, const MantidVec &xAxisVec, */ Mantid::API::IMDEventWorkspace_sptr ReflectometryTransform::executeMD( Mantid::API::MatrixWorkspace_const_sptr inputWs, - BoxController_sptr boxController) const { + BoxController_sptr boxController, Mantid::Geometry::MDFrame_uptr frame) const { MDHistoDimension_sptr dim0 = MDHistoDimension_sptr(new MDHistoDimension( - m_d0Label, m_d0ID, "(Ang^-1)", static_cast<Mantid::coord_t>(m_d0Min), + m_d0Label, m_d0ID, *frame, static_cast<Mantid::coord_t>(m_d0Min), static_cast<Mantid::coord_t>(m_d0Max), m_d0NumBins)); MDHistoDimension_sptr dim1 = MDHistoDimension_sptr(new MDHistoDimension( - m_d1Label, m_d1ID, "(Ang^-1)", static_cast<Mantid::coord_t>(m_d1Min), + m_d1Label, m_d1ID, *frame, static_cast<Mantid::coord_t>(m_d1Min), static_cast<Mantid::coord_t>(m_d1Max), m_d1NumBins)); auto ws = createMDWorkspace(dim0, dim1, boxController); diff --git a/Framework/DataObjects/test/MDEventWorkspaceTest.h b/Framework/DataObjects/test/MDEventWorkspaceTest.h index 16ccafffd9b..314e810a591 100644 --- a/Framework/DataObjects/test/MDEventWorkspaceTest.h +++ b/Framework/DataObjects/test/MDEventWorkspaceTest.h @@ -92,10 +92,10 @@ public: void test_copy_constructor() { MDEventWorkspace<MDLeanEvent<3>, 3> ew3; - + Mantid::Geometry::GeneralFrame frame("m", "m"); for (size_t i = 0; i < 3; i++) { ew3.addDimension( - MDHistoDimension_sptr(new MDHistoDimension("x", "x", "m", -1, 1, 0))); + MDHistoDimension_sptr(new MDHistoDimension("x", "x", frame, -1, 1, 0))); } ew3.initialize(); ew3.getBoxController()->setSplitThreshold(1); @@ -154,20 +154,22 @@ public: void test_initialize_throws() { IMDEventWorkspace *ew = new MDEventWorkspace<MDLeanEvent<3>, 3>(); + Mantid::Geometry::GeneralFrame frame("m", "m"); TS_ASSERT_THROWS(ew->initialize(), std::runtime_error); for (size_t i = 0; i < 5; i++) ew->addDimension( - MDHistoDimension_sptr(new MDHistoDimension("x", "x", "m", -1, 1, 0))); + MDHistoDimension_sptr(new MDHistoDimension("x", "x", frame, -1, 1, 0))); TS_ASSERT_THROWS(ew->initialize(), std::runtime_error); delete ew; } void test_initialize() { IMDEventWorkspace *ew = new MDEventWorkspace<MDLeanEvent<3>, 3>(); + Mantid::Geometry::GeneralFrame frame("m", "m"); TS_ASSERT_THROWS(ew->initialize(), std::runtime_error); for (size_t i = 0; i < 3; i++) ew->addDimension( - MDHistoDimension_sptr(new MDHistoDimension("x", "x", "m", -1, 1, 0))); + MDHistoDimension_sptr(new MDHistoDimension("x", "x", frame, -1, 1, 0))); TS_ASSERT_THROWS_NOTHING(ew->initialize()); delete ew; } diff --git a/Framework/DataObjects/test/MDHistoWorkspaceTest.h b/Framework/DataObjects/test/MDHistoWorkspaceTest.h index e978ead39a4..cd95eb6326c 100644 --- a/Framework/DataObjects/test/MDHistoWorkspaceTest.h +++ b/Framework/DataObjects/test/MDHistoWorkspaceTest.h @@ -79,10 +79,11 @@ public: //-------------------------------------------------------------------------------------- void test_constructor() { - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); - MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", "m", -10, 10, 5)); - MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", "m", -10, 10, 5)); - MDHistoDimension_sptr dimT(new MDHistoDimension("T", "t", "m", -10, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); + MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", frame, -10, 10, 5)); + MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", frame, -10, 10, 5)); + MDHistoDimension_sptr dimT(new MDHistoDimension("T", "t", frame, -10, 10, 5)); MDHistoWorkspace ws(dimX, dimY, dimZ, dimT); @@ -155,8 +156,9 @@ public: //--------------------------------------------------------------------------------------------------- /** Create a dense histogram with only 2 dimensions */ void test_constructor_fewerDimensions() { - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); - MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", "m", -10, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); + MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", frame, -10, 10, 5)); MDHistoWorkspace ws(dimX, dimY); @@ -184,9 +186,10 @@ public: /** Create a dense histogram with 7 dimensions */ void test_constructor_MoreThanFourDimensions() { std::vector<MDHistoDimension_sptr> dimensions; + Mantid::Geometry::GeneralFrame frame("m", "m"); for (size_t i = 0; i < 7; i++) { dimensions.push_back(MDHistoDimension_sptr( - new MDHistoDimension("Dim", "Dim", "m", -10, 10, 3))); + new MDHistoDimension("Dim", "Dim", frame, -10, 10, 3))); } MDHistoWorkspace ws(dimensions); @@ -239,7 +242,8 @@ public: //--------------------------------------------------------------------------------------------------- void test_getVertexesArray_1D() { - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); MDHistoWorkspace ws(dimX); size_t numVertices; coord_t *v1 = ws.getVertexesArray(0, numVertices); @@ -256,8 +260,9 @@ public: //--------------------------------------------------------------------------------------------------- void test_getVertexesArray_2D() { - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); - MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", "m", -10, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); + MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", frame, -10, 10, 5)); MDHistoWorkspace ws(dimX, dimY); size_t numVertices, i; @@ -281,9 +286,10 @@ public: //--------------------------------------------------------------------------------------------------- void test_getVertexesArray_3D() { - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); - MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", "m", -9, 10, 5)); - MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", "m", -8, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); + MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", frame, -9, 10, 5)); + MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", frame, -8, 10, 5)); MDHistoWorkspace ws(dimX, dimY, dimZ); size_t numVertices, i; @@ -297,10 +303,11 @@ public: //--------------------------------------------------------------------------------------------------- void test_getCenter_3D() { + Mantid::Geometry::GeneralFrame frame("m", "m"); MDHistoDimension_sptr dimX( - new MDHistoDimension("X", "x", "m", -10, 10, 20)); - MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", "m", -9, 10, 19)); - MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", "m", -8, 10, 18)); + new MDHistoDimension("X", "x", frame, -10, 10, 20)); + MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", frame, -9, 10, 19)); + MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", frame, -8, 10, 18)); MDHistoWorkspace ws(dimX, dimY, dimZ); VMD v = ws.getCenter(0); TS_ASSERT_DELTA(v[0], -9.5, 1e-5); @@ -311,13 +318,14 @@ public: //--------------------------------------------------------------------------------------------------- /** Test for a possible seg-fault if nx != ny etc. */ void test_uneven_numbers_of_bins() { - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); MDHistoDimension_sptr dimY( - new MDHistoDimension("Y", "y", "m", -10, 10, 10)); + new MDHistoDimension("Y", "y", frame, -10, 10, 10)); MDHistoDimension_sptr dimZ( - new MDHistoDimension("Z", "z", "m", -10, 10, 20)); + new MDHistoDimension("Z", "z", frame, -10, 10, 20)); MDHistoDimension_sptr dimT( - new MDHistoDimension("T", "t", "m", -10, 10, 10)); + new MDHistoDimension("T", "t", frame, -10, 10, 10)); MDHistoWorkspace ws(dimX, dimY, dimZ, dimT); @@ -348,10 +356,11 @@ public: //--------------------------------------------------------------------------------------------------- void test_createIterator() { + Mantid::Geometry::GeneralFrame frame("m", "m"); MDHistoDimension_sptr dimX( - new MDHistoDimension("X", "x", "m", -10, 10, 10)); - MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", "m", -9, 10, 10)); - MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", "m", -8, 10, 10)); + new MDHistoDimension("X", "x", frame, -10, 10, 10)); + MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", frame, -9, 10, 10)); + MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", frame, -8, 10, 10)); MDHistoWorkspace ws(dimX, dimY, dimZ); IMDIterator *it = ws.createIterator(); TS_ASSERT(it); @@ -369,14 +378,15 @@ public: //--------------------------------------------------------------------------------------------------- // Test for the IMDWorkspace aspects of MDWorkspace. void testGetNonIntegratedDimensions() { + Mantid::Geometry::GeneralFrame frame("m", "m"); MDHistoDimension_sptr dimX( - new MDHistoDimension("X", "x", "m", -10, 10, 1)); // Integrated. + new MDHistoDimension("X", "x", frame, -10, 10, 1)); // Integrated. MDHistoDimension_sptr dimY( - new MDHistoDimension("Y", "y", "m", -10, 10, 10)); + new MDHistoDimension("Y", "y", frame, -10, 10, 10)); MDHistoDimension_sptr dimZ( - new MDHistoDimension("Z", "z", "m", -10, 10, 20)); + new MDHistoDimension("Z", "z", frame, -10, 10, 20)); MDHistoDimension_sptr dimT( - new MDHistoDimension("T", "t", "m", -10, 10, 10)); + new MDHistoDimension("T", "t", frame, -10, 10, 10)); MDHistoWorkspace ws(dimX, dimY, dimZ, dimT); Mantid::Geometry::VecIMDDimension_const_sptr vecNonIntegratedDims = @@ -419,11 +429,11 @@ public: "<RefDimensionId>z</RefDimensionId>" + "</ZDimension>" + "<TDimension>" + "<RefDimensionId>t</RefDimensionId>" + "</TDimension>" + "</DimensionSet>"; - - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); - MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", "m", -10, 10, 5)); - MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", "m", -10, 10, 5)); - MDHistoDimension_sptr dimT(new MDHistoDimension("T", "t", "m", -10, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); + MDHistoDimension_sptr dimY(new MDHistoDimension("Y", "y", frame, -10, 10, 5)); + MDHistoDimension_sptr dimZ(new MDHistoDimension("Z", "z", frame, -10, 10, 5)); + MDHistoDimension_sptr dimT(new MDHistoDimension("T", "t", frame, -10, 10, 5)); MDHistoWorkspace ws(dimX, dimY, dimZ, dimT); @@ -1001,7 +1011,8 @@ public: } void test_displayNormalizationDefault() { - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); // Constructor variant 1. MDHistoWorkspace ws1(dimX); TS_ASSERT_EQUALS(Mantid::API::NoNormalization, ws1.displayNormalization()); @@ -1018,10 +1029,9 @@ public: } void test_setDisplayNormalization() { - auto targetDisplayNormalization = Mantid::API::VolumeNormalization; - - MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", "m", -10, 10, 5)); + Mantid::Geometry::GeneralFrame frame("m", "m"); + MDHistoDimension_sptr dimX(new MDHistoDimension("X", "x", frame, -10, 10, 5)); // Constructor variant 1. MDHistoWorkspace ws1(dimX, dimX, dimX, dimX, targetDisplayNormalization); TS_ASSERT_EQUALS(targetDisplayNormalization, ws1.displayNormalization()); diff --git a/Framework/MDAlgorithms/src/ConvertToReflectometryQ.cpp b/Framework/MDAlgorithms/src/ConvertToReflectometryQ.cpp index 43447b0003f..8ca7d86719f 100644 --- a/Framework/MDAlgorithms/src/ConvertToReflectometryQ.cpp +++ b/Framework/MDAlgorithms/src/ConvertToReflectometryQ.cpp @@ -20,6 +20,9 @@ #include "MantidMDAlgorithms/ReflectometryTransformQxQz.h" #include "MantidMDAlgorithms/ReflectometryTransformP.h" +#include "MantidGeometry/MDGeometry/QLab.h" +#include "MantidGeometry/MDGeometry/GeneralFrame.h" + #include <boost/optional.hpp> #include <boost/shared_ptr.hpp> #include <boost/make_shared.hpp> @@ -330,31 +333,38 @@ void ConvertToReflectometryQ::exec() { BoxController_sptr bc = boost::make_shared<BoxController>(2); this->setBoxController(bc); - // Select the transform strategy. + // Select the transform strategy and an appropriate MDFrame ReflectometryTransform_sptr transform; - + Mantid::Geometry::MDFrame_uptr frame; if (outputDimensions == qSpaceTransform()) { transform = boost::make_shared<ReflectometryTransformQxQz>( dim0min, dim0max, dim1min, dim1max, incidentTheta, numberOfBinsQx, numberOfBinsQz); + frame.reset(new Mantid::Geometry::QLab); } else if (outputDimensions == pSpaceTransform()) { transform = boost::make_shared<ReflectometryTransformP>( dim0min, dim0max, dim1min, dim1max, incidentTheta, numberOfBinsQx, numberOfBinsQz); + frame.reset(new Mantid::Geometry::GeneralFrame( + "P", + Mantid::Kernel::InverseAngstromsUnit().getUnitLabel())); } else { transform = boost::make_shared<ReflectometryTransformKiKf>( dim0min, dim0max, dim1min, dim1max, incidentTheta, numberOfBinsQx, numberOfBinsQz); + frame.reset(new Mantid::Geometry::GeneralFrame( + "KiKf", + Mantid::Kernel::InverseAngstromsUnit().getUnitLabel())); } IMDWorkspace_sptr outputWS; TableWorkspace_sptr vertexes = boost::make_shared<Mantid::DataObjects::TableWorkspace>(); - + if (outputAsMDWorkspace) { if (transMethod == centerTransform()) { - auto outputMDWS = transform->executeMD(inputWs, bc); + auto outputMDWS = transform->executeMD(inputWs, bc, std::move(frame)); // Copy ExperimentInfo (instrument, run, sample) to the output WS ExperimentInfo_sptr ei(inputWs->cloneExperimentInfo()); outputMDWS->addExperimentInfo(ei); diff --git a/Framework/MDAlgorithms/test/ConvertToReflectometryQTest.h b/Framework/MDAlgorithms/test/ConvertToReflectometryQTest.h index fe9704e809e..c2ae270aed5 100644 --- a/Framework/MDAlgorithms/test/ConvertToReflectometryQTest.h +++ b/Framework/MDAlgorithms/test/ConvertToReflectometryQTest.h @@ -12,6 +12,9 @@ #include "MantidTestHelpers/WorkspaceCreationHelper.h" #include "MantidDataObjects/Workspace2D.h" +#include "MantidGeometry/MDGeometry/GeneralFrame.h" +#include "MantidGeometry/MDGeometry/QLab.h" + #include <boost/assign.hpp> #include <cxxtest/TestSuite.h> @@ -152,6 +155,14 @@ public: "OutputTransformedWorkspace")); TS_ASSERT(ws != NULL); TS_ASSERT_EQUALS(2, ws->getExperimentInfo(0)->run().getLogData().size()); + // Assert that dimensions should be a general frame + const auto &frame0 = ws->getDimension(0)->getMDFrame(); + TSM_ASSERT_THROWS_NOTHING( + "Should be a QLab frame", + dynamic_cast<const Mantid::Geometry::QLab &>(frame0)); + TSM_ASSERT_EQUALS( + "Should have a special coordinate system selection of QLab", + ws->getSpecialCoordinateSystem(), Mantid::Kernel::QLab); } void test_execute_kikf_md() { @@ -161,6 +172,14 @@ public: Mantid::API::AnalysisDataService::Instance().retrieve( "OutputTransformedWorkspace")); TS_ASSERT(ws != NULL); + // Assert that dimensions should be a general frame + const auto &frame0 = ws->getDimension(0)->getMDFrame(); + TSM_ASSERT_THROWS_NOTHING( + "Should be a general frame", + dynamic_cast<const Mantid::Geometry::GeneralFrame &>(frame0)); + TSM_ASSERT_EQUALS( + "Should have a special coordinate system selection of None", + ws->getSpecialCoordinateSystem(), Mantid::Kernel::None); } void test_execute_pipf_md() { @@ -170,6 +189,14 @@ public: Mantid::API::AnalysisDataService::Instance().retrieve( "OutputTransformedWorkspace")); TS_ASSERT(ws != NULL); + // Assert that dimensions should be a general frame + const auto &frame0 = ws->getDimension(0)->getMDFrame(); + TSM_ASSERT_THROWS_NOTHING( + "Should be a general frame", + dynamic_cast<const Mantid::Geometry::GeneralFrame &>(frame0)); + TSM_ASSERT_EQUALS( + "Should have a special coordinate system selection of None", + ws->getSpecialCoordinateSystem(), Mantid::Kernel::None); } void test_execute_qxqz_2D() { -- GitLab