source: sasview/DataLoader/test/utest_averaging.py @ 342a506

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 342a506 was 342a506, checked in by Jae Cho <jhjcho@…>, 14 years ago

Added x_err and more correction on determining q values, some utest are updates but many more to go

  • Property mode set to 100644
File size: 8.5 KB
Line 
1
2import unittest
3
4from DataLoader.loader import  Loader
5from DataLoader.manipulations import Ring, CircularAverage, SectorPhi, get_q,reader2D_converter
6 
7import os.path
8import numpy, math
9import 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        r.nbins_phi = 20
109       
110        o = r(self.data)
111        answer = Loader().load('ring_testdata.txt')
112        for i in range(r.nbins_phi):
113            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
114            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
115            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
116           
117    def test_circularavg(self):
118        """
119            Test circular averaging
120            The test data was not generated by IGOR.
121        """
122        r = CircularAverage(r_min=.00, r_max=.025, 
123                 bin_width=0.0003)
124        r.nbins_phi = 20
125       
126        o = r(self.data)
127        answer = Loader().load('avg_testdata.txt')
128        for i in range(r.nbins_phi):
129            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
130            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
131            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
132           
133    def test_box(self):
134        """
135            Test circular averaging
136            The test data was not generated by IGOR.
137        """
138        from DataLoader.manipulations import Boxsum, Boxavg
139       
140        r = Boxsum(x_min=.01, x_max=.015, y_min=0.01, y_max=0.015)
141        s, ds = r(self.data)
142        self.assertAlmostEqual(s, 151.81809601016641, 4)
143        self.assertAlmostEqual(ds, 16.245399156009537, 4)
144   
145        r = Boxavg(x_min=.01, x_max=.015, y_min=0.01, y_max=0.015)
146        s, ds = r(self.data)
147        self.assertAlmostEqual(s, 0.11195555855955155, 4)
148        self.assertAlmostEqual(ds, 0.011979881083557541, 4)
149           
150    def test_slabX(self):
151        """
152            Test slab in X
153            The test data was not generated by IGOR.
154        """
155        from DataLoader.manipulations import SlabX
156       
157        r = SlabX(x_min=-.01, x_max=.01, y_min=-0.0002, y_max=0.0002, bin_width=0.0004)
158        r.fold = False
159        o = r(self.data)
160   
161        answer = Loader().load('slabx_testdata.txt')
162        for i in range(len(o.x)):
163            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
164            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
165            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
166           
167    def test_slabY(self):
168        """
169            Test slab in Y
170            The test data was not generated by IGOR.
171        """
172        from DataLoader.manipulations import SlabY
173       
174        r = SlabY(x_min=.005, x_max=.01, y_min=-0.01, y_max=0.01, bin_width=0.0004)
175        r.fold = False
176        o = r(self.data)
177   
178        answer = Loader().load('slaby_testdata.txt')
179        for i in range(len(o.x)):
180            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
181            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
182            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
183           
184    def test_sectorphi_full(self):
185        """
186            Test sector averaging I(phi)
187            When considering the whole azimuthal range (2pi),
188            the answer should be the same as ring averaging.
189            The test data was not generated by IGOR.
190        """
191        from DataLoader.manipulations import SectorPhi
192        import math
193       
194        r = SectorPhi(r_min=.005, r_max=.01, phi_min=0, phi_max=math.pi*2.0)
195        r.nbins_phi = 20
196        o = r(self.data)
197   
198        answer = Loader().load('ring_testdata.txt')
199        for i in range(len(o.x)):
200            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
201            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
202            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
203           
204    def test_sectorphi_quarter(self):
205        """
206            Test sector averaging I(phi)
207            The test data was not generated by IGOR.
208        """
209        from DataLoader.manipulations import SectorPhi
210        import math
211       
212        r = SectorPhi(r_min=.005, r_max=.01, phi_min=0, phi_max=math.pi/2.0)
213        r.nbins_phi = 20
214        o = r(self.data)
215   
216        answer = Loader().load('sectorphi_testdata.txt')
217        for i in range(len(o.x)):
218            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
219            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
220            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
221           
222    def test_sectorq_full(self):
223        """
224            Test sector averaging I(q)
225            The test data was not generated by IGOR.
226        """
227        from DataLoader.manipulations import SectorQ
228        import math
229       
230        r = SectorQ(r_min=.005, r_max=.01, phi_min=0, phi_max=math.pi/2.0)
231        r.nbins_phi = 20
232        o = r(self.data)
233   
234        answer = Loader().load('sectorq_testdata.txt')
235        for i in range(len(o.x)):
236            self.assertAlmostEqual(o.x[i], answer.x[i], 4)
237            self.assertAlmostEqual(o.y[i], answer.y[i], 4)
238            self.assertAlmostEqual(o.dy[i], answer.dy[i], 4)
239           
240
241if __name__ == '__main__':
242    unittest.main()
Note: See TracBrowser for help on using the repository browser.