summaryrefslogtreecommitdiff
path: root/silx/math/fit/test/test_filters.py
diff options
context:
space:
mode:
Diffstat (limited to 'silx/math/fit/test/test_filters.py')
-rw-r--r--silx/math/fit/test/test_filters.py137
1 files changed, 0 insertions, 137 deletions
diff --git a/silx/math/fit/test/test_filters.py b/silx/math/fit/test/test_filters.py
deleted file mode 100644
index 078b998..0000000
--- a/silx/math/fit/test/test_filters.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# coding: utf-8
-# /*##########################################################################
-# Copyright (C) 2016 European Synchrotron Radiation Facility
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-# ############################################################################*/
-import numpy
-import unittest
-from silx.math.fit import filters
-from silx.math.fit import functions
-from silx.test.utils import add_relative_noise
-
-
-class TestSmooth(unittest.TestCase):
- """
- Unit tests of smoothing functions.
-
- Test that the difference between a synthetic curve with 5% added random
- noise and the result of smoothing that signal is less than 5%. We compare
- the sum of all samples in each curve.
- """
- def setUp(self):
- x = numpy.arange(5000)
- # (height1, center1, fwhm1, beamfwhm...)
- slit_params = (50, 500, 200, 100,
- 50, 600, 80, 30,
- 20, 2000, 150, 150,
- 50, 2250, 110, 100,
- 40, 3000, 50, 10,
- 23, 4980, 250, 20)
-
- self.y1 = functions.sum_slit(x, *slit_params)
- # 5% noise
- self.y1 = add_relative_noise(self.y1, 5.)
-
- # (height1, center1, fwhm1...)
- step_params = (50, 500, 200,
- 50, 600, 80,
- 20, 2000, 150,
- 50, 2250, 110,
- 40, 3000, 50,
- 23, 4980, 250,)
-
- self.y2 = functions.sum_stepup(x, *step_params)
- # 5% noise
- self.y2 = add_relative_noise(self.y2, 5.)
-
- self.y3 = functions.sum_stepdown(x, *step_params)
- # 5% noise
- self.y3 = add_relative_noise(self.y3, 5.)
-
- def tearDown(self):
- pass
-
- def testSavitskyGolay(self):
- npts = 25
- for y in [self.y1, self.y2, self.y3]:
- smoothed_y = filters.savitsky_golay(y, npoints=npts)
-
- # we added +-5% of random noise. The difference must be much lower
- # than 5%.
- diff = abs(sum(smoothed_y) - sum(y)) / sum(y)
- self.assertLess(diff, 0.05,
- "Difference between data with 5%% noise and " +
- "smoothed data is > 5%% (%f %%)" % (diff * 100))
-
- # Try various smoothing levels
- npts += 25
-
- def testSmooth1d(self):
- """Test the 1D smoothing against the formula
- ys[i] = (y[i-1] + 2 * y[i] + y[i+1]) / 4 (for 1 < i < n-1)"""
- smoothed_y = filters.smooth1d(self.y1)
-
- for i in range(1, len(self.y1) - 1):
- self.assertAlmostEqual(4 * smoothed_y[i],
- self.y1[i-1] + 2 * self.y1[i] + self.y1[i+1])
-
- def testSmooth2d(self):
- """Test that a 2D smoothing is the same as two successive and
- orthogonal 1D smoothings"""
- x = numpy.arange(10000)
-
- noise = 2 * numpy.random.random(10000) - 1
- noise *= 0.05
- y = x * (1 + noise)
-
- y.shape = (100, 100)
-
- smoothed_y = filters.smooth2d(y)
-
- intermediate_smooth = numpy.zeros_like(y)
- expected_smooth = numpy.zeros_like(y)
- # smooth along first dimension
- for i in range(0, y.shape[0]):
- intermediate_smooth[i, :] = filters.smooth1d(y[i, :])
-
- # smooth along second dimension
- for j in range(0, y.shape[1]):
- expected_smooth[:, j] = filters.smooth1d(intermediate_smooth[:, j])
-
- for i in range(0, y.shape[0]):
- for j in range(0, y.shape[1]):
- self.assertAlmostEqual(smoothed_y[i, j],
- expected_smooth[i, j])
-
-
-test_cases = (TestSmooth,)
-
-
-def suite():
- loader = unittest.defaultTestLoader
- test_suite = unittest.TestSuite()
- for test_class in test_cases:
- tests = loader.loadTestsFromTestCase(test_class)
- test_suite.addTests(tests)
- return test_suite
-
-if __name__ == '__main__':
- unittest.main(defaultTest="suite")