diff --git a/Framework/Algorithms/CMakeLists.txt b/Framework/Algorithms/CMakeLists.txt index ec251747d76bdfe336d120059eeed86f3663ceee..0b5acd6d29d89a4a6312c48bbd3b1a40963daa4f 100644 --- a/Framework/Algorithms/CMakeLists.txt +++ b/Framework/Algorithms/CMakeLists.txt @@ -930,6 +930,7 @@ set ( TEST_FILES SofQWTest.h SolidAngleTest.h SortEventsTest.h + SortXAxisTest.h SparseInstrumentTest.h SpatialGroupingTest.h SpecularReflectionCalculateTheta2Test.h diff --git a/Framework/Algorithms/src/SortXAxis.cpp b/Framework/Algorithms/src/SortXAxis.cpp index 37d1c87d8e39e6a7163af0ade20790b4280286ec..e73edc34f8abef4525d1e905b486023992def6e6 100644 --- a/Framework/Algorithms/src/SortXAxis.cpp +++ b/Framework/Algorithms/src/SortXAxis.cpp @@ -5,9 +5,13 @@ #include "MantidKernel/ListValidator.h" #include "MantidKernel/System.h" #include "MantidKernel/make_unique.h" - -using namespace Mantid::Kernel; +#include "MantidHistogramData/Histogram.h" +using namespace Mantid; using namespace Mantid::API; +using namespace Mantid::Kernel; +using namespace Mantid::Algorithms; +using namespace Mantid::DataObjects; +using namespace Mantid::HistogramData; namespace Mantid { namespace Algorithms { diff --git a/Framework/Algorithms/test/SortXAxisTest.h b/Framework/Algorithms/test/SortXAxisTest.h index 82aa4d497eddeba8448d34c2cb4c1adb9353f801..b2cca61903830038e3dda3c341ca84782e53a520 100644 --- a/Framework/Algorithms/test/SortXAxisTest.h +++ b/Framework/Algorithms/test/SortXAxisTest.h @@ -1,31 +1,115 @@ #ifndef MANTID_ALGORITHMS_SORTXAXISTEST_H_ #define MANTID_ALGORITHMS_SORTXAXISTEST_H_ +#include "MantidAPI/AnalysisDataService.h" #include "MantidAPI/MatrixWorkspace.h" #include "MantidAlgorithms/SortXAxis.h" -#include "MantidKernel/Workspace.h" +#include "MantidDataObjects/Workspace2D.h" +#include "MantidDataObjects/WorkspaceCreation.h" +#include "MantidHistogramData/Histogram.h" #include <cxxtest/TestSuite.h> +using namespace Mantid; +using namespace Mantid::API; +using namespace Mantid::Kernel; +using namespace Mantid::Algorithms; +using namespace Mantid::DataObjects; +using namespace Mantid::HistogramData; + namespace { -MatrixWorkspace_sptr createWorkspace(const HistogramX &xData, - const HistogramY &yData, - const HistogramE &eData, - const int nSpec = 1) { +MatrixWorkspace_sptr createWorkspaceE(const std::vector<double> xData, + const std::vector<double> yData, + const std::vector<double> eData, + const int nSpec = 1) { + + Workspace2D_sptr outputWorkspace = create<DataObjects::Workspace2D>( + nSpec, Mantid::HistogramData::Histogram( + Mantid::HistogramData::Points(xData.size()))); + for (int i = 0; i < nSpec; ++i) { + outputWorkspace->mutableY(i) = yData; + outputWorkspace->mutableE(i) = eData; + outputWorkspace->mutableX(i) = xData; + } + return outputWorkspace; +} + +MatrixWorkspace_sptr createHistoWorkspaceE(const std::vector<double> xData, + const std::vector<double> yData, + const std::vector<double> eData, + const int nSpec = 1) { - Workspace2D_sptr outWS = boost::make_shared<Workspace2D>(); - outWS->initialize(nSpec, xData.size(), yData.size()); + Workspace2D_sptr outputWorkspace = create<DataObjects::Workspace2D>( + nSpec, Mantid::HistogramData::Histogram( + Mantid::HistogramData::BinEdges(xData.size()))); for (int i = 0; i < nSpec; ++i) { - outWS->mutableY(i) = yData; - outWS->mutableE(i) = eData; - outWS->mutableX(i) = xData; + outputWorkspace->mutableY(i) = yData; + outputWorkspace->mutableE(i) = eData; + outputWorkspace->mutableX(i) = xData; } + return outputWorkspace; +} + +MatrixWorkspace_sptr createWorkspaceDx(const std::vector<double> xData, + const std::vector<double> yData, + const std::vector<double> dxData, + const int nSpec = 1) { + + Workspace2D_sptr outputWorkspace = create<DataObjects::Workspace2D>( + nSpec, Mantid::HistogramData::Histogram( + Mantid::HistogramData::Points(xData.size()))); + for (int i = 0; i < nSpec; ++i) { + outputWorkspace->mutableY(i) = yData; + outputWorkspace->mutableX(i) = xData; + outputWorkspace->setPointStandardDeviations(i, dxData); + } + return outputWorkspace; +} + +MatrixWorkspace_sptr createHistoWorkspaceDx(const std::vector<double> xData, + const std::vector<double> yData, + const std::vector<double> dxData, + const int nSpec = 1) { + + Workspace2D_sptr outputWorkspace = create<DataObjects::Workspace2D>( + nSpec, Mantid::HistogramData::Histogram( + Mantid::HistogramData::BinEdges(xData.size()))); + for (int i = 0; i < nSpec; ++i) { + outputWorkspace->mutableY(i) = yData; + outputWorkspace->mutableX(i) = xData; + outputWorkspace->setPointStandardDeviations(i, dxData); + } + return outputWorkspace; +} + +MatrixWorkspace_sptr createHistoWorkspace(const std::vector<double> xData, + const std::vector<double> yData, + const int nSpec = 1) { + + Workspace2D_sptr outputWorkspace = create<DataObjects::Workspace2D>( + nSpec, Mantid::HistogramData::Histogram( + Mantid::HistogramData::BinEdges(xData.size()))); + for (int i = 0; i < nSpec; ++i) { + outputWorkspace->mutableY(i) = yData; + outputWorkspace->mutableX(i) = xData; + } + return outputWorkspace; +} + +bool operator==(const std::vector<double> &lhs, const HistogramX &rhs) { + return lhs == rhs.rawData(); +} - outWS->getAxis(0)->unit() = UnitFactory::Instance().create("Wavelength"); +bool operator==(const std::vector<double> &lhs, const HistogramY &rhs) { + return lhs == rhs.rawData(); +} - return outWS; +bool operator==(const std::vector<double> &lhs, const HistogramDx &rhs) { + return lhs == rhs.rawData(); } +} // namespace class SortXAxisTest : public CxxTest::TestSuite { +public: // This pair of boilerplate methods prevent the suite being created statically // This means the constructor isn't called when running other tests static SortXAxisTest *createSuite() { return new SortXAxisTest(); } @@ -36,30 +120,259 @@ class SortXAxisTest : public CxxTest::TestSuite { std::vector<double> yData = {1, 2, 3}; std::vector<double> eData = {1, 2, 3}; - MatrixWorkspace_sptr unsortedws = createWorkspace(xData, yData, eData); + MatrixWorkspace_sptr unsortedws = createWorkspaceE(xData, yData, eData); SortXAxis alg; - alg.setProperty("InputWorkspacd", "unsortedws"); - alg.setProperty("OutputWorkspace", "sortedws"); - alg.execute(); - MatrixWorkspace_sptr sortedws = + TS_ASSERT_THROWS_NOTHING(alg.initialize()) + TS_ASSERT(alg.isInitialized()) + TS_ASSERT_THROWS_NOTHING(alg.setProperty("InputWorkspace", unsortedws)); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("OutputWorkspace", "sortedws")); + TS_ASSERT_THROWS_NOTHING(alg.execute()); + + MatrixWorkspace_sptr sortedws; + TS_ASSERT_THROWS_NOTHING( + sortedws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>( + "sortedws")); + TS_ASSERT(sortedws); + + TS_ASSERT_EQUALS(sortedws->x(0), xData); + TS_ASSERT_EQUALS(sortedws->y(0), yData); + TS_ASSERT_EQUALS(sortedws->e(0), eData); + + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("unsortedws")); + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("sortedws")); } - void testXDescending() {} + void testXDescending() { + std::vector<double> xData = {3, 2, 1}; + std::vector<double> sortedXData = {1, 2, 3}; + std::vector<double> yData = {1, 2, 3}; + std::vector<double> reverseYData = {3, 2, 1}; + std::vector<double> eData = {1, 2, 3}; + std::vector<double> reverseEData = {3, 2, 1}; - void testOnMultipleSpectrum() {} + MatrixWorkspace_sptr unsortedws = createWorkspaceE(xData, yData, eData); - void testSortsXHistogramAscending() {} + SortXAxis alg; + TS_ASSERT_THROWS_NOTHING(alg.initialize()) + TS_ASSERT(alg.isInitialized()) + TS_ASSERT_THROWS_NOTHING(alg.setProperty("InputWorkspace", unsortedws)); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("OutputWorkspace", "sortedws")); + TS_ASSERT_THROWS_NOTHING(alg.execute()); - void testSortsXHistogramDescending() {} + MatrixWorkspace_sptr sortedws; + TS_ASSERT_THROWS_NOTHING( + sortedws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>( + "sortedws")); + TS_ASSERT(sortedws); - void testSortXWorksChild() {} + TS_ASSERT_EQUALS(sortedws->x(0), sortedXData); + TS_ASSERT_EQUALS(sortedws->y(0), reverseYData); + TS_ASSERT_EQUALS(sortedws->e(0), reverseEData); - void testDxMultipleSpectrum() {} + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("unsortedws")); + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("sortedws")); + } - void testDxHistogramAscending() {} + void testOnMultipleSpectrum() { + std::vector<double> xData = {3, 2, 1}; + std::vector<double> sortedXData = {1, 2, 3}; + std::vector<double> yData = {1, 2, 3}; + std::vector<double> reverseYData = {3, 2, 1}; + std::vector<double> eData = {1, 2, 3}; + std::vector<double> reverseEData = {3, 2, 1}; - void testSortDescending() {} -}; + MatrixWorkspace_sptr unsortedws = createWorkspaceE(xData, yData, eData, 2); + + SortXAxis alg; + TS_ASSERT_THROWS_NOTHING(alg.initialize()) + TS_ASSERT(alg.isInitialized()) + TS_ASSERT_THROWS_NOTHING(alg.setProperty("InputWorkspace", unsortedws)); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("OutputWorkspace", "sortedws")); + TS_ASSERT_THROWS_NOTHING(alg.execute()); + + MatrixWorkspace_sptr sortedws; + TS_ASSERT_THROWS_NOTHING( + sortedws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>( + "sortedws")); + TS_ASSERT(sortedws); + + TS_ASSERT_EQUALS(sortedws->x(0), sortedXData); + TS_ASSERT_EQUALS(sortedws->y(0), reverseYData); + TS_ASSERT_EQUALS(sortedws->e(0), reverseEData); + + TS_ASSERT_EQUALS(sortedws->x(1), sortedXData); + TS_ASSERT_EQUALS(sortedws->y(1), reverseYData); + TS_ASSERT_EQUALS(sortedws->e(1), reverseEData); + + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("unsortedws")); + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("sortedws")); + } + + void testSortsXHistogramAscending() { + std::vector<double> xData = {1, 2, 3, 4}; + std::vector<double> yData = {1, 2, 3}; + std::vector<double> eData = {1, 2, 3}; + + MatrixWorkspace_sptr unsortedws = + createHistoWorkspaceE(xData, yData, eData); + SortXAxis alg; + TS_ASSERT_THROWS_NOTHING(alg.initialize()) + TS_ASSERT(alg.isInitialized()) + TS_ASSERT_THROWS_NOTHING(alg.setProperty("InputWorkspace", unsortedws)); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("OutputWorkspace", "sortedws")); + TS_ASSERT_THROWS_NOTHING(alg.execute()); + + MatrixWorkspace_sptr sortedws; + TS_ASSERT_THROWS_NOTHING( + sortedws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>( + "sortedws")); + TS_ASSERT(sortedws); + + TS_ASSERT_EQUALS(sortedws->x(0), xData); + TS_ASSERT_EQUALS(sortedws->y(0), yData); + TS_ASSERT_EQUALS(sortedws->e(0), eData); + + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("unsortedws")); + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("sortedws")); + } + + void testSortsXHistogramDescending() { + std::vector<double> xData = {4, 3, 2, 1}; + std::vector<double> sortedXData = {1, 2, 3, 4}; + std::vector<double> yData = {1, 2, 3}; + std::vector<double> reverseYData = {3, 2, 1}; + std::vector<double> eData = {1, 2, 3}; + std::vector<double> reverseEData = {3, 2, 1}; + + MatrixWorkspace_sptr unsortedws = + createHistoWorkspaceE(xData, yData, eData); + + SortXAxis alg; + TS_ASSERT_THROWS_NOTHING(alg.initialize()) + TS_ASSERT(alg.isInitialized()) + TS_ASSERT_THROWS_NOTHING(alg.setProperty("InputWorkspace", unsortedws)); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("OutputWorkspace", "sortedws")); + TS_ASSERT_THROWS_NOTHING(alg.execute()); + + MatrixWorkspace_sptr sortedws; + TS_ASSERT_THROWS_NOTHING( + sortedws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>( + "sortedws")); + TS_ASSERT(sortedws); + + TS_ASSERT_EQUALS(sortedws->x(0), sortedXData); + TS_ASSERT_EQUALS(sortedws->y(0), reverseYData); + TS_ASSERT_EQUALS(sortedws->e(0), reverseEData); + + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("unsortedws")); + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("sortedws")); + } + + void testDxMultipleSpectrum() { + std::vector<double> xData = {3, 2, 1}; + std::vector<double> yData = {1, 2, 3}; + std::vector<double> dxData = {1, 2, 3}; + std::vector<double> reverseDxData = {3, 2, 1}; + + MatrixWorkspace_sptr unsortedws = + createWorkspaceDx(xData, yData, dxData, 2); + + SortXAxis alg; + TS_ASSERT_THROWS_NOTHING(alg.initialize()) + TS_ASSERT(alg.isInitialized()) + TS_ASSERT_THROWS_NOTHING(alg.setProperty("InputWorkspace", unsortedws)); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("OutputWorkspace", "sortedws")); + TS_ASSERT_THROWS_NOTHING(alg.execute()); + + MatrixWorkspace_sptr sortedws; + TS_ASSERT_THROWS_NOTHING( + sortedws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>( + "sortedws")); + TS_ASSERT(sortedws); + + TS_ASSERT_EQUALS(sortedws->dx(0), reverseDxData); + TS_ASSERT_EQUALS(sortedws->dx(1), reverseDxData); + + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("unsortedws")); + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("sortedws")); + } + + void testDxHistogramAscending() { + std::vector<double> xData = {1, 2, 3, 4}; + std::vector<double> yData = {1, 2, 3}; + std::vector<double> dxData = {1, 2, 3}; + std::vector<double> reverseDxData = {3, 2, 1}; + + MatrixWorkspace_sptr unsortedws = + createHistoWorkspaceDx(xData, yData, dxData, 2); + + SortXAxis alg; + TS_ASSERT_THROWS_NOTHING(alg.initialize()) + TS_ASSERT(alg.isInitialized()) + TS_ASSERT_THROWS_NOTHING(alg.setProperty("InputWorkspace", unsortedws)); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("OutputWorkspace", "sortedws")); + TS_ASSERT_THROWS_NOTHING(alg.execute()); + + MatrixWorkspace_sptr sortedws; + TS_ASSERT_THROWS_NOTHING( + sortedws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>( + "sortedws")); + TS_ASSERT(sortedws); + + HistogramDx wsDxData = sortedws->dx(0); + + TS_ASSERT_EQUALS(reverseDxData, wsDxData); + + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("unsortedws")); + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("sortedws")); + } + + void testSortDescending() { + std::vector<double> xData = {1, 2, 3, 4}; + std::vector<double> reverseXData = {4, 3, 2, 1}; + std::vector<double> yData = {1, 2, 3}; + std::vector<double> reverseYData = {3, 2, 1}; + + MatrixWorkspace_sptr unsortedws = createHistoWorkspace(xData, yData, 2); + + SortXAxis alg; + TS_ASSERT_THROWS_NOTHING(alg.initialize()) + TS_ASSERT(alg.isInitialized()) + TS_ASSERT_THROWS_NOTHING(alg.setProperty("InputWorkspace", unsortedws)); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("OutputWorkspace", "sortedws")); + TS_ASSERT_THROWS_NOTHING(alg.setProperty("Ordering", "Descending")); + TS_ASSERT_THROWS_NOTHING(alg.execute()); + + MatrixWorkspace_sptr sortedws; + TS_ASSERT_THROWS_NOTHING( + sortedws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>( + "sortedws")); + TS_ASSERT(sortedws); + + TS_ASSERT_EQUALS(reverseXData, sortedws->x(0)); + TS_ASSERT_EQUALS(reverseYData, sortedws->y(0)); + + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("unsortedws")); + TS_ASSERT_THROWS_NOTHING( + AnalysisDataService::Instance().remove("sortedws")); + } +} +}; #endif /*MANTID_ALGORITHMS_SORTXAXISTEST_H_*/ diff --git a/Framework/HistogramData/inc/MantidHistogramData/HistogramDx.h b/Framework/HistogramData/inc/MantidHistogramData/HistogramDx.h index c907569b6cbab43d3f4c8024f0a212f1de636ae2..ca8fbf409a6e13a908a1eba942c29287c7b4f46f 100644 --- a/Framework/HistogramData/inc/MantidHistogramData/HistogramDx.h +++ b/Framework/HistogramData/inc/MantidHistogramData/HistogramDx.h @@ -50,7 +50,9 @@ public: HistogramDx(HistogramDx &&) = default; HistogramDx &operator=(const HistogramDx &) & = default; HistogramDx &operator=(HistogramDx &&) & = default; - + bool operator==(const HistogramDx &rhs) const { + return this->rawData() == rhs.rawData(); + } // These classes are friends, such that they can modify the length. friend class Histogram; friend class detail::VectorOf<PointVariances, HistogramDx>; diff --git a/Framework/HistogramData/inc/MantidHistogramData/HistogramE.h b/Framework/HistogramData/inc/MantidHistogramData/HistogramE.h index 74728cc922d3e704254f3ede9a117102d9a2afa4..e8aa08a324a2155073693db64528f261fbe1d4c3 100644 --- a/Framework/HistogramData/inc/MantidHistogramData/HistogramE.h +++ b/Framework/HistogramData/inc/MantidHistogramData/HistogramE.h @@ -66,7 +66,9 @@ public: HistogramE(HistogramE &&) = default; HistogramE &operator=(const HistogramE &) & = default; HistogramE &operator=(HistogramE &&) & = default; - + bool operator==(const HistogramE &rhs) const { + return this->rawData() == rhs.rawData(); + } // These classes are friends, such that they can modify the length. friend class Histogram; friend class detail::VectorOf<CountStandardDeviations, HistogramE>; diff --git a/Framework/HistogramData/inc/MantidHistogramData/HistogramX.h b/Framework/HistogramData/inc/MantidHistogramData/HistogramX.h index 7006427eb5960c90361dd76ea62c7311af065ca2..f7038621d1eb53ac7c0c000d1d4494aa03728653 100644 --- a/Framework/HistogramData/inc/MantidHistogramData/HistogramX.h +++ b/Framework/HistogramData/inc/MantidHistogramData/HistogramX.h @@ -62,7 +62,9 @@ public: HistogramX(HistogramX &&) = default; HistogramX &operator=(const HistogramX &) & = default; HistogramX &operator=(HistogramX &&) & = default; - + bool operator==(const HistogramX &rhs) const { + return this->rawData() == rhs.rawData(); + } // These classes are friends, such that they can modify the length. friend class Histogram; friend class detail::VectorOf<BinEdges, HistogramX>; diff --git a/Framework/HistogramData/inc/MantidHistogramData/HistogramY.h b/Framework/HistogramData/inc/MantidHistogramData/HistogramY.h index 5ae2b1c45826565f31033f464cf0a63d708f5f2d..3bff7a11a16cd93e9bbfab6f9c6c9ac782fed99a 100644 --- a/Framework/HistogramData/inc/MantidHistogramData/HistogramY.h +++ b/Framework/HistogramData/inc/MantidHistogramData/HistogramY.h @@ -64,6 +64,9 @@ public: HistogramY(HistogramY &&) = default; HistogramY &operator=(const HistogramY &) & = default; HistogramY &operator=(HistogramY &&) & = default; + bool operator==(const HistogramY &rhs) const { + return this->rawData() == rhs.rawData(); + } // Multiple inheritance causes ambiguous overload, bring operators into scope. using detail::Addable<HistogramY>::operator+; using detail::Addable<HistogramY>::operator+=; diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt b/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt index 2aa190d32ad242014581c093468d62cef0510403..ac9d9fe1b60b1651850d8121dfefe195460e59ef 100644 --- a/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt +++ b/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt @@ -84,7 +84,6 @@ set ( TEST_PY_FILES SetDetScaleTest.py SortByQVectorsTest.py SortDetectorsTest.py - SortXAxisTest.py StatisticsOfTableWorkspaceTest.py StringToPngTest.py SuggestTibCNCSTest.py diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/SortXAxisTest.py b/Framework/PythonInterface/test/python/plugins/algorithms/SortXAxisTest.py deleted file mode 100644 index 9b43e770f953ed20e7eaef4600dd635f58969ac8..0000000000000000000000000000000000000000 --- a/Framework/PythonInterface/test/python/plugins/algorithms/SortXAxisTest.py +++ /dev/null @@ -1,183 +0,0 @@ -from __future__ import (absolute_import, division, print_function) - -import unittest -from mantid.simpleapi import AlgorithmManager, CreateWorkspace, DeleteWorkspace, SortXAxis - - -class SortXAxisTest(unittest.TestCase): - - - def test_x_ascending(self): - dataX = [1., 2., 3.] # In ascending order, so y and e will need to be reversed. - dataY = [1., 2., 3.] - dataE = [1., 2., 3.] - unsortedws = CreateWorkspace(DataX=dataX,DataY=dataY,DataE=dataE,UnitX='TOF',Distribution=True) - # Run the algorithm - sortedws = SortXAxis(InputWorkspace=unsortedws) - sortedX = sortedws.readX(0) - sortedY = sortedws.readY(0) - sortedE = sortedws.readE(0) - # Check the resulting data values. Sorting operation should have resulted in no changes - self.assertEqual(dataX, sortedX.tolist()) - self.assertEqual(dataY, sortedY.tolist()) - self.assertEqual(dataE, sortedE.tolist()) - DeleteWorkspace(unsortedws) - DeleteWorkspace(sortedws) - - def test_x_descending(self): - dataX = [3., 2., 1.] # In descending order, so y and e will need to be reversed. - dataY = [1., 2., 3.] - dataE = [1., 2., 3.] - unsortedws = CreateWorkspace(DataX=dataX,DataY=dataY,DataE=dataE,UnitX='TOF',Distribution=True) - # Run the algorithm - sortedws = SortXAxis(InputWorkspace=unsortedws) - sortedX = sortedws.readX(0) - sortedY = sortedws.readY(0) - sortedE = sortedws.readE(0) - # Check the resulting data values. - self.assertEqual(sorted(dataX), sortedX.tolist()) - dataY.reverse() - dataE.reverse() - self.assertEqual(dataY, sortedY.tolist()) - self.assertEqual(dataE, sortedE.tolist()) - DeleteWorkspace(unsortedws) - DeleteWorkspace(sortedws) - - def test_on_multiple_spectrum(self): - dataX = [3., 2., 1., 3., 2., 1.] # In descending order, so y and e will need to be reversed. - dataY = [1., 2., 3., 1., 2., 3.] - dataE = [1., 2., 3., 1., 2., 3.] - unsortedws = CreateWorkspace(DataX=dataX,DataY=dataY,DataE=dataE,UnitX='TOF',Distribution=True, NSpec=2) - dataY.reverse() - dataE.reverse() - # Run the algorithm - sortedws = SortXAxis(InputWorkspace=unsortedws) - # Check the resulting data values for 1st spectrum. - sortedX = sortedws.readX(0) - sortedY = sortedws.readY(0) - sortedE = sortedws.readE(0) - self.assertEqual(sorted(dataX[0:3]), sortedX.tolist()) - self.assertEqual(dataY[0:3], sortedY.tolist()) - self.assertEqual(dataE[0:3], sortedE.tolist()) - # Check the resulting data values for 2nd spectrum. - sortedX = sortedws.readX(1) - sortedY = sortedws.readY(1) - sortedE = sortedws.readE(1) - self.assertEqual(sorted(dataX[3:]), sortedX.tolist()) - self.assertEqual(dataY[3:], sortedY.tolist()) - self.assertEqual(dataE[3:], sortedE.tolist()) - DeleteWorkspace(unsortedws) - DeleteWorkspace(sortedws) - - def test_sorts_x_histogram_ascending(self): - dataX = [1., 2., 3., 4.] - dataY = [1., 2., 3.] - dataE = [1., 2., 3.] - unsortedws = CreateWorkspace(DataX=dataX,DataY=dataY,DataE=dataE,UnitX='TOF',Distribution=False) - # Run the algorithm - sortedws = SortXAxis(InputWorkspace=unsortedws) - sortedX = sortedws.readX(0) - sortedY = sortedws.readY(0) - sortedE = sortedws.readE(0) - # Check the resulting data values. Sorting operation should have resulted in no changes - self.assertEqual(dataX, sortedX.tolist()) - self.assertEqual(dataY, sortedY.tolist()) - self.assertEqual(dataE, sortedE.tolist()) - - DeleteWorkspace(unsortedws) - DeleteWorkspace(sortedws) - - def test_sorts_x_histogram_descending(self): - dataX = [4., 3., 2., 1.] - dataY = [1., 2., 3.] - dataE = [1., 2., 3.] - unsortedws = CreateWorkspace(DataX=dataX,DataY=dataY,DataE=dataE,UnitX='TOF',Distribution=False) - # Run the algorithm - sortedws = SortXAxis(InputWorkspace=unsortedws) - sortedX = sortedws.readX(0) - sortedY = sortedws.readY(0) - sortedE = sortedws.readE(0) - # Check the resulting data values. Sorting operation should have resulted in no changes - self.assertEqual(sorted(dataX), sortedX.tolist()) - dataY.reverse() - dataE.reverse() - self.assertEqual(dataY, sortedY.tolist()) - self.assertEqual(dataE, sortedE.tolist()) - - DeleteWorkspace(unsortedws) - DeleteWorkspace(sortedws) - - def test_sort_x_works_child(self): - # Create unsorted workspace - parent = AlgorithmManager.createUnmanaged('Load') - create_ws_alg = parent.createChildAlgorithm("CreateWorkspace") - dataX = [4., 3., 2., 1.] - dataY = [1., 2., 3.] - dataE = [1., 2., 3.] - create_ws_alg.setProperty("DataX", dataX) - create_ws_alg.setProperty("DataY", dataY) - create_ws_alg.setProperty("DataE", dataE) - create_ws_alg.setProperty("UnitX",'TOF') - create_ws_alg.setProperty("Distribution", False) - create_ws_alg.execute() - # Run the algorithm - sort_alg = parent.createChildAlgorithm("SortXAxis") - sort_alg.setProperty("InputWorkspace", create_ws_alg.getProperty("OutputWorkspace").value) - sort_alg.execute() - # Check the resulting data values. Sorting operation should have resulted in no changes - sortedws = sort_alg.getProperty("OutputWorkspace").value - sortedX = sortedws.readX(0) - sortedY = sortedws.readY(0) - sortedE = sortedws.readE(0) - self.assertEqual(sorted(dataX), sortedX.tolist()) - dataY.reverse() - dataE.reverse() - self.assertEqual(dataY, sortedY.tolist()) - self.assertEqual(dataE, sortedE.tolist()) - - def test_dx_multiple_spectrum(self): - dataX = [3, 2, 1, 3, 2, 1] # In descending order, so y and e will need to be reversed. - dataY = [1, 2, 3, 1, 2, 3] - dx = [1, 2, 3, 1, 2, 3] - unsortedws = CreateWorkspace(DataX=dataX, DataY=dataY, Dx=dx, UnitX='TOF', Distribution=True, NSpec=2) - dx.reverse() - # Run the algorithm - sortedws = SortXAxis(InputWorkspace=unsortedws) - # Check the resulting data values for 1st spectrum. - sortedDx = sortedws.readDx(0) - self.assertEqual(dx[0:3], sortedDx.tolist()) - # Check the resulting data values for 2nd spectrum. - sortedDx = sortedws.readDx(1) - self.assertEqual(dx[3:], sortedDx.tolist()) - DeleteWorkspace(unsortedws) - DeleteWorkspace(sortedws) - - def test_dx_histogram_ascending(self): - dataX = [1., 2., 3., 4.] - dataY = [1., 2., 3.] - dx = [1., 2., 3.] - unsortedws = CreateWorkspace(DataX=dataX, DataY=dataY, Dx=dx, UnitX='TOF', Distribution=False) - # Run the algorithm - sortedws = SortXAxis(InputWorkspace=unsortedws) - sortedDx = sortedws.readDx(0) - # Check the resulting data values. Sorting operation should have resulted in no changes - self.assertEqual(dx, sortedDx.tolist()) - DeleteWorkspace(unsortedws) - DeleteWorkspace(sortedws) - - def test_sort_descending(self): - dataX = [1., 2., 3., 4.] - dataY = [1., 2., 3.] - unsortedws = CreateWorkspace(DataX=dataX, DataY=dataY, UnitX='TOF', Distribution=False) - # Run the algorithm - sortedws = SortXAxis(InputWorkspace=unsortedws, Ordering="Descending") - sortedX = sortedws.readX(0) - sortedY = sortedws.readY(0) - # Check the resulting data values. Sorting operation should have resulted in no changes - self.assertEqual([4., 3., 2., 1.], sortedX.tolist()) - self.assertEqual([3., 2., 1.], sortedY.tolist()) - DeleteWorkspace(unsortedws) - DeleteWorkspace(sortedws) - -if __name__ == '__main__': - unittest.main()