source: sasview/test/sasdataloader/test/utest_abs_reader.py @ 792e6be

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 792e6be was bb074b3, checked in by krzywon, 9 years ago

Fixed a unit test that assumed an error would be generated for every
instance of bad units.

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