Skip to content

Commit

Permalink
Fixed default spectra range issue, added more unit tests
Browse files Browse the repository at this point in the history
Refs #7860
  • Loading branch information
DanNixon committed Oct 6, 2014
1 parent dedb36a commit bdecbc8
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 15 deletions.
Expand Up @@ -213,6 +213,8 @@ def _setup(self):
"""
Get the algorithm properties and validate them.
"""
from IndirectCommon import CheckHistZero

self._sample = self.getPropertyValue('Sample')

self._x_min = math.fabs(self.getProperty('XMin').value)
Expand All @@ -223,6 +225,12 @@ def _setup(self):
self._save = self.getProperty('Save').value

self._spectra_range = self.getProperty('SpectraRange').value
# If the user did not enter a spectra range, use the spectra range of the workspace
if len(self._spectra_range) == 0:
num_sample_spectra, _ = CheckHistZero(self._sample)
min_spectra_number = mtd[self._sample].getSpectrum(0).getSpectrumNo()
max_spectra_number = mtd[self._sample].getSpectrum(num_sample_spectra - 1).getSpectrumNo()
self._spectra_range = [min_spectra_number, max_spectra_number]

self._output_workspace = self.getPropertyValue('OutputWorkspace')
self._props_output_workspace = self.getPropertyValue('OutputPropertiesTable')
Expand Down
Expand Up @@ -4,37 +4,86 @@
from mantid.api import *


def _rayleigh(x, sigma):
return (x / sigma ** 2) * np.exp(-x ** 2 / (2 * sigma ** 2))


def _generate_sample_ws(ws_name):
data_x = np.arange(0, 10, 0.01)
data_y = _rayleigh(data_x, 1)

CreateWorkspace(DataX=data_x, DataY=data_y, OutputWorkspace=ws_name)
ScaleX(InputWorkspace=ws_name, Factor=-1, Operation="Add", OutputWorkspace=ws_name) # centre the peak over 0

return mtd[ws_name]


class SymmetriseTest(unittest.TestCase):

def setUp(self):
self._sample_ws = self._generate_sample_ws('symm_test_sample_ws')
self._sample_ws = _generate_sample_ws('symm_test_sample_ws')

def test_basic(self):
symm_test_out_ws = Symmetrise(Sample=self._sample_ws, XMin=0.05, XMax=0.2)
"""
Tests a very minimal execution.
"""
symm_test_out_ws = Symmetrise(Sample=self._sample_ws,
XMin=0.05, XMax=0.2)

def test_with_spectra_range(self):
"""
Tests running with a given spectra range.
"""
symm_test_out_ws = Symmetrise(Sample=self._sample_ws,
XMin=0.05, XMax=0.2,
SpectraRange=[1, 1])

def test_failure_lower_range(self):
def test_failure_xmin_out_of_range(self):
"""
Tests validation on entering an XMin value lower than the smallest value in the X range.
"""
self.assertRaises(RuntimeError, Symmetrise, Sample=self._sample_ws, OutputWOrkspace='__Symmetrise_TestWS', XMin=-5, XMax=0.2)
self.assertRaises(RuntimeError, Symmetrise,
Sample=self._sample_ws,
OutputWOrkspace='__Symmetrise_TestWS',
XMin=-5, XMax=0.2)

def test_failure_upper_range(self):
def test_failure_xmax_out_of_range(self):
"""
Tests validation on entering an XMax value greater than the largest value in the X range.
"""
self.assertRaises(RuntimeError, Symmetrise, Sample=self._sample_ws, OutputWOrkspace='__Symmetrise_TestWS', XMin=0.05, XMax=15)

def _rayleigh(self, x, sigma):
return (x / sigma ** 2) * np.exp(-x ** 2 / (2 * sigma ** 2))
self.assertRaises(RuntimeError, Symmetrise,
Sample=self._sample_ws,
OutputWOrkspace='__Symmetrise_TestWS',
XMin=0.05, XMax=15)

def _generate_sample_ws(self, ws_name):
data_x = np.arange(0, 10, 0.01)
data_y = self._rayleigh(data_x, 1)
def test_failure_invalid_x_range(self):
"""
Tests validation on entering an XMax value lower then XMin.
"""
self.assertRaises(RuntimeError, Symmetrise,
Sample=self._sample_ws,
OutputWOrkspace='__Symmetrise_TestWS',
XMin=0.2, XMax=0.1)

CreateWorkspace(DataX=data_x, DataY=data_y, OutputWorkspace=ws_name)
ScaleX(InputWorkspace=ws_name, Factor=-1, Operation="Add", OutputWorkspace=ws_name) # centre the peak over 0
def test_failure_spectra_range_lower(self):
"""
Tests validation on entering a minimum spectra number lower then that of the workspace.
"""
self.assertRaises(RuntimeError, Symmetrise,
Sample=self._sample_ws,
OutputWOrkspace='__Symmetrise_TestWS',
XMin=0.05, XMax=0.2,
SpectraRange=[0, 1])

return mtd[ws_name]
def test_failure_spectra_range_upper(self):
"""
Tests validation on entering a maximum spectra number higher then that of the workspace.
"""
self.assertRaises(RuntimeError, Symmetrise,
Sample=self._sample_ws,
OutputWOrkspace='__Symmetrise_TestWS',
XMin=0.05, XMax=0.2,
SpectraRange=[1, 2])


if __name__ == '__main__':
Expand Down

0 comments on commit bdecbc8

Please sign in to comment.