source: sasview/sansdataloader/test/utest_manipulations.py @ 0c24e98

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 0c24e98 was e2605a5, checked in by Jae Cho <jhjcho@…>, 13 years ago

trying to make data operation work

  • Property mode set to 100644
File size: 7.8 KB
Line 
1"""
2    Unit tests for data manipulations
3"""
4#TODO: what happens if you add a Data1D to a Data2D?
5
6import unittest
7import numpy, math
8from sans.dataloader.loader import  Loader
9from sans.dataloader.data_info import Data1D, Data2D
10 
11import os.path
12
13class data_info_tests(unittest.TestCase):
14   
15    def setUp(self):
16        self.data = Loader().load("cansas1d.xml")
17       
18    def test_clone1D(self):
19        """
20            Test basic cloning
21        """
22        clone = self.data.clone_without_data()
23       
24        for i in range(len(self.data.detector)):
25            self.assertEqual(self.data.detector[i].distance, clone.detector[i].distance)
26           
27
28class manip_tests(unittest.TestCase):
29   
30    def setUp(self):
31        # Create two data sets to play with
32        x_0 = numpy.ones(5)
33        for i in range(5):
34            x_0[i] = x_0[i]*(i+1.0)
35           
36        y_0 = 2.0*numpy.ones(5)
37        dy_0 = 0.5*numpy.ones(5)
38        self.data = Data1D(x_0, y_0, dy=dy_0)
39       
40        x = self.data.x
41        y = numpy.ones(5)
42        dy = numpy.ones(5)
43        self.data2 = Data1D(x, y, dy=dy)
44       
45       
46    def test_load(self):
47        """
48            Test whether the test file was loaded properly
49        """
50        # There should be 5 entries in the file
51        self.assertEqual(len(self.data.x), 5)
52       
53        for i in range(5):
54            # The x values should be from 1 to 5
55            self.assertEqual(self.data.x[i], float(i+1))
56       
57            # All y-error values should be 0.5
58            self.assertEqual(self.data.dy[i], 0.5)   
59           
60            # All y values should be 2.0
61            self.assertEqual(self.data.y[i], 2.0)   
62       
63    def test_add(self):
64        result = self.data2+self.data
65        for i in range(5):
66            self.assertEqual(result.y[i], 3.0)
67            self.assertEqual(result.dy[i], math.sqrt(0.5**2+1.0))
68       
69    def test_sub(self):
70        result = self.data2-self.data
71        for i in range(5):
72            self.assertEqual(result.y[i], -1.0)
73            self.assertEqual(result.dy[i], math.sqrt(0.5**2+1.0))
74       
75    def test_mul(self):
76        result = self.data2*self.data
77        for i in range(5):
78            self.assertEqual(result.y[i], 2.0)
79            self.assertEqual(result.dy[i], math.sqrt((0.5*1.0)**2+(1.0*2.0)**2))
80       
81    def test_div(self):
82        result = self.data2/self.data
83        for i in range(5):
84            self.assertEqual(result.y[i], 0.5)
85            self.assertEqual(result.dy[i], math.sqrt((1.0/2.0)**2+(0.5*1.0/4.0)**2))
86       
87    def test_radd(self):
88        result = self.data+3.0
89        for i in range(5):
90            self.assertEqual(result.y[i], 5.0)
91            self.assertEqual(result.dy[i], 0.5)
92           
93        result = 3.0+self.data
94        for i in range(5):
95            self.assertEqual(result.y[i], 5.0)
96            self.assertEqual(result.dy[i], 0.5)
97           
98    def test_rsub(self):
99        result = self.data-3.0
100        for i in range(5):
101            self.assertEqual(result.y[i], -1.0)
102            self.assertEqual(result.dy[i], 0.5)
103           
104        result = 3.0-self.data
105        for i in range(5):
106            self.assertEqual(result.y[i], 1.0)
107            self.assertEqual(result.dy[i], 0.5)
108           
109    def test_rmul(self):
110        result = self.data*3.0
111        for i in range(5):
112            self.assertEqual(result.y[i], 6.0)
113            self.assertEqual(result.dy[i], 1.5)
114           
115        result = 3.0*self.data
116        for i in range(5):
117            self.assertEqual(result.y[i], 6.0)
118            self.assertEqual(result.dy[i], 1.5)
119           
120    def test_rdiv(self):
121        result = self.data/4.0
122        for i in range(5):
123            self.assertEqual(result.y[i], 0.5)
124            self.assertEqual(result.dy[i], 0.125)
125           
126        result = 6.0/self.data
127        for i in range(5):
128            self.assertEqual(result.y[i], 3.0)
129            self.assertEqual(result.dy[i], 6.0*0.5/4.0)
130           
131class manip_2D(unittest.TestCase):
132   
133    def setUp(self):
134        # Create two data sets to play with
135        x_0 = 2.0*numpy.ones(100)
136        dx_0 = 0.5*numpy.ones(100)
137        qx_0 = numpy.arange(100)
138        qy_0 = numpy.arange(100)
139        mask_0 = numpy.zeros(100)
140        dqx_0 = numpy.arange(100)/100
141        dqy_0 = numpy.arange(100)/100
142        q_0 = numpy.sqrt(qx_0 * qx_0 + qy_0 * qy_0)
143        self.data = Data2D(x_0, dx_0, qx_0, qy_0, q_0, mask_0, dqx_0, dqy_0)
144       
145        y = numpy.ones(100)
146        dy = numpy.ones(100)
147        qx = numpy.arange(100)
148        qy = numpy.arange(100)
149        mask = numpy.zeros(100)
150        q = numpy.sqrt(qx * qx + qy * qy)
151        self.data2 = Data2D(y, dy, qx, qy, q, mask)
152       
153       
154    def test_load(self):
155        """
156            Test whether the test file was loaded properly
157        """
158        # There should be 5 entries in the file
159        self.assertEqual(numpy.size(self.data.data), 100)
160       
161        for i in range(100):
162            # All y-error values should be 0.5
163            self.assertEqual(self.data.err_data[i], 0.5)   
164           
165            # All y values should be 2.0
166            self.assertEqual(self.data.data[i], 2.0)   
167       
168    def test_add(self):
169        result = self.data2+self.data
170        for i in range(100):
171            self.assertEqual(result.data[i], 3.0)
172            self.assertEqual(result.err_data[i], math.sqrt(0.5**2+1.0))
173       
174    def test_sub(self):
175        result = self.data2-self.data
176        for i in range(100):
177                self.assertEqual(result.data[i], -1.0)
178                self.assertEqual(result.err_data[i], math.sqrt(0.5**2+1.0))
179       
180    def test_mul(self):
181        result = self.data2*self.data
182        for i in range(100):
183            self.assertEqual(result.data[i], 2.0)
184            self.assertEqual(result.err_data[i], math.sqrt((0.5*1.0)**2+(1.0*2.0)**2))
185       
186    def test_div(self):
187        result = self.data2/self.data
188        for i in range(100):
189            self.assertEqual(result.data[i], 0.5)
190            self.assertEqual(result.err_data[i], math.sqrt((1.0/2.0)**2+(0.5*1.0/4.0)**2))
191       
192    def test_radd(self):
193        result = self.data+3.0
194        for i in range(100):
195            self.assertEqual(result.data[i], 5.0)
196            self.assertEqual(result.err_data[i], 0.5)
197           
198        result = 3.0+self.data
199        for i in range(100):
200            self.assertEqual(result.data[i], 5.0)
201            self.assertEqual(result.err_data[i], 0.5)
202           
203    def test_rsub(self):
204        result = self.data-3.0
205        for i in range(100):
206            self.assertEqual(result.data[i], -1.0)
207            self.assertEqual(result.err_data[i], 0.5)
208           
209        result = 3.0-self.data
210        for i in range(100):
211            self.assertEqual(result.data[i], 1.0)
212            self.assertEqual(result.err_data[i], 0.5)
213           
214    def test_rmul(self):
215        result = self.data*3.0
216        for i in range(100):
217            self.assertEqual(result.data[i], 6.0)
218            self.assertEqual(result.err_data[i], 1.5)
219           
220        result = 3.0*self.data
221        for i in range(100):
222            self.assertEqual(result.data[i], 6.0)
223            self.assertEqual(result.err_data[i], 1.5)
224           
225    def test_rdiv(self):
226        result = self.data/4.0
227        for i in range(100):
228            self.assertEqual(result.data[i], 0.5)
229            self.assertEqual(result.err_data[i], 0.125)
230           
231        result = 6.0/self.data
232        for i in range(100):
233            self.assertEqual(result.data[i], 3.0)
234            self.assertEqual(result.err_data[i], 6.0*0.5/4.0)
235           
236
237if __name__ == '__main__':
238    unittest.main()
239   
Note: See TracBrowser for help on using the repository browser.