From 80e85091e93fd447326b2cb5155ec9f33dbd56fe Mon Sep 17 00:00:00 2001
From: Ross Whitfield <whitfieldre@ornl.gov>
Date: Mon, 26 Nov 2018 16:34:30 -0500
Subject: [PATCH] Revert "Switch WANDPowderReduction to use Rebin"

---
 .../WorkflowAlgorithms/WANDPowderReduction.py | 16 ++++--
 .../WANDPowderReductionTest.py                | 56 ++++++++++---------
 .../algorithms/WANDPowderReduction-v1.rst     | 14 ++---
 docs/source/release/v3.14.0/diffraction.rst   |  1 -
 4 files changed, 46 insertions(+), 41 deletions(-)

diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/WANDPowderReduction.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/WANDPowderReduction.py
index 456d3c5a7fb..db29ecfb617 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/WANDPowderReduction.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/WANDPowderReduction.py
@@ -9,7 +9,7 @@ from mantid.api import (DataProcessorAlgorithm, AlgorithmFactory,
                         MatrixWorkspaceProperty, PropertyMode)
 from mantid.dataobjects import MaskWorkspaceProperty
 from mantid.simpleapi import (ConvertSpectrumAxis, Transpose,
-                              Rebin, CopyInstrumentParameters,
+                              ResampleX, CopyInstrumentParameters,
                               Divide, DeleteWorkspace, Scale,
                               MaskAngle, ExtractMask, Minus,
                               ExtractUnmaskedSpectra, mtd,
@@ -63,7 +63,7 @@ class WANDPowderReduction(DataProcessorAlgorithm):
 
         self.copyProperties('ConvertSpectrumAxis', ['Target', 'EFixed'])
 
-        self.copyProperties('Rebin', ['Params'])
+        self.copyProperties('ResampleX', ['XMin', 'XMax', 'NumberBins', 'LogBinning'])
 
         self.declareProperty('NormaliseBy', 'Monitor', StringListValidator(['None', 'Time', 'Monitor']), "Normalise to monitor or time. ")
 
@@ -81,7 +81,9 @@ class WANDPowderReduction(DataProcessorAlgorithm):
         mask = self.getProperty("MaskWorkspace").value
         target = self.getProperty("Target").value
         eFixed = self.getProperty("EFixed").value
-        params = self.getProperty("Params").value
+        xMin = self.getProperty("XMin").value
+        xMax = self.getProperty("XMax").value
+        numberBins = self.getProperty("NumberBins").value
         normaliseBy = self.getProperty("NormaliseBy").value
         maskAngle = self.getProperty("MaskAngle").value
         outWS = self.getPropertyValue("OutputWorkspace")
@@ -107,14 +109,15 @@ class WANDPowderReduction(DataProcessorAlgorithm):
         ExtractUnmaskedSpectra(InputWorkspace=data, MaskWorkspace='__mask_tmp', OutputWorkspace='__data_tmp', EnableLogging=False)
         ConvertSpectrumAxis(InputWorkspace='__data_tmp', Target=target, EFixed=eFixed, OutputWorkspace=outWS, EnableLogging=False)
         Transpose(InputWorkspace=outWS, OutputWorkspace=outWS, EnableLogging=False)
-        Rebin(InputWorkspace=outWS, OutputWorkspace=outWS, Params=params, EnableLogging=False)
+        ResampleX(InputWorkspace=outWS, OutputWorkspace=outWS, XMin=xMin, XMax=xMax, NumberBins=numberBins, EnableLogging=False)
 
         if cal is not None:
             ExtractUnmaskedSpectra(InputWorkspace=cal, MaskWorkspace='__mask_tmp', OutputWorkspace='__cal_tmp', EnableLogging=False)
             CopyInstrumentParameters(data, '__cal_tmp', EnableLogging=False)
             ConvertSpectrumAxis(InputWorkspace='__cal_tmp', Target=target, EFixed=eFixed, OutputWorkspace='__cal_tmp', EnableLogging=False)
             Transpose(InputWorkspace='__cal_tmp', OutputWorkspace='__cal_tmp', EnableLogging=False)
-            Rebin(InputWorkspace='__cal_tmp', OutputWorkspace='__cal_tmp', Params=params, EnableLogging=False)
+            ResampleX(InputWorkspace='__cal_tmp', OutputWorkspace='__cal_tmp', XMin=xMin, XMax=xMax, NumberBins=numberBins,
+                      EnableLogging=False)
             Divide(LHSWorkspace=outWS, RHSWorkspace='__cal_tmp', OutputWorkspace=outWS, EnableLogging=False)
             if normaliseBy == "Monitor":
                 cal_scale = cal.run().getProtonCharge()
@@ -128,7 +131,8 @@ class WANDPowderReduction(DataProcessorAlgorithm):
             CopyInstrumentParameters(data, '__bkg_tmp', EnableLogging=False)
             ConvertSpectrumAxis(InputWorkspace='__bkg_tmp', Target=target, EFixed=eFixed, OutputWorkspace='__bkg_tmp', EnableLogging=False)
             Transpose(InputWorkspace='__bkg_tmp', OutputWorkspace='__bkg_tmp', EnableLogging=False)
-            Rebin(InputWorkspace='__bkg_tmp', OutputWorkspace='__bkg_tmp', Params=params, EnableLogging=False)
+            ResampleX(InputWorkspace='__bkg_tmp', OutputWorkspace='__bkg_tmp', XMin=xMin, XMax=xMax, NumberBins=numberBins,
+                      EnableLogging=False)
             if cal is not None:
                 Divide(LHSWorkspace='__bkg_tmp', RHSWorkspace='__cal_tmp', OutputWorkspace='__bkg_tmp', EnableLogging=False)
             if normaliseBy == "Monitor":
diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/WANDPowderReductionTest.py b/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/WANDPowderReductionTest.py
index 53d83e82582..dbf44069da8 100644
--- a/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/WANDPowderReductionTest.py
+++ b/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/WANDPowderReductionTest.py
@@ -56,22 +56,24 @@ class WANDPowderReductionTest(unittest.TestCase):
         # data normalised by monitor
         pd_out=WANDPowderReduction(InputWorkspace=data,
                                    Target='Theta',
-                                   Params=0.04)
+                                   NumberBins=1000)
 
         x = pd_out.extractX()
         y = pd_out.extractY()
 
-        self.assertAlmostEqual(x.min(),  8.06946698)
-        self.assertAlmostEqual(x.max(), 50.83030150)
-        self.assertAlmostEqual(y.min(),  0.00306758)
-        self.assertAlmostEqual(y.max(),  4.37085727)
-        self.assertAlmostEqual(x[0,y.argmax()], 45.10946698)
+        self.assertAlmostEqual(x.min(),  8.07086781)
+        self.assertAlmostEqual(x.max(), 50.82973519)
+        self.assertAlmostEqual(y.min(),  0.00328244)
+        self.assertAlmostEqual(y.max(),  4.88908824)
+        self.assertAlmostEqual(x[0,y.argmax()], 45.094311535)
 
         # data and calibration, limited range
         pd_out2=WANDPowderReduction(InputWorkspace=data,
                                     CalibrationWorkspace=cal,
                                     Target='Theta',
-                                    Params='10,0.015,40')
+                                    NumberBins=2000,
+                                    XMin=10,
+                                    XMax=40)
 
         x = pd_out2.extractX()
         y = pd_out2.extractY()
@@ -87,17 +89,17 @@ class WANDPowderReductionTest(unittest.TestCase):
                                     CalibrationWorkspace=cal,
                                     BackgroundWorkspace=bkg,
                                     Target='Theta',
-                                    Params=0.04,
+                                    NumberBins=1000,
                                     NormaliseBy='Time')
 
         x = pd_out3.extractX()
         y = pd_out3.extractY()
 
-        self.assertAlmostEqual(x.min(),  8.06946698)
-        self.assertAlmostEqual(x.max(), 50.83030150)
+        self.assertAlmostEqual(x.min(), 8.07086781)
+        self.assertAlmostEqual(x.max(), 50.82973519)
         self.assertAlmostEqual(y.min(),  0)
-        self.assertAlmostEqual(y.max(), 19.97454882)
-        self.assertAlmostEqual(x[0,y.argmax()], 44.98946698)
+        self.assertAlmostEqual(y.max(), 19.97968357)
+        self.assertAlmostEqual(x[0,y.argmax()], 45.008708196)
 
         # data, cal and background. To d spacing
         pd_out4=WANDPowderReduction(InputWorkspace=data,
@@ -105,16 +107,16 @@ class WANDPowderReductionTest(unittest.TestCase):
                                     BackgroundWorkspace=bkg,
                                     Target='ElasticDSpacing',
                                     EFixed=30,
-                                    Params=0.002)
+                                    NumberBins=1000)
 
         x = pd_out4.extractX()
         y = pd_out4.extractY()
 
-        self.assertAlmostEqual(x.min(),  1.92408134)
-        self.assertAlmostEqual(x.max(), 11.76333605)
+        self.assertAlmostEqual(x.min(), 1.92800159)
+        self.assertAlmostEqual(x.max(), 11.7586705)
         self.assertAlmostEqual(y.min(),  0)
-        self.assertAlmostEqual(y.max(), 19.96633911)
-        self.assertAlmostEqual(x[0,y.argmax()], 2.15808134)
+        self.assertAlmostEqual(y.max(), 19.03642005)
+        self.assertAlmostEqual(x[0,y.argmax()], 2.1543333)
 
         # data, cal and background with mask angle, to Q.
         pd_out4=WANDPowderReduction(InputWorkspace=data,
@@ -122,17 +124,17 @@ class WANDPowderReductionTest(unittest.TestCase):
                                     BackgroundWorkspace=bkg,
                                     Target='ElasticQ',
                                     EFixed=30,
-                                    Params=0.0035,
+                                    NumberBins=2000,
                                     MaskAngle=60)
 
         x = pd_out4.extractX()
         y = pd_out4.extractY()
 
-        self.assertAlmostEqual(x.min(), 0.53587138, places=4)
-        self.assertAlmostEqual(x.max(), 3.21632108, places=4)
+        self.assertAlmostEqual(x.min(), 0.53479223, places=4)
+        self.assertAlmostEqual(x.max(), 3.21684994, places=4)
         self.assertAlmostEqual(y.min(),  0, places=4)
-        self.assertAlmostEqual(y.max(), 19.9705871, places=4)
-        self.assertAlmostEqual(x[0,y.argmax()], 2.91237138, places=4)
+        self.assertAlmostEqual(y.max(), 19.9948756, places=4)
+        self.assertAlmostEqual(x[0,y.argmax()], 2.9122841, places=4)
 
         # data, cal and background, scale background
         pd_out4=WANDPowderReduction(InputWorkspace=data,
@@ -140,17 +142,17 @@ class WANDPowderReductionTest(unittest.TestCase):
                                     BackgroundWorkspace=bkg,
                                     BackgroundScale=0.5,
                                     Target='Theta',
-                                    Params=0.04,
+                                    NumberBins=1000,
                                     NormaliseBy='Time')
 
         x = pd_out4.extractX()
         y = pd_out4.extractY()
 
-        self.assertAlmostEqual(x.min(),  8.06946698)
-        self.assertAlmostEqual(x.max(), 50.83030150)
+        self.assertAlmostEqual(x.min(), 8.07086781)
+        self.assertAlmostEqual(x.max(), 50.82973519)
         self.assertAlmostEqual(y.min(),  0.75)
-        self.assertAlmostEqual(y.max(), 20.72454882)
-        self.assertAlmostEqual(x[0,y.argmax()], 44.98946698)
+        self.assertAlmostEqual(y.max(), 20.72968357)
+        self.assertAlmostEqual(x[0,y.argmax()], 45.008708196)
 
 
 if __name__ == '__main__':
diff --git a/docs/source/algorithms/WANDPowderReduction-v1.rst b/docs/source/algorithms/WANDPowderReduction-v1.rst
index 65e27710f9e..d9f21db5087 100644
--- a/docs/source/algorithms/WANDPowderReduction-v1.rst
+++ b/docs/source/algorithms/WANDPowderReduction-v1.rst
@@ -24,8 +24,6 @@ algorithm will work on data loaded with :ref:`LoadEventNexus
 <algm-FilterEvents>` but you will need to specify `EFixed` if
 converting to anything except `Theta`.
 
-:ref:`Rebin <algm-Rebin>` is used to bin the data so see it's
-documentation for use of the `Params` parameter.
 
 MaskAngle
 #########
@@ -51,7 +49,7 @@ Usage
    WANDPowderReduction(InputWorkspace=silicon,
                        CalibrationWorkspace=vanadium,
                        Target='Theta',
-                       Params=0.1,
+                       NumberBins=1000,
                        OutputWorkspace='silicon_powder')
 
 .. figure:: /images/WANDPowderReduction_silicon_powder.png
@@ -66,7 +64,9 @@ Usage
    WANDPowderReduction(InputWorkspace=silicon,
                        CalibrationWorkspace=vanadium,
                        Target='ElasticQ',
-                       Params='4.5,0.0035,6.25',
+                       XMin=4.5,
+                       Xmax=6.25,
+                       NumberBins=500,
                        OutputWorkspace='silicon_powder_q')
 
 .. figure:: /images/WANDPowderReduction_silicon_powder_q.png
@@ -81,7 +81,7 @@ Usage
    WANDPowderReduction(InputWorkspace=silicon2,
                        CalibrationWorkspace=vanadium,
                        Target='ElasticDSpacing',
-                       Params=0.002,
+                       NumberBins=1000,
                        OutputWorkspace='silicon_powder_d_spacing')
 
 .. figure:: /images/WANDPowderReduction_silicon_powder_d.png
@@ -103,7 +103,7 @@ Usage
                        CalibrationWorkspace=vanadium,
                        BackgroundWorkspace=bkg,
                        Target='Theta',
-                       Params=0.1,
+                       NumberBins=1000,
                        OutputWorkspace='silicon_powder_background')
 
    # Scale background by 50%
@@ -112,7 +112,7 @@ Usage
                        BackgroundWorkspace=bkg,
                        BackgroundScale=0.5,
                        Target='Theta',
-                       Params=0.1,
+                       NumberBins=1000,
                        OutputWorkspace='silicon_powder_background_0.5')
 
 .. figure:: /images/WANDPowderReduction_silicon_powder_bkg.png
diff --git a/docs/source/release/v3.14.0/diffraction.rst b/docs/source/release/v3.14.0/diffraction.rst
index eb6057c877b..415099dd7ea 100644
--- a/docs/source/release/v3.14.0/diffraction.rst
+++ b/docs/source/release/v3.14.0/diffraction.rst
@@ -22,7 +22,6 @@ Improvements
 - :ref:`AlignAndFocusPowder <algm-AlignAndFocusPowder>` and :ref:`AlignAndFocusPowderFromFiles <algm-AlignAndFocusPowderFromFiles>` now support outputting the unfocussed data and weighted events (with time). This allows for event filtering **after** processing the data.
 - :ref:`LoadWAND <algm-LoadWAND>` has grouping option added and loads faster
 - Mask workspace option added to :ref:`WANDPowderReduction <algm-WANDPowderReduction>`
-- :ref:`WANDPowderReduction <algm-WANDPowderReduction>` has been change from using ResampleX to Rebin so that bin size can be specified instead of number of bins as requested by the instrument scientist.
 - :ref:`Le Bail concept page <Le Bail Fit>` moved from mediawiki
 - Rework of :ref:`powder diffraction calibration <Powder Diffraction Calibration>` documentation
 
-- 
GitLab