source: sasview/test/sasdataloader/test/utest_abs_reader.py @ 9a5097c

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.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 9a5097c was 9a5097c, checked in by andyfaff, 7 years ago

MAINT: import numpy as np

  • Property mode set to 100644
File size: 15.1 KB
Line 
1"""
2    Unit tests for data manipulations
3"""
4
5import unittest
6import numpy as np
7from sas.sascalc.dataloader.loader import  Loader
8from sas.sascalc.dataloader.data_info import Data1D
9 
10
11class abs_reader(unittest.TestCase):
12   
13    def setUp(self):
14        from sas.sascalc.dataloader.readers.abs_reader import Reader
15        self.data = Reader().read("jan08002.ABS")
16       
17    def test_abs_checkdata(self):
18        """
19            Check the data content to see whether
20            it matches the specific file we loaded.
21            Check the units too to see whether the
22            Data1D defaults changed. Otherwise the
23            tests won't pass
24        """
25        self.assertEqual(self.data.filename, "jan08002.ABS")
26        self.assertEqual(self.data.meta_data['loader'], "IGOR 1D")
27       
28        self.assertEqual(self.data.source.wavelength_unit, 'A')
29        self.assertEqual(self.data.source.wavelength, 6.0)
30       
31        self.assertEqual(self.data.detector[0].distance_unit, 'mm')
32        self.assertEqual(self.data.detector[0].distance, 1000.0)
33       
34        self.assertEqual(self.data.sample.transmission, 0.5667)
35       
36        self.assertEqual(self.data.detector[0].beam_center_unit, 'mm')
37        center_x = 114.58*5.0
38        center_y = 64.22*5.0
39        self.assertEqual(self.data.detector[0].beam_center.x, center_x)
40        self.assertEqual(self.data.detector[0].beam_center.y, center_y)
41       
42        self.assertEqual(self.data.y_unit, '1/cm')
43        self.assertEqual(self.data.x[0], 0.002618)
44        self.assertEqual(self.data.x[1], 0.007854)
45        self.assertEqual(self.data.x[2], 0.01309)
46        self.assertEqual(self.data.x[126], 0.5828)
47       
48        self.assertEqual(self.data.y[0], 0.02198)
49        self.assertEqual(self.data.y[1], 0.02201)
50        self.assertEqual(self.data.y[2], 0.02695)
51        self.assertEqual(self.data.y[126], 0.2958)
52       
53        self.assertEqual(self.data.dy[0], 0.002704)
54        self.assertEqual(self.data.dy[1], 0.001643)
55        self.assertEqual(self.data.dy[2], 0.002452)
56        self.assertEqual(self.data.dy[126], 1)
57       
58    def test_checkdata2(self):
59        self.assertEqual(self.data.dy[126], 1)
60       
61class hfir_reader(unittest.TestCase):
62   
63    def setUp(self):
64        self.data = Loader().load("S2-30dq.d1d")
65       
66    def test_hfir_checkdata(self):
67        """
68            Check the data content to see whether
69            it matches the specific file we loaded.
70        """
71        self.assertEqual(self.data.filename, "S2-30dq.d1d")
72        # THIS FILE FORMAT IS CURRENTLY READ BY THE ASCII READER
73        self.assertEqual(self.data.meta_data['loader'], "HFIR 1D")
74        self.assertEqual(len(self.data.x), 134)
75        self.assertEqual(len(self.data.y), 134)
76        #          Q           I               dI          dQ 
77        # Point 1: 0.003014    0.003010        0.000315    0.008249
78        self.assertEqual(self.data.x[1], 0.003014)
79        self.assertEqual(self.data.y[1], 0.003010)
80        self.assertEqual(self.data.dy[1], 0.000315)
81        self.assertEqual(self.data.dx[1], 0.008249)
82       
83
84class igor_reader(unittest.TestCase):
85   
86    def setUp(self):
87        self.data = Loader().load("MAR07232_rest.ASC")
88       
89    def test_igor_checkdata(self):
90        """
91            Check the data content to see whether
92            it matches the specific file we loaded.
93            Check the units too to see whether the
94            Data1D defaults changed. Otherwise the
95            tests won't pass
96        """
97        self.assertEqual(self.data.filename, "MAR07232_rest.ASC")
98        self.assertEqual(self.data.meta_data['loader'], "IGOR 2D")
99       
100        self.assertEqual(self.data.source.wavelength_unit, 'A')
101        self.assertEqual(self.data.source.wavelength, 8.4)
102       
103        self.assertEqual(self.data.detector[0].distance_unit, 'mm')
104        self.assertEqual(self.data.detector[0].distance, 13705)
105       
106        self.assertEqual(self.data.sample.transmission, 0.84357)
107       
108        self.assertEqual(self.data.detector[0].beam_center_unit, 'mm')
109        center_x = (68.76-1)*5.0
110        center_y = (62.47-1)*5.0
111        self.assertEqual(self.data.detector[0].beam_center.x, center_x)
112        self.assertEqual(self.data.detector[0].beam_center.y, center_y)
113       
114        self.assertEqual(self.data.I_unit, '1/cm')
115        self.assertEqual(self.data.data[0], 0.279783)
116        self.assertEqual(self.data.data[1], 0.28951)
117        self.assertEqual(self.data.data[2], 0.167634)
118       
119class danse_reader(unittest.TestCase):
120   
121    def setUp(self):
122        self.data = Loader().load("MP_New.sans")
123
124    def test_checkdata(self):
125        """
126            Check the data content to see whether
127            it matches the specific file we loaded.
128            Check the units too to see whether the
129            Data1D defaults changed. Otherwise the
130            tests won't pass
131        """
132        self.assertEqual(self.data.filename, "MP_New.sans")
133        self.assertEqual(self.data.meta_data['loader'], "DANSE")
134       
135        self.assertEqual(self.data.source.wavelength_unit, 'A')
136        self.assertEqual(self.data.source.wavelength, 7.5)
137       
138        self.assertEqual(self.data.detector[0].distance_unit, 'mm')
139        self.assertAlmostEqual(self.data.detector[0].distance, 5414.99, 3)
140       
141        self.assertEqual(self.data.detector[0].beam_center_unit, 'mm')
142        center_x = 68.74*5.0
143        center_y = 64.77*5.0
144        self.assertEqual(self.data.detector[0].beam_center.x, center_x)
145        self.assertEqual(self.data.detector[0].beam_center.y, center_y)
146       
147        self.assertEqual(self.data.I_unit, '1/cm')
148        self.assertEqual(self.data.data[0], 1.57831)
149        self.assertEqual(self.data.data[1], 2.70983)
150        self.assertEqual(self.data.data[2], 3.83422)
151
152        self.assertEqual(self.data.err_data[0], 1.37607)
153        self.assertEqual(self.data.err_data[1], 1.77569)
154        self.assertEqual(self.data.err_data[2], 2.06313)
155
156 
157class cansas_reader(unittest.TestCase):
158   
159    def setUp(self):
160        data = Loader().load("cansas1d.xml")
161        self.data = data[0]
162 
163    def test_cansas_checkdata(self):
164        self.assertEqual(self.data.filename, "cansas1d.xml")
165        self._checkdata()
166       
167    def _checkdata(self):
168        """
169            Check the data content to see whether
170            it matches the specific file we loaded.
171            Check the units too to see whether the
172            Data1D defaults changed. Otherwise the
173            tests won't pass
174        """
175       
176        self.assertEqual(self.data.run[0], "1234")
177        self.assertEqual(self.data.meta_data['loader'], "CanSAS XML 1D")
178       
179        # Data
180        self.assertEqual(len(self.data.x), 2)
181        self.assertEqual(self.data.x_unit, '1/A')
182        self.assertEqual(self.data.y_unit, '1/cm')
183        self.assertAlmostEqual(self.data.x[0], 0.02, 6)
184        self.assertAlmostEqual(self.data.y[0], 1000, 6)
185        self.assertAlmostEqual(self.data.dx[0], 0.01, 6)
186        self.assertAlmostEqual(self.data.dy[0], 3, 6)
187        self.assertAlmostEqual(self.data.x[1], 0.03, 6)
188        self.assertAlmostEqual(self.data.y[1], 1001.0)
189        self.assertAlmostEqual(self.data.dx[1], 0.02, 6)
190        self.assertAlmostEqual(self.data.dy[1], 4, 6)
191        self.assertEqual(self.data.run_name['1234'], 'run name')
192        self.assertEqual(self.data.title, "Test title")
193       
194        # Sample info
195        self.assertEqual(self.data.sample.ID, "SI600-new-long")
196        self.assertEqual(self.data.sample.name, "my sample")
197        self.assertEqual(self.data.sample.thickness_unit, 'mm')
198        self.assertAlmostEqual(self.data.sample.thickness, 1.03)
199       
200        self.assertAlmostEqual(self.data.sample.transmission, 0.327)
201       
202        self.assertEqual(self.data.sample.temperature_unit, 'C')
203        self.assertEqual(self.data.sample.temperature, 0)
204
205        self.assertEqual(self.data.sample.position_unit, 'mm')
206        self.assertEqual(self.data.sample.position.x, 10)
207        self.assertEqual(self.data.sample.position.y, 0)
208
209        self.assertEqual(self.data.sample.orientation_unit, 'degree')
210        self.assertAlmostEqual(self.data.sample.orientation.x, 22.5, 6)
211        self.assertAlmostEqual(self.data.sample.orientation.y, 0.02, 6)
212
213        self.assertEqual(self.data.sample.details[0], "http://chemtools.chem.soton.ac.uk/projects/blog/blogs.php/bit_id/2720") 
214        self.assertEqual(self.data.sample.details[1], "Some text here") 
215       
216        # Instrument info
217        self.assertEqual(self.data.instrument, "canSAS instrument")
218       
219        # Source
220        self.assertEqual(self.data.source.radiation, "neutron")
221       
222        self.assertEqual(self.data.source.beam_size_unit, "mm")
223        self.assertEqual(self.data.source.beam_size_name, "bm")
224        self.assertEqual(self.data.source.beam_size.x, 12)
225        self.assertEqual(self.data.source.beam_size.y, 13)
226       
227        self.assertEqual(self.data.source.beam_shape, "disc")
228       
229        self.assertEqual(self.data.source.wavelength_unit, "A")
230        self.assertEqual(self.data.source.wavelength, 6)
231       
232        self.assertEqual(self.data.source.wavelength_max_unit, "nm")
233        self.assertAlmostEqual(self.data.source.wavelength_max, 1.0)
234        self.assertEqual(self.data.source.wavelength_min_unit, "nm")
235        self.assertAlmostEqual(self.data.source.wavelength_min, 0.22)
236        self.assertEqual(self.data.source.wavelength_spread_unit, "percent")
237        self.assertEqual(self.data.source.wavelength_spread, 14.3)
238       
239        # Collimation
240        _found1 = False
241        _found2 = False
242        self.assertEqual(self.data.collimation[0].length, 123.)
243        self.assertEqual(self.data.collimation[0].name, 'test coll name')
244       
245        for item in self.data.collimation[0].aperture:
246            self.assertEqual(item.size_unit,'mm')
247            self.assertEqual(item.distance_unit,'mm')
248
249            if item.size.x==50 \
250                and item.distance==11000.0 \
251                and item.name=='source' \
252                and item.type=='radius':
253                _found1 = True
254            elif item.size.x==1.0 \
255                and item.name=='sample' \
256                and item.type=='radius':
257                _found2 = True
258               
259        if _found1==False or _found2==False:
260            raise RuntimeError, "Could not find all data %s %s" % (_found1, _found2) 
261           
262        # Detector
263        self.assertEqual(self.data.detector[0].name, "fictional hybrid")
264        self.assertEqual(self.data.detector[0].distance_unit, "mm")
265        self.assertEqual(self.data.detector[0].distance, 4150)
266       
267        self.assertEqual(self.data.detector[0].orientation_unit, "degree")
268        self.assertAlmostEqual(self.data.detector[0].orientation.x, 1.0, 6)
269        self.assertEqual(self.data.detector[0].orientation.y, 0.0)
270        self.assertEqual(self.data.detector[0].orientation.z, 0.0)
271       
272        self.assertEqual(self.data.detector[0].offset_unit, "m")
273        self.assertEqual(self.data.detector[0].offset.x, .001)
274        self.assertEqual(self.data.detector[0].offset.y, .002)
275        self.assertEqual(self.data.detector[0].offset.z, None)
276       
277        self.assertEqual(self.data.detector[0].beam_center_unit, "mm")
278        self.assertEqual(self.data.detector[0].beam_center.x, 322.64)
279        self.assertEqual(self.data.detector[0].beam_center.y, 327.68)
280        self.assertEqual(self.data.detector[0].beam_center.z, None)
281       
282        self.assertEqual(self.data.detector[0].pixel_size_unit, "mm")
283        self.assertEqual(self.data.detector[0].pixel_size.x, 5)
284        self.assertEqual(self.data.detector[0].pixel_size.y, 5)
285        self.assertEqual(self.data.detector[0].pixel_size.z, None)
286       
287        # Process
288        _found_term1 = False
289        _found_term2 = False
290        for item in self.data.process:
291            self.assertTrue(item.name in ['NCNR-IGOR', 'spol'])
292            self.assertTrue(item.date in ['04-Sep-2007 18:35:02',
293                                          '03-SEP-2006 11:42:47'])
294            print item.term
295            for t in item.term:
296                if t['name']=="ABS:DSTAND" \
297                    and t['unit']=='mm' \
298                    and float(t['value'])==1.0:
299                    _found_term2 = True
300                elif t['name']=="radialstep" \
301                    and t['unit']=='mm' \
302                    and float(t['value'])==10.0:
303                    _found_term1 = True
304                   
305        if _found_term1==False or _found_term2==False:
306            raise RuntimeError, "Could not find all process terms %s %s" % (_found_term1, _found_term2) 
307           
308       
309       
310       
311    def test_writer(self):
312        from sas.sascalc.dataloader.readers.cansas_reader import Reader
313        r = Reader()
314        x = np.ones(5)
315        y = np.ones(5)
316        dy = np.ones(5)
317       
318        filename = "write_test.xml"
319        r.write(filename, self.data)
320        data = Loader().load(filename)
321        self.data = data[0]
322        self.assertEqual(self.data.filename, filename)
323        self._checkdata()
324       
325    def test_units(self):
326        """
327            Check units.
328            Note that not all units are available.
329        """
330        filename = "cansas1d_units.xml"
331        data = Loader().load(filename)
332        self.data = data[0]
333        self.assertEqual(self.data.filename, filename)
334        self._checkdata()
335       
336    def test_badunits(self):
337        """
338            Check units.
339            Note that not all units are available.
340        """
341        filename = "cansas1d_badunits.xml"
342        data = Loader().load(filename)
343        self.data = data[0]
344        self.assertEqual(self.data.filename, filename)
345        # The followed should not have been loaded
346        self.assertAlmostEqual(self.data.sample.thickness, 0.00103)
347        # This one should
348        self.assertAlmostEqual(self.data.sample.transmission, 0.327)
349       
350        self.assertEqual(self.data.meta_data['loader'], "CanSAS XML 1D")
351        print self.data.errors
352        self.assertEqual(len(self.data.errors), 1)
353       
354       
355    def test_slits(self):
356        """
357            Check slit data
358        """
359        filename = "cansas1d_slit.xml"
360        data = Loader().load(filename)
361        self.data = data[0]
362        self.assertEqual(self.data.filename, filename)
363        self.assertEqual(self.data.run[0], "1234")
364       
365        # Data
366        self.assertEqual(len(self.data.x), 2)
367        self.assertEqual(self.data.x_unit, '1/A')
368        self.assertEqual(self.data.y_unit, '1/cm')
369        self.assertEqual(self.data.x[0], 0.02)
370        self.assertEqual(self.data.y[0], 1000)
371        self.assertEqual(self.data.dxl[0], 0.005)
372        self.assertEqual(self.data.dxw[0], 0.001)
373        self.assertEqual(self.data.dy[0], 3)
374        self.assertEqual(self.data.x[1], 0.03)
375        self.assertAlmostEquals(self.data.y[1], 1001.0)
376        self.assertEqual(self.data.dx, None)
377        self.assertEqual(self.data.dxl[1], 0.005)
378        self.assertEqual(self.data.dxw[1], 0.001)
379        self.assertEqual(self.data.dy[1], 4)
380        self.assertEqual(self.data.run_name['1234'], 'run name')
381        self.assertEqual(self.data.title, "Test title")
382       
383           
384
385if __name__ == '__main__':
386    unittest.main()
Note: See TracBrowser for help on using the repository browser.