source: sasview/test/sasdataloader/test/utest_averaging.py @ a10364b

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since a10364b was a10364b, checked in by krzywon, 9 years ago

Found the issue with the failing tests in ScipyFitting? and fixed the
issue. The fitter was trying to check the value of a list item but the
check should have been against another list.

  • Property mode set to 100644
File size: 8.6 KB
Line 
1
2import unittest
3
4from sas.dataloader.loader import  Loader
5from sas.dataloader.manipulations import Ring, CircularAverage, SectorPhi, get_q,reader2D_converter
6 
7import os.path
8import numpy, math
9import sas.dataloader.data_info as data_info
10
11class Averaging(unittest.TestCase):
12    """
13        Test averaging manipulations on a flat distribution
14    """
15    def setUp(self):
16        """
17            Create a flat 2D distribution. All averaging results
18            should return the predefined height of the distribution (1.0).
19        """
20        x_0  = numpy.ones([100,100])
21        dx_0 = numpy.ones([100,100])
22       
23        self.data = data_info.Data2D(data=x_0, err_data=dx_0)
24        detector = data_info.Detector()
25        detector.distance = 1000.0  #mm
26        detector.pixel_size.x = 1.0 #mm
27        detector.pixel_size.y = 1.0 #mm
28       
29        # center in pixel position = (len(x_0)-1)/2
30        detector.beam_center.x = (len(x_0)-1)/2 #pixel number
31        detector.beam_center.y = (len(x_0)-1)/2 #pixel number
32        self.data.detector.append(detector)
33       
34        source = data_info.Source()
35        source.wavelength = 10.0 #A
36        self.data.source = source
37       
38        # get_q(dx, dy, det_dist, wavelength) where units are mm,mm,mm,and A respectively.
39        self.qmin = get_q(1.0, 1.0, detector.distance, source.wavelength)
40
41        self.qmax = get_q(49.5, 49.5, detector.distance, source.wavelength)
42       
43        self.qstep = len(x_0)
44        x=  numpy.linspace(start= -1*self.qmax,
45                               stop= self.qmax,
46                               num= self.qstep,
47                               endpoint=True ) 
48        y = numpy.linspace(start= -1*self.qmax,
49                               stop= self.qmax,
50                               num= self.qstep,
51                               endpoint=True )
52        self.data.x_bins=x
53        self.data.y_bins=y
54        self.data = reader2D_converter(self.data)
55           
56    def test_ring_flat_distribution(self):
57        """
58            Test ring averaging
59        """
60        r = Ring(r_min=2*self.qmin, r_max=5*self.qmin, 
61                 center_x=self.data.detector[0].beam_center.x, 
62                 center_y=self.data.detector[0].beam_center.y)
63        r.nbins_phi = 20
64       
65        o = r(self.data)
66        for i in range(20):
67            self.assertEqual(o.y[i], 1.0)
68           
69    def test_sectorphi_full(self):
70        """
71            Test sector averaging
72        """
73        r = SectorPhi(r_min=self.qmin, r_max=3*self.qmin, 
74                      phi_min=0, phi_max=math.pi*2.0)
75        r.nbins_phi = 20
76        o = r(self.data)
77        for i in range(7):
78            self.assertEqual(o.y[i], 1.0)
79           
80           
81    def test_sectorphi_partial(self):
82        """
83        """
84        phi_max = math.pi * 1.5
85        r = SectorPhi(r_min=self.qmin, r_max=3*self.qmin, 
86                      phi_min=0, phi_max=phi_max)
87        self.assertEqual(r.phi_max, phi_max)
88        r.nbins_phi = 20
89        o = r(self.data)
90        self.assertEqual(r.phi_max, phi_max)
91        for i in range(17):
92            self.assertEqual(o.y[i], 1.0)
93           
94           
95
96class data_info_tests(unittest.TestCase):
97   
98    def setUp(self):
99        self.data = Loader().load('MAR07232_rest.ASC')
100       
101    def test_ring(self):
102        """
103            Test ring averaging
104        """
105        r = Ring(r_min=.005, r_max=.01, 
106                 center_x=self.data.detector[0].beam_center.x, 
107                 center_y=self.data.detector[0].beam_center.y,
108                 nbins = 20)
109        ##r.nbins_phi = 20
110       
111        o = r(self.data)
112        answer = Loader().load('ring_testdata.txt')
113       
114        for i in range(r.nbins_phi - 1):
115            self.assertAlmostEqual(o.x[i + 1], answer.x[i], 4)
116            self.assertAlmostEqual(o.y[i + 1], answer.y[i], 4)
117            self.assertAlmostEqual(o.dy[i + 1], answer.dy[i], 4)
118           
119    def test_circularavg(self):
120        """
121            Test circular averaging
122            The test data was not generated by IGOR.
123        """
124        r = CircularAverage(r_min=.00, r_max=.025, 
125                 bin_width=0.0003)
126        r.nbins_phi = 20
127       
128        o = r(self.data)
129
130        answer = Loader().load('avg_testdata.txt')
131        for i in range(r.nbins_phi):
132            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
133            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
134            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
135           
136    def test_box(self):
137        """
138            Test circular averaging
139            The test data was not generated by IGOR.
140        """
141        from sas.dataloader.manipulations import Boxsum, Boxavg
142       
143        r = Boxsum(x_min=.01, x_max=.015, y_min=0.01, y_max=0.015)
144        s, ds, npoints = r(self.data)
145        self.assertAlmostEqual(s, 34.278990899999997, 4)
146        self.assertAlmostEqual(ds, 7.8007981835194293, 4)
147        self.assertAlmostEqual(npoints, 324.0000, 4)       
148   
149        r = Boxavg(x_min=.01, x_max=.015, y_min=0.01, y_max=0.015)
150        s, ds = r(self.data)
151        self.assertAlmostEqual(s, 0.10579935462962962, 4)
152        self.assertAlmostEqual(ds, 0.024076537603455028, 4)
153           
154    def test_slabX(self):
155        """
156            Test slab in X
157            The test data was not generated by IGOR.
158        """
159        from sas.dataloader.manipulations import SlabX
160       
161        r = SlabX(x_min=-.01, x_max=.01, y_min=-0.0002, y_max=0.0002, bin_width=0.0004)
162        r.fold = False
163        o = r(self.data)
164
165        answer = Loader().load('slabx_testdata.txt')
166        for i in range(len(o.x)):
167            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
168            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
169            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
170           
171    def test_slabY(self):
172        """
173            Test slab in Y
174            The test data was not generated by IGOR.
175        """
176        from sas.dataloader.manipulations import SlabY
177       
178        r = SlabY(x_min=.005, x_max=.01, y_min=-0.01, y_max=0.01, bin_width=0.0004)
179        r.fold = False
180        o = r(self.data)
181
182        answer = Loader().load('slaby_testdata.txt')
183        for i in range(len(o.x)):
184            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
185            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
186            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
187           
188    def test_sectorphi_full(self):
189        """
190            Test sector averaging I(phi)
191            When considering the whole azimuthal range (2pi),
192            the answer should be the same as ring averaging.
193            The test data was not generated by IGOR.
194        """
195        from sas.dataloader.manipulations import SectorPhi
196        import math
197       
198        nbins = 19
199        phi_min = math.pi / (nbins + 1)
200        phi_max = math.pi * 2 - phi_min
201       
202        r = SectorPhi(r_min=.005,
203                      r_max=.01,
204                      phi_min=phi_min,
205                      phi_max=phi_max,
206                      nbins=nbins)
207        o = r(self.data)
208
209        answer = Loader().load('ring_testdata.txt')
210        for i in range(len(o.x)):
211            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
212            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
213            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
214           
215    def test_sectorphi_quarter(self):
216        """
217            Test sector averaging I(phi)
218            The test data was not generated by IGOR.
219        """
220        from sas.dataloader.manipulations import SectorPhi
221        import math
222       
223        r = SectorPhi(r_min=.005, r_max=.01, phi_min=0, phi_max=math.pi/2.0)
224        r.nbins_phi = 20
225        o = r(self.data)
226
227        answer = Loader().load('sectorphi_testdata.txt')
228        for i in range(len(o.x)):
229            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
230            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
231            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
232           
233    def test_sectorq_full(self):
234        """
235            Test sector averaging I(q)
236            The test data was not generated by IGOR.
237        """
238        from sas.dataloader.manipulations import SectorQ
239        import math
240       
241        r = SectorQ(r_min=.005, r_max=.01, phi_min=0, phi_max=math.pi/2.0)
242        r.nbins_phi = 20
243        o = r(self.data)
244
245        answer = Loader().load('sectorq_testdata.txt')
246        for i in range(len(o.x)):
247            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
248            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
249            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
250           
251
252if __name__ == '__main__':
253    unittest.main()
Note: See TracBrowser for help on using the repository browser.